00001
00002
00003
00004
00005
00008
00009 #ifndef _ROKU_INCLUDE_CASCADE_WIDGETS_CASCADEBUTTONWIDGET_H
00010 #define _ROKU_INCLUDE_CASCADE_WIDGETS_CASCADEBUTTONWIDGET_H
00011
00012 #include <cascade/widgets/CascadeWidget.h>
00013 #include <cascade/util/CascadeString.h>
00014
00025 class CascadeButtonWidget : public CascadeWidget
00026 {
00027 public:
00028 CascadeButtonWidget();
00032 virtual ~CascadeButtonWidget();
00036 public:
00037 enum State {
00038 kOff = 0,
00039 kOn = 1
00040 };
00045 enum TextVAlign {
00046 kTextAlignAbove = 0,
00047 kTextAlignTop = 1,
00048 kTextAlignMiddle = 2,
00049 kTextAlignBottom = 3 ,
00050 kTextAlignBelow = 4
00051 };
00057
00058 enum { kVAlignSpacing = 2 };
00059
00060 enum TextHAlign {
00061 kTextAlignLeft = 0,
00062 kTextAlignCenter = 1,
00063 kTextAlignRight = 2
00064 };
00070 public:
00071 inline State GetState();
00077
00078 inline void SetState(const State & state);
00084
00085 void ToggleState();
00091
00092 void SetBitmapUp(CascadeBitmap * pBitmap, CascadeWidget::Scheme scheme);
00103 void SetBitmapDown(CascadeBitmap * pBitmap, CascadeWidget::Scheme scheme);
00114
00115 void SetText(const CascadeString & string);
00121
00122 inline void SetTextAlignment(TextVAlign vAlign, TextHAlign hAlign = kTextAlignCenter);
00131
00132 typedef void (StateChangeCallback)(const CascadeButtonWidget * pButton, const State & newState, void * pClientData);
00144
00145 void RegisterStateChangeCallback(StateChangeCallback * pCallback, void * pClientData);
00155
00156 protected:
00157 virtual void OnStateChange(const State & newState);
00165
00166 protected:
00167 virtual bool OnKeyDown(u32 nKey);
00175
00176 virtual void OnPaint(CascadeBitmap & bitmap);
00187
00188 protected:
00189 State m_state;
00193 CascadeString m_text;
00197 CascadeBitmap * m_pBitmapsUp[CascadeWidget::kNumSchemes];
00202 CascadeBitmap * m_pBitmapsDown[CascadeWidget::kNumSchemes];
00207 StateChangeCallback * m_pCallback;
00211 void * m_pClientData;
00215 TextHAlign m_textHAlign;
00219 TextVAlign m_textVAlign;
00223 private:
00224 CascadeFont m_font;
00225 CascadeDims m_dimsText;
00226 };
00227
00229
00230 inline CascadeButtonWidget::State
00231 CascadeButtonWidget::GetState()
00232 {
00233 return m_state;
00234 }
00235
00236 inline void
00237 CascadeButtonWidget::SetState(const CascadeButtonWidget::State & state)
00238 {
00239 if (state != m_state) ToggleState();
00240 }
00241
00242 inline void
00243 CascadeButtonWidget::SetTextAlignment(TextVAlign vAlign, TextHAlign hAlign)
00244 {
00245 m_textVAlign = vAlign;
00246 m_textHAlign = hAlign;
00247 }
00248
00249 #endif // #ifndef _ROKU_INCLUDE_CASCADE_WIDGETS_CASCADEBUTTONWIDGET_H
00250
00252
00254
00255
00256