28 #ifndef MRPT_WX_SUBSYSTEM_H
29 #define MRPT_WX_SUBSYSTEM_H
34 #include <mrpt/config.h>
42 #if MRPT_HAS_WXWIDGETS
51 #include <wx/statbmp.h>
53 #include <wx/toolbar.h>
56 #include <wx/statusbr.h>
57 #include <wx/msgdlg.h>
58 #include <wx/artprov.h>
59 #include <wx/bitmap.h>
62 #include <wx/string.h>
63 #include <wx/msgdlg.h>
64 #include <wx/filedlg.h>
65 #include <wx/progdlg.h>
66 #include <wx/imaglist.h>
67 #include <wx/busyinfo.h>
69 #include <wx/textdlg.h>
70 #include <wx/dirdlg.h>
71 #include <wx/colordlg.h>
72 #include <wx/dcmemory.h>
81 #include <wx/chartpanel.h>
82 #include <wx/bars/barplot.h>
84 #include <wx/axis/numberaxis.h>
85 #include <wx/axis/categoryaxis.h>
86 #include <wx/axis/dateaxis.h>
88 #include <wx/xy/xyhistorenderer.h>
89 #include <wx/xy/xydataset.h>
90 #include <wx/xy/xylinerenderer.h>
91 #include <wx/xy/xyplot.h>
92 #include <wx/xy/xysimpledataset.h>
94 #include <wx/xyz/xyzdataset.h>
95 #include <wx/xyz/bubbleplot.h>
97 #include <wx/category/categorydataset.h>
98 #include <wx/category/categorysimpledataset.h>
107 using namespace mrpt::system;
109 class CDisplayWindow;
110 class CDisplayWindow3D;
111 class CDisplayWindowPlots;
112 class CMyGLCanvas_DisplayWindow3D;
128 #if MRPT_HAS_WXWIDGETS
134 static void waitWxShutdownsIfNoWindows();
141 static volatile bool isConsoleApp;
145 class CAuxWxSubsystemShutdowner
148 CAuxWxSubsystemShutdowner();
149 ~CAuxWxSubsystemShutdowner();
152 static CAuxWxSubsystemShutdowner global_wxsubsystem_shutdown;
157 class CWXMainFrame:
public wxFrame
159 friend void WxSubsystem::waitWxShutdownsIfNoWindows();
162 CWXMainFrame(wxWindow* parent,wxWindowID
id = -1);
163 virtual ~CWXMainFrame();
168 static int notifyWindowCreation();
173 static int notifyWindowDestruction();
175 static volatile CWXMainFrame* oneInstance;
181 static int m_windowCount;
185 void OnTimerProcessRequests(wxTimerEvent& event);
187 DECLARE_EVENT_TABLE()
191 struct TWxMainThreadData
208 static TWxMainThreadData& GetWxMainThreadInstance();
214 static void wxMainThread();
220 TRequestToWxMainThread() :
223 sourcePlots ( NULL ),
224 sourceCameraSelectDialog(
false),
242 bool sourceCameraSelectDialog;
250 void *voidPtr, *voidPtr2;
254 std::string plotName;
301 static TRequestToWxMainThread * popPendingWxRequest();
305 static void pushPendingWxRequest( TRequestToWxMainThread *data );
309 static bool createOneInstanceMainThread();
312 static wxBitmap getMRPTDefaultIcon();
316 static std::queue<TRequestToWxMainThread*> *listPendingWxRequests;
322 #if MRPT_HAS_WXWIDGETS
326 class CWindowDialog:
public wxFrame
331 class wxMRPTImageControl :
public wxPanel
339 wxMRPTImageControl( wxWindow *parent,wxWindowID winID,
int x,
int y,
int width,
int height);
340 virtual ~wxMRPTImageControl();
342 wxPoint m_last_mouse_point, m_last_mouse_click;
345 void AssignImage(wxBitmap *img);
346 void GetBitmap(wxBitmap &bmp);
348 void OnPaint(wxPaintEvent &ev);
349 void OnMouseMove(wxMouseEvent& ev);
350 void OnMouseClick(wxMouseEvent& ev);
351 void OnChar(wxKeyEvent& ev);
353 void OnEraseBackground(wxEraseEvent &ev) { }
359 CWindowDialog( CDisplayWindow *win2D, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindow]"), wxSize initialSize = wxDefaultSize );
360 virtual ~CWindowDialog();
362 CDisplayWindow *m_win2D;
363 WxSubsystem::CWXMainFrame *m_mainFrame;
366 wxMRPTImageControl *m_image;
368 static const long ID_IMAGE_BITMAP;
372 void OnClose (wxCloseEvent& event);
373 void OnMenuClose(wxCommandEvent& event);
374 void OnMenuAbout(wxCommandEvent& event);
375 void OnMenuSave(wxCommandEvent& event);
376 void OnChar(wxKeyEvent& event);
377 void OnKeyDown(wxKeyEvent& event);
378 void OnResize(wxSizeEvent& event);
379 void OnMouseDown(wxMouseEvent& event);
381 DECLARE_EVENT_TABLE()
384 class C3DWindowDialog:
public wxFrame
386 friend class gui::CMyGLCanvas_DisplayWindow3D;
390 C3DWindowDialog(CDisplayWindow3D *win3D, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindow3D]"), wxSize initialSize = wxDefaultSize );
391 virtual ~C3DWindowDialog();
393 CDisplayWindow3D *m_win3D;
394 WxSubsystem::CWXMainFrame *m_mainFrame;
396 CMyGLCanvas_DisplayWindow3D *m_canvas;
398 void clearTextMessages();
402 const std::string &text,
404 const size_t unique_index,
410 const std::string &text,
412 const std::string &font_name,
413 const double font_size,
415 const size_t unique_index,
416 const double font_spacing,
417 const double font_kerning
422 void OnClose (wxCloseEvent& event);
423 void OnMenuClose(wxCommandEvent& event);
424 void OnMenuAbout(wxCommandEvent& event);
425 void OnChar(wxKeyEvent& event);
426 void OnResize(wxSizeEvent& event);
428 static const long ID_MENUITEM1;
429 static const long ID_MENUITEM2;
431 DECLARE_EVENT_TABLE()
436 class CWindowDialogPlots:
public wxFrame
439 CWindowDialogPlots( CDisplayWindowPlots *winPlots, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindowPlots]"), wxSize initialSize = wxDefaultSize );
440 virtual ~CWindowDialogPlots();
442 CDisplayWindowPlots *m_winPlots;
443 WxSubsystem::CWXMainFrame *m_mainFrame;
447 static const long ID_PLOT;
448 static const long ID_MENU_PRINT;
450 std::map<long,long> m_ID2ID;
452 wxPoint m_last_mouse_point;
454 void OnMenuSelected(wxCommandEvent& ev);
455 void OnMouseMove(wxMouseEvent& event);
463 const std::string &lineFormat,
464 const std::string &plotName);
471 const std::string &lineFormat,
472 const std::string &plotName,
473 bool showName =
false);
483 const std::string &plotName);
487 void OnClose (wxCloseEvent& event);
488 void OnMenuPrint(wxCommandEvent& event);
489 void OnMenuClose(wxCommandEvent& event);
490 void OnMenuAbout(wxCommandEvent& event);
491 void OnChar(wxKeyEvent& event);
492 void OnResize(wxSizeEvent& event);
493 void OnMouseDown(wxMouseEvent& event);
495 DECLARE_EVENT_TABLE()
500 #define _U(x) wxString((x),wxConvUTF8)
501 #define _UU(x,y) wxString((x),y)