00001
00102 #ifndef INC_MGUI_CTRL_H
00103 #define INC_MGUI_CTRL_H
00104
00105 #ifndef INC_MGUI_FORM_H
00106 #include <mgui/form.h>
00107 #endif
00108
00109 #ifndef INC_MGUI_KEYSTATE_H
00110 #include <mgui/keystate.h>
00111 #endif
00112
00113 #ifndef INC_MI32_RECT_H
00114 #include <mi32/rect.h>
00115 #endif
00116
00117 #ifndef INC_MI32_ICONID_H
00118 #include <mi32/iconid.h>
00119 #endif
00120
00121 #ifndef INC_MI32_XBASE_H
00122 #include <mi32/xbase.h>
00123 #endif
00124
00125
00126 #ifndef GENERATING_DOXYGEN_OUTPUT
00127
00128 struct COLOR;
00129 namespace MGUI {
00130 class CTRL_TOOLBAR;
00131 class CTRL_TOOLTIP;
00132 class SHELL;
00133 class ICON;
00134 }
00135 #endif
00136
00137
00138 namespace MGUI {
00139
00140
00161 class CTRL : public MGUI::FORM {
00162 public:
00163
00164 enum SHADOW {
00165 SHADOW_None = 0,
00166 SHADOW_Black,
00167 SHADOW_White,
00168 SHADOW_In,
00169 SHADOW_Out
00170 };
00171
00174 typedef fastdelegate::FastDelegate<void(int, int)> DELEGATE_ONSIZE;
00175
00177 static const COLOR& GetBackgroundColor (
00178 );
00179
00183 static void ProcessWidgetEvents (
00184 Widget widget
00185 );
00186
00188 static void SetWidgetShadow (
00189 Widget widget,
00190 SHADOW shadow
00191 );
00192
00194 virtual ~CTRL (
00195 ) = 0;
00196
00198 void GetBackgroundColor (
00199 COLOR& color
00200 ) const;
00201
00203 void GetDimensions (
00204 MGUI::POINT& dimensions
00205 ) const;
00206
00208 MDLGPARENT GetDlgParent (
00209 ) const;
00210
00213 SHELL* GetShell (
00214 ) const;
00215
00218 CTRL_TOOLTIP* GetToolTip (
00219 ) const;
00220
00224 Widget GetWidget (
00225 ) const { return (m_widget); }
00226
00229 void Invalidate (
00230 bool erase = true
00231 );
00232
00235 virtual bool IsCreated (
00236 ) const;
00237
00240 virtual bool IsEnabled (
00241 ) const;
00242
00245 bool IsVisible (
00246 ) const;
00247
00249 void SetBackgroundColor (
00250 const COLOR& color
00251 );
00252
00254 void SetDimensions (
00255 MGUI::POINT dimensions
00256 );
00257
00259 virtual void SetEnabled (
00260 bool enabled = true
00261 );
00262
00264 void SetForegroundColor (
00265 const COLOR& color
00266 );
00267
00269 void SetMinimumSize (
00270 int width,
00271 int height
00272 );
00273
00277 void SetSizeByKey (
00278 const char *SizeKey
00279 );
00280
00284 void SetToolTipString (
00285 const MISTRING& string
00286 );
00287
00289 virtual void SetVisible (
00290 bool visible = true
00291 );
00292
00294 void UpdateWindow (
00295 );
00296
00297 protected:
00298
00299
00300 static void SetShadowArgs (XTARGS& args, SHADOW shadow);
00301
00302 Widget m_widget;
00303
00305 CTRL (
00306 ): m_widget(0) { }
00307
00309 void AddDestroyCallback (
00310 );
00311
00316 virtual void v_OnDestroyWidget (
00317 );
00318
00319 private:
00320 #ifndef GENERATING_DOXYGEN_OUTPUT
00321
00322 static void CB_Destroy (Widget, CTRL*, void*);
00323
00324
00325 virtual void v_SetFocus () const;
00326
00327 CTRL (const CTRL&);
00328 CTRL& operator= (const CTRL&);
00329 #endif // GENERATING_DOXYGEN_OUTPUT
00330 };
00331
00332
00333
00335 class CTRL_LABEL : public MGUI::CTRL {
00336 public:
00337
00338 enum STYLE {
00339 STYLE_LeftNoWrap,
00340 STYLE_Left,
00341 STYLE_Center,
00342 STYLE_Right
00343 };
00344
00346 CTRL_LABEL ();
00347
00348 ~CTRL_LABEL ();
00349
00351 void Create (
00352 MGUI::LAYOUT_PANE_BASE& ParentPane,
00353 const MISTRING& label,
00354 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00355 STYLE style = STYLE_LeftNoWrap
00356 );
00357
00359 void Create (
00360 MGUI::LAYOUT_PANE_BASE& ParentPane,
00361 const MGUI::ICON& icon,
00362 const MISTRING& tooltip
00363 );
00364
00366 void Create (
00367 MGUI::LAYOUT_PANE_BASE& ParentPane,
00368 ICONID iconid,
00369 const MISTRING& tooltip,
00370 UINT16 iconsize = 0
00371 );
00372
00374 void SetIcon (
00375 const MGUI::ICON& icon
00376 );
00377
00379 void SetIcon (
00380 ICONID iconid,
00381 UINT16 iconsize = 0
00382 );
00383
00385 void SetLabel (
00386 const MISTRING& string
00387 );
00388
00389 private:
00390 #ifndef GENERATING_DOXYGEN_OUTPUT
00391
00392 Pixmap m_PixmapNormal;
00393 Pixmap m_PixmapDisabled;
00394
00395 void CreateIconX (
00396 MGUI::LAYOUT_PANE_BASE& ParentPane,
00397 const MGUI::ICON& icon
00398 );
00399
00400 void CreateX (
00401 MGUI::LAYOUT_PANE_BASE& ParentPane,
00402 XTARGS& args,
00403 const char *name,
00404 MGUI::LAYOUT_SIZEALIGN sizealign,
00405 STYLE style
00406 );
00407
00408 CTRL_LABEL (const CTRL_LABEL&);
00409 CTRL_LABEL& operator= (const CTRL_LABEL&);
00410 #endif // GENERATING_DOXYGEN_OUTPUT
00411 };
00412
00413
00414
00416 class CTRL_GROUPBOX : public MGUI::CTRL {
00417 public:
00418
00419 enum BOXSTYLE {
00420 BOXSTYLE_EtchedIn,
00421 BOXSTYLE_EtchedOut,
00422 BOXSTYLE_ShadowIn,
00423 BOXSTYLE_ShadowOut
00424 };
00425
00427 CTRL_GROUPBOX (
00428 );
00429
00431 virtual ~CTRL_GROUPBOX (
00432 );
00433
00435 operator MGUI::LAYOUT_PANE_BASE& (
00436 ) { return (m_GroupBoxPane); }
00437
00439 void Create (
00440 MGUI::LAYOUT_PANE_BASE& ParentPane,
00441 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical,
00442 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00443 int ChildSpacing = 4,
00444 int ExtraBorder = 0,
00445 BOXSTYLE BoxStyle = BOXSTYLE_EtchedIn
00446 );
00447
00449 void Create (
00450 MGUI::LAYOUT_PANE_BASE& ParentPane,
00451 const MISTRING& string,
00452 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical,
00453 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00454 int ChildSpacing = 4,
00455 int ExtraBorder = 0
00456 );
00457
00459 MGUI::LAYOUT_PANE_BASE& GetPane (
00460 ) { return (m_GroupBoxPane); }
00461
00462 void SetLabelText (
00463 const MISTRING& label
00464 );
00465
00466 private:
00467
00468 #ifndef GENERATING_DOXYGEN_OUTPUT
00469 class LAYOUT_PANE : public MGUI::LAYOUT_PANE_BASE {
00470 public:
00471 LAYOUT_PANE (
00472 ) { }
00473 virtual ~LAYOUT_PANE (
00474 ) { }
00475 void Create (
00476 Widget FrameWidget,
00477 MGUI::LAYOUT_ORIENTATION orientation,
00478 MGUI::LAYOUT_SIZEALIGN sizealign,
00479 int ChildSpacing,
00480 int ExtraBorder,
00481 int TopExtra
00482 );
00483 private:
00484 LAYOUT_PANE (const LAYOUT_PANE&);
00485 LAYOUT_PANE& operator= (const LAYOUT_PANE&);
00486 };
00487
00488 LAYOUT_PANE m_GroupBoxPane;
00489
00490 Widget m_label;
00491 void CreateX (
00492 MGUI::LAYOUT_PANE_BASE& ParentPane,
00493 MGUI::LAYOUT_ORIENTATION orientation,
00494 MGUI::LAYOUT_SIZEALIGN sizealign,
00495 int ChildSpacing,
00496 int ExtraBorder,
00497 BOXSTYLE BoxStyle = BOXSTYLE_EtchedIn
00498 );
00499
00500 CTRL_GROUPBOX (const CTRL_GROUPBOX&);
00501 CTRL_GROUPBOX& operator= (const CTRL_GROUPBOX&);
00502 #endif // GENERATING_DOXYGEN_OUTPUT
00503 };
00504
00505
00506
00508 class CTRL_PUSHBUTTON : public MGUI::CTRL {
00509 public:
00510
00512 enum STYLE {
00513 STYLE_Default = 0,
00514 STYLE_NoFrame = 0x01,
00515 STYLE_NoMargin = 0x02,
00516 STYLE_SetCursor = 0x04,
00517 STYLE_WideMargins = 0x08,
00518 STYLE_HighlightOnMouseOver = 0x10,
00519 STYLE_ShadowOnMouseOver = 0x20,
00520 STYLE_TextAtLeft = 0x40,
00521 };
00522
00524 CTRL_PUSHBUTTON ();
00525
00527 virtual ~CTRL_PUSHBUTTON ();
00528
00530 void Create (
00531 MGUI::LAYOUT_PANE_BASE& ParentPane,
00532 const MISTRING& label,
00533 STYLE style = STYLE_Default,
00534 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00535 );
00536
00538 void Create (
00539 MGUI::LAYOUT_PANE_BASE& ParentPane,
00540 const MGUI::ICON& icon,
00541 const MISTRING& tooltip,
00542 STYLE style = STYLE_Default,
00543 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00544 );
00545
00547 void Create (
00548 MGUI::LAYOUT_PANE_BASE& ParentPane,
00549 const MGUI::ICON& iconNormal,
00550 const MGUI::ICON& iconMouseOver,
00551 const MISTRING& tooltip,
00552 STYLE style = STYLE_Default,
00553 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00554 );
00555
00557 void Create (
00558 MGUI::LAYOUT_PANE_BASE& ParentPane,
00559 ICONID iconid,
00560 const MISTRING& tooltip,
00561 UINT16 iconsize = 0,
00562 STYLE style = STYLE_Default,
00563 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00564 );
00565
00567 void SetDelegateOnPressed (
00568 DELEGATE_VOID_NOPARMS delegate
00569 ) { m_DelegateOnPressed = delegate; }
00570
00573 void UpdateIcon (
00574 const MGUI::ICON& icon
00575 );
00576
00577 private:
00578 #ifndef GENERATING_DOXYGEN_OUTPUT
00579
00580 DELEGATE_VOID_NOPARMS m_DelegateOnPressed;
00581
00582 static void CB_PushButton (Widget, CTRL_PUSHBUTTON*, void*);
00583 static void XEH_Icon (Widget, CTRL_PUSHBUTTON*, XEvent*, void*);
00584 static void XEH_Text (Widget, CTRL_PUSHBUTTON*, XEvent*, void*);
00585
00586 Pixmap m_PixmapUnarmed;
00587 Pixmap m_PixmapDisabled;
00588 Pixmap m_PixmapArmed;
00589 Pixmap m_PixmapMouseOver;
00590 STYLE m_style;
00591
00592 void CreateIconX (
00593 LAYOUT_PANE_BASE& ParentPane,
00594 const MGUI::ICON& Icon,
00595 const MGUI::ICON *pIconMouseOver,
00596 const MISTRING& tooltip,
00597 STYLE style,
00598 MGUI::LAYOUT_SIZEALIGN sizealign
00599 );
00600
00601 void CreateWidget (
00602 LAYOUT_PANE_BASE& ParentPane,
00603 XTARGS& args,
00604 const char *name
00605 );
00606
00607 CTRL_PUSHBUTTON (const CTRL_PUSHBUTTON&);
00608 CTRL_PUSHBUTTON& operator= (const CTRL_PUSHBUTTON&);
00609 #endif // GENERATING_DOXYGEN_OUTPUT
00610
00611
00612
00615 virtual void OnPressed ();
00616
00617 };
00618 #ifndef GENERATING_DOXYGEN_OUTPUT
00619 DEFINE_ENUM_OP_BITWISE(CTRL_PUSHBUTTON::STYLE)
00620 #endif
00621
00622
00623
00628 class CTRL_TOGGLEBUTTON : public MGUI::CTRL {
00629 public:
00630
00631 enum STYLE {
00632 STYLE_Check = 0x00,
00633 STYLE_Radio = 0x01,
00634 STYLE_NoMargin = 0x04,
00635 STYLE_NoFrame = 0x08,
00636 };
00637
00639 CTRL_TOGGLEBUTTON ();
00640
00642 virtual ~CTRL_TOGGLEBUTTON ();
00643
00645 void Create (
00646 MGUI::LAYOUT_PANE_BASE& ParentPane,
00647 const MISTRING& label,
00648 STYLE style = STYLE_Check,
00649 bool dftvalue = false,
00650 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00651 );
00652
00654 void Create (
00655 MGUI::LAYOUT_PANE_BASE& ParentPane,
00656 const MGUI::ICON& icon,
00657 const MISTRING& tooltip,
00658 STYLE style = STYLE_Check,
00659 bool dftvalue = false
00660 );
00661
00663 void Create (
00664 MGUI::LAYOUT_PANE_BASE& ParentPane,
00665 const MGUI::ICON& IconOff,
00666 const MGUI::ICON& IconOn,
00667 const MISTRING& tooltip,
00668 STYLE style = STYLE_Check,
00669 bool dftvalue = false
00670 );
00671
00673 void Create (
00674 MGUI::LAYOUT_PANE_BASE& ParentPane,
00675 ICONID iconid,
00676 const MISTRING& tooltip,
00677 STYLE style = STYLE_Check,
00678 bool dftvalue = false,
00679 UINT16 iconsize = 0
00680 );
00681
00683 bool GetValue () const
00684 { return (m_value); }
00685
00687 void SetDelegateOnPressed (
00688 DELEGATE_VOID_NOPARMS delegate
00689 ) { m_DelegateOnPressed = delegate; }
00690
00692 void SetValue (
00693 bool value,
00694 bool notify = true
00695 );
00696
00697 private:
00698 #ifndef GENERATING_DOXYGEN_OUTPUT
00699
00700 DELEGATE_VOID_NOPARMS m_DelegateOnPressed;
00701
00702 bool m_value;
00703
00704 static void CB_ToggleButton (Widget, CTRL_TOGGLEBUTTON*, void*);
00705 static void XT_EventHandler (Widget, CTRL_TOGGLEBUTTON*, XEvent*, void*);
00706
00707 Pixmap m_PixmapOffNormal;
00708 Pixmap m_PixmapOffDisabled;
00709 Pixmap m_PixmapOffMouseOver;
00710 Pixmap m_PixmapOnNormal;
00711 Pixmap m_PixmapOnDisabled;
00712 Pixmap m_PixmapOnMouseOver;
00713
00714 void CreateIconX (
00715 MGUI::LAYOUT_PANE_BASE& ParentPane,
00716 const MGUI::ICON& IconOff,
00717 const MGUI::ICON& IconOn,
00718 const MISTRING& tooltip,
00719 STYLE style,
00720 bool dftvalue
00721 );
00722
00723 void CreateWidget (
00724 MGUI::LAYOUT_PANE_BASE& ParentPane,
00725 XTARGS& args,
00726 const char* label,
00727 STYLE style,
00728 bool dftvalue
00729 );
00730
00731 CTRL_TOGGLEBUTTON (const CTRL_TOGGLEBUTTON&);
00732 CTRL_TOGGLEBUTTON& operator= (const CTRL_TOGGLEBUTTON&);
00733 #endif // GENERATING_DOXYGEN_OUTPUT
00734
00735
00736
00739 virtual void OnPressed ();
00740
00741 };
00742 #ifndef GENERATING_DOXYGEN_OUTPUT
00743 DEFINE_ENUM_OP_BITWISE(CTRL_TOGGLEBUTTON::STYLE)
00744 #endif
00745
00746
00747
00749 class CTRL_TEXT : public MGUI::CTRL {
00750 public:
00751
00753 enum STYLE {
00754 STYLE_NoScrollBars = 0x0000,
00755 STYLE_ScrollH = 0x0001,
00756 STYLE_ScrollV = 0x0002,
00757 STYLE_ScrollBoth = (STYLE_ScrollH|STYLE_ScrollV),
00758 STYLE_WidthInPixels = 0x0004,
00759 STYLE_NoFrame = 0x0008,
00760 STYLE_NoMargin = 0x0010,
00761 };
00762
00764 CTRL_TEXT ()
00765 { }
00766
00768 void Clear (
00769 );
00770
00772 void ClearSelection ();
00773
00775 void Create (
00776 MGUI::LAYOUT_PANE_BASE& ParentPane,
00777 int width = 40,
00778 int height = 10,
00779 STYLE style = STYLE_NoScrollBars,
00780 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00781 );
00782
00784 void SetSelection (
00785 int StartChar = 0,
00786 int EndChar = -1,
00787 bool NoScroll = true
00788 );
00789
00791 void SetString (
00792 const MISTRING& string
00793 );
00794
00795 private:
00796 #ifndef GENERATING_DOXYGEN_OUTPUT
00797 CTRL_TEXT (const CTRL_TEXT&);
00798 CTRL_TEXT& operator= (const CTRL_TEXT&);
00799 #endif // GENERATING_DOXYGEN_OUTPUT
00800 };
00801 #ifndef GENERATING_DOXYGEN_OUTPUT
00802 DEFINE_ENUM_OP_BITWISE(CTRL_TEXT::STYLE)
00803 #endif
00804
00805
00807 class CTRL_SEPARATOR : public MGUI::CTRL {
00808 public:
00809
00810 enum CTRLSTYLE {
00811 CTRLSTYLE_Solid,
00812 CTRLSTYLE_Dashed,
00813 CTRLSTYLE_ShadowEtchedIn,
00814 CTRLSTYLE_ShadowEtchedOut
00815 };
00816
00817 enum ORIENTATION {
00818 ORIENTATION_Automatic,
00819 ORIENTATION_Horizontal,
00820 ORIENTATION_Vertical
00821 };
00822
00824 CTRL_SEPARATOR ();
00825
00827 ~CTRL_SEPARATOR ();
00828
00830 void Create (
00831 LAYOUT_PANE_BASE& ParentPane,
00832 CTRLSTYLE type = CTRLSTYLE_ShadowEtchedIn,
00833 UINT8 thickness = 1,
00834 int length = 0,
00835 ORIENTATION orientation = ORIENTATION_Automatic
00836 );
00837
00839 void Create (
00840 LAYOUT_PANE_BASE& ParentPane,
00841 const MISTRING& label,
00842 CTRLSTYLE type = CTRLSTYLE_ShadowEtchedIn,
00843 UINT8 thickness = 1
00844 );
00845
00846 private:
00847 #ifndef GENERATING_DOXYGEN_OUTPUT
00848 CTRL_SEPARATOR (const CTRL_SEPARATOR&);
00849 CTRL_SEPARATOR& operator= (const CTRL_SEPARATOR&);
00850 #endif // GENERATING_DOXYGEN_OUTPUT
00851 };
00852
00853
00854
00855 }
00856
00857 #endif // INC_MGUI_CTRL_H