00001
00066 #ifndef INC_MGUI_GRID_H
00067 #define INC_MGUI_GRID_H
00068
00069 #ifndef INC_MGUI_CTRL_H
00070 #include <mgui/ctrl.h>
00071 #endif
00072
00073 #ifndef INC_MI32_MISTRING_H
00074 #include <mi32/mistring.h>
00075 #endif
00076
00077 #ifndef INC_MI32_COLOR_H
00078 #include <mi32/color.h>
00079 #endif
00080
00081
00082 #ifndef GENERATING_DOXYGEN_OUTPUT
00083 struct LPOINT2D;
00084 namespace MGD {
00085 class CONTEXT;
00086 }
00087 namespace MGUI {
00088 class IMAGELIST;
00089 class TOOLTIP;
00090 }
00091 #endif
00092
00093
00094 namespace MGUI {
00095
00096
00103 class CTRL_GRID : public MGUI::CTRL {
00104 public:
00105
00106 enum CELLTYPE {
00107 CELLTYPE_Text = 0,
00108 CELLTYPE_Button = 1,
00109 CELLTYPE_DropDown = 2,
00110 CELLTYPE_Icon = 3,
00111 CELLTYPE_IconButton = 4,
00112 CELLTYPE_BigText = 5,
00113 CELLTYPE_PopUp = 6,
00114 CELLTYPE_Color = 7
00115 };
00116
00117 enum FORMAT {
00118 FORMAT_Left = 0,
00119 FORMAT_Right = 1,
00120 FORMAT_Center = 2
00121 };
00122
00123 enum STYLE {
00124 STYLE_AlignTop = 0x0000,
00125 STYLE_NoGridLines = 0x0001,
00126 STYLE_MultiSelect = 0x0002,
00127 STYLE_SingleSel = 0x0004,
00128 STYLE_ShowSelAlways = 0x0008,
00129 STYLE_SortAscending = 0x0010,
00130 STYLE_SortDescending = 0x0020,
00131 STYLE_NoSelect = 0x0040,
00132 STYLE_NoOuterFrame = 0x0080,
00133 STYLE_AutoArrange = 0x0100,
00134 STYLE_EditLabels = 0x0200,
00135 STYLE_SizeInPixels = 0x0400,
00136 STYLE_AlignLeft = 0x0800,
00137 STYLE_OwnerData = 0x1000,
00138 STYLE_NoScroll = 0x2000,
00139 STYLE_NoColumnHeader = 0x4000,
00140 STYLE_NoSortHeader = 0x8000,
00141 };
00142
00143 enum VIEWMODE {
00144 VIEWMODE_Icon = 0,
00145 VIEWMODE_Report = 1,
00146 VIEWMODE_SmallIcon = 2,
00147 VIEWMODE_List = 3
00148 };
00149
00150 enum IMAGELISTTYPE {
00151 IMAGELISTTYPE_Normal = 0,
00152 IMAGELISTTYPE_Small = 1,
00153 IMAGELISTTYPE_State = 2
00154 };
00155
00158 struct DISPINFO {
00159 DISPINFO () :
00160 m_indent(0),
00161 m_IconIndex(-1),
00162 m_StateImageIndex(-1),
00163 m_OverlayImageIndex(-1),
00164 m_bSelected(false),
00165 m_CellType(CELLTYPE_Text)
00166 {}
00167
00168 ~DISPINFO() {}
00169
00170 MISTRING m_text;
00171 int m_indent;
00172 int m_IconIndex;
00173 int m_StateImageIndex;
00174 int m_OverlayImageIndex;
00175 bool m_bSelected;
00176 CELLTYPE m_CellType;
00177 MISTRING m_ToolTipStr;
00178 };
00179
00181 struct CUSTOMDRAW {
00182 int row;
00183 int col;
00184 LRECT2D rect;
00185 COLOR BackgroundColor;
00186 COLOR TextColor;
00187 bool ChangedBackgroundColor;
00188 bool ChangedTextColor;
00189 MGD::CONTEXT *gc;
00190 };
00191
00192
00193 typedef fastdelegate::FastDelegate<bool(int row, int col)> DELEGATE_ONBEGINLABELEDIT;
00194 typedef fastdelegate::FastDelegate<void(int startcol, int endcol)> DELEGATE_ONCHANGECOLUMNORDER;
00195 typedef fastdelegate::FastDelegate<void(int row, int col, KEYSTATE keystate)> DELEGATE_ONCLICK;
00196 typedef fastdelegate::FastDelegate<bool(CUSTOMDRAW& customdraw)> DELEGATE_ONDRAWITEM;
00197 typedef fastdelegate::FastDelegate<bool(int row, int col, MISTRING&)> DELEGATE_ONENDLABELEDIT;
00198 typedef fastdelegate::FastDelegate<bool(int row, int col, DISPINFO&)> DELEGATE_ONGETDISPINFO;
00199 typedef fastdelegate::FastDelegate<int(UINT32 row1, UINT32 row2, int col, bool bAscending)> DELEGATE_ONITEMCOMPARE;
00200 typedef fastdelegate::FastDelegate<void(int row, int col)> DELEGATE_ONITEMSELECT;
00201 typedef fastdelegate::FastDelegate<void(int row, int col)> DELEGATE_ONITEMUNSELECT;
00202 typedef fastdelegate::FastDelegate<void(int row, int col, const LPOINT2D&point, KEYSTATE keystate)> DELEGATE_ONRIGHTCLICK;
00203 typedef fastdelegate::FastDelegate<void(int col, int width)> DELEGATE_ONRESIZECOLUMN;
00204 typedef fastdelegate::FastDelegate<bool(MGUI::CTRL_TOOLTIP&, int row, int col)> DELEGATE_ONTOOLTIP;
00205
00207 CTRL_GRID (
00208 );
00209
00211 virtual ~CTRL_GRID (
00212 );
00213
00215 void Create (
00216 MGUI::LAYOUT_PANE_BASE& ParentPane,
00217 int height = 10,
00218 int width = 40,
00219 VIEWMODE viewmode = VIEWMODE_Report,
00220 STYLE style = STYLE_AlignTop,
00221 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00222 );
00223
00225 void DeleteAllColumns (
00226 );
00227
00229 void DeleteAllItems (
00230 );
00231
00233 void DeleteColumn (
00234 int col
00235 );
00236
00238 void DeleteItem (
00239 int itemnum
00240 );
00241
00242 void DeleteItem (
00243 int itemnum,
00244 bool redrawnow
00245 );
00246
00248 void DeleteItemByData (
00249 ID id
00250 );
00251
00253 void DeselectAllItems (
00254 );
00255
00257 void EditFinish ();
00258
00261 bool EditItem (
00262 int itemnum,
00263 int column = 0,
00264 bool selectall = true
00265 );
00266
00269 bool EditItem (
00270 int itemnum,
00271 int column,
00272 const MIUNICODE *initstr,
00273 bool selectall = true
00274 );
00275
00277 void EnsureVisible (
00278 int itemnum,
00279 bool PartialOK = false
00280 );
00281
00284 int FindItemByData (
00285 const void* value
00286 ) const;
00287
00290 int FindItemByData (
00291 ID data
00292 ) const { return (FindItemByData((void*)data)); }
00293
00297 int GetBottomRow (
00298 ) const { return (GetTopRow() + GetCountPerPage()); }
00299
00301 bool GetCellRect (
00302 int itemnum,
00303 int col,
00304 LRECT2D& rect
00305 ) const;
00306
00308 int GetColumnCount (
00309 ) const;
00310
00313 bool GetColumnLabel (
00314 int column,
00315 MISTRING& label
00316 ) const;
00317
00321 ERRVALUE GetColumnOrderArray (
00322 SIMPLE_ARRAY<INT32>& array
00323 ) const;
00324
00326 int GetColumnWidth (
00327 int column
00328 ) const;
00329
00331 int GetCountPerPage (
00332 ) const;
00333
00335 int GetHeadingHeight (
00336 ) const;
00337
00339 int GetItemCount (
00340 ) const;
00341
00343 MGUI::ID GetItemData (
00344 int itemnum
00345 ) const;
00346
00347 MISTRING GetItemText (
00348 int itemnum,
00349 int subitem
00350 ) const;
00351
00354 int GetNextSelectedItem (
00355 int startitem = -1
00356 ) const;
00357
00359 int GetSelectedCount (
00360 ) const;
00361
00363 int GetTopRow (
00364 ) const;
00365
00367 int InsertColumn (
00368 int colnum,
00369 const MISTRING& string,
00370 FORMAT format = FORMAT_Left,
00371 int width = -1
00372 );
00373
00380 int InsertColumnComboBox (
00381 int colnum,
00382 const MISTRING& label,
00383 const MISTRING& menu,
00384 int width = -1
00385 );
00386
00389 int InsertItem (
00390 const MISTRING& string
00391 );
00392
00395 int InsertItem (
00396 int pos,
00397 const MISTRING& string
00398 );
00399
00402 bool IsItemSelected (
00403 int itemnum
00404 ) const;
00405
00407 void Redraw (
00408 bool updatenow = true
00409 );
00410
00412 void RedrawDisable (
00413 );
00414
00417 void RedrawEnable (
00418 );
00419
00421 void RedrawItems (
00422 int firstitemnum,
00423 int lastitemnum,
00424 bool updatenow = true
00425 );
00426
00429 bool SetColumnLabel (
00430 int column,
00431 const MISTRING& label
00432 );
00433
00435 void SetColumnOrderArray (
00436 SIMPLE_ARRAY<INT32>& array
00437 );
00438
00442 void SetColumnWidth (
00443 int column,
00444 int width
00445 );
00446
00447 void SetDelegateOnBeginLabelEdit (
00448 DELEGATE_ONBEGINLABELEDIT DelegateOnBeginLabelEdit
00449 ) { m_DelegateOnBeginLabelEdit = DelegateOnBeginLabelEdit; }
00450
00451 void SetDelegateOnChangeColumnOrder (
00452 DELEGATE_ONCHANGECOLUMNORDER DelegateOnChangeColumnOrder
00453 ) { m_DelegateOnChangeColumnOrder = DelegateOnChangeColumnOrder; }
00454
00455 void SetDelegateOnClickColumn (
00456 DELEGATE_ONCLICK DelegateOnClickColumn
00457 ) { m_DelegateOnClickColumn = DelegateOnClickColumn; }
00458
00461 void SetDelegateOnClickItem (
00462 DELEGATE_ONCLICK DelegateOnClickItem
00463 ) { m_DelegateOnClickItem = DelegateOnClickItem; }
00464
00465 void SetDelegateOnDoubleClickItem (
00466 DELEGATE_ONCLICK DelegateOnDoubleClickItem
00467 ) { m_DelegateOnDoubleClickItem = DelegateOnDoubleClickItem; }
00468
00469 void SetDelegateOnDrawItem (
00470 DELEGATE_ONDRAWITEM DelegateOnDrawItem
00471 ) { m_DelegateOnDrawItem = DelegateOnDrawItem; }
00472
00473 void SetDelegateOnEndLabelEdit (
00474 DELEGATE_ONENDLABELEDIT DelegateOnEndLabelEdit
00475 ) { m_DelegateOnEndLabelEdit = DelegateOnEndLabelEdit; }
00476
00477 void SetDelegateOnGetDispInfo (
00478 DELEGATE_ONGETDISPINFO DelegateOnGetDispInfo
00479 ) { m_DelegateOnGetDispInfo = DelegateOnGetDispInfo; }
00480
00481 void SetDelegateOnItemCompare (
00482 DELEGATE_ONITEMCOMPARE DelegateOnItemCompare
00483 ) { m_DelegateOnItemCompare = DelegateOnItemCompare; }
00484
00485 void SetDelegateOnItemSelect (
00486 DELEGATE_ONITEMSELECT DelegateOnItemSelect
00487 ) { m_DelegateOnItemSelect = DelegateOnItemSelect; }
00488
00489 void SetDelegateOnItemUnselect (
00490 DELEGATE_ONITEMUNSELECT DelegateOnItemUnselect
00491 ) { m_DelegateOnItemUnselect = DelegateOnItemUnselect; }
00492
00493 void SetDelegateOnResizeColumn (
00494 DELEGATE_ONRESIZECOLUMN DelegateOnResizeColumn
00495 ) { m_DelegateOnResizeColumn = DelegateOnResizeColumn; }
00496
00497 void SetDelegateOnRightClick (
00498 DELEGATE_ONRIGHTCLICK DelegateOnRightClick
00499 ) { m_DelegateOnRightClick = DelegateOnRightClick; }
00500
00501 void SetDelegateOnSize (
00502 DELEGATE_ONSIZE DelegateOnSize
00503 ) { m_DelegateOnSize = DelegateOnSize; }
00504
00505 void SetDelegateOnToolTip (
00506 DELEGATE_ONTOOLTIP DelegateOnToolTip
00507 ) { m_DelegateOnToolTip = DelegateOnToolTip; }
00508
00510 void SetImageList (
00511 IMAGELIST& imagelist,
00512 IMAGELISTTYPE listtype = IMAGELISTTYPE_Small,
00513 bool shared = false
00514 );
00515
00517 int SetItemCount (
00518 int NumItems
00519 );
00520
00522 void SetItemData (
00523 int itemnum,
00524 ID value
00525 );
00526
00531 void SetItemImage (
00532 int itemnum,
00533 int imageindex
00534 );
00535
00537 void SetItemSelected (
00538 int itemnum,
00539 bool selected = true
00540 );
00541
00543 void SetItemText (
00544 int itemnum,
00545 int subitem,
00546 const MISTRING& string
00547 );
00548
00550 void SetRowHeight (
00551 int pixels
00552 );
00553
00555 void SortItems (
00556 int column = 0,
00557 bool bAscending = true
00558 );
00559
00561 void Update (
00562 int itemnum
00563 );
00564
00565 protected:
00566
00567 STYLE GetStyle (
00568 ) const { return m_style; }
00569
00574 virtual bool OnBeginLabelEdit (
00575 int itemnum,
00576 int subitemnum
00577 );
00578
00580 virtual void OnChangeColumnOrder (
00581 int fromCol,
00582 int toCol
00583 );
00584
00586 virtual void OnClickColumn (
00587 int itemnum,
00588 int column,
00589 KEYSTATE state
00590 );
00591
00593 virtual void OnClickItem (
00594 int itemnum,
00595 int column,
00596 KEYSTATE state
00597 );
00598
00600 virtual void OnDoubleClickItem (
00601 int itemnum,
00602 int column,
00603 KEYSTATE state
00604 );
00605
00609 virtual bool OnDrawItem (
00610 CUSTOMDRAW& drawinfo
00611 );
00612
00617 virtual bool OnEndLabelEdit (
00618 int row,
00619 int col,
00620 MISTRING& string
00621 );
00622
00627 virtual bool OnGetDispInfo (
00628 int row,
00629 int col,
00630 CTRL_GRID::DISPINFO& dispinfo
00631 );
00632
00634 virtual void OnItemActivate (
00635 );
00636
00641 virtual int OnItemCompare (
00642 UINT32 rowitem1,
00643 UINT32 rowitem2,
00644 int colnum,
00645 bool bAscending
00646 );
00647
00649 virtual void OnItemSelect (
00650 int itemnum,
00651 int subitemnum
00652 );
00653
00655 virtual void OnItemUnselect (
00656 int itemnum,
00657 int subitemnum
00658 );
00659
00661 virtual void OnOwnerDataCacheHint (
00662 int from,
00663 int to
00664 );
00665
00667 virtual void OnRightClickItem (
00668 int itemnum,
00669 int column,
00670 const LPOINT2D&,
00671 KEYSTATE state
00672 );
00673
00675 virtual void OnUserResizeColumn (
00676 int column,
00677 int width
00678 );
00679
00681 virtual bool v_OnToolTip (
00682 MGUI::CTRL_TOOLTIP& tooltip,
00683 int row,
00684 int col
00685 );
00686
00687 private:
00688 #ifndef GENERATING_DOXYGEN_OUTPUT
00689
00690 class MyListCtrl;
00691 friend class MyListCtrl;
00692
00693 MyListCtrl *m_pCtrl;
00694 STYLE m_style;
00695 int m_PrevSelRow;
00696 int m_PrevSelCol;
00697
00698 DELEGATE_ONBEGINLABELEDIT m_DelegateOnBeginLabelEdit;
00699 DELEGATE_ONCHANGECOLUMNORDER m_DelegateOnChangeColumnOrder;
00700 DELEGATE_ONCLICK m_DelegateOnClickColumn;
00701 DELEGATE_ONCLICK m_DelegateOnClickItem;
00702 DELEGATE_ONCLICK m_DelegateOnDoubleClickItem;
00703 DELEGATE_ONDRAWITEM m_DelegateOnDrawItem;
00704 DELEGATE_ONENDLABELEDIT m_DelegateOnEndLabelEdit;
00705 DELEGATE_ONGETDISPINFO m_DelegateOnGetDispInfo;
00706 DELEGATE_ONITEMCOMPARE m_DelegateOnItemCompare;
00707 DELEGATE_ONITEMSELECT m_DelegateOnItemSelect;
00708 DELEGATE_ONITEMUNSELECT m_DelegateOnItemUnselect;
00709 DELEGATE_ONRIGHTCLICK m_DelegateOnRightClick;
00710 DELEGATE_ONRESIZECOLUMN m_DelegateOnResizeColumn;
00711 DELEGATE_ONSIZE m_DelegateOnSize;
00712 DELEGATE_ONTOOLTIP m_DelegateOnToolTip;
00713
00714 CTRL_GRID (const CTRL_GRID&);
00715 CTRL_GRID& operator= (const CTRL_GRID&);
00716 #endif // GENERATING_DOXYGEN_OUTPUT
00717 };
00718
00719 #ifndef GENERATING_DOXYGEN_OUTPUT
00720 DEFINE_ENUM_OP_BITWISE(MGUI::CTRL_GRID::STYLE)
00721 #endif
00722
00723
00724
00725 }
00726
00727 #endif // INC_MGUI_GRID_H
00728