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) This class provides simple critical sections functionality.
Create a GUI window and display plots with MATLAB-like interfaces and commands.
Canvas for plotting mpLayer implementations.
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
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...
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.