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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 #ifndef INC_MGUI_CTRL_H
00185 #define INC_MGUI_CTRL_H
00186
00187 #ifndef INC_MGUI_FORM_H
00188 #include <mgui/form.h>
00189 #endif
00190
00191 #ifndef INC_MI32_RANGE_H
00192 #include <mi32/range.h>
00193 #endif
00194
00195 #ifndef INC_MI32_RECT_H
00196 #include <mi32/rect.h>
00197 #endif
00198
00199 #ifndef INC_MI32_LATLONFM_H
00200 #include <mi32/latlonfm.h>
00201 #endif
00202
00203 #ifndef INC_MI32_UNITCONV_H
00204 #include <mi32/unitconv.h>
00205 #endif
00206
00207 #ifndef INC_MI32_SIMPLEAR_H
00208 #include <mi32/simplear.h>
00209 #endif
00210
00211 #ifndef INC_MI32_ICONID_H
00212 #include <mi32/iconid.h>
00213 #endif
00214
00215 struct TEXTSTYLE;
00216
00217 namespace MGUI {
00218
00219
00220
00221
00222
00223
00224 enum KEYSTATE {
00225 KEYSTATE_None = 0x0000,
00226 KEYSTATE_Ctrl = 0x0002,
00227 KEYSTATE_Control = 0x0002,
00228 KEYSTATE_Shift = 0x0004
00229 };
00230
00231 DEFINE_ENUM_OP_BITWISE(MGUI::KEYSTATE);
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 class CTRL : public MGUI::FORM {
00265 public:
00266
00267
00268 virtual ~CTRL (
00269 ) = 0;
00270
00271
00272 static const COLOR& GetBackgroundColor (
00273 );
00274
00275 #ifdef WIN32_MFC
00276
00277 void GetClientRect (
00278 LPRECT lpRect
00279 ) const { m_pWnd->GetClientRect(lpRect); }
00280 #endif
00281
00282 #ifdef WIN32_MFC
00283
00284 CWnd* GetCWnd (
00285 ) { return (m_pWnd); }
00286 #endif
00287
00288 #ifdef X_NATIVE
00289
00290
00291
00292 Widget GetWidget (
00293 ) { return (m_widget); }
00294 #endif
00295
00296 #ifdef WIN32_MFC
00297
00298
00299 void Invalidate (
00300 bool erase = true
00301 ) { m_pWnd->Invalidate(erase); }
00302 #endif
00303
00304 #ifdef WIN32_MFC
00305
00306
00307 void InvalidateRect (
00308 const LRECT2D& lrect,
00309 bool erase = true
00310 ) {
00311 CRect rect(lrect.xinit, lrect.yinit, lrect.xlast, lrect.ylast);
00312 m_pWnd->InvalidateRect(rect, erase);
00313 }
00314 #endif
00315
00316
00317
00318 virtual bool IsCreated (
00319 ) const;
00320
00321
00322
00323 virtual bool IsEnabled (
00324 ) const;
00325
00326 #ifdef WIN32_MFC
00327
00328
00329
00330
00331
00332
00333
00334 virtual bool PreTranslateMessageHook (
00335 MSG *pMsg
00336 ) { return (false); }
00337 #endif
00338
00339
00340 virtual void SetEnabled (
00341 bool enabled = true
00342 );
00343
00344 #ifdef WIN32_MFC
00345
00346 void SetRedraw (
00347 bool redraw = true
00348 ) { m_pWnd->SetRedraw(redraw); }
00349 #endif
00350
00351
00352 virtual void SetVisible (
00353 bool visible = true
00354 );
00355
00356 #ifdef WIN32_MFC
00357
00358 void UpdateWindow (
00359 ) { m_pWnd->UpdateWindow(); }
00360 #endif
00361
00362 protected:
00363
00364 #ifdef WIN32_MFC
00365 CWnd *m_pWnd;
00366
00367
00368 CTRL (
00369 CWnd& wnd
00370 ): m_pWnd(&wnd) { }
00371
00372 CTRL (
00373 CWnd *pWnd
00374 ): m_pWnd(pWnd) { }
00375
00376 #endif
00377
00378 #ifdef X_NATIVE
00379 Widget m_widget;
00380
00381
00382 CTRL (
00383 ): m_widget(0) { }
00384
00385
00386 void AddDestroyCallback (
00387 );
00388
00389
00390
00391
00392
00393 virtual void OnDestroy (
00394 );
00395 #endif
00396
00397 private:
00398 #ifndef GENERATING_DOXYGEN_OUTPUT
00399
00400 #ifdef X_NATIVE
00401 static void CB_Destroy (Widget, CTRL*, void*);
00402 #endif
00403
00404
00405 virtual void v_SetFocus () const;
00406
00407 CTRL (const CTRL&);
00408 CTRL& operator= (const CTRL&);
00409 #endif
00410 };
00411
00412
00413
00414
00415 class CTRL_LABEL : public MGUI::CTRL {
00416 public:
00417
00418 enum STYLE {
00419 STYLE_LeftNoWrap,
00420 STYLE_Left,
00421 STYLE_Center,
00422 STYLE_Right
00423 };
00424
00425
00426 CTRL_LABEL (
00427 )
00428 #ifdef WIN32_MFC
00429 :
00430 m_icon(0),
00431 CTRL(m_ctrl)
00432 #endif
00433 { }
00434
00435 ~CTRL_LABEL (
00436 );
00437
00438
00439 void Create (
00440 MGUI::LAYOUT_PANE_BASE& ParentPane,
00441 const char* label,
00442 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00443 STYLE style = STYLE_LeftNoWrap
00444 );
00445
00446
00447 void Create (
00448 MGUI::LAYOUT_PANE_BASE& ParentPane,
00449 const MISTRING& label,
00450 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00451 STYLE style = STYLE_LeftNoWrap
00452 );
00453
00454
00455 void Create (
00456 MGUI::LAYOUT_PANE_BASE& ParentPane,
00457 ICONID iconid,
00458 const char *tooltip,
00459 int iconsize = 0
00460 );
00461
00462
00463 void Create (
00464 MGUI::LAYOUT_PANE_BASE& ParentPane,
00465 ICONID iconid,
00466 const MISTRING& tooltip,
00467 int iconsize = 0
00468 );
00469
00470 #ifdef WIN32_MFC
00471
00472 CStatic& GetCtrl (
00473 ) { return (m_ctrl); }
00474 #endif
00475
00476
00477 void SetLabel (
00478 const char *string
00479 );
00480
00481
00482 void SetLabel (
00483 const MISTRING& string
00484 );
00485
00486 private:
00487 #ifndef GENERATING_DOXYGEN_OUTPUT
00488
00489 #ifdef WIN32_MFC
00490 CStatic m_ctrl;
00491 HICON m_icon;
00492
00493 void CreateIconWin (
00494 MGUI::LAYOUT_PANE_BASE& ParentPane,
00495 ICONID iconid,
00496 const CString& label,
00497 int iconsize
00498 );
00499
00500 void CreateWin (
00501 MGUI::LAYOUT_PANE_BASE& ParentPane,
00502 const CString& label,
00503 MGUI::LAYOUT_SIZEALIGN sizealign,
00504 STYLE style
00505 );
00506 #endif
00507
00508 #ifdef X_NATIVE
00509 bool CreateIcon (
00510 MGUI::LAYOUT_PANE_BASE& ParentPane,
00511 ICONID iconid,
00512 const char *name,
00513 int iconsize
00514 );
00515
00516 void CreateX (
00517 MGUI::LAYOUT_PANE_BASE& ParentPane,
00518 XTARGS& args,
00519 const char *name,
00520 MGUI::LAYOUT_SIZEALIGN sizealign,
00521 STYLE style
00522 );
00523 #endif
00524
00525 CTRL_LABEL (const CTRL_LABEL&);
00526 CTRL_LABEL& operator= (const CTRL_LABEL&);
00527 #endif // GENERATING_DOXYGEN_OUTPUT
00528 };
00529
00530
00531
00532
00533 class CTRL_GROUPBOX : public MGUI::CTRL {
00534 public:
00535
00536
00537 CTRL_GROUPBOX (
00538 );
00539
00540
00541 virtual ~CTRL_GROUPBOX (
00542 );
00543
00544
00545 operator MGUI::LAYOUT_PANE_BASE& (
00546 ) { return (m_GroupBoxPane); }
00547
00548
00549 void Create (
00550 MGUI::LAYOUT_PANE_BASE& ParentPane,
00551 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical,
00552 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00553 int ChildSpacing = 4,
00554 int ExtraBorder = 0
00555 );
00556
00557
00558 void Create (
00559 MGUI::LAYOUT_PANE_BASE& ParentPane,
00560 const char* string,
00561 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical,
00562 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00563 int ChildSpacing = 4,
00564 int ExtraBorder = 0
00565 );
00566
00567
00568 void Create (
00569 MGUI::LAYOUT_PANE_BASE& ParentPane,
00570 const MISTRING& string,
00571 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical,
00572 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize,
00573 int ChildSpacing = 4,
00574 int ExtraBorder = 0
00575 );
00576
00577 #ifdef WIN32_MFC
00578
00579 CButton& GetCtrl (
00580 ) { return (m_ctrl); }
00581 #endif
00582
00583
00584 MGUI::LAYOUT_PANE_BASE& GetPane (
00585 ) { return (m_GroupBoxPane); }
00586
00587 void SetLabelText (
00588 const MISTRING& label
00589 );
00590
00591 private:
00592
00593 #ifndef GENERATING_DOXYGEN_OUTPUT
00594 class LAYOUT_PANE : public MGUI::LAYOUT_PANE_BASE {
00595 public:
00596 LAYOUT_PANE (
00597 ) { }
00598 virtual ~LAYOUT_PANE (
00599 ) { }
00600 void Create (
00601 #ifdef WIN32_MFC
00602 MGUI::LAYOUT_PANE_BASE& ParentPane,
00603 CButton& ctrl,
00604 #else
00605 Widget FrameWidget,
00606 #endif
00607 MGUI::LAYOUT_ORIENTATION orientation,
00608 MGUI::LAYOUT_SIZEALIGN sizealign,
00609 int ChildSpacing,
00610 int ExtraBorder,
00611 int TopExtra
00612 );
00613 private:
00614 LAYOUT_PANE (const LAYOUT_PANE&);
00615 LAYOUT_PANE& operator= (const LAYOUT_PANE&);
00616 };
00617
00618 LAYOUT_PANE m_GroupBoxPane;
00619
00620 #ifdef WIN32_MFC
00621 CButton m_ctrl;
00622
00623 void CreateWin (
00624 MGUI::LAYOUT_PANE_BASE& ParentPane,
00625 const CString& label,
00626 MGUI::LAYOUT_ORIENTATION orientation,
00627 MGUI::LAYOUT_SIZEALIGN sizealign,
00628 int ChildSpacing,
00629 int ExtraBorder
00630 );
00631 #endif // WIN32_MFC
00632
00633 #ifdef X_NATIVE
00634 Widget m_label;
00635 void CreateX (
00636 MGUI::LAYOUT_PANE_BASE& ParentPane,
00637 MGUI::LAYOUT_ORIENTATION orientation,
00638 MGUI::LAYOUT_SIZEALIGN sizealign,
00639 int ChildSpacing,
00640 int ExtraBorder
00641 );
00642 #endif
00643
00644 CTRL_GROUPBOX (const CTRL_GROUPBOX&);
00645 CTRL_GROUPBOX& operator= (const CTRL_GROUPBOX&);
00646 #endif // GENERATING_DOXYGEN_OUTPUT
00647 };
00648
00649
00650
00651
00652 class CTRL_PUSHBUTTON : public MGUI::CTRL {
00653 public:
00654
00655
00656 CTRL_PUSHBUTTON (
00657 )
00658 #ifdef WIN32_MFC
00659 : CTRL(m_ctrl), m_ctrl(*this), m_hIcon(0)
00660 #endif
00661 { }
00662
00663
00664 virtual ~CTRL_PUSHBUTTON (
00665 );
00666
00667
00668 void Create (
00669 MGUI::LAYOUT_PANE_BASE& ParentPane,
00670 const char* label,
00671 bool large = false,
00672 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00673 );
00674
00675
00676 void Create (
00677 MGUI::LAYOUT_PANE_BASE& ParentPane,
00678 const MISTRING& label,
00679 bool large = false,
00680 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00681 );
00682
00683
00684 void Create (
00685 MGUI::LAYOUT_PANE_BASE& ParentPane,
00686 ICONID iconid,
00687 const char* tooltip,
00688 int iconsize = 0
00689 );
00690
00691
00692 void Create (
00693 MGUI::LAYOUT_PANE_BASE& ParentPane,
00694 ICONID iconid,
00695 const MISTRING& tooltip,
00696 int iconsize = 0
00697 );
00698
00699 #ifdef WIN32_MFC
00700
00701 CButton& GetCtrl (
00702 ) { return (m_ctrl); }
00703 #endif
00704
00705 protected:
00706
00707
00708 virtual void OnPressed (
00709 ) = 0;
00710
00711 private:
00712 #ifndef GENERATING_DOXYGEN_OUTPUT
00713
00714 #ifdef WIN32_MFC
00715 class MyButton : public CButton {
00716 public:
00717 MyButton (
00718 CTRL_PUSHBUTTON& guictrl
00719 ): m_guictrl(guictrl)
00720 { }
00721 protected:
00722 afx_msg void OnClicked ();
00723 DECLARE_MESSAGE_MAP()
00724 private:
00725 CTRL_PUSHBUTTON& m_guictrl;
00726 friend class MGUI::CTRL_PUSHBUTTON;
00727 };
00728 friend class MyButton;
00729
00730 MyButton m_ctrl;
00731 HICON m_hIcon;
00732 #endif
00733
00734 #ifdef X_NATIVE
00735 static void CB_PushButton (Widget, CTRL_PUSHBUTTON*, void*);
00736
00737 bool CreateIcon (
00738 LAYOUT_PANE_BASE& ParentPane,
00739 ICONID iconid,
00740 const char *name,
00741 int iconsize
00742 );
00743
00744 void CreateWidget (
00745 LAYOUT_PANE_BASE& ParentPane,
00746 XTARGS& args,
00747 const char *name,
00748 bool large = false
00749 );
00750 #endif
00751
00752 CTRL_PUSHBUTTON (const CTRL_PUSHBUTTON&);
00753 CTRL_PUSHBUTTON& operator= (const CTRL_PUSHBUTTON&);
00754 #endif
00755 };
00756
00757
00758
00759
00760
00761
00762 template <class _CT> class CTRL_PUSHBUTTON_T : public MGUI::CTRL_PUSHBUTTON {
00763 public:
00764
00765
00766 explicit CTRL_PUSHBUTTON_T (
00767 ): m_pContainer(0), m_pfOnPressed(0) { }
00768
00769
00770 void Create (
00771 MGUI::LAYOUT_PANE_BASE& ParentPane,
00772 const char* label,
00773 _CT *pContainer,
00774 void (_CT::*pfOnPressed)(),
00775 bool large = false,
00776 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00777 ) {
00778 m_pContainer = pContainer;
00779 m_pfOnPressed = pfOnPressed;
00780 CTRL_PUSHBUTTON::Create(ParentPane,label,large,sizealign);
00781 }
00782
00783
00784 void Create (
00785 MGUI::LAYOUT_PANE_BASE& ParentPane,
00786 const MISTRING& label,
00787 _CT *pContainer,
00788 void (_CT::*pfOnPressed)(),
00789 bool large = false,
00790 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00791 ) {
00792 m_pContainer = pContainer;
00793 m_pfOnPressed = pfOnPressed;
00794 CTRL_PUSHBUTTON::Create(ParentPane,label,large,sizealign);
00795 }
00796
00797
00798 void Create (
00799 MGUI::LAYOUT_PANE_BASE& ParentPane,
00800 ICONID iconid,
00801 const char* tooltip,
00802 _CT *pContainer,
00803 void (_CT::*pfOnPressed)(),
00804 int iconsize = 0
00805 ) {
00806 m_pContainer = pContainer;
00807 m_pfOnPressed = pfOnPressed;
00808 CTRL_PUSHBUTTON::Create(ParentPane,iconid,tooltip,iconsize);
00809 }
00810
00811
00812 void Create (
00813 MGUI::LAYOUT_PANE_BASE& ParentPane,
00814 ICONID iconid,
00815 const MISTRING& tooltip,
00816 _CT *pContainer,
00817 void (_CT::*pfOnPressed)(),
00818 int iconsize = 0
00819 ) {
00820 m_pContainer = pContainer;
00821 m_pfOnPressed = pfOnPressed;
00822 CTRL_PUSHBUTTON::Create(ParentPane,iconid,tooltip,iconsize);
00823 }
00824
00825 private:
00826 #ifndef GENERATING_DOXYGEN_OUTPUT
00827 _CT *m_pContainer;
00828 void (_CT::*m_pfOnPressed)();
00829
00830 virtual void OnPressed (
00831 ) { (m_pContainer->*m_pfOnPressed)(); }
00832 #endif // GENERATING_DOXYGEN_OUTPUT
00833 };
00834
00835
00836
00837
00838
00839
00840
00841 class CTRL_TOGGLEBUTTON : public MGUI::CTRL {
00842 public:
00843
00844 enum STYLE {
00845 STYLE_Check,
00846 STYLE_Radio,
00847 #ifdef WIN32_MFC
00848 STYLE_RadioFirst
00849 #endif
00850 };
00851
00852
00853 CTRL_TOGGLEBUTTON (
00854 ):
00855 m_value(false)
00856 #ifdef WIN32_MFC
00857 , CTRL(m_ctrl), m_ctrl(*this), m_hIcon(0)
00858 #endif
00859 { }
00860
00861
00862 virtual ~CTRL_TOGGLEBUTTON (
00863 );
00864
00865
00866 void Create (
00867 MGUI::LAYOUT_PANE_BASE& ParentPane,
00868 const char* label,
00869 STYLE style = STYLE_Check,
00870 bool dftvalue = false,
00871 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00872 );
00873
00874
00875 void Create (
00876 MGUI::LAYOUT_PANE_BASE& ParentPane,
00877 const MISTRING& label,
00878 STYLE style = STYLE_Check,
00879 bool dftvalue = false,
00880 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00881 );
00882
00883
00884 void Create (
00885 MGUI::LAYOUT_PANE_BASE& ParentPane,
00886 ICONID iconid,
00887 const char* tooltip,
00888 STYLE style = STYLE_Check,
00889 bool dftvalue = false,
00890 int iconsize = 0
00891 );
00892
00893
00894 void Create (
00895 MGUI::LAYOUT_PANE_BASE& ParentPane,
00896 ICONID iconid,
00897 const MISTRING& tooltip,
00898 STYLE style = STYLE_Check,
00899 bool dftvalue = false,
00900 int iconsize = 0
00901 );
00902
00903 #ifdef WIN32_MFC
00904
00905 CButton& GetCtrl (
00906 ) { return (m_ctrl); }
00907 #endif
00908
00909
00910 bool GetValue (
00911 ) const
00912 #ifdef X_NATIVE
00913 { return (m_value); }
00914 #else
00915 ;
00916 #endif
00917
00918
00919 void SetValue (
00920 bool value,
00921 bool notify = true
00922 );
00923
00924 protected:
00925
00926
00927 virtual void OnPressed (
00928 );
00929
00930 private:
00931 #ifndef GENERATING_DOXYGEN_OUTPUT
00932
00933 bool m_value;
00934
00935 #ifdef WIN32_MFC
00936 class MyButton : public CButton {
00937 public:
00938 MyButton (
00939 CTRL_TOGGLEBUTTON& guictrl
00940 ): m_guictrl(guictrl)
00941 { }
00942 protected:
00943 afx_msg void OnClicked ();
00944 DECLARE_MESSAGE_MAP()
00945 private:
00946 CTRL_TOGGLEBUTTON& m_guictrl;
00947 friend class MGUI::CTRL_TOGGLEBUTTON;
00948 };
00949 friend class MyButton;
00950
00951 MyButton m_ctrl;
00952 HICON m_hIcon;
00953 #endif
00954
00955 #ifdef X_NATIVE
00956 static void CB_ToggleButton (Widget, CTRL_TOGGLEBUTTON*, void*);
00957
00958 bool CreateIcon (
00959 MGUI::LAYOUT_PANE_BASE& ParentPane,
00960 ICONID iconid,
00961 const char *name,
00962 STYLE style,
00963 bool dftvalue,
00964 int iconsize
00965 );
00966
00967 void CreateWidget (
00968 MGUI::LAYOUT_PANE_BASE& ParentPane,
00969 XTARGS& args,
00970 const char* label,
00971 STYLE style,
00972 bool dftvalue
00973 );
00974 #endif
00975
00976 CTRL_TOGGLEBUTTON (const CTRL_TOGGLEBUTTON&);
00977 CTRL_TOGGLEBUTTON& operator= (const CTRL_TOGGLEBUTTON&);
00978 #endif
00979 };
00980
00981
00982
00983
00984 template <class _CT> class CTRL_TOGGLEBUTTON_T : public MGUI::CTRL_TOGGLEBUTTON {
00985 public:
00986
00987
00988 explicit CTRL_TOGGLEBUTTON_T (
00989 ): m_pContainer(0), m_pfOnPressed(0) { }
00990
00991
00992 void Create (
00993 MGUI::LAYOUT_PANE_BASE& ParentPane,
00994 const char* label,
00995 _CT *pContainer,
00996 void (_CT::*pfOnPressed)(),
00997 STYLE style = STYLE_Check,
00998 bool dftvalue = false,
00999 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
01000 ) {
01001 m_pContainer = pContainer;
01002 m_pfOnPressed = pfOnPressed;
01003 CTRL_TOGGLEBUTTON::Create(ParentPane,label,style,dftvalue,sizealign);
01004 }
01005
01006
01007 void Create (
01008 MGUI::LAYOUT_PANE_BASE& ParentPane,
01009 const MISTRING& label,
01010 _CT *pContainer,
01011 void (_CT::*pfOnPressed)(),
01012 STYLE style = STYLE_Check,
01013 bool dftvalue = false,
01014 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
01015 ) {
01016 m_pContainer = pContainer;
01017 m_pfOnPressed = pfOnPressed;
01018 CTRL_TOGGLEBUTTON::Create(ParentPane,label,style,dftvalue,sizealign);
01019 }
01020
01021
01022 void Create (
01023 MGUI::LAYOUT_PANE_BASE& ParentPane,
01024 ICONID iconid,
01025 const char* tooltip,
01026 _CT *pContainer,
01027 void (_CT::*pfOnPressed)(),
01028 STYLE style = STYLE_Check,
01029 bool dftvalue = false,
01030 int iconsize = 0
01031 ) {
01032 m_pContainer = pContainer;
01033 m_pfOnPressed = pfOnPressed;
01034 CTRL_TOGGLEBUTTON::Create(ParentPane,iconid,tooltip,style,dftvalue,iconsize);
01035 }
01036
01037
01038 void Create (
01039 MGUI::LAYOUT_PANE_BASE& ParentPane,
01040 ICONID iconid,
01041 const MISTRING& tooltip,
01042 _CT *pContainer,
01043 void (_CT::*pfOnPressed)(),
01044 STYLE style = STYLE_Check,
01045 bool dftvalue = false,
01046 int iconsize = 0
01047 ) {
01048 m_pContainer = pContainer;
01049 m_pfOnPressed = pfOnPressed;
01050 CTRL_TOGGLEBUTTON::Create(ParentPane,iconid,tooltip,style,dftvalue,iconsize);
01051 }
01052
01053 private:
01054 #ifndef GENERATING_DOXYGEN_OUTPUT
01055 _CT *m_pContainer;
01056 void (_CT::*m_pfOnPressed)();
01057
01058 virtual void OnPressed (
01059 ) { (m_pContainer->*m_pfOnPressed)(); }
01060 #endif // GENERATING_DOXYGEN_OUTPUT
01061 };
01062
01063
01064
01065
01066 class CTRL_EDIT_BASE : public MGUI::CTRL {
01067 public:
01068
01069
01070 CTRL_EDIT_BASE (
01071 );
01072
01073
01074 ~CTRL_EDIT_BASE (
01075 );
01076
01077
01078 void ClearSelection (
01079 )
01080 #ifdef WIN32_MFC
01081 { m_ctrl.Clear(); }
01082 #endif
01083 ;
01084
01085
01086 void CopySelection (
01087 )
01088 #ifdef WIN32_MFC
01089 { m_ctrl.Copy(); }
01090 #endif
01091 ;
01092
01093
01094 void CutSelection (
01095 )
01096 #ifdef WIN32_MFC
01097 { m_ctrl.Cut(); }
01098 #endif
01099 ;
01100
01101 #ifdef WIN32_MFC
01102
01103 CEdit& GetCtrl (
01104 ) { return (m_ctrl); }
01105 #endif
01106
01107
01108
01109 const bool GetModify (
01110 ) const {
01111 #ifdef WIN32_MFC
01112 return (m_ctrl.GetModify() != FALSE);
01113 #else
01114 return (m_UserEdited);
01115 #endif
01116 }
01117
01118
01119
01120 void GetSelection (
01121 int& nStartChar,
01122 int& nEndChar
01123 ) const
01124 #ifdef WIN32_MFC
01125 { m_ctrl.GetSel(nStartChar,nEndChar); }
01126 #endif
01127 ;
01128
01129
01130 void SetMaxLength (
01131 int length
01132 );
01133
01134
01135 void SetModify (
01136 bool modified = true
01137 ) {
01138 #ifdef WIN32_MFC
01139 m_ctrl.SetModify(modified);
01140 #else
01141 m_UserEdited = modified;
01142 #endif
01143 }
01144
01145
01146 void SetReadOnly (
01147 bool ReadOnly = true
01148 ) {
01149 #ifdef WIN32_MFC
01150 m_ctrl.SetReadOnly(ReadOnly);
01151 #else
01152 MxSetTextEditable(m_widget,!ReadOnly);
01153 #endif
01154 }
01155
01156
01157 void SetSelection (
01158 int StartChar = 0,
01159 int EndChar = -1,
01160 bool NoScroll = true
01161 )
01162 #ifdef WIN32_MFC
01163 { m_ctrl.SetSel(StartChar,EndChar,NoScroll); }
01164 #endif
01165 ;
01166
01167
01168
01169 void SetValidChars (
01170 const MIUNICODE* string,
01171 bool invert = false
01172 );
01173
01174 protected:
01175
01176 #ifdef WIN32_MFC
01177 class MyEdit : public CEdit {
01178 public:
01179 MyEdit (
01180 CTRL_EDIT_BASE& guictrl
01181 ): m_guictrl(guictrl)
01182 { }
01183 virtual ~MyEdit (
01184 ) { }
01185 virtual BOOL PreCreateWindow (CREATESTRUCT& cs);
01186 protected:
01187 afx_msg void OnChange ();
01188 afx_msg void OnKillFocus ();
01189 DECLARE_MESSAGE_MAP()
01190 private:
01191 #ifndef GENERATING_DOXYGEN_OUTPUT
01192 CTRL_EDIT_BASE& m_guictrl;
01193 #endif
01194 };
01195 friend class MyEdit;
01196 MyEdit m_ctrl;
01197 #endif
01198
01199 #ifdef X_NATIVE
01200 bool m_UserEdited;
01201 #endif
01202 bool m_HasValue;
01203
01204
01205
01206 bool CheckValidChars (
01207 MISTRING& string
01208 ) const;
01209
01210 void CreateCtrl (
01211 LAYOUT_PANE_BASE& ParentPane,
01212 int width,
01213 int height,
01214 bool RightJustify,
01215 bool ReadOnly,
01216 bool Opaque,
01217 bool WidthInPixels,
01218 LAYOUT_SIZEALIGN sizealign
01219 );
01220
01221 bool GetEditStr (
01222 MISTRING& str
01223 ) const;
01224
01225
01226 void NotifyChanged (
01227 ) { OnChangeValue(); }
01228
01229
01230 void UpdateCtrl (
01231 const MISTRING& string
01232 );
01233
01234
01235
01236 virtual void UpdateValue (bool notify = true);
01237
01238 private:
01239 #ifndef GENERATING_DOXYGEN_OUTPUT
01240
01241 #ifdef X_NATIVE
01242 Widget m_TraversalWidget;
01243 XmTraversalDirection m_TraversalDir;
01244 bool m_InternalModify;
01245 int m_MaxLength;
01246 #endif
01247
01248 bool m_ValidInvert;
01249 MISTRING m_ValidChars;
01250
01251 #ifdef X_NATIVE
01252 static void CB_Activate (Widget, CTRL_EDIT_BASE*, void*);
01253 static void CB_Focus (Widget, CTRL_EDIT_BASE*, void*);
01254 static void CB_LosingFocus (Widget, CTRL_EDIT_BASE*, void*);
01255 static void CB_ModifyVerify (Widget, CTRL_EDIT_BASE*, void*);
01256 static void CB_ValueChanged (Widget, CTRL_EDIT_BASE*, XmAnyCallbackStruct*);
01257 #endif
01258
01259 CTRL_EDIT_BASE (const CTRL_EDIT_BASE&);
01260 CTRL_EDIT_BASE& operator= (const CTRL_EDIT_BASE&);
01261 #endif // GENERATING_DOXYGEN_OUTPUT
01262
01263
01264
01265
01266 virtual void OnActivate ();
01267
01268
01269
01270 virtual void OnChangeValue ();
01271
01272
01273
01274 virtual void OnUserEdit ();
01275
01276 };
01277
01278
01279
01280
01281 class CTRL_EDIT_STRING : public MGUI::CTRL_EDIT_BASE {
01282 public:
01283
01284 enum FLAGS {
01285 FLAG_Default = 0x0000,
01286 FLAG_RightJustify = 0x0001,
01287 FLAG_ReadOnly = 0x0002,
01288 FLAG_Opaque = 0x0004,
01289 FLAG_WidthInPixels = 0x0008,
01290 };
01291
01292
01293 CTRL_EDIT_STRING (
01294 );
01295
01296
01297 virtual ~CTRL_EDIT_STRING (
01298 );
01299
01300
01301 void ClearValue (
01302 bool notify = true
01303 );
01304
01305
01306 void Create (
01307 MGUI::LAYOUT_PANE_BASE& ParentPane,
01308 int maxlen,
01309 int width = 0,
01310 FLAGS flags = FLAG_Default,
01311 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedHeight
01312 );
01313
01314
01315 const MISTRING& GetValue (
01316 );
01317
01318
01319
01320 void IniRead (
01321 INIHANDLE IniHandle,
01322 const char *IniGroup,
01323 const char *IniField,
01324 bool notify = true
01325 );
01326
01327
01328 void IniWrite (
01329 INIHANDLE IniHandle,
01330 const char *IniGroup,
01331 const char *IniField
01332 ) const { ::IniWrite(IniHandle,IniGroup,IniField,m_value); }
01333
01334
01335
01336
01337 void SetValue (
01338 const MIUNICODE* string,
01339 bool notify = true
01340 );
01341
01342 protected:
01343
01344
01345
01346
01347 virtual bool OnValidate (
01348 MISTRING& string
01349 );
01350
01351 private:
01352 #ifndef GENERATING_DOXYGEN_OUTPUT
01353
01354 MISTRING m_value;
01355
01356
01357 virtual void UpdateValue (bool notify = true);
01358
01359 CTRL_EDIT_STRING (const CTRL_EDIT_STRING&);
01360 CTRL_EDIT_STRING& operator= (const CTRL_EDIT_STRING&);
01361 #endif // GENERATING_DOXYGEN_OUTPUT
01362 };
01363
01364 DEFINE_ENUM_OPERATORS(MGUI::CTRL_EDIT_STRING::FLAGS);
01365
01366
01367
01368
01369 template <class _CT> class CTRL_EDIT_STRING_T : public MGUI::CTRL_EDIT_STRING {
01370 public:
01371
01372
01373 explicit CTRL_EDIT_STRING_T (
01374 _CT *pContainer
01375 ): m_pContainer(pContainer), m_pfOnChangeValue(0), m_pfOnUserEdit(0), m_pfOnValidate(0), m_pfOnActivate(0)
01376 { }
01377
01378
01379
01380 void SetContainer (
01381 _CT *pContainer
01382 ) { m_pContainer = pContainer; }
01383
01384
01385 void SetFuncActivate (
01386 void (_CT::*pfOnActivate)()
01387 ) { m_pfOnActivate = pfOnActivate; };
01388
01389
01390 void SetFuncChangeValue (
01391 void (_CT::*pfOnChangeValue)()
01392 ) { m_pfOnChangeValue = pfOnChangeValue; };
01393
01394
01395 void SetFuncUserEdit (
01396 void (_CT::*pfOnUserEdit)()
01397 ) { m_pfOnUserEdit = pfOnUserEdit; };
01398
01399
01400 void SetFuncValidate (
01401 bool (_CT::*pfOnValidate)(MISTRING& string)
01402 ) { m_pfOnValidate = pfOnValidate; };
01403
01404 private:
01405 #ifndef GENERATING_DOXYGEN_OUTPUT
01406 _CT *m_pContainer;
01407 void (_CT::*m_pfOnChangeValue)();
01408 void (_CT::*m_pfOnUserEdit)();
01409 bool (_CT::*m_pfOnValidate)(MISTRING&);
01410 void (_CT::*m_pfOnActivate)();
01411
01412 virtual void OnChangeValue (
01413 ) { if (m_pfOnChangeValue != 0) (m_pContainer->*m_pfOnChangeValue)(); }
01414
01415 virtual void OnActivate (
01416 ) { if (m_pfOnActivate != 0) (m_pContainer->*m_pfOnActivate)(); }
01417
01418 virtual void OnUserEdit (
01419 ) { if (m_pfOnUserEdit != 0) (m_pContainer->*m_pfOnUserEdit)(); }
01420
01421 virtual bool OnValidate (
01422 MISTRING& str
01423 ) {
01424 if (m_pfOnValidate != 0) return((m_pContainer->*m_pfOnValidate)(str));
01425 return (CTRL_EDIT_STRING::OnValidate(str));
01426 }
01427 #endif // GENERATING_DOXYGEN_OUTPUT
01428 };
01429
01430
01431
01432
01433 class FORM_EDIT_STRING : public MGUI::FORM_COMPOSITE {
01434 public:
01435
01436 FORM_EDIT_STRING (
01437 );
01438
01439
01440 virtual ~FORM_EDIT_STRING (
01441 );
01442
01443
01444 void ClearValue (
01445 bool notify = true
01446 ) { m_editctrl.ClearValue(notify); }
01447
01448
01449 void Create (
01450 MGUI::LAYOUT_PANE_BASE& ParentPane,
01451 const char *label,
01452 int maxlen,
01453 int width = 0,
01454 MGUI::CTRL_EDIT_STRING::FLAGS flags = MGUI::CTRL_EDIT_STRING::FLAG_Default,
01455 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedHeight,
01456 MGUI::CTRL_LABEL::STYLE labelstyle = MGUI::CTRL_LABEL::STYLE_LeftNoWrap
01457 );
01458
01459
01460 void Create (
01461 MGUI::LAYOUT_PANE_BASE& ParentPane,
01462 const MISTRING& label,
01463 int maxlen,
01464 int width = 0,
01465 MGUI::CTRL_EDIT_STRING::FLAGS flags = MGUI::CTRL_EDIT_STRING::FLAG_Default,
01466 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedHeight,
01467 MGUI::CTRL_LABEL::STYLE labelstyle = MGUI::CTRL_LABEL::STYLE_LeftNoWrap
01468 );
01469
01470
01471 MGUI::CTRL_EDIT_STRING& GetEditCtrl (
01472 ) { return (m_editctrl); }
01473
01474
01475
01476 MGUI::CTRL_LABEL& GetLabel (
01477 ) { return (m_label); }
01478
01479
01480 const MISTRING& GetValue (
01481 ) { return (m_editctrl.GetValue()); }
01482
01483
01484
01485 void IniRead (
01486 INIHANDLE IniHandle,
01487 const char *IniGroup,
01488 const char *IniField,
01489 bool notify = true
01490 ) { m_editctrl.IniRead(IniHandle,IniGroup,IniField,notify); }
01491
01492
01493 void IniWrite (
01494 INIHANDLE IniHandle,
01495 const char *IniGroup,
01496 const char *IniField
01497 ) const { m_editctrl.IniWrite(IniHandle,IniGroup,IniField); }
01498
01499
01500 void SetLabel (
01501 const char *label
01502 ) { m_label.SetLabel(label); }
01503
01504
01505 void SetLabel (
01506 const MISTRING& label
01507 ) { m_label.SetLabel(label); }
01508 <