Crazy Eddies GUI System 0.7.6
CEGUISpinner.h
00001 /***********************************************************************
00002     filename:   CEGUISpinner.h
00003     created:    3/2/2005
00004     author:             Paul D Turner
00005 *************************************************************************/
00006 /***************************************************************************
00007  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
00008  *
00009  *   Permission is hereby granted, free of charge, to any person obtaining
00010  *   a copy of this software and associated documentation files (the
00011  *   "Software"), to deal in the Software without restriction, including
00012  *   without limitation the rights to use, copy, modify, merge, publish,
00013  *   distribute, sublicense, and/or sell copies of the Software, and to
00014  *   permit persons to whom the Software is furnished to do so, subject to
00015  *   the following conditions:
00016  *
00017  *   The above copyright notice and this permission notice shall be
00018  *   included in all copies or substantial portions of the Software.
00019  *
00020  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00021  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00022  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00023  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
00024  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00025  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00026  *   OTHER DEALINGS IN THE SOFTWARE.
00027  ***************************************************************************/
00028 #ifndef _CEGUISpinner_h_
00029 #define _CEGUISpinner_h_
00030 
00031 #include "../CEGUIBase.h"
00032 #include "../CEGUIWindow.h"
00033 #include "CEGUISpinnerProperties.h"
00034 
00035 #if defined(_MSC_VER)
00036 #       pragma warning(push)
00037 #       pragma warning(disable : 4251)
00038 #endif
00039 
00040 
00041 // Start of CEGUI namespace section
00042 namespace CEGUI
00043 {
00052     class CEGUIEXPORT Spinner : public Window
00053     {
00054     public:
00059         enum TextInputMode
00060         {
00061             FloatingPoint,  
00062             Integer,        
00063             Hexadecimal,    
00064             Octal           
00065         };
00066 
00067         /*************************************************************************
00068             Events system constants
00069         *************************************************************************/
00070         static const String WidgetTypeName;                 
00071         static const String EventNamespace;                 
00072 
00077         static const String EventValueChanged;
00083         static const String EventStepChanged;
00089         static const String EventMaximumValueChanged;
00095         static const String EventMinimumValueChanged;
00101         static const String EventTextInputModeChanged;
00102 
00103         /*************************************************************************
00104             Component widget name suffix strings
00105         *************************************************************************/
00106         static const String EditboxNameSuffix;          
00107         static const String IncreaseButtonNameSuffix;   
00108         static const String DecreaseButtonNameSuffix;   
00109 
00110         /*************************************************************************
00111             Object Construction and Destruction
00112         *************************************************************************/
00117         Spinner(const String& type, const String& name);
00118 
00123         virtual ~Spinner(void);
00124 
00135         void initialiseComponents(void);
00136 
00137 
00138         /*************************************************************************
00139                 Accessors
00140         *************************************************************************/
00148         double getCurrentValue(void) const;
00149 
00158         double getStepSize(void) const;
00159 
00167         double getMaximumValue(void) const;
00168 
00176         double getMinimumValue(void) const;
00177 
00186         TextInputMode getTextInputMode(void) const;
00187 
00188         /*************************************************************************
00189                 Manipulators
00190         *************************************************************************/
00201         void setCurrentValue(double value);
00202 
00214         void setStepSize(double step);
00215 
00226         void setMaximumValue(double maxValue);
00227 
00238         void setMinimumValue(double minVaue);
00239 
00251         void setTextInputMode(TextInputMode mode);
00252 
00253     protected:
00254         /*************************************************************************
00255                 Constants
00256         *************************************************************************/
00257         static const String FloatValidator;      
00258         static const String IntegerValidator;    
00259         static const String HexValidator;        
00260         static const String OctalValidator;      
00261 
00262         /*************************************************************************
00263                 Protected Implementation Methods
00264         *************************************************************************/
00274         virtual double getValueFromText(void) const;
00275 
00283         virtual String getTextFromValue(void) const;
00284 
00285 
00296                 virtual bool    testClassName_impl(const String& class_name) const
00297                 {
00298                         if (class_name=="Spinner")      return true;
00299                         return Window::testClassName_impl(class_name);
00300                 }
00301 
00313         PushButton* getIncreaseButton() const;
00314 
00326         PushButton* getDecreaseButton() const;
00327 
00338         Editbox* getEditbox() const;
00339 
00340         /*************************************************************************
00341                 Overrides for Event handler methods
00342         *************************************************************************/
00343         virtual void onFontChanged(WindowEventArgs& e);
00344         virtual void onTextChanged(WindowEventArgs& e);
00345         virtual void onActivated(ActivationEventArgs& e);
00346 
00347         /*************************************************************************
00348                 New Event handler methods
00349         *************************************************************************/
00360         virtual void onValueChanged(WindowEventArgs& e);
00361 
00372         virtual void onStepChanged(WindowEventArgs& e);
00373 
00384         virtual void onMaximumValueChanged(WindowEventArgs& e);
00385 
00396         virtual void onMinimumValueChanged(WindowEventArgs& e);
00397 
00408         virtual void onTextInputModeChanged(WindowEventArgs& e);
00409 
00410         /*************************************************************************
00411                 Internal event listener methods
00412         *************************************************************************/
00413         bool handleIncreaseButton(const EventArgs& e);
00414         bool handleDecreaseButton(const EventArgs& e);
00415         bool handleEditTextChange(const EventArgs& e);
00416 
00417 
00418         /*************************************************************************
00419                 Data Fields
00420         *************************************************************************/
00421         double   d_stepSize;     
00422         double   d_currentValue; 
00423         double   d_maxValue;     
00424         double   d_minValue;     
00425         TextInputMode   d_inputMode;    
00426 
00427     private:
00428         /*************************************************************************
00429                 Static properties for the Spinner widget
00430         *************************************************************************/
00431         static SpinnerProperties::CurrentValue  d_currentValueProperty;
00432         static SpinnerProperties::StepSize      d_stepSizeProperty;
00433         static SpinnerProperties::MaximumValue  d_maxValueProperty;
00434         static SpinnerProperties::MinimumValue  d_minValueProperty;
00435         static SpinnerProperties::TextInputMode d_textInputModeProperty;
00436 
00437         /*************************************************************************
00438                 Private Implementation Methods
00439         *************************************************************************/
00447         void    addSpinnerProperties(void);
00448     };
00449 
00450 } // End of  CEGUI namespace section
00451 
00452 #if defined(_MSC_VER)
00453 #       pragma warning(pop)
00454 #endif
00455 
00456 #endif  // end of guard _CEGUISpinner_h_