00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef INC_MGUI_COLORBTN_H
00030 #define INC_MGUI_COLORBTN_H
00031
00032 #ifndef INC_MGUI_CTRL_H
00033 #include <mgui/ctrl.h>
00034 #endif
00035
00036 namespace MGUI {
00037
00038
00039
00040
00041 class CTRL_COLORBUTTON : public MGUI::CTRL {
00042 public:
00043
00044 enum STYLE {
00045 STYLE_Default = 0x0000,
00046 STYLE_OutputOnly = 0x0001,
00047 STYLE_AllowTransparent = 0x0002
00048 };
00049
00050
00051 CTRL_COLORBUTTON (
00052 );
00053
00054
00055 virtual ~CTRL_COLORBUTTON (
00056 );
00057
00058
00059 void Create (
00060 MGUI::LAYOUT_PANE_BASE& ParentPane,
00061 const COLOR& dftcolor,
00062 STYLE style = STYLE_Default,
00063 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00064 );
00065
00066
00067 const COLOR& GetColor (
00068 ) const { return (m_color); }
00069
00070
00071 COLORREF GetColorRef (
00072 ) const { return (m_color.GetColorRef()); }
00073
00074
00075 void SetColor (
00076 const COLOR& color,
00077 bool notify = true
00078 );
00079
00080
00081 void SetColor (
00082 const COLORREF color,
00083 bool notify = true
00084 ) { COLOR c; c.SetColorRef(color); SetColor(c, notify); }
00085
00086 protected:
00087
00088
00089
00090 virtual void OnChangeColor (
00091 );
00092
00093 private:
00094 #ifndef GENERATING_DOXYGEN_OUTPUT
00095
00096 #ifdef WIN32_MFC
00097 class MyButton : public CButton {
00098 public:
00099 MyButton (
00100 CTRL_COLORBUTTON& guiform
00101 ): m_guiform(guiform)
00102 { }
00103 protected:
00104 afx_msg void OnClicked ();
00105 DECLARE_MESSAGE_MAP()
00106 private:
00107 CTRL_COLORBUTTON& m_guiform;
00108 virtual void DrawItem (DRAWITEMSTRUCT*);
00109 };
00110 MyButton m_ctrl;
00111 #endif
00112
00113 #ifdef X_NATIVE
00114 Pixel m_pixel;
00115 #endif
00116
00117 COLOR m_color;
00118 STYLE m_style;
00119
00120 #ifdef X_NATIVE
00121 static void CCB_ChangeColorMap (void*, UINT8*);
00122 static void CB_PushButton (Widget, CTRL_COLORBUTTON*, void*);
00123 void UpdateButtonColor ();
00124 #endif
00125
00126 CTRL_COLORBUTTON (const CTRL_COLORBUTTON&);
00127 CTRL_COLORBUTTON& operator= (const CTRL_COLORBUTTON&);
00128 #endif
00129 };
00130 DEFINE_ENUM_OPERATORS(CTRL_COLORBUTTON::STYLE);
00131
00132
00133
00134
00135 template <class _CT> class CTRL_COLORBUTTON_T : public MGUI::CTRL_COLORBUTTON {
00136 public:
00137
00138
00139 CTRL_COLORBUTTON_T (
00140 ): m_pContainer(0), m_pfOnChangeColor(0) { }
00141
00142
00143 void Create (
00144 MGUI::LAYOUT_PANE_BASE& ParentPane,
00145 _CT *pContainer,
00146 void (_CT::*pfOnChangeColor)(),
00147 const COLOR& dftcolor,
00148 STYLE style = STYLE_Default,
00149 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00150 ) {
00151 m_pContainer = pContainer;
00152 m_pfOnChangeColor = pfOnChangeColor;
00153 CTRL_COLORBUTTON::Create(ParentPane,dftcolor,style,sizealign);
00154 }
00155
00156 private:
00157 #ifndef GENERATING_DOXYGEN_OUTPUT
00158 _CT *m_pContainer;
00159 void (_CT::*m_pfOnChangeColor)();
00160
00161 virtual void OnChangeColor (
00162 ) { (m_pContainer->*m_pfOnChangeColor)(); }
00163 #endif // GENERATING_DOXYGEN_OUTPUT
00164 };
00165
00166
00167
00168
00169
00170 class FORM_COLORBUTTON : public MGUI::FORM_COMPOSITE {
00171 public:
00172
00173
00174 FORM_COLORBUTTON (
00175 );
00176
00177
00178 virtual ~FORM_COLORBUTTON (
00179 );
00180
00181
00182 void Create (
00183 MGUI::LAYOUT_PANE_BASE& ParentPane,
00184 const char* label,
00185 const COLOR& dftcolor,
00186 MGUI::CTRL_COLORBUTTON::STYLE buttonstyle = MGUI::CTRL_COLORBUTTON::STYLE_Default,
00187 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00188 MGUI::CTRL_LABEL::STYLE labelstyle = MGUI::CTRL_LABEL::STYLE_LeftNoWrap
00189 );
00190
00191
00192 void Create (
00193 MGUI::LAYOUT_PANE_BASE& ParentPane,
00194 const UNICODE *label,
00195 const COLOR& dftcolor,
00196 MGUI::CTRL_COLORBUTTON::STYLE buttonstyle = MGUI::CTRL_COLORBUTTON::STYLE_Default,
00197 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00198 MGUI::CTRL_LABEL::STYLE labelstyle = MGUI::CTRL_LABEL::STYLE_LeftNoWrap
00199 );
00200
00201
00202 const COLOR& GetColor (
00203 ) const { return (m_button.GetColor()); }
00204
00205
00206 COLORREF GetColorRef (
00207 ) const { return (m_button.GetColorRef()); }
00208
00209
00210
00211 MGUI::CTRL_LABEL& GetLabel (
00212 ) { return (m_label); }
00213
00214
00215 void SetColor (
00216 const COLOR& color,
00217 bool notify = true
00218 ) { m_button.SetColor(color,notify); }
00219
00220
00221 void SetColor (
00222 const COLORREF color,
00223 bool notify = true
00224 ) { m_button.SetColor(color,notify); }
00225
00226
00227 void SetLabel (
00228 const char* label
00229 ) { m_label.SetLabel(label); }
00230
00231
00232 void SetLabel (
00233 const UNICODE* label
00234 ) { m_label.SetLabel(label); }
00235
00236 protected:
00237
00238
00239
00240 virtual void OnChangeColor (
00241 );
00242
00243 private:
00244 #ifndef GENERATING_DOXYGEN_OUTPUT
00245
00246 CTRL_COLORBUTTON_T<FORM_COLORBUTTON> m_button;
00247 MGUI::CTRL_LABEL m_label;
00248
00249 FORM_COLORBUTTON (const FORM_COLORBUTTON&);
00250 FORM_COLORBUTTON& operator= (const FORM_COLORBUTTON&);
00251 #endif // GENERATING_DOXYGEN_OUTPUT
00252 };
00253
00254
00255
00256
00257 template <class _CT> class FORM_COLORBUTTON_T : public MGUI::FORM_COLORBUTTON {
00258 public:
00259
00260
00261 FORM_COLORBUTTON_T (
00262 ): m_pContainer(0), m_pfOnChangeColor(0) { }
00263
00264
00265 void Create (
00266 MGUI::LAYOUT_PANE_BASE& ParentPane,
00267 const char* label,
00268 _CT *pContainer,
00269 void (_CT::*pfOnChangeColor)(),
00270 const COLOR& dftcolor,
00271 MGUI::CTRL_COLORBUTTON::STYLE buttonstyle = MGUI::CTRL_COLORBUTTON::STYLE_Default,
00272 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00273 MGUI::CTRL_LABEL::STYLE labelstyle = MGUI::CTRL_LABEL::STYLE_LeftNoWrap
00274 ) {
00275 m_pContainer = pContainer;
00276 m_pfOnChangeColor = pfOnChangeColor;
00277 FORM_COLORBUTTON::Create(ParentPane,label,dftcolor,buttonstyle,sizealign,labelstyle);
00278 }
00279
00280
00281 void Create (
00282 MGUI::LAYOUT_PANE_BASE& ParentPane,
00283 const UNICODE *label,
00284 _CT *pContainer,
00285 void (_CT::*pfOnChangeColor)(),
00286 const COLOR& dftcolor,
00287 MGUI::CTRL_COLORBUTTON::STYLE buttonstyle = MGUI::CTRL_COLORBUTTON::STYLE_Default,
00288 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00289 MGUI::CTRL_LABEL::STYLE labelstyle = MGUI::CTRL_LABEL::STYLE_LeftNoWrap
00290 ) {
00291 m_pContainer = pContainer;
00292 m_pfOnChangeColor = pfOnChangeColor;
00293 FORM_COLORBUTTON::Create(ParentPane,label,dftcolor,buttonstyle,sizealign,labelstyle);
00294 }
00295
00296 private:
00297 #ifndef GENERATING_DOXYGEN_OUTPUT
00298 _CT *m_pContainer;
00299 void (_CT::*m_pfOnChangeColor)();
00300
00301 virtual void OnChangeColor (
00302 ) { (m_pContainer->*m_pfOnChangeColor)(); }
00303 #endif // GENERATING_DOXYGEN_OUTPUT
00304 };
00305
00306
00307
00308 }
00309
00310 #endif // INC_MGUI_COLORBTN_H