MRPT  1.9.9
mrpt::gui::WxSubsystem Class Reference

Detailed Description

This class implements the GUI thread required for the wxWidgets-based GUI.

This system is employed internally by gui::CDisplayWindow and gui::CDisplayWindow3D, and must be not used in any way directly by the MRPT user.

The system works by creating a invisible wxFrame that process timer events where it checks a queue of requests sent from the main MRPT thread. The requests include the creation, deletion,... of windows (2D/3D). In that way, just one thread is required for all the GUI windows, and the wxWidgets is initialized and clean-up correctly.

This header should be included just from the implementation files of CDisplayWindow and CDisplayWindow3D, since it uses wxWidgets classes.

See also
gui::CDisplayWindow, gui::CDisplayWindow3D

Definition at line 97 of file WxSubsystem.h.

#include <mrpt/gui/WxSubsystem.h>

Classes

class  CAuxWxSubsystemShutdowner
 An auxiliary global object used just to launch a final request to the wxSubsystem for shutdown: More...
 
class  CWXMainFrame
 The main frame of the wxWidgets application. More...
 
struct  TRequestToWxMainThread
 The data structure for each inter-thread request: More...
 
struct  TWxMainThreadData
 

Static Public Member Functions

static void waitWxShutdownsIfNoWindows ()
 This method must be called in the destructor of the user class FROM THE MAIN THREAD, in order to wait for the shutdown of the wx thread if this was the last open window. More...
 
static bool isConsoleApp ()
 Will be set to true at runtime if it's not detected a running wxApp instance. More...
 
static TWxMainThreadDataGetWxMainThreadInstance ()
 
static void wxMainThread ()
 This will be the "MAIN" of wxWidgets: It starts an application object and does not end until all the windows are closed. More...
 
static TRequestToWxMainThreadpopPendingWxRequest ()
 Thread-safe method to return the next pending request, or nullptr if there is none (After usage, FREE the memory!) More...
 
static void pushPendingWxRequest (TRequestToWxMainThread *data)
 Thread-safe method to insert a new pending request (The memory must be dinamically allocated with "new T[1]", will be freed by receiver.) More...
 
static bool createOneInstanceMainThread ()
 Thread-safe method to create one single instance of the main wxWidgets thread: it will create the thread only if it is not running yet. More...
 
static wxBitmap getMRPTDefaultIcon ()
 

Static Public Attributes

static CAuxWxSubsystemShutdowner global_wxsubsystem_shutdown
 

Static Private Attributes

static std::queue< TRequestToWxMainThread * > * listPendingWxRequests = nullptr
 Do not access directly to this, use the thread-safe functions. More...
 
static std::mutex * cs_listPendingWxRequests = nullptr
 

Member Function Documentation

◆ createOneInstanceMainThread()

bool WxSubsystem::createOneInstanceMainThread ( )
static

◆ getMRPTDefaultIcon()

wxBitmap WxSubsystem::getMRPTDefaultIcon ( )
static

◆ GetWxMainThreadInstance()

WxSubsystem::TWxMainThreadData & WxSubsystem::GetWxMainThreadInstance ( )
static

◆ isConsoleApp()

bool WxSubsystem::isConsoleApp ( )
static

Will be set to true at runtime if it's not detected a running wxApp instance.

For console apps, we'll create a new thread and run wxEntry from there. For GUI apps (MRPT-based Windows are a part of a user wxWidget apps), we must leave the control of message dispatching to the current main loop, so we cannot create a different threads, making things a little different (hence this variable).

Definition at line 53 of file WxSubsystem.cpp.

References isConsoleApp_value.

Referenced by mrpt::gui::CBaseGUIWindow::createWxWindow(), mrpt::gui::CBaseGUIWindow::destroyWxWindow(), waitWxShutdownsIfNoWindows(), and mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().

◆ popPendingWxRequest()

WxSubsystem::TRequestToWxMainThread * WxSubsystem::popPendingWxRequest ( )
static

Thread-safe method to return the next pending request, or nullptr if there is none (After usage, FREE the memory!)

Definition at line 237 of file WxSubsystem.cpp.

◆ pushPendingWxRequest()

void WxSubsystem::pushPendingWxRequest ( WxSubsystem::TRequestToWxMainThread data)
static

◆ waitWxShutdownsIfNoWindows()

void WxSubsystem::waitWxShutdownsIfNoWindows ( )
static

This method must be called in the destructor of the user class FROM THE MAIN THREAD, in order to wait for the shutdown of the wx thread if this was the last open window.

Definition at line 913 of file WxSubsystem.cpp.

References isConsoleApp().

Referenced by mrpt::gui::CBaseGUIWindow::destroyWxWindow(), and mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().

◆ wxMainThread()

void WxSubsystem::wxMainThread ( )
static

This will be the "MAIN" of wxWidgets: It starts an application object and does not end until all the windows are closed.

Only one instance of this thread can be running at a given instant, no matter how many windows are open.

Definition at line 1017 of file WxSubsystem.cpp.

References GetWxMainThreadInstance(), mrpt::gui::WxSubsystem::TWxMainThreadData::m_done, mrpt::gui::WxSubsystem::TWxMainThreadData::m_semWxMainThreadReady, MRPT_END, MRPT_START, mrpt_wxCreateApp(), and mrpt_wxEntryReal().

Member Data Documentation

◆ cs_listPendingWxRequests

std::mutex * WxSubsystem::cs_listPendingWxRequests = nullptr
staticprivate

◆ global_wxsubsystem_shutdown

WxSubsystem::CAuxWxSubsystemShutdowner WxSubsystem::global_wxsubsystem_shutdown
static

Definition at line 129 of file WxSubsystem.h.

◆ listPendingWxRequests

std::queue< WxSubsystem::TRequestToWxMainThread * > * WxSubsystem::listPendingWxRequests = nullptr
staticprivate

Do not access directly to this, use the thread-safe functions.

Definition at line 320 of file WxSubsystem.h.

Referenced by mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().




Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 7d5e6d718 Fri Aug 24 01:51:28 2018 +0200 at lun nov 2 08:35:50 CET 2020