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