9 #ifndef MRPT_WX_SUBSYSTEM_H
10 #define MRPT_WX_SUBSYSTEM_H
15 #include <mrpt/config.h>
25 #if MRPT_HAS_WXWIDGETS
34 #include <wx/statbmp.h>
36 #include <wx/toolbar.h>
39 #include <wx/statusbr.h>
40 #include <wx/msgdlg.h>
41 #include <wx/artprov.h>
42 #include <wx/bitmap.h>
45 #include <wx/string.h>
46 #include <wx/msgdlg.h>
47 #include <wx/filedlg.h>
48 #include <wx/progdlg.h>
49 #include <wx/imaglist.h>
50 #include <wx/busyinfo.h>
52 #include <wx/textdlg.h>
53 #include <wx/dirdlg.h>
54 #include <wx/colordlg.h>
55 #include <wx/dcmemory.h>
64 #include <wx/chartpanel.h>
65 #include <wx/bars/barplot.h>
67 #include <wx/axis/numberaxis.h>
68 #include <wx/axis/categoryaxis.h>
69 #include <wx/axis/dateaxis.h>
71 #include <wx/xy/xyhistorenderer.h>
72 #include <wx/xy/xydataset.h>
73 #include <wx/xy/xylinerenderer.h>
74 #include <wx/xy/xyplot.h>
75 #include <wx/xy/xysimpledataset.h>
77 #include <wx/xyz/xyzdataset.h>
78 #include <wx/xyz/bubbleplot.h>
80 #include <wx/category/categorydataset.h>
81 #include <wx/category/categorysimpledataset.h>
93 class CDisplayWindow3D;
94 class CDisplayWindowPlots;
95 class CMyGLCanvas_DisplayWindow3D;
111 #if MRPT_HAS_WXWIDGETS
117 static void waitWxShutdownsIfNoWindows();
124 static volatile bool isConsoleApp;
128 class CAuxWxSubsystemShutdowner
131 CAuxWxSubsystemShutdowner();
132 ~CAuxWxSubsystemShutdowner();
135 static CAuxWxSubsystemShutdowner global_wxsubsystem_shutdown;
140 class CWXMainFrame:
public wxFrame
142 friend void WxSubsystem::waitWxShutdownsIfNoWindows();
145 CWXMainFrame(wxWindow* parent,wxWindowID
id = -1);
146 virtual ~CWXMainFrame();
151 static int notifyWindowCreation();
156 static int notifyWindowDestruction();
158 static volatile CWXMainFrame* oneInstance;
164 static int m_windowCount;
168 void OnTimerProcessRequests(wxTimerEvent& event);
170 DECLARE_EVENT_TABLE()
174 struct TWxMainThreadData
191 static TWxMainThreadData& GetWxMainThreadInstance();
197 static void wxMainThread();
203 TRequestToWxMainThread() :
206 sourcePlots ( NULL ),
207 sourceCameraSelectDialog(
false),
225 bool sourceCameraSelectDialog;
233 void *voidPtr, *voidPtr2;
237 std::string plotName;
284 static TRequestToWxMainThread * popPendingWxRequest();
288 static void pushPendingWxRequest( TRequestToWxMainThread *data );
292 static bool createOneInstanceMainThread();
295 static wxBitmap getMRPTDefaultIcon();
299 static std::queue<TRequestToWxMainThread*> *listPendingWxRequests;
305 #if MRPT_HAS_WXWIDGETS
309 class CWindowDialog:
public wxFrame
314 class wxMRPTImageControl :
public wxPanel
322 wxMRPTImageControl( wxWindow *parent,wxWindowID winID,
int x,
int y,
int width,
int height);
323 virtual ~wxMRPTImageControl();
325 wxPoint m_last_mouse_point, m_last_mouse_click;
328 void AssignImage(wxBitmap *img);
329 void GetBitmap(wxBitmap &bmp);
331 void OnPaint(wxPaintEvent &ev);
332 void OnMouseMove(wxMouseEvent& ev);
333 void OnMouseClick(wxMouseEvent& ev);
334 void OnChar(wxKeyEvent& ev);
336 void OnEraseBackground(wxEraseEvent &ev) { }
342 CWindowDialog( CDisplayWindow *win2D, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindow]"), wxSize initialSize = wxDefaultSize );
343 virtual ~CWindowDialog();
345 CDisplayWindow *m_win2D;
346 WxSubsystem::CWXMainFrame *m_mainFrame;
349 wxMRPTImageControl *m_image;
351 static const long ID_IMAGE_BITMAP;
355 void OnClose (wxCloseEvent& event);
356 void OnMenuClose(wxCommandEvent& event);
357 void OnMenuAbout(wxCommandEvent& event);
358 void OnMenuSave(wxCommandEvent& event);
359 void OnChar(wxKeyEvent& event);
360 void OnKeyDown(wxKeyEvent& event);
361 void OnResize(wxSizeEvent& event);
362 void OnMouseDown(wxMouseEvent& event);
364 DECLARE_EVENT_TABLE()
367 class C3DWindowDialog:
public wxFrame
369 friend class gui::CMyGLCanvas_DisplayWindow3D;
373 C3DWindowDialog(CDisplayWindow3D *win3D, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindow3D]"), wxSize initialSize = wxDefaultSize );
374 virtual ~C3DWindowDialog();
376 CDisplayWindow3D *m_win3D;
377 WxSubsystem::CWXMainFrame *m_mainFrame;
379 CMyGLCanvas_DisplayWindow3D *m_canvas;
381 void clearTextMessages();
385 const std::string &text,
387 const size_t unique_index,
393 const std::string &text,
395 const std::string &font_name,
396 const double font_size,
398 const size_t unique_index,
399 const double font_spacing,
400 const double font_kerning,
401 const bool has_shadow,
407 void OnClose (wxCloseEvent& event);
408 void OnMenuClose(wxCommandEvent& event);
409 void OnMenuAbout(wxCommandEvent& event);
410 void OnChar(wxKeyEvent& event);
411 void OnResize(wxSizeEvent& event);
413 static const long ID_MENUITEM1;
414 static const long ID_MENUITEM2;
416 DECLARE_EVENT_TABLE()
421 class CWindowDialogPlots:
public wxFrame
424 CWindowDialogPlots( CDisplayWindowPlots *winPlots, WxSubsystem::CWXMainFrame* parent,wxWindowID
id = -1,
const std::string &caption = std::string(
"[MRPT-CDisplayWindowPlots]"), wxSize initialSize = wxDefaultSize );
425 virtual ~CWindowDialogPlots();
427 CDisplayWindowPlots *m_winPlots;
428 WxSubsystem::CWXMainFrame *m_mainFrame;
432 static const long ID_PLOT;
433 static const long ID_MENU_PRINT;
435 std::map<long,long> m_ID2ID;
437 wxPoint m_last_mouse_point;
439 void OnMenuSelected(wxCommandEvent& ev);
440 void OnMouseMove(wxMouseEvent& event);
448 const std::string &lineFormat,
449 const std::string &plotName);
456 const std::string &lineFormat,
457 const std::string &plotName,
458 bool showName =
false);
468 const std::string &plotName);
472 void OnClose (wxCloseEvent& event);
473 void OnMenuPrint(wxCommandEvent& event);
474 void OnMenuClose(wxCommandEvent& event);
475 void OnMenuAbout(wxCommandEvent& event);
476 void OnChar(wxKeyEvent& event);
477 void OnResize(wxSizeEvent& event);
478 void OnMouseDown(wxMouseEvent& event);
480 DECLARE_EVENT_TABLE()
485 #define _U(x) wxString((x),wxConvUTF8)
486 #define _UU(x,y) wxString((x),y)
This class provides simple critical sections functionality.
This namespace provides a OS-independent interface to many useful functions: filenames manipulation...
Create a GUI window and display plots with MATLAB-like interfaces and commands.
Canvas for plotting mpLayer implementations.
TOpenGLFont
Existing fonts for 2D texts in mrpt::opengl methods.
TOpenGLFontStyle
Different style for vectorized font rendering.
This class creates a window as a graphical user interface (GUI) for displaying images to the user...
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
This class implements the GUI thread required for the wxWidgets-based GUI.
This structure contains the information needed to interface the threads API on each platform: ...
A RGB color - floats in the range [0,1].
A semaphore for inter-thread synchronization.
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.