colorsel.h

Go to the documentation of this file.
00001 /**
00002  * \file mgui/colorsel.h
00003  * \brief MGUI::FORM_COLORSELECTOR class definition
00004  *
00005  * \if NODOC
00006  * $Id: colorsel.h_v 1.10 2003/10/03 19:58:19 linux32build!build Exp $
00007  *
00008  * $Log: colorsel.h_v $
00009  * Revision 1.10  2003/10/03 19:58:19  linux32build!build
00010  * Doxygen
00011  *
00012  * Revision 1.9  2003/09/15 13:49:32  fileserver!dwilliss
00013  * Doxygen
00014  *
00015  * Revision 1.8  2003/04/09 20:47:26  dwilliss
00016  * Don't use _T in templates. Mac ctypes.h defines a global _T
00017  *
00018  * Revision 1.7  2003/01/14 16:40:30  mju
00019  * Use PANE_BASE for parent.
00020  *
00021  * Revision 1.6  2003/01/07 15:03:17  mju
00022  * Use v_ for canvas virtual methods.
00023  *
00024  * Revision 1.5  2002/12/02 17:13:10  mju
00025  * Allow palette selection.
00026  *
00027  * Revision 1.4  2002/10/14 13:46:27  mju
00028  * Rename ctrl_canvas as 'canvas'.
00029  *
00030  * Revision 1.3  2002/10/11 21:39:06  mju
00031  * Use CANVAS so works for X and MFC.
00032  *
00033  * Revision 1.2  2002/10/09 16:52:32  mju
00034  * Moved to 'mgui' folder.
00035  *
00036  * Revision 1.1  2002/08/13 16:39:43  mju
00037  * Initial revision
00038  * \endif
00039 **/
00040 
00041 #ifndef  INC_MGUI_COLORSEL_H
00042 #define  INC_MGUI_COLORSEL_H
00043 
00044 #ifndef  INC_MGUI_COLORBTN_H
00045 #include <mgui/colorbtn.h>
00046 #endif
00047 
00048 #ifndef  INC_MGUI_CANVAS_H
00049 #include <mgui/canvas.h>
00050 #endif
00051 
00052 class COLORPALETTE;
00053 
00054 namespace MGUI {
00055 
00056 //! Form for color selection.
00057 //! This form includes a "mini-palette", a pushbutton for choosing color, and an
00058 //! optional "edit" control for tranparency.
00059 class FORM_COLORSELECTOR : public MGUI::FORM_COMPOSITE {
00060    public:
00061 
00062       enum FORMSTYLE {
00063          FORMSTYLE_Default =           0x00,
00064          FORMSTYLE_EditTransparency =  0x01
00065          };
00066 
00067       //! Constructor.
00068       FORM_COLORSELECTOR (
00069          );
00070 
00071       //! Destructor.
00072       virtual ~FORM_COLORSELECTOR (
00073          );
00074 
00075       //! Create the form.
00076       void Create (
00077          MGUI::LAYOUT_PANE_BASE& ParentPane,
00078          FORMSTYLE formstyle = FORMSTYLE_Default
00079          );
00080 
00081       //! Get current color.
00082       const COLOR& GetColor (
00083          ) const { return (m_color); }
00084 
00085       //! Determine if form has been created.
00086       //! @return true if created, false if not.
00087       virtual bool IsCreated (
00088          ) const;
00089 
00090       //! Determine if form is enabled for keyboard or mouse input.
00091       //! @return true if enabled, false if not, or if not yet created.
00092       virtual bool IsEnabled (
00093          ) const;
00094 
00095       //! Set color.
00096       void SetColor (
00097          const COLOR& color,
00098          bool notify = true
00099          );
00100 
00101       //! Set whether mouse or keyboard input to form is allowed.
00102       virtual void SetEnabled (
00103          bool enabled = true
00104          );
00105 
00106       //! Set transparency factor.
00107       void SetTransparency (
00108          UINT8 transparency,              //!< 0 = opaque, 255 = invisible.
00109          bool notify = true
00110          );
00111 
00112       //! Set whether form is visible or not.
00113       virtual void SetVisible (
00114          bool visible = true
00115          );
00116 
00117    protected:
00118 
00119       //! Called when user changes color.
00120       virtual void OnChangeColor (
00121          );
00122 
00123    private:
00124       #ifndef GENERATING_DOXYGEN_OUTPUT
00125       class CANVAS_PALETTE : public MGUI::CANVAS {
00126          public:
00127             CANVAS_PALETTE (
00128                FORM_COLORSELECTOR& form
00129                ): m_form(form) { }
00130          private:
00131             FORM_COLORSELECTOR& m_form;
00132             virtual void v_OnLeftDown (MGUI::POINT point, KEYSTATE keystate);
00133          };
00134       friend class CANVAS_PALETTE;
00135 
00136       class EDIT_TRANSPARENCY : public FORM_EDIT_NUMBER {
00137          public:
00138             EDIT_TRANSPARENCY (
00139                FORM_COLORSELECTOR& form
00140                ): m_form(form) { }
00141          private:
00142             FORM_COLORSELECTOR& m_form;
00143             virtual void OnChangeValue ();
00144          };
00145 
00146       COLOR m_color;
00147       int m_palindex;
00148       int m_cellsize;
00149       int m_x0;
00150       int m_y0;
00151       CANVAS_PALETTE m_PaletteCanvas;
00152       CTRL_PUSHBUTTON_T<FORM_COLORSELECTOR> m_PalettePB;
00153       FORM_COLORBUTTON_T<FORM_COLORSELECTOR> m_ColorBtn;
00154       EDIT_TRANSPARENCY m_TransparencyEN;
00155       const COLORPALETTE *m_pColorPalette;
00156 
00157       void DrawHighlight (int palindex, bool set);
00158       void DrawPalette ();
00159       void OnCmdColor ();
00160       void OnCmdPalette ();
00161       void OnPaletteLeftDown (MGUI::POINT point);
00162 
00163       FORM_COLORSELECTOR (const FORM_COLORSELECTOR&);
00164       FORM_COLORSELECTOR& operator= (const FORM_COLORSELECTOR&);
00165       #endif // GENERATING_DOXYGEN_OUTPUT
00166    };
00167 
00168 DEFINE_ENUM_OPERATORS(FORM_COLORSELECTOR::FORMSTYLE);
00169 
00170 
00171 //! Color selector form template.
00172 //! This template allows a method in a 'container' class to be called when the color is changed,
00173 //! rather than requiring that a subclass be defined with the OnChangeColor() virtual method overridden.
00174 template <class _CT> class FORM_COLORSELECTOR_T : public MGUI::FORM_COLORSELECTOR {
00175    public:
00176 
00177       //! Constructor.
00178       FORM_COLORSELECTOR_T (
00179          ): m_pContainer(0), m_pfOnChangeColor(0) { }
00180 
00181       //! Create the form.
00182       void Create (
00183          MGUI::LAYOUT_PANE_BASE& ParentPane,
00184          _CT *pContainer,                       //!< Pointer to callback container class
00185          void (_CT::*pfOnChangeColor)(),        //! Callback function pointer
00186          FORMSTYLE formstyle = FORMSTYLE_Default
00187          ) {
00188          m_pContainer = pContainer;
00189          m_pfOnChangeColor = pfOnChangeColor;
00190          FORM_COLORSELECTOR::Create(ParentPane,formstyle);
00191          return;
00192          }
00193 
00194    protected:
00195 
00196       //! Called when user changes color.
00197       virtual void OnChangeColor (
00198          ) { (m_pContainer->*m_pfOnChangeColor)(); }
00199 
00200    private:
00201       #ifndef GENERATING_DOXYGEN_OUTPUT
00202       _CT *m_pContainer;
00203       void (_CT::*m_pfOnChangeColor)();
00204       #endif // GENERATING_DOXYGEN_OUTPUT
00205    };
00206 
00207 };    // End of MGUI namespace
00208 
00209 
00210 #endif   // INC_MGUI_COLORSEL_H

Generated on Tue Dec 14 13:18:15 2004 for TNTsdk by  doxygen 1.3.8-20040913