diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-05-22 19:29:22 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-05-22 19:29:22 +0000 |
commit | 237d7e4c1c99762ee856d360eb64c3aab453c4bf (patch) | |
tree | 04068c4b1d4a29f018e68a81ef1f49de984db433 /NxWidgets/nxwm/include | |
parent | daee19b01c502ead55496801fe82548457229a8b (diff) | |
download | px4-nuttx-237d7e4c1c99762ee856d360eb64c3aab453c4bf.tar.gz px4-nuttx-237d7e4c1c99762ee856d360eb64c3aab453c4bf.tar.bz2 px4-nuttx-237d7e4c1c99762ee856d360eb64c3aab453c4bf.zip |
Add a hex calculator example to NxWM
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4760 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'NxWidgets/nxwm/include')
-rw-r--r-- | NxWidgets/nxwm/include/chexcalculator.hxx | 276 | ||||
-rw-r--r-- | NxWidgets/nxwm/include/cstartwindow.hxx | 3 | ||||
-rw-r--r-- | NxWidgets/nxwm/include/nxwmconfig.hxx | 18 | ||||
-rw-r--r-- | NxWidgets/nxwm/include/nxwmglyphs.hxx | 1 |
4 files changed, 297 insertions, 1 deletions
diff --git a/NxWidgets/nxwm/include/chexcalculator.hxx b/NxWidgets/nxwm/include/chexcalculator.hxx new file mode 100644 index 000000000..d73e17faf --- /dev/null +++ b/NxWidgets/nxwm/include/chexcalculator.hxx @@ -0,0 +1,276 @@ +/**************************************************************************** + * NxWidgets/nxwm/include/chexcalculator.hxx + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX, NxWidgets, nor the names of its contributors + * me be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef __INCLUDE_CHEXCALCULATOR_HXX +#define __INCLUDE_CHEXCALCULATOR_HXX + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <sys/types.h> +#include <nuttx/nx/nxtk.h> +#include <nuttx/nx/nxconsole.h> + +#include "cbuttonarray.hxx" +#include "clabel.hxx" + +#include "iapplication.hxx" +#include "capplicationwindow.hxx" +#include "ctaskbar.hxx" + +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ + +#define NXWM_HEXCALCULATOR_NROWS 6 +#define NXWM_HEXCALCULATOR_NCOLUMNS 6 + +/**************************************************************************** + * Implementation Classes + ****************************************************************************/ + +#if defined(__cplusplus) + +namespace NxWM +{ + /** + * This class implements the NxConsole application. + */ + + class CHexCalculator : public IApplication, + private IApplicationCallback, + private NXWidgets::CWidgetEventHandler + { + private: + CTaskbar *m_taskbar; /**< Reference to the "parent" taskbar */ + CApplicationWindow *m_window; /**< Reference to the application window */ + NXWidgets::CButtonArray *m_keypad; /**< The calculator keyboard */ + NXWidgets::CLabel *m_text; /**< The accumulator text display */ + struct nxgl_size_s m_windowSize; /**< The size of the calculator window */ + struct nxgl_size_s m_keypadSize; /**< The size the calculator keypad */ + struct nxgl_size_s m_buttonSize; /**< The size of one calculator button */ + struct nxgl_size_s m_textSize; /**< The size of the calculator textbox */ + struct nxgl_point_s m_keypadPos; /**< The position the calculator keypad */ + struct nxgl_point_s m_textPos; /**< The position of the calculator textbox */ + uint64_t m_operand; /**< Previously entered operand */ + uint64_t m_accum; /**< The current accumulated value */ + uint64_t m_memory; /**< The current value in memory */ + uint8_t m_pending; /**< The pending operation */ + bool m_hexMode; /**< True if in hex mode */ + + /** + * Select the geometry of the calculator given the current window size. + * Only called as part of construction. + */ + + inline void setGeometry(void); + + /** + * Create the calculator keypad. Only start as part of the applicaiton + * start method. + */ + + inline bool createCalculator(void); + + /** + * Applies labels to the keys. + */ + + void labelKeypad(void); + + /** + * Show the current value of the accumulator. + */ + + void updateText(void); + + /** + * Called when the window minimize button is pressed. + */ + + void minimize(void); + + /** + * Called when the window minimize close is pressed. + */ + + void close(void); + + /** + * Handle a widget action event. For CImage, this is a button pre- + * release event. + * + * @param e The event data. + */ + + void handleActionEvent(const NXWidgets::CWidgetEventArgs &e); + + public: + /** + * CHexCalculator constructor + * + * @param window. The application window + * + * @param taskbar. A pointer to the parent task bar instance + * @param window. The window to be used by this application. + */ + + CHexCalculator(CTaskbar *taskbar, CApplicationWindow *window); + + /** + * CHexCalculator destructor + */ + + ~CHexCalculator(void); + + /** + * Each implementation of IApplication must provide a method to recover + * the contained CApplicationWindow instance. + */ + + IApplicationWindow *getWindow(void) const; + + /** + * Get the icon associated with the application + * + * @return An instance if IBitmap that may be used to rend the + * application's icon. This is an new IBitmap instance that must + * be deleted by the caller when it is no long needed. + */ + + NXWidgets::IBitmap *getIcon(void); + + /** + * Get the name string associated with the application + * + * @return A copy if CNxString that contains the name of the application. + */ + + NXWidgets::CNxString getName(void); + + /** + * Start the application (perhaps in the minimized state). + * + * @return True if the application was successfully started. + */ + + bool run(void); + + /** + * Stop the application. + */ + + void stop(void); + + /** + * Destroy the application and free all of its resources. This method + * will initiate blocking of messages from the NX server. The server + * will flush the window message queue and reply with the blocked + * message. When the block message is received by CWindowMessenger, + * it will send the destroy message to the start window task which + * will, finally, safely delete the application. + */ + + void destroy(void); + + /** + * The application window is hidden (either it is minimized or it is + * maximized, but not at the top of the hierarchy + */ + + void hide(void); + + /** + * Redraw the entire window. The application has been maximized or + * otherwise moved to the top of the hierarchy. This method is call from + * CTaskbar when the application window must be displayed + */ + + void redraw(void); + + /** + * Report of this is a "normal" window or a full screen window. The + * primary purpose of this method is so that window manager will know + * whether or not it show draw the task bar. + * + * @return True if this is a full screen window. + */ + + bool isFullScreen(void) const; + }; + + class CHexCalculatorFactory : public IApplicationFactory + { + private: + CTaskbar *m_taskbar; /**< The taskbar */ + + public: + /** + * CHexCalculatorFactory Constructor + * + * @param taskbar. The taskbar instance used to terminate calibration + */ + + CHexCalculatorFactory(CTaskbar *taskbar); + + /** + * CHexCalculatorFactory Destructor + */ + + inline ~CHexCalculatorFactory(void) { } + + /** + * Create a new instance of an CHexCalculator (as IApplication). + */ + + IApplication *create(void); + + /** + * Get the icon associated with the application + * + * @return An instance if IBitmap that may be used to rend the + * application's icon. This is an new IBitmap instance that must + * be deleted by the caller when it is no long needed. + */ + + NXWidgets::IBitmap *getIcon(void); + }; +} +#endif // __cplusplus + +#endif // __INCLUDE_CHEXCALCULATOR_HXX diff --git a/NxWidgets/nxwm/include/cstartwindow.hxx b/NxWidgets/nxwm/include/cstartwindow.hxx index c7a812abf..671b01087 100644 --- a/NxWidgets/nxwm/include/cstartwindow.hxx +++ b/NxWidgets/nxwm/include/cstartwindow.hxx @@ -172,7 +172,8 @@ namespace NxWM void removeAllApplications(void); /** - * Handle a widget action event. For CImage, this is a mouse button pre-release event. + * Handle a widget action event. For CButtonArray, this is a mouse + * button pre-release event. * * @param e The event data. */ diff --git a/NxWidgets/nxwm/include/nxwmconfig.hxx b/NxWidgets/nxwm/include/nxwmconfig.hxx index 8a7700af4..ad51e7884 100644 --- a/NxWidgets/nxwm/include/nxwmconfig.hxx +++ b/NxWidgets/nxwm/include/nxwmconfig.hxx @@ -509,6 +509,24 @@ # define CONFIG_NXWM_CALIBRATION_LISTENERSTACK 2048 #endif +/* Hexcalculator applications ***********************************************/ +/** + * Calibration display settings: + * + * CONFIG_NXWM_HEXCALCULATOR_BACKGROUNDCOLOR - The background color of the + * calculator display. Default: Same as CONFIG_NXWM_DEFAULT_BACKGROUNDCOLOR + * CONFIG_NXWM_HEXCALCULATOR_ICON - The ICON to use for the hex calculator + * application. Default: NxWM::g_calculatorBitmap + */ + +#ifndef CONFIG_NXWM_HEXCALCULATOR_BACKGROUNDCOLOR +# define CONFIG_NXWM_HEXCALCULATOR_BACKGROUNDCOLOR CONFIG_NXWM_DEFAULT_BACKGROUNDCOLOR +#endif + +#ifndef CONFIG_NXWM_HEXCALCULATOR_ICON +# define CONFIG_NXWM_HEXCALCULATOR_ICON NxWM::g_calculatorBitmap +#endif + /**************************************************************************** * Global Function Prototypes ****************************************************************************/ diff --git a/NxWidgets/nxwm/include/nxwmglyphs.hxx b/NxWidgets/nxwm/include/nxwmglyphs.hxx index 64f9a5262..7db02fd17 100644 --- a/NxWidgets/nxwm/include/nxwmglyphs.hxx +++ b/NxWidgets/nxwm/include/nxwmglyphs.hxx @@ -57,6 +57,7 @@ namespace NxWM { + extern const struct NXWidgets::SRlePaletteBitmap g_calculatorBitmap; extern const struct NXWidgets::SRlePaletteBitmap g_calibrationBitmap; extern const struct NXWidgets::SRlePaletteBitmap g_cmdBitmap; extern const struct NXWidgets::SRlePaletteBitmap g_minimizeBitmap; |