00001
00071 #ifndef INC_GRE_UITREEVIEW_H
00072 #define INC_GRE_UITREEVIEW_H
00073
00074 #ifndef INC_GRE_ELEMSAMPLEDC_H
00075 #include <gre/elemsampledc.h>
00076 #endif
00077
00078 #ifndef INC_MGUI_TREE_H
00079 #include <mgui/tree.h>
00080 #endif
00081
00082 #ifndef INC_MGUI_IMAGELST_H
00083 #include <mgui/imagelst.h>
00084 #endif
00085
00086 #ifndef INC_MAP
00087 #include <map>
00088 #endif
00089
00090 namespace GRE {
00091
00092
00095 class CTRL_TREEVIEW : public MGUI::CTRL_TREE {
00096 public:
00097
00098 enum IMAGEIDX {
00099 IMAGEIDX_Blank = 0,
00100 IMAGEIDX_Layout,
00101 IMAGEIDX_Group2D,
00102 IMAGEIDX_Group3D,
00103 IMAGEIDX_Legend,
00104 IMAGEIDX_Component_Node,
00105 IMAGEIDX_Component_Point,
00106 IMAGEIDX_Component_Line,
00107 IMAGEIDX_Component_Polygon,
00108 IMAGEIDX_Component_Edge,
00109 IMAGEIDX_Component_Triangle,
00110 IMAGEIDX_Component_Text,
00111 IMAGEIDX_Component_Element,
00112 IMAGEIDX_Table_Generic,
00113 IMAGEIDX_Table_Form,
00114 IMAGEIDX_Table_Linked,
00115 IMAGEIDX_Table_StdAttrib,
00116 IMAGEIDX_Table_Style,
00117 IMAGEIDX_Table_Internal,
00118 IMAGEIDX_Table_LinkedMissing,
00119 };
00120
00122 enum STATEIDX {
00123 STATEIDX_None = 0,
00124 STATEIDX_Hidden = 1,
00125 STATEIDX_Visible = 2,
00126 STATEIDX_VisibleNotAll = 3,
00127 STATEIDX_ComponentNotSelectable = 4,
00128 STATEIDX_ComponentSelectable = 5,
00129 STATEIDX_Blank = 6,
00130
00131 };
00132
00133 enum VIEWMODE {
00134 VIEWMODE_Automatic = 0x00,
00135 VIEWMODE_Controls = 0x01,
00136 VIEWMODE_Legend = 0x02,
00137 VIEWMODE_Mixed = 0x03
00138 };
00139
00140 class SHARED {
00141 public:
00143 MGUI::IMAGELIST& GetImageListPrimary (
00144 ) { return (m_ImageListPrimary); }
00146 MGUI::IMAGELIST& GetImageListState (
00147 ) { return (m_ImageListState); }
00148 private:
00149 #ifndef GENERATING_DOXYGEN_OUTPUT
00150 MGUI::IMAGELIST m_ImageListPrimary;
00151 MGUI::IMAGELIST m_ImageListState;
00152 SHARED ();
00153 SHARED (const SHARED&);
00154 SHARED& operator= (const SHARED&);
00155 friend class CTRL_TREEVIEW;
00156 #endif
00157 };
00158
00160 typedef FastDelegate<bool(CTRL_TREEVIEW&,ITEMHND,HITRESULT,const LPOINT2D&,MGUI::POINTERBUTTON,MGUI::KEYSTATE)> DELEGATE_BUTTON;
00161
00163 typedef FastDelegate<MGUI::CUSTOMDRAW::RETVALUE(CTRL_TREEVIEW&,MGUI::CUSTOMDRAW_TREE&)> DELEGATE_CUSTOMDRAW;
00164
00166 typedef FastDelegate<void(CTRL_TREEVIEW&,ITEMHND)> DELEGATE_ITEM;
00167
00169 typedef FastDelegate<void(CTRL_TREEVIEW&,ITEMVALUES,ITEMINFO&)> DELEGATE_GETITEMINFO;
00170
00172 typedef FastDelegate<void(CTRL_TREEVIEW&,ITEMHND,CHILDVISIBILITY)> DELEGATE_VISIBILITYCHANGED;
00173
00175 typedef FastDelegate<bool(CTRL_TREEVIEW&,ITEMHND,CHILDVISIBILITY)> DELEGATE_VISIBILITYCHANGING;
00176
00178 typedef FastDelegate<bool(CTRL_TREEVIEW&,ITEMHND,HITRESULT,const LPOINT2D&,MGUI::CTRL_TOOLTIP&)> DELEGATE_TOOLTIP;
00179
00181 static SHARED& GetShared (
00182 );
00183
00185 CTRL_TREEVIEW ();
00186
00188 virtual ~CTRL_TREEVIEW ();
00189
00191 void Attach (
00192 VIEWABLE *viewable
00193 );
00194
00196 void Attach (
00197 VIEWABLE *viewable,
00198 bool ShowTopObject
00199 );
00200
00202 void Attach (
00203 GRE::VIEW *view
00204 );
00205
00207 void AttachAll (
00208 );
00209
00211 void Detach (
00212 );
00213
00215 ITEMHND GetItemFromPtr (
00216 const void *ptr
00217 ) const;
00218
00220 ITEMHND GetItemFromObject (
00221 const GRE::OBJECT *object
00222 ) const;
00223
00225 const ELEMSAMPLE_DC& GetLegendDC (
00226 GRE::LEGEND& legend,
00227 MGD::CONTEXT *pgc
00228 );
00229
00231 void* GetPtr (
00232 ITEMHND hndItem
00233 ) const;
00234
00236 GRE::VIEW* GetView (
00237 ) const { return (m_view); }
00238
00240 GRE::VIEWABLE* GetViewable (
00241 ) const { return (m_viewable); }
00242
00244 VIEWMODE GetViewMode (
00245 ) const { return (m_viewmode); }
00246
00248 ITEMHND Insert (
00249 const MISTRING& name,
00250 ITEMHND hndParent,
00251 ITEMHND hndInsertAfter,
00252 int ImageIdx,
00253 void *object,
00254 STATEIDX StateIdx = STATEIDX_None
00255 );
00256
00257 bool IsAllBold (
00258 ITEMHND hndItem
00259 ) const;
00260
00263 void SetAutoExpandWhenAddFirstChild (
00264 bool AutoExpand
00265 ) { m_AutoExpandWhenAddFirstChild = AutoExpand; }
00266
00268 void SetDelegateOnChildVisibilityChanged (
00269 ITEMHND hndItem,
00270 DELEGATE_VISIBILITYCHANGED delegate
00271 );
00272
00274 void SetDelegateOnChildVisibilityChanging (
00275 ITEMHND hndItem,
00276 DELEGATE_VISIBILITYCHANGING delegate
00277 );
00278
00280 void SetDelegateOnCustomDraw (
00281 ITEMHND hndItem,
00282 DELEGATE_CUSTOMDRAW delegate
00283 );
00284
00286 void SetDelegateOnGetItemInfo (
00287 ITEMHND hndItem,
00288 DELEGATE_GETITEMINFO delegate
00289 );
00290
00292 void SetDelegateOnItemChangePosition (
00293 ITEMHND hndItem,
00294 DELEGATE_ITEM delegate
00295 );
00296
00299 void SetDelegateOnPointerButtonDown (
00300 ITEMHND hndItem,
00301 DELEGATE_BUTTON delegate
00302 );
00303
00305 void SetDelegateOnToolTipRequest (
00306 ITEMHND hndItem,
00307 DELEGATE_TOOLTIP delegate
00308 );
00309
00311 void SetPtr (
00312 ITEMHND hndItem,
00313 void *ptr
00314 );
00315
00316 void SetViewMode (
00317 VIEWMODE viewmode
00318 );
00319
00320 private:
00321 #ifndef GENERATING_DOXYGEN_OUTPUT
00322
00323 class ITEM;
00324 typedef std::map<void*,ITEMHND> PTRHNDMAP;
00325
00326 VIEWMODE m_viewmode;
00327 VIEWABLE *m_viewable;
00328 GRE::VIEW *m_view;
00329 bool m_IncludeTopObject;
00330 bool m_AutoExpandWhenAddFirstChild;
00331 PTRHNDMAP m_PtrHndMap;
00332 ELEMSAMPLE_DC m_LegendDC;
00333
00334 static void GRECB_Object (
00335 const GRE::MSG *msg,
00336 void *vpTree
00337 );
00338
00339 void Attach (VIEWABLE *viewable, GRE::VIEW *view, bool ShowTopObject);
00340 unsigned int ComputeGroupStateIdx (GRE::GROUP *group, bool skiplocator = false) const;
00341
00342 ITEM* GetItem (
00343 ITEMHND hndItem
00344 ) const { return (static_cast<ITEM*>(reinterpret_cast<void*>(GetItemID(hndItem)))); }
00345
00346 ITEM* GetItem (ITEMHND hndItem, bool create);
00347 ITEMHND InsertGroupItem (GRE::GROUP *group, ITEMHND hndParent, ITEMHND hndInsertAfter);
00348 ITEMHND InsertGroupSubItems (GRE::GROUP *group, ITEMHND hndParent, ITEMHND hndInsertAfter);
00349 ITEMHND InsertLayoutItem (GRE::LAYOUT *layout, ITEMHND hndParent, ITEMHND hndInsertAfter);
00350 void InsertLayoutSubItems (GRE::LAYOUT *layout, ITEMHND hndParent);
00351
00352 void OnGreMsg (const GRE::MSG& msg);
00353 void OnGroupChangePosition (CTRL_TREEVIEW&, ITEMHND);
00354 void OnGroupChildVisibilityChanged (CTRL_TREEVIEW&, ITEMHND, CHILDVISIBILITY);
00355 bool OnGroupPointerButton (CTRL_TREEVIEW&, ITEMHND, HITRESULT, const LPOINT2D&, MGUI::POINTERBUTTON, MGUI::KEYSTATE);
00356 bool OnGroupToolTipRequest (CTRL_TREEVIEW&, ITEMHND, HITRESULT, const LPOINT2D&, MGUI::CTRL_TOOLTIP&);
00357 bool OnLayoutPointerButton (CTRL_TREEVIEW&, ITEMHND, HITRESULT, const LPOINT2D&, MGUI::POINTERBUTTON, MGUI::KEYSTATE);
00358 bool OnLayoutToolTipRequest (CTRL_TREEVIEW&, ITEMHND, HITRESULT, const LPOINT2D&, MGUI::CTRL_TOOLTIP&);
00359 void PopupMenuGroup(GRE::GROUP*, const LPOINT2D&);
00360 void PopupMenuLayout(GRE::LAYOUT*, const LPOINT2D&);
00361 void RemoveGreMsgHandler ();
00362 void SetAllStateImages ();
00363 void SetAllStateImages (GRE::LAYOUT*);
00364 void SetAllStateImages (GRE::GROUP*);
00365 void SetGroupStateImage (GRE::GROUP*, ITEMHND hndGroupItem = ITEMHND_None);
00366 bool UpdateGroupLegend (GRE::GROUP*, bool forceupdate = false);
00367
00368
00369 virtual void v_OnChildVisibilityChanged (ITEMHND hndItem, CHILDVISIBILITY visibility);
00370 virtual bool v_OnChildVisibilityChanging (ITEMHND hndItem, CHILDVISIBILITY visibility);
00371 virtual MGUI::CUSTOMDRAW::RETVALUE v_OnCustomDraw (MGUI::CUSTOMDRAW_TREE& CustomDraw);
00372 virtual void v_OnDestroyItem (ITEMHND hndItem);
00373 virtual void v_OnGetItemInfo (ITEMVALUES RequestedValue, ITEMINFO& ItemInfo);
00374 virtual void v_OnItemChangePosition (ITEMHND hndItem);
00375 virtual void v_OnPointerButtonDown (ITEMHND hndItem, HITRESULT HitResult, const LPOINT2D& point, MGUI::POINTERBUTTON button, MGUI::KEYSTATE keystate);
00376 virtual void v_OnPreInsertItem (ITEMINFO& ItemInfo);
00377 virtual bool v_OnToolTipRequest (ITEMHND hndItem, HITRESULT HitResult, const LPOINT2D& point, MGUI::CTRL_TOOLTIP& ToolTipCtrl);
00378
00379 CTRL_TREEVIEW (const CTRL_TREEVIEW&);
00380 CTRL_TREEVIEW& operator= (const CTRL_TREEVIEW&);
00381 #endif // GENERATING_DOXYGEN_OUTPUT
00382 };
00383
00384
00385 }
00386
00387 #endif // INC_GRE_UITREEVIEW_H