26 void* winobj_voidptr,
int CMD_CREATE_WIN,
int CMD_DESTROY_WIN,
28 : m_CMD_CREATE_WIN(CMD_CREATE_WIN),
29 m_CMD_DESTROY_WIN(CMD_DESTROY_WIN),
30 m_winobj_voidptr(winobj_voidptr),
31 m_caption(initial_caption),
43 unsigned int initialWidth,
unsigned int initialHeight)
48 #if MRPT_HAS_WXWIDGETS 62 REQ->
x = initialWidth;
63 REQ->
y = initialHeight;
70 std::this_thread::sleep_for(
72 wxApp::GetInstance()->Yield(
true);
82 const char* envVal = getenv(
"MRPT_WXSUBSYS_TIMEOUT_MS");
83 if (envVal) maxTimeout = atoi(envVal);
86 if (future.wait_for(std::chrono::milliseconds(maxTimeout)) ==
87 std::future_status::timeout)
89 cerr <<
"[CBaseGUIWindow::ctor] Timeout waiting window creation." 108 #if MRPT_HAS_WXWIDGETS 125 std::this_thread::sleep_for(20ms);
128 wxApp::GetInstance()->Yield(
true);
130 const int maxTimeout =
137 std::chrono::milliseconds(maxTimeout)) ==
138 std::future_status::timeout)
140 cerr <<
"[CBaseGUIWindow::dtor] Timeout waiting window destruction." 181 std::this_thread::sleep_for(10ms);
204 std::this_thread::sleep_for(10ms);
static void pushPendingWxRequest(TRequestToWxMainThread *data)
Thread-safe method to insert a new pending request (The memory must be dinamically allocated with "ne...
void * voidPtr
Parameters, depending on OPCODE.
const int m_CMD_CREATE_WIN
can be 200,300,400...
mrpt::gui::CDisplayWindow3D * source3D
Only one of source* can be non-nullptr, indicating the class that generated the request.
int getPushedKey(mrptKeyModifier *out_pushModifier=nullptr)
Returns the latest pushed key, or 0 if there is no new key stroke.
The data structure for each inter-thread request:
#define THROW_EXCEPTION(msg)
Create a GUI window and display plots with MATLAB-like interfaces and commands.
int getch() noexcept
An OS-independent version of getch, which waits until a key is pushed.
mrpt::void_ptr_noncopy m_hwnd
The window handle.
std::string m_caption
The caption of the window.
int waitForKey(bool ignoreControlKeys=true, mrptKeyModifier *out_pushModifier=nullptr)
Waits for any key to be pushed on the image or the console, and returns the key code.
CBaseGUIWindow(void *winobj_voidptr, int CMD_CREATE_WIN, int CMD_DESTROY_WIN, const std::string &initial_caption=std::string())
CMD_DESTROY_WIN can be 299,399,499...
int OPCODE
Valid codes are: For CDisplayWindow:
void notifyChildWindowDestruction()
Called by wx main thread to set m_hwnd to NULL.
This class creates a window as a graphical user interface (GUI) for displaying images to the user...
bool isOpen()
Returns false if the user has already closed the window.
const int m_CMD_DESTROY_WIN
can be 299,399,499...
std::promise< void > m_threadReady
This semaphore will be signaled when the wx window is built and ready.
GLsizei const GLchar ** string
volatile mrptKeyModifier m_keyPushedModifier
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.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
volatile bool m_keyPushed
bool kbhit() noexcept
An OS-independent version of kbhit, which returns true if a key has been pushed.
mrpt::gui::CDisplayWindowPlots * sourcePlots
Only one of source* can be non-nullptr, indicating the class that generated the request.
void destroyWxWindow()
Must be called by child classes in their destructors.
static bool isConsoleApp()
Will be set to true at runtime if it's not detected a running wxApp instance.
Classes for creating GUI windows for 2D and 3D visualization.
void createWxWindow(unsigned int initialWidth, unsigned int initialHeight)
Must be called by child classes just within the constructor.
volatile int m_keyPushedCode
virtual ~CBaseGUIWindow()
mrpt::gui::CDisplayWindow * source2D
Only one of source* can be non-nullptr, indicating the class that generated the request.
std::string str
Parameters, depending on OPCODE.
void notifySemThreadReady()
Called by wx main thread to signal the semaphore that the wx window is built and ready.
std::promise< void > m_windowDestroyed
This semaphore will be signaled when the wx window is destroyed.
static bool createOneInstanceMainThread()
Thread-safe method to create one single instance of the main wxWidgets thread: it will create the thr...
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.