9 #ifndef MRPT_WX_SUBSYSTEM_H
10 #define MRPT_WX_SUBSYSTEM_H
15 #include <mrpt/config.h>
26 #if MRPT_HAS_WXWIDGETS
35 #include <wx/statbmp.h>
37 #include <wx/toolbar.h>
40 #include <wx/statusbr.h>
41 #include <wx/msgdlg.h>
42 #include <wx/artprov.h>
43 #include <wx/bitmap.h>
46 #include <wx/string.h>
47 #include <wx/msgdlg.h>
48 #include <wx/filedlg.h>
49 #include <wx/progdlg.h>
50 #include <wx/imaglist.h>
51 #include <wx/busyinfo.h>
53 #include <wx/textdlg.h>
54 #include <wx/dirdlg.h>
55 #include <wx/colordlg.h>
56 #include <wx/dcmemory.h>
65 #include <wx/chartpanel.h>
66 #include <wx/bars/barplot.h>
68 #include <wx/axis/numberaxis.h>
69 #include <wx/axis/categoryaxis.h>
70 #include <wx/axis/dateaxis.h>
72 #include <wx/xy/xyhistorenderer.h>
73 #include <wx/xy/xydataset.h>
74 #include <wx/xy/xylinerenderer.h>
75 #include <wx/xy/xyplot.h>
76 #include <wx/xy/xysimpledataset.h>
78 #include <wx/xyz/xyzdataset.h>
79 #include <wx/xyz/bubbleplot.h>
81 #include <wx/category/categorydataset.h>
82 #include <wx/category/categorysimpledataset.h>
106 #if MRPT_HAS_WXWIDGETS
112 static void waitWxShutdownsIfNoWindows();
119 static volatile bool isConsoleApp;
123 class CAuxWxSubsystemShutdowner
126 CAuxWxSubsystemShutdowner();
127 ~CAuxWxSubsystemShutdowner();
130 static CAuxWxSubsystemShutdowner global_wxsubsystem_shutdown;
135 class CWXMainFrame:
public wxFrame
137 friend void WxSubsystem::waitWxShutdownsIfNoWindows();
140 CWXMainFrame(wxWindow* parent,wxWindowID
id = -1);
141 virtual ~CWXMainFrame();
146 static int notifyWindowCreation();
151 static int notifyWindowDestruction();
153 static volatile CWXMainFrame* oneInstance;
159 static int m_windowCount;
163 void OnTimerProcessRequests(wxTimerEvent& event);
165 DECLARE_EVENT_TABLE()
169 struct TWxMainThreadData
177 static TWxMainThreadData& GetWxMainThreadInstance();
183 static void wxMainThread();
189 TRequestToWxMainThread() :
192 sourcePlots ( NULL ),
193 sourceCameraSelectDialog(
false),
211 bool sourceCameraSelectDialog;
219 void *voidPtr, *voidPtr2;
223 std::string plotName;
270 static TRequestToWxMainThread * popPendingWxRequest();
274 static void pushPendingWxRequest( TRequestToWxMainThread *data );
278 static bool createOneInstanceMainThread();
281 static wxBitmap getMRPTDefaultIcon();
285 static std::queue<TRequestToWxMainThread*> *listPendingWxRequests;
291 #if MRPT_HAS_WXWIDGETS
295 class CWindowDialog:
public wxFrame
300 class wxMRPTImageControl :
public wxPanel
308 wxMRPTImageControl( wxWindow *parent,wxWindowID winID,
int x,
int y,
int width,
int height);
309 virtual ~wxMRPTImageControl();
311 wxPoint m_last_mouse_point, m_last_mouse_click;
314 void AssignImage(wxBitmap *img);
315 void GetBitmap(wxBitmap &bmp);
317 void OnPaint(wxPaintEvent &ev);
318 void OnMouseMove(wxMouseEvent& ev);
319 void OnMouseClick(wxMouseEvent& ev);
320 void OnChar(wxKeyEvent& ev);
322 void OnEraseBackground(wxEraseEvent &ev) { }
328 CWindowDialog( CDisplayWindow *win2D, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindow]"), wxSize initialSize = wxDefaultSize );
329 virtual ~CWindowDialog();
331 CDisplayWindow *m_win2D;
332 WxSubsystem::CWXMainFrame *m_mainFrame;
335 wxMRPTImageControl *m_image;
337 static const long ID_IMAGE_BITMAP;
341 void OnClose (wxCloseEvent& event);
342 void OnMenuClose(wxCommandEvent& event);
343 void OnMenuAbout(wxCommandEvent& event);
344 void OnMenuSave(wxCommandEvent& event);
345 void OnChar(wxKeyEvent& event);
346 void OnKeyDown(wxKeyEvent& event);
347 void OnResize(wxSizeEvent& event);
348 void OnMouseDown(wxMouseEvent& event);
350 DECLARE_EVENT_TABLE()
353 class C3DWindowDialog:
public wxFrame
355 friend class gui::CMyGLCanvas_DisplayWindow3D;
359 C3DWindowDialog(CDisplayWindow3D *win3D, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindow3D]"), wxSize initialSize = wxDefaultSize );
360 virtual ~C3DWindowDialog();
362 CDisplayWindow3D *m_win3D;
363 WxSubsystem::CWXMainFrame *m_mainFrame;
365 CMyGLCanvas_DisplayWindow3D *m_canvas;
367 void clearTextMessages();
371 const std::string &text,
373 const size_t unique_index,
379 const std::string &text,
381 const std::string &font_name,
382 const double font_size,
384 const size_t unique_index,
385 const double font_spacing,
386 const double font_kerning,
387 const bool has_shadow,
393 void OnClose (wxCloseEvent& event);
394 void OnMenuClose(wxCommandEvent& event);
395 void OnMenuAbout(wxCommandEvent& event);
396 void OnChar(wxKeyEvent& event);
397 void OnResize(wxSizeEvent& event);
399 static const long ID_MENUITEM1;
400 static const long ID_MENUITEM2;
402 DECLARE_EVENT_TABLE()
407 class CWindowDialogPlots:
public wxFrame
410 CWindowDialogPlots( CDisplayWindowPlots *winPlots, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindowPlots]"), wxSize initialSize = wxDefaultSize );
411 virtual ~CWindowDialogPlots();
413 CDisplayWindowPlots *m_winPlots;
414 WxSubsystem::CWXMainFrame *m_mainFrame;
418 static const long ID_PLOT;
419 static const long ID_MENU_PRINT;
421 std::map<long,long> m_ID2ID;
423 wxPoint m_last_mouse_point;
425 void OnMenuSelected(wxCommandEvent& ev);
426 void OnMouseMove(wxMouseEvent& event);
434 const std::string &lineFormat,
435 const std::string &plotName);
442 const std::string &lineFormat,
443 const std::string &plotName,
444 bool showName =
false);
454 const std::string &plotName);
458 void OnClose (wxCloseEvent& event);
459 void OnMenuPrint(wxCommandEvent& event);
460 void OnMenuClose(wxCommandEvent& event);
461 void OnMenuAbout(wxCommandEvent& event);
462 void OnChar(wxKeyEvent& event);
463 void OnResize(wxSizeEvent& event);
464 void OnMouseDown(wxMouseEvent& event);
466 DECLARE_EVENT_TABLE()
471 #define _U(x) wxString((x),wxConvUTF8)
472 #define _UU(x,y) wxString((x),y)