From e40d54e2f762692185dad19b2df75e0756eeec1e Mon Sep 17 00:00:00 2001 From: patacongo Date: Sat, 19 May 2012 04:20:56 +0000 Subject: [PATCH] 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 --- nxwm/doc/NxWM-ThreadingModel.ppt | Bin 126464 -> 126464 bytes nxwm/include/ccalibration.hxx | 2 -- nxwm/include/cnxconsole.hxx | 2 -- nxwm/include/cstartwindow.hxx | 2 -- nxwm/include/ctaskbar.hxx | 9 +++++++-- nxwm/include/cwindowmessenger.hxx | 16 +++++++++++++--- nxwm/src/capplicationwindow.cxx | 7 ++++--- nxwm/src/ccalibration.cxx | 10 ---------- nxwm/src/cnxconsole.cxx | 14 ++------------ nxwm/src/cstartwindow.cxx | 10 ---------- nxwm/src/ctaskbar.cxx | 16 +++++++++++----- nxwm/src/ctouchscreen.cxx | 2 +- nxwm/src/cwindowmessenger.cxx | 19 ++++++++++++++++--- 13 files changed, 54 insertions(+), 55 deletions(-) diff --git a/nxwm/doc/NxWM-ThreadingModel.ppt b/nxwm/doc/NxWM-ThreadingModel.ppt index b532eaa659e45903c928aa6d20d60f0e62a4842c..acae788c2d15f44d8e880f13edb894af282722c6 100644 GIT binary patch delta 1109 zcmY*YZBUd|6u$Sp@5g=Ly}Jv-x(n?P3p9Kz;sUJ}g4K^0Oo1_mDTS6G`%$K@P#Os{ z=xTprlJ%6!lo~TyI0X~SEht+_(`2Rr`xs!N)@-b4n5F_6B()E^yYi!cJaf){?lb3} z=bX76QLQ7Y4RldF!Gp9;wp~I9F##-~2}lB|9GgeYa-01UfyeWc`S+;|lQ#RyeD;nv zBr>mN^I%#dCglm)5KOZH^HA91D&c3t~AA3f)RHPPKH9a z9sY6qNLJ#P(2!pStiS>9<@@9knup`Eyj9om%D616z$crNmg(0De#CY`J0P_BF`@2v z#MR7m4Ljm$wJ@e$rgyq194w6D6lg5kjt619sKzz1{a3E_}+~%$1Tl3t4Bm!JnuwDI|f7@!ggC4Q)ivGu*~ue)Ewn67kVWsNH&;{-yY} zP4sge{Lx4G!*yGUW>q5U&z4-^z82E0?&i4-iG=)=_z9FXwP-eVDLKg&*R)=IfKd=|AOqNVJqMfKavAEJfSIIx_!z=2!f^iO>5}B6aOMGNX_@?hb5wXpj(l7?lJ@)OoE)M z9R6A7Iij7{PfA@%5f64%V^YIf`47QX88W)-wYO;sO{FF9@zDUSGIr5gJ;wz8BThJX zRprlwR$wh+H0meJXZfM-4JK_Jo5rWvCO&y`qb|*uct-za5^uCbKOj|$MvKGkv{XMX zMdgSNk?9%UGnh)Wu+GRCrI4S0ztXJzVYyrJDq(KB&>(9&EI#!kb1Uo{Z6TfPSw25{ zr}BT7n%8g;CoAVQSq{PxZn-Zya(OCu)UJT)R|1^PbeX|@g4PPfy$ z^jD>CS@Mlq4XE<#^J11Jkf%04Bz|(YxrNn CzE~;% delta 1021 zcmYLIYfKzf6uxKf%-)${c38?|M_duKjT?6ct2FpXR0MCz{?OPOACMRjA2rf8-P%|iu(oSOu&B`)FzJu)o_o%{ zIp25Axi@x>#m=$eUKw`qgxo0ReohF{EPw@OL9lQO2j`em>~xP&jFjf^3;7z*PWOxa z+O4k%^t!{#69ta~eZb|#L_scB3j;vA+{@1HqH4HDci9Plqw;d%m}N*N(ZtD2+Y0F~ zEL%wAw0&;aur`^5rbGPN9qVK~;?rOShW&0laiH8SG*qE0-^VYNCmd|OUIc^gHr{z} zqfRUJ1%9?VL!w#QmwcwCTV*GeyH%gs!`pV$3p6YTaH8QT`%8+jfIP|D8aZVy=_ALi z?nPfXO8XrVJ`m2L^m5iGc%nJV@*Mx>Waswsl3f!Tga>9GR*VC_o2`OqoKQp!Q0Lki=@^S|O^qM1IdwexUahlp!ZJJ~z3E@#UP zSYgKHXVvHB7G--z-(e5GXd1v~)OO{BbCyH@mJC*$Tst6?tKla|F^`NFJ z*~_*(?Pq*{q|<3Ce?vrctC_@^oY{!MMC_SV_`BUS!OE^4N$$FPc9pGP0bUQHc?ho91`ZKWkuYUir zz+SMp4{IlpPj@<_j=1U?N ztH!;AbUk4WbRQw3uM)D>`iQ+(329Fg(sZ4W>N!G6&96mpgOQxEjp>qL|EL2tY!Uj2 xd0!CjGNIa9T-DZ%H-gaTHS24jJQ1lgU*7`-X5lliHMz0_zKg>C m_slots; /**< List of apps in the start window */ diff --git a/nxwm/include/ctaskbar.hxx b/nxwm/include/ctaskbar.hxx index a78fb1739..c8468877a 100644 --- a/nxwm/include/ctaskbar.hxx +++ b/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/nxwm/include/cwindowmessenger.hxx b/nxwm/include/cwindowmessenger.hxx index 0aa8961bb..d2e862a7c 100644 --- a/nxwm/include/cwindowmessenger.hxx +++ b/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/nxwm/src/capplicationwindow.cxx b/nxwm/src/capplicationwindow.cxx index 5cf172ea6..65de1b1a4 100644 --- a/nxwm/src/capplicationwindow.cxx +++ b/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/nxwm/src/ccalibration.cxx b/nxwm/src/ccalibration.cxx index 6f5976100..8ba8d0173 100644 --- a/nxwm/src/ccalibration.cxx +++ b/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/nxwm/src/cnxconsole.cxx b/nxwm/src/cnxconsole.cxx index 6a64afc1b..30105910b 100644 --- a/nxwm/src/cnxconsole.cxx +++ b/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/nxwm/src/cstartwindow.cxx b/nxwm/src/cstartwindow.cxx index af46e7b82..5c54cba3a 100644 --- a/nxwm/src/cstartwindow.cxx +++ b/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/nxwm/src/ctaskbar.cxx b/nxwm/src/ctaskbar.cxx index b4df0bb86..6b0510017 100644 --- a/nxwm/src/ctaskbar.cxx +++ b/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/nxwm/src/ctouchscreen.cxx b/nxwm/src/ctouchscreen.cxx index 1a8a5e967..ba25dd95f 100644 --- a/nxwm/src/ctouchscreen.cxx +++ b/nxwm/src/ctouchscreen.cxx @@ -36,7 +36,7 @@ /******************************************************************************************** * Included Files ********************************************************************************************/ - + #include #include diff --git a/nxwm/src/cwindowmessenger.cxx b/nxwm/src/cwindowmessenger.cxx index b467f533c..032dd1bf2 100644 --- a/nxwm/src/cwindowmessenger.cxx +++ b/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);