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.
Definition at line 99 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 TWxMainThreadData & | GetWxMainThreadInstance () |
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 TRequestToWxMainThread * | popPendingWxRequest () |
Thread-safe method to return the next pending request, or NULL 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 volatile bool | isConsoleApp = true |
Will be set to true at runtime if it's not detected a running wxApp instance. More... | |
static CAuxWxSubsystemShutdowner | global_wxsubsystem_shutdown |
Static Private Attributes | |
static std::queue< TRequestToWxMainThread * > * | listPendingWxRequests = NULL |
Do not access directly to this, use the thread-safe functions. More... | |
static synch::CCriticalSection * | cs_listPendingWxRequests = NULL |
|
static |
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.
Definition at line 1008 of file WxSubsystem.cpp.
References mrpt::system::createThread(), GetWxMainThreadInstance(), mrpt::system::TThreadHandle::isClear(), isConsoleApp, mrpt::gui::WxSubsystem::TWxMainThreadData::m_csWxMainThreadId, mrpt::gui::WxSubsystem::TWxMainThreadData::m_semWxMainThreadReady, mrpt::gui::WxSubsystem::TWxMainThreadData::m_wxMainThreadId, mrpt::gui::WxSubsystem::CWXMainFrame::oneInstance, mrpt::synch::CSemaphore::waitForSignal(), and wxMainThread().
Referenced by mrpt::gui::CBaseGUIWindow::createWxWindow(), and mrpt::hwdrivers::prepareVideoSourceFromUserSelection().
|
static |
Definition at line 760 of file WxSubsystem.cpp.
References mrpt_default_icon_xpm.
Referenced by mrpt::gui::C3DWindowDialog::C3DWindowDialog(), mrpt::gui::CWindowDialog::CWindowDialog(), and mrpt::gui::CWindowDialogPlots::CWindowDialogPlots().
|
static |
Definition at line 987 of file WxSubsystem.cpp.
Referenced by createOneInstanceMainThread(), CDisplayWindow_WXAPP::OnExit(), CDisplayWindow_WXAPP::OnInit(), waitWxShutdownsIfNoWindows(), wxMainThread(), and mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().
|
static |
Thread-safe method to return the next pending request, or NULL if there is none (After usage, FREE the memory!)
Definition at line 230 of file WxSubsystem.cpp.
|
static |
Thread-safe method to insert a new pending request (The memory must be dinamically allocated with "new T[1]", will be freed by receiver.)
Definition at line 252 of file WxSubsystem.cpp.
References mrpt::gui::WxSubsystem::CWXMainFrame::oneInstance.
Referenced by mrpt::gui::CDisplayWindowPlots::addPopupMenuEntry(), mrpt::gui::CDisplayWindow3D::addTextMessage(), mrpt::gui::CDisplayWindowPlots::axis(), mrpt::gui::CDisplayWindowPlots::axis_equal(), mrpt::gui::CDisplayWindowPlots::axis_fit(), mrpt::gui::CDisplayWindowPlots::clear(), mrpt::gui::CDisplayWindow3D::clearTextMessages(), mrpt::gui::CBaseGUIWindow::createWxWindow(), mrpt::gui::CBaseGUIWindow::destroyWxWindow(), mrpt::gui::CDisplayWindowPlots::enableMousePanZoom(), mrpt::gui::CDisplayWindow3D::forceRepaint(), mrpt::gui::CDisplayWindowPlots::image(), mrpt::gui::CDisplayWindowPlots::internal_plot(), mrpt::gui::CDisplayWindowPlots::plotEllipse(), mrpt::gui::CDisplayWindowPlots::resize(), mrpt::gui::CDisplayWindow3D::resize(), mrpt::gui::CDisplayWindow::resize(), mrpt::gui::CDisplayWindowPlots::setPos(), mrpt::gui::CDisplayWindow3D::setPos(), mrpt::gui::CDisplayWindow::setPos(), mrpt::gui::CDisplayWindowPlots::setWindowTitle(), mrpt::gui::CDisplayWindow3D::setWindowTitle(), mrpt::gui::CDisplayWindow::setWindowTitle(), mrpt::gui::CDisplayWindow::showImage(), and mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().
|
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 821 of file WxSubsystem.cpp.
References mrpt::synch::CCriticalSection::enter(), GetWxMainThreadInstance(), mrpt::system::TThreadHandle::isClear(), isConsoleApp, mrpt::synch::CCriticalSection::leave(), mrpt::gui::WxSubsystem::TWxMainThreadData::m_csWxMainThreadId, mrpt::gui::WxSubsystem::TWxMainThreadData::m_wxMainThreadId, and mrpt::system::sleep().
Referenced by mrpt::gui::CBaseGUIWindow::destroyWxWindow(), and mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().
|
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 929 of file WxSubsystem.cpp.
References mrpt::system::TThreadHandle::clear(), GetWxMainThreadInstance(), mrpt::gui::WxSubsystem::TWxMainThreadData::m_semWxMainThreadReady, mrpt::gui::WxSubsystem::TWxMainThreadData::m_wxMainThreadId, MRPT_END, MRPT_START, mrpt_wxCreateApp(), mrpt_wxEntryReal(), and mrpt::synch::CSemaphore::release().
Referenced by createOneInstanceMainThread().
|
staticprivate |
Definition at line 281 of file WxSubsystem.h.
Referenced by mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().
|
static |
Definition at line 125 of file WxSubsystem.h.
|
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 114 of file WxSubsystem.h.
Referenced by createOneInstanceMainThread(), mrpt::gui::CBaseGUIWindow::createWxWindow(), mrpt::gui::CBaseGUIWindow::destroyWxWindow(), waitWxShutdownsIfNoWindows(), and mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().
|
staticprivate |
Do not access directly to this, use the thread-safe functions.
Definition at line 280 of file WxSubsystem.h.
Referenced by mrpt::gui::WxSubsystem::CAuxWxSubsystemShutdowner::~CAuxWxSubsystemShutdowner().
Page generated by Doxygen 1.8.14 for MRPT 1.5.9 Git: 690a4699f Wed Apr 15 19:29:53 2020 +0200 at miƩ abr 15 19:30:12 CEST 2020 |