From 38b3dcac9e4dcb225ceaa7a4798a644537c50ece Mon Sep 17 00:00:00 2001 From: patacongo Date: Sat, 19 May 2012 04:20:56 +0000 Subject: NxWM unit test now appears bug free (other than some NxConsole-related issues). git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4750 42af7a65-404d-4744-a932-0658087f49c3 --- NxWidgets/nxwm/doc/NxWM-ThreadingModel.ppt | Bin 126464 -> 126464 bytes NxWidgets/nxwm/include/ccalibration.hxx | 2 -- NxWidgets/nxwm/include/cnxconsole.hxx | 2 -- NxWidgets/nxwm/include/cstartwindow.hxx | 2 -- NxWidgets/nxwm/include/ctaskbar.hxx | 9 +++++++-- NxWidgets/nxwm/include/cwindowmessenger.hxx | 16 +++++++++++++--- NxWidgets/nxwm/src/capplicationwindow.cxx | 7 ++++--- NxWidgets/nxwm/src/ccalibration.cxx | 10 ---------- NxWidgets/nxwm/src/cnxconsole.cxx | 14 ++------------ NxWidgets/nxwm/src/cstartwindow.cxx | 10 ---------- NxWidgets/nxwm/src/ctaskbar.cxx | 16 +++++++++++----- NxWidgets/nxwm/src/ctouchscreen.cxx | 2 +- NxWidgets/nxwm/src/cwindowmessenger.cxx | 19 ++++++++++++++++--- 13 files changed, 54 insertions(+), 55 deletions(-) diff --git a/NxWidgets/nxwm/doc/NxWM-ThreadingModel.ppt b/NxWidgets/nxwm/doc/NxWM-ThreadingModel.ppt index b532eaa65..acae788c2 100644 Binary files a/NxWidgets/nxwm/doc/NxWM-ThreadingModel.ppt and b/NxWidgets/nxwm/doc/NxWM-ThreadingModel.ppt differ diff --git a/NxWidgets/nxwm/include/ccalibration.hxx b/NxWidgets/nxwm/include/ccalibration.hxx index e9b5d400f..a54a35bf7 100644 --- a/NxWidgets/nxwm/include/ccalibration.hxx +++ b/NxWidgets/nxwm/include/ccalibration.hxx @@ -52,7 +52,6 @@ #include "ctaskbar.hxx" #include "iapplication.hxx" #include "cfullscreenwindow.hxx" -#include "cwindowmessenger.hxx" /**************************************************************************** * Pre-processor Definitions @@ -144,7 +143,6 @@ namespace NxWM * CCalibration state data */ - CWindowMessenger m_messenger; /**< Window event handler/messenger */ CTaskbar *m_taskbar; /**< The taskbar (used to terminate calibration) */ CFullScreenWindow *m_window; /**< The window for the calibration display */ CTouchscreen *m_touchscreen; /**< The touchscreen device */ diff --git a/NxWidgets/nxwm/include/cnxconsole.hxx b/NxWidgets/nxwm/include/cnxconsole.hxx index bf3606f05..c04caeff9 100644 --- a/NxWidgets/nxwm/include/cnxconsole.hxx +++ b/NxWidgets/nxwm/include/cnxconsole.hxx @@ -49,7 +49,6 @@ #include "iapplication.hxx" #include "capplicationwindow.hxx" #include "ctaskbar.hxx" -#include "cwindowmessenger.hxx" /**************************************************************************** * Pre-Processor Definitions @@ -79,7 +78,6 @@ namespace NxWM class CNxConsole : public IApplication, private IApplicationCallback { private: - CWindowMessenger m_messenger; /**< Window event handler/messenger */ CTaskbar *m_taskbar; /**< Reference to the "parent" taskbar */ CApplicationWindow *m_window; /**< Reference to the application window */ NXCONSOLE m_nxcon; /**< NxConsole handle */ diff --git a/NxWidgets/nxwm/include/cstartwindow.hxx b/NxWidgets/nxwm/include/cstartwindow.hxx index 3a5325cb7..c7a812abf 100644 --- a/NxWidgets/nxwm/include/cstartwindow.hxx +++ b/NxWidgets/nxwm/include/cstartwindow.hxx @@ -48,7 +48,6 @@ #include "iapplication.hxx" #include "capplicationwindow.hxx" -#include "cwindowmessenger.hxx" /**************************************************************************** * Pre-Processor Definitions @@ -116,7 +115,6 @@ namespace NxWM * CStartWindow state data */ - CWindowMessenger m_messenger; /**< Window event handler/messenger */ CTaskbar *m_taskbar; /**< Reference to the "parent" taskbar */ CApplicationWindow *m_window; /**< Reference to the application window */ TNxArray m_slots; /**< List of apps in the start window */ diff --git a/NxWidgets/nxwm/include/ctaskbar.hxx b/NxWidgets/nxwm/include/ctaskbar.hxx index a78fb1739..c8468877a 100644 --- a/NxWidgets/nxwm/include/ctaskbar.hxx +++ b/NxWidgets/nxwm/include/ctaskbar.hxx @@ -110,14 +110,19 @@ namespace NxWM /** * Create a raw window. * - * 1) Create a dumb NXWidgets::CWidgetControl instance - * 2) Pass the dumb NXWidgets::CWidgetControl instance to the window constructor + * 1) Create a dumb NXWidgets::CWidgetControl instance (See not). + * 2) Pass the dumb NXWidgets::CWindowMessenger instance to the window constructor * that inherits from INxWindow. This will "smarten" the NXWidgets::CWidgetControl * instance with some window knowlede * 3) Call the open() method on the window to display the window. * 4) After that, the fully smartened NXWidgets::CWidgetControl instance can * be used to generate additional widgets by passing it to the * widget constructor + * + * NOTE: Actually, NxWM uses the CWindowMessenger class that inherits from + * CWidgetControl. That class just adds some unrelated messenging capability; + * It cohabitates with CWidgetControl only becuase it nees the CWidgetControl + * this point. */ NXWidgets::CNxWindow *openRawWindow(void); diff --git a/NxWidgets/nxwm/include/cwindowmessenger.hxx b/NxWidgets/nxwm/include/cwindowmessenger.hxx index 0aa8961bb..d2e862a7c 100644 --- a/NxWidgets/nxwm/include/cwindowmessenger.hxx +++ b/NxWidgets/nxwm/include/cwindowmessenger.hxx @@ -49,6 +49,7 @@ #include #include "cwindoweventhandler.hxx" +#include "cwidgetstyle.hxx" #include "cwidgetcontrol.hxx" /**************************************************************************** @@ -71,10 +72,15 @@ namespace NxWM /** * The class CWindowMessenger integrates the widget control with some special - * handling of mouse and keyboard inputs neesed by NxWM + * handling of mouse and keyboard inputs neesed by NxWM. It use used + * in place of CWidgetControl whenever an NxWM window is created. + * + * CWindowMessenger cohabitates with CWidgetControl only becuase it nees the + * CWidgetControl as an argument in its messenging. */ - class CWindowMessenger : public NXWidgets::CWindowEventHandler + class CWindowMessenger : public NXWidgets::CWindowEventHandler, + public NXWidgets::CWidgetControl { private: mqd_t m_mqd; /**< Message queue descriptor used to commincate with the @@ -110,9 +116,13 @@ namespace NxWM /** * CWindowMessenger Constructor + * + * @param style The default style that all widgets on this display + * should use. If this is not specified, the widget will use the + * values stored in the defaultCWidgetStyle object. */ - CWindowMessenger(void); + CWindowMessenger(FAR const NXWidgets::CWidgetStyle *style = (const NXWidgets::CWidgetStyle *)NULL); /** * CWindowMessenger Destructor. diff --git a/NxWidgets/nxwm/src/capplicationwindow.cxx b/NxWidgets/nxwm/src/capplicationwindow.cxx index 5cf172ea6..65de1b1a4 100644 --- a/NxWidgets/nxwm/src/capplicationwindow.cxx +++ b/NxWidgets/nxwm/src/capplicationwindow.cxx @@ -47,6 +47,7 @@ #include "nxwmconfig.hxx" #include "nxwmglyphs.hxx" +#include "cwindowmessenger.hxx" #include "capplicationwindow.hxx" /******************************************************************************************** @@ -152,15 +153,15 @@ CApplicationWindow::~CApplicationWindow(void) bool CApplicationWindow::open(void) { - // Create a widget control for the tool bar + // Create the widget control (with the window messenger) using the default style - NXWidgets::CWidgetControl *control = new NXWidgets::CWidgetControl(); + CWindowMessenger *control = new CWindowMessenger(); if (!control) { return false; } - // Open the toolbar + // Open the toolbar using the widget control m_toolbar = m_window->openToolbar(CONFIG_NXWM_TOOLBAR_HEIGHT, control); if (!m_toolbar) diff --git a/NxWidgets/nxwm/src/ccalibration.cxx b/NxWidgets/nxwm/src/ccalibration.cxx index 6f5976100..8ba8d0173 100644 --- a/NxWidgets/nxwm/src/ccalibration.cxx +++ b/NxWidgets/nxwm/src/ccalibration.cxx @@ -99,11 +99,6 @@ CCalibration::CCalibration(CTaskbar *taskbar, CFullScreenWindow *window, m_calthread = CALTHREAD_NOTRUNNING; m_calphase = CALPHASE_NOT_STARTED; m_touched = false; - - // Add our messenger as the window callback - - NXWidgets::CWidgetControl *control = window->getWidgetControl(); - control->addWindowEventHandler(&m_messenger); } /** @@ -117,11 +112,6 @@ CCalibration::~CCalibration(void) stop(); - // Remove ourself from the window callback - - NXWidgets::CWidgetControl *control = m_window->getWidgetControl(); - control->removeWindowEventHandler(&m_messenger); - // Although we did not create the window, the rule is that I have to dispose // of it diff --git a/NxWidgets/nxwm/src/cnxconsole.cxx b/NxWidgets/nxwm/src/cnxconsole.cxx index 6a64afc1b..30105910b 100644 --- a/NxWidgets/nxwm/src/cnxconsole.cxx +++ b/NxWidgets/nxwm/src/cnxconsole.cxx @@ -132,11 +132,6 @@ CNxConsole::CNxConsole(CTaskbar *taskbar, CApplicationWindow *window) // Add our callbacks with the application window window->registerCallbacks(static_cast(this)); - - // Add our messenger as the window callback - - NXWidgets::CWidgetControl *control = window->getWidgetControl(); - control->addWindowEventHandler(&m_messenger); } /** @@ -152,11 +147,6 @@ CNxConsole::~CNxConsole(void) stop(); - // Remove ourself from the window callback - - NXWidgets::CWidgetControl *control = m_window->getWidgetControl(); - control->removeWindowEventHandler(&m_messenger); - // Although we didn't create it, we are responsible for deleting the // application window @@ -303,7 +293,7 @@ void CNxConsole::stop(void) // Delete the NxConsole task if it is still running (this could strand // resources). If we get here due to CTaskbar::stopApplication() processing // initialed by CNxConsole::exitHandler, then do *not* delete the task (it - // is already being delete). + // is already being deleted). if (m_pid >= 0) { @@ -320,7 +310,7 @@ void CNxConsole::stop(void) } // Destroy the NX console device - + if (m_nxcon) { nxcon_unregister(m_nxcon); diff --git a/NxWidgets/nxwm/src/cstartwindow.cxx b/NxWidgets/nxwm/src/cstartwindow.cxx index af46e7b82..5c54cba3a 100644 --- a/NxWidgets/nxwm/src/cstartwindow.cxx +++ b/NxWidgets/nxwm/src/cstartwindow.cxx @@ -99,11 +99,6 @@ CStartWindow::CStartWindow(CTaskbar *taskbar, CApplicationWindow *window) // Add our callbacks to the application window window->registerCallbacks(static_cast(this)); - - // Add our messenger as the window callback - - NXWidgets::CWidgetControl *control = window->getWidgetControl(); - control->addWindowEventHandler(&m_messenger); } /** @@ -117,11 +112,6 @@ CStartWindow::~CStartWindow(void) stop(); - // Remove ourself from the window callback - - NXWidgets::CWidgetControl *control = m_window->getWidgetControl(); - control->removeWindowEventHandler(&m_messenger); - // Although we didn't create it, we are responsible for deleting the // application window diff --git a/NxWidgets/nxwm/src/ctaskbar.cxx b/NxWidgets/nxwm/src/ctaskbar.cxx index b4df0bb86..6b0510017 100644 --- a/NxWidgets/nxwm/src/ctaskbar.cxx +++ b/NxWidgets/nxwm/src/ctaskbar.cxx @@ -47,6 +47,7 @@ #include "cwidgetcontrol.hxx" #include "cnxtkwindow.hxx" +#include "cwindowmessenger.hxx" #include "ctaskbar.hxx" /******************************************************************************************** @@ -748,7 +749,7 @@ void CTaskbar::clickIcon(int index, bool click) /** * Create a raw window. * - * 1) Create a dumb CWigetControl instance + * 1) Create a dumb CWigetControl instance (see note below) * 2) Pass the dumb CWidgetControl instance to the window constructor * that inherits from INxWindow. This will "smarten" the CWidgetControl * instance with some window knowlede @@ -756,13 +757,18 @@ void CTaskbar::clickIcon(int index, bool click) * 4) After that, the fully smartened CWidgetControl instance can * be used to generate additional widgets by passing it to the * widget constructor + * + * NOTE: Actually, NxWM uses the CWindowMessenger class that inherits from + * CWidgetControl. That class just adds some unrelated messenging capability; + * It cohabitates with CWidgetControl only becuase it nees the CWidgetControl + * this point. */ NXWidgets::CNxWindow *CTaskbar::openRawWindow(void) { - // Initialize the widget control using the default style + // Create the widget control (with the window messenger) using the default style - NXWidgets::CWidgetControl *control = new NXWidgets::CWidgetControl((NXWidgets::CWidgetStyle *)NULL); + CWindowMessenger *control = new CWindowMessenger((NXWidgets::CWidgetStyle *)NULL); // Get an (uninitialized) instance of the background window as a class // that derives from INxWindow. @@ -797,9 +803,9 @@ NXWidgets::CNxWindow *CTaskbar::openRawWindow(void) NXWidgets::CNxTkWindow *CTaskbar::openFramedWindow(void) { - // Initialize the widget control using the default style + // Create the widget control (with the window messenger) using the default style - NXWidgets::CWidgetControl *control = new NXWidgets::CWidgetControl((NXWidgets::CWidgetStyle *)NULL); + CWindowMessenger *control = new CWindowMessenger((NXWidgets::CWidgetStyle *)NULL); // Get an (uninitialized) instance of the framed window as a class // that derives from INxWindow. diff --git a/NxWidgets/nxwm/src/ctouchscreen.cxx b/NxWidgets/nxwm/src/ctouchscreen.cxx index 1a8a5e967..ba25dd95f 100644 --- a/NxWidgets/nxwm/src/ctouchscreen.cxx +++ b/NxWidgets/nxwm/src/ctouchscreen.cxx @@ -36,7 +36,7 @@ /******************************************************************************************** * Included Files ********************************************************************************************/ - + #include #include diff --git a/NxWidgets/nxwm/src/cwindowmessenger.cxx b/NxWidgets/nxwm/src/cwindowmessenger.cxx index b467f533c..032dd1bf2 100644 --- a/NxWidgets/nxwm/src/cwindowmessenger.cxx +++ b/NxWidgets/nxwm/src/cwindowmessenger.cxx @@ -60,9 +60,14 @@ using namespace NxWM; /** * CWindowMessenger Constructor + * + * @param style The default style that all widgets on this display + * should use. If this is not specified, the widget will use the + * values stored in the defaultCWidgetStyle object. */ -CWindowMessenger::CWindowMessenger(void) +CWindowMessenger::CWindowMessenger(FAR const NXWidgets::CWidgetStyle *style) +: NXWidgets::CWidgetControl(style) { // Open a message queue to communicate with the start window task. We need to create // the message queue if it does not exist. @@ -77,6 +82,10 @@ CWindowMessenger::CWindowMessenger(void) { gdbg("ERROR: mq_open(%s) failed: %d\n", g_startWindowMqName, errno); } + + // Add ourself to the list of window event handlers + + addWindowEventHandler(this); } /** @@ -85,6 +94,10 @@ CWindowMessenger::CWindowMessenger(void) CWindowMessenger::~CWindowMessenger(void) { + // Remove ourself from the list of the window event handlers + + removeWindowEventHandler(this); + // Close the message queue (void)mq_close(m_mqd); @@ -127,7 +140,7 @@ void CWindowMessenger::handleMouseEvent(void) struct SStartWindowMessage outmsg; outmsg.msgId = MSGID_MOUSE_INPUT; - outmsg.instance = (FAR void *)this; + outmsg.instance = (FAR void *)static_cast(this); int ret = mq_send(m_mqd, &outmsg, sizeof(struct SStartWindowMessage), CONFIG_NXWM_STARTWINDOW_MXMPRIO); @@ -173,7 +186,7 @@ void CWindowMessenger::handleKeyboardEvent(void) struct SStartWindowMessage outmsg; outmsg.msgId = MSGID_KEYBOARD_INPUT; - outmsg.instance = (FAR void *)this; + outmsg.instance = (FAR void *)static_cast(this); int ret = mq_send(m_mqd, &outmsg, sizeof(struct SStartWindowMessage), CONFIG_NXWM_STARTWINDOW_MXMPRIO); -- cgit v1.2.3