00001
00068 #ifndef INC_MGUI_LAYOUT_H
00069 #define INC_MGUI_LAYOUT_H
00070
00071 #ifndef INC_MGUI_BASE_H
00072 #include <mgui/base.h>
00073 #endif
00074
00075 #ifndef INC_MI32_XTABPAGE_H
00076 #include <mi32/xtabpage.h>
00077 #endif
00078
00079 #ifndef INC_MI32_SIMPLEAR_H
00080 #include <mi32/simplear.h>
00081 #endif
00082
00083
00084 #ifndef GENERATING_DOXYGEN_OUTPUT
00085
00086 class MISTRING;
00087 struct COLOR;
00088 class SML_GUI_INTERFACE_BASE;
00089 namespace MGUI {
00090 class LAYOUT_PANE_ROOT;
00091 class LAYOUT_PANE_SHELL;
00092 class LAYOUT_PAGE;
00093 }
00094 #endif
00095
00096
00097 namespace MGUI {
00098
00099
00100
00102 class LAYOUT_PANE_BASE {
00103 public:
00104
00106 LAYOUT_PANE_BASE (
00107 ):
00108 m_PaneWidget(0)
00109 { }
00110
00112 virtual ~LAYOUT_PANE_BASE () = 0;
00113
00115 void AddSpaceExpanding ();
00116
00118 void AddSpaceFixed (
00119 int size
00120 );
00121
00123 int ComputeNumFittingCharacters (
00124 const MISTRING& str,
00125 int width
00126 ) const;
00127
00129 MGUI::POINT ComputeTextSize (
00130 int width
00131 ) const;
00132
00134 MGUI::POINT ComputeTextSize (
00135 const MISTRING& str
00136 ) const;
00137
00139 MGUI::POINT ComputeTextSize (
00140 TEXTID textid
00141 ) const;
00142
00144 MGUI::POINT ComputeTextSize (
00145 const MIUNICODE *str
00146 ) const;
00147
00149 void GetBackgroundColor (
00150 COLOR& color
00151 ) const;
00152
00154 MGUI::POINT GetDimensions () const;
00155
00157 MDLGPARENT GetDlgParent (
00158 ) const;
00159
00161 int GetTextMaxHeight ();
00162
00164 Widget GetWidget (
00165 ) const { return (m_PaneWidget); }
00166
00168 void Invalidate (
00169 bool erase = true
00170 );
00171
00173 bool IsCreated () const
00174 { return (m_PaneWidget != 0); }
00175
00178 bool IsVisible (
00179 ) const;
00180
00182 void SetBackgroundColor (
00183 const COLOR& color
00184 );
00185
00187 void SetDimensions (
00188 MGUI::POINT dim
00189 );
00190
00192 void SetEnabled (
00193 bool enabled
00194 );
00195
00197 void SetMinimumSize (
00198 int width,
00199 int height
00200 );
00201
00203 void SetVisible (
00204 bool visible
00205 );
00206
00209 void UpdateLayout (
00210 ) { }
00211
00212 #ifndef GENERATING_DOXYGEN_OUTPUT
00215 virtual SML_GUI_INTERFACE_BASE* GetSMLInterface (
00216 );
00217 #endif
00218
00219 protected:
00220
00221 void SetPaneWidget (Widget PaneWidget);
00222
00223 private:
00224 #ifndef GENERATING_DOXYGEN_OUTPUT
00225
00226 Widget m_PaneWidget;
00227
00228 static void CB_Destroy (Widget, LAYOUT_PANE_BASE*, void*);
00229
00230 LAYOUT_PANE_BASE (const LAYOUT_PANE_BASE&);
00231 LAYOUT_PANE_BASE& operator= (const LAYOUT_PANE_BASE&);
00232
00233 #endif // GENERATING_DOXYGEN_OUTPUT
00234 };
00235
00236
00237
00239 class LAYOUT_PANE_ROOT : public MGUI::LAYOUT_PANE_BASE {
00240 public:
00241
00243 LAYOUT_PANE_ROOT (
00244 ) { }
00245
00247 virtual ~LAYOUT_PANE_ROOT ();
00248
00250 void Init (
00251 Widget TopPaneWidget
00252 ) { SetPaneWidget(TopPaneWidget); }
00253
00254 private:
00255 #ifndef GENERATING_DOXYGEN_OUTPUT
00256 LAYOUT_PANE_ROOT (const LAYOUT_PANE_ROOT&);
00257 LAYOUT_PANE_ROOT& operator= (const LAYOUT_PANE_ROOT&);
00258 #endif // GENERATING_DOXYGEN_OUTPUT
00259 };
00260
00261
00262
00264 class LAYOUT_PANE_SHELL : public MGUI::LAYOUT_PANE_ROOT {
00265 public:
00266
00268 LAYOUT_PANE_SHELL (
00269 ) { }
00270
00271 private:
00272 #ifndef GENERATING_DOXYGEN_OUTPUT
00273 LAYOUT_PANE_SHELL (const LAYOUT_PANE_SHELL&);
00274 LAYOUT_PANE_SHELL& operator= (const LAYOUT_PANE_SHELL&);
00275 #endif // GENERATING_DOXYGEN_OUTPUT
00276 };
00277
00278
00279
00281 class LAYOUT_PANE : public MGUI::LAYOUT_PANE_BASE {
00282 public:
00283
00285 LAYOUT_PANE (
00286 ) { }
00287
00289 virtual ~LAYOUT_PANE (
00290 ) { }
00291
00293 void Create (
00294 MGUI::LAYOUT_PANE_BASE& pane,
00295 MGUI::LAYOUT_ORIENTATION orientation,
00296 MGUI::LAYOUT_SIZEALIGN sizealign,
00297 int ChildSpacing = 4,
00298 int ExtraBorder = 0
00299 );
00300
00301 private:
00302 #ifndef GENERATING_DOXYGEN_OUTPUT
00303 LAYOUT_PANE (const LAYOUT_PANE&);
00304 LAYOUT_PANE& operator= (const LAYOUT_PANE&);
00305 #endif // GENERATING_DOXYGEN_OUTPUT
00306 };
00307
00308
00309
00314 class LAYOUT_PANE_SASH : public MGUI::LAYOUT_PANE_BASE {
00315 public:
00316
00318 LAYOUT_PANE_SASH (
00319 );
00320
00322 virtual ~LAYOUT_PANE_SASH (
00323 );
00324
00327 void Create (
00328 MGUI::LAYOUT_PANE_BASE& pane,
00329 int Thickness = 4,
00330 int ChildSpacing = 4,
00331 int ExtraBorder = 0
00332 );
00333
00336 void SetDelegateOnMoved (
00337 DELEGATE_VOID_NOPARMS delegate
00338 );
00339
00340 private:
00341 #ifndef GENERATING_DOXYGEN_OUTPUT
00342 class PRIV;
00343 PRIV *m_pPriv;
00344
00345 LAYOUT_PANE_SASH (const LAYOUT_PANE_SASH&);
00346 LAYOUT_PANE_SASH& operator= (const LAYOUT_PANE_SASH&);
00347 #endif // GENERATING_DOXYGEN_OUTPUT
00348 };
00349
00350
00351
00354 class LAYOUT_BOOK : public MGUI::LAYOUT_PANE_BASE {
00355 public:
00356
00358 LAYOUT_BOOK (
00359 );
00360
00362 void Create (
00363 );
00364
00367 int GetActiveIndex (
00368 ) const;
00369
00370 MGUI::LAYOUT_PANE_BASE* GetParentPane (
00371 ) { return (m_pParentPane); }
00372
00374 void Initialize (
00375 MGUI::LAYOUT_PANE_BASE& ParentPane,
00376 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_FixedSize
00377 );
00378
00380 void SetActiveIndex (
00381 int index
00382 );
00383
00384 private:
00385 #ifndef GENERATING_DOXYGEN_OUTPUT
00386
00387 SIMPLE_ARRAY<MxTABPAGEITEM> m_TabPageItems;
00388 Widget m_TabPage;
00389 MGUI::LAYOUT_PANE_BASE *m_pParentPane;
00390 LAYOUT_SIZEALIGN m_sizealign;
00391
00392 static void TABCB_Create (Widget, int, void*);
00393 static void TABCB_Activate (Widget, int, void*);
00394 static void TABCB_Deactivate (Widget, int, void*);
00395
00396 LAYOUT_BOOK (const LAYOUT_BOOK&);
00397 LAYOUT_BOOK& operator= (const LAYOUT_BOOK&);
00398
00399 friend class LAYOUT_PAGE;
00400 #endif // GENERATING_DOXYGEN_OUTPUT
00401 };
00402
00403
00404
00406 class LAYOUT_PAGE : public MGUI::LAYOUT_PANE_ROOT {
00407 public:
00408
00409 typedef fastdelegate::FastDelegate<void(LAYOUT_PAGE&)> DELEGATE;
00410
00412 LAYOUT_PAGE (
00413 );
00414
00416 virtual ~LAYOUT_PAGE (
00417 );
00418
00421 int Create (
00422 MGUI::LAYOUT_BOOK& book,
00423 const MISTRING& label,
00424 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical
00425 );
00426
00430 int Create (
00431 MGUI::LAYOUT_BOOK& book,
00432 const MISTRING& label,
00433 DELEGATE DelegateOnInitPage,
00434 MGUI::LAYOUT_ORIENTATION orientation = MGUI::LAYOUT_ORIENTATION_Vertical,
00435 bool IgnoreNonVisible = false,
00436 bool AddSpaceAtEnd = true
00437 );
00438
00440 bool IsActive (
00441 ) const;
00442
00445 void SetDelegateOnInitPage (
00446 DELEGATE delegate
00447 ) { m_DelegateOnInitPage = delegate; }
00448
00450 void SetDelegateOnSetActive (
00451 DELEGATE delegate
00452 ) { m_DelegateOnSetActive = delegate; }
00453
00455 void SetDelegateOnSetInactive (
00456 DELEGATE delegate
00457 ) { m_DelegateOnSetInactive = delegate; }
00458
00460 void SetEnabled (
00461 bool enabled = true
00462 );
00463
00466 void SetIgnoreNonVisible (
00467 bool IgnoreNonVisible = true
00468 ) { m_IgnoreNonVisible = IgnoreNonVisible; }
00469
00473 void SetNoSpaceExpanding (
00474 bool NoSpaceExpanding = true
00475 ) { m_NoSpaceExpanding = NoSpaceExpanding; }
00476
00477 private:
00478 #ifndef GENERATING_DOXYGEN_OUTPUT
00479 int m_index;
00480 LAYOUT_BOOK *m_pBook;
00481 MGUI::LAYOUT_ORIENTATION m_Orientation;
00482 bool m_IgnoreNonVisible;
00483 bool m_NoSpaceExpanding;
00484 DELEGATE m_DelegateOnInitPage;
00485 DELEGATE m_DelegateOnSetActive;
00486 DELEGATE m_DelegateOnSetInactive;
00487
00488 LAYOUT_PAGE (const LAYOUT_PAGE&);
00489 LAYOUT_PAGE& operator= (const LAYOUT_PAGE&);
00490
00491 friend class LAYOUT_BOOK;
00492 #endif // GENERATING_DOXYGEN_OUTPUT
00493
00494
00495
00499 virtual void OnInitPage (
00500 );
00501
00503 virtual void v_OnSetActive (
00504 );
00505
00507 virtual void v_OnSetInactive (
00508 );
00509
00510 };
00511
00512
00513
00515 class LAYOUT_EQUALIZER {
00516 public:
00517
00519 enum EQUALIZE {
00520 EQUALIZE_Width = 1,
00521 EQUALIZE_Height = 2,
00522 EQUALIZE_Both = 3
00523 };
00524
00526 LAYOUT_EQUALIZER (
00527 EQUALIZE equalize = EQUALIZE_Width
00528 );
00529
00531 ~LAYOUT_EQUALIZER (
00532 );
00533
00535 void Add (
00536 MGUI::CTRL& control
00537 );
00538
00541 void Equalize ();
00542
00544 void SetEqualize (
00545 EQUALIZE equalize
00546 ) { m_equalize = equalize; }
00547
00548 void SetMinimumSize (
00549 int minwidth,
00550 int minheight = 0
00551 ) { m_minwidth = minwidth; m_minheight = minheight; }
00552
00553 private:
00554 #ifndef GENERATING_DOXYGEN_OUTPUT
00555
00556 class WLIST;
00557
00558 EQUALIZE m_equalize;
00559 WLIST *m_plist;
00560 int m_minwidth;
00561 int m_minheight;
00562
00563 LAYOUT_EQUALIZER (const LAYOUT_EQUALIZER&);
00564 LAYOUT_EQUALIZER& operator= (const LAYOUT_EQUALIZER&);
00565 #endif // GENERATING_DOXYGEN_OUTPUT
00566 };
00567
00568
00569
00570 }
00571
00572 #endif // INC_MGUI_LAYOUT_H