00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef INC_GRE_MFCTREEVIEW_H
00024 #define INC_GRE_MFCTREEVIEW_H
00025
00026 #ifndef INC_GRE_BASE_H
00027 #include <gre/base.h>
00028 #endif
00029
00030 #ifndef INC_GRE_ELEMSAMPLEDC_H
00031 #include <gre/elemsampledc.h>
00032 #endif
00033
00034 #if !defined(_OXTOOLTIPCTRL_H__) && defined(WIN32_MFC)
00035 #include <mgui/oxttctrl.h>
00036 #endif
00037
00038 #if !defined(__TREECTRLEX_H) && defined(WIN32_MFC)
00039 #include <mgui/treectex.h>
00040 #endif
00041
00042 #if !defined(INC_MGUI_SIZINGCB_H) && defined(WIN32_MFC)
00043 #include <mgui/sizingcb.h>
00044 #endif
00045
00046 #ifndef GENERATING_DOXYGEN_OUTPUT
00047
00048
00049 #ifdef WIN32_MFC
00050
00051 class GRE_MFC_TREEVIEW {
00052 public:
00053
00054 enum IMAGEIDX {
00055 IMAGEIDX_Blank = 0,
00056 IMAGEIDX_Layout,
00057 IMAGEIDX_Group2D,
00058 IMAGEIDX_Group3D,
00059 IMAGEIDX_LayerRaster,
00060 IMAGEIDX_LayerVector,
00061 IMAGEIDX_LayerCAD,
00062 IMAGEIDX_LayerDBPinmap,
00063 IMAGEIDX_LayerMapGrid,
00064 IMAGEIDX_LayerScaleBar,
00065 IMAGEIDX_LayerText,
00066 IMAGEIDX_LayerLegend,
00067 IMAGEIDX_LayerTIN,
00068 IMAGEIDX_LayerSketch,
00069 IMAGEIDX_LayerRegion,
00070 IMAGEIDX_LayerSurface,
00071 IMAGEIDX_LayerSML,
00072 IMAGEIDX_LayerFormula,
00073 IMAGEIDX_Legend,
00074 IMAGEIDX_Tables,
00075 IMAGEIDX_ComponentNode,
00076 IMAGEIDX_ComponentPoint,
00077 IMAGEIDX_ComponentLine,
00078 IMAGEIDX_ComponentPolygon,
00079 IMAGEIDX_ComponentEdge,
00080 IMAGEIDX_ComponentTriangle,
00081 IMAGEIDX_ComponentText,
00082 IMAGEIDX_ComponentRed,
00083 IMAGEIDX_ComponentGreen,
00084 IMAGEIDX_ComponentBlue,
00085 IMAGEIDX_ComponentGray,
00086 IMAGEIDX_ComponentCyan,
00087 IMAGEIDX_ComponentMagenta,
00088 IMAGEIDX_ComponentYellow,
00089 IMAGEIDX_ComponentHue,
00090 IMAGEIDX_ComponentSaturation,
00091 IMAGEIDX_TableGeneric,
00092 IMAGEIDX_TableForm,
00093 IMAGEIDX_TableLinked,
00094 IMAGEIDX_TableStdAttrib,
00095 IMAGEIDX_TableStyle,
00096 IMAGEIDX_TableInternal,
00097 IMAGEIDX_COUNT
00098 };
00099
00100 enum ITEMTYPE {
00101 ITEMTYPE_NotUsed = 0,
00102 ITEMTYPE_Layout,
00103 ITEMTYPE_Group,
00104 ITEMTYPE_Layer,
00105 ITEMTYPE_ElementsParent,
00106 ITEMTYPE_LegendParent,
00107 ITEMTYPE_TableParent,
00108 ITEMTYPE_Component,
00109 ITEMTYPE_LegendItem,
00110 ITEMTYPE_Table,
00111 ITEMTYPE_Custom
00112 };
00113
00114 enum STATEIDX {
00115 STATEIDX_None = 0,
00116 STATEIDX_Hidden,
00117 STATEIDX_Visible,
00118 STATEIDX_NotVisibleAtScale,
00119 STATEIDX_ComponentNotSelectable,
00120 STATEIDX_ComponentSelectable,
00121
00122 STATEIDX_COUNT
00123 };
00124
00125 enum VIEWMODE {
00126 VIEWMODE_Controls = 0x01,
00127 VIEWMODE_Legend = 0x02,
00128 VIEWMODE_Mixed = 0x03
00129 };
00130
00131 class ITEMINFO;
00132
00133 typedef void (*ITEMDRAWFUNC)(GRE_MFC_TREEVIEW& TreeView, const ITEMINFO& info, bool bFocus, const CRect& rcItem, HDC hdc);
00134
00135 class ITEMINFO {
00136 public:
00137 ITEMTYPE GetType (
00138 ) const { return (m_itemtype); }
00139 void *GetPtr (
00140 ) const { return (m_itemptr); }
00141 UINT32 GetValue (
00142 ) const { return (m_itemvalue); }
00143 ITEMDRAWFUNC GetDrawFunc (
00144 ) const { return (m_ItemDrawFunc); }
00145 private:
00146 ITEMTYPE m_itemtype;
00147 void *m_itemptr;
00148 UINT32 m_itemvalue;
00149 ITEMDRAWFUNC m_ItemDrawFunc;
00150 friend class GRE_MFC_TREEVIEW;
00151 };
00152
00153
00154 GRE_MFC_TREEVIEW (
00155 GRE_VIEWABLE *viewable = 0,
00156 GRE_MFC_VIEW *mfcview = 0
00157 );
00158
00159
00160 ~GRE_MFC_TREEVIEW (
00161 );
00162
00163
00164 int ComputeHeightMult (
00165 int height
00166 ) const;
00167
00168
00169
00170 void ComputeStringForWidth (
00171 int width,
00172 MISTRING& string
00173 );
00174
00175
00176
00177 bool Create (
00178 CWnd *pParentWnd,
00179 UINT nID
00180 );
00181
00182
00183 MDLGPARENT GetDlgParent (
00184 ) { return (&m_TreeCtrl); }
00185
00186
00187 GRE_VIEW* GetView (
00188 ) const { return (m_view); }
00189
00190
00191 VIEWMODE GetViewMode (
00192 ) const { return (m_viewmode); }
00193
00194
00195 HTREEITEM InsertItem (
00196 const char *label,
00197 HTREEITEM hParent,
00198 HTREEITEM hInsertAfter,
00199 IMAGEIDX ImageIdx,
00200 ITEMTYPE ItemType,
00201 void *ItemPtr,
00202 UINT32 itemvalue = 0,
00203 STATEIDX stateidx = STATEIDX_None,
00204 int HeightMult = 1
00205 );
00206
00207
00208 HTREEITEM InsertItem (
00209 const UNICODE *label,
00210 HTREEITEM hParent,
00211 HTREEITEM hInsertAfter,
00212 IMAGEIDX ImageIdx,
00213 ITEMTYPE ItemType,
00214 void *ItemPtr,
00215 UINT32 itemvalue = 0,
00216 STATEIDX stateidx = STATEIDX_None,
00217 int HeightMult = 1
00218 );
00219
00220
00221 HTREEITEM InsertItem (
00222 const UNICODE *label,
00223 HTREEITEM hParent,
00224 HTREEITEM hInsertAfter,
00225 void *ItemPtr,
00226 UINT32 itemvalue,
00227 ITEMDRAWFUNC itemdrawfunc,
00228 ITEMTYPE ItemType = ITEMTYPE_Custom,
00229 int HeightMult = 1
00230 );
00231
00232
00233 void RedrawView (
00234 );
00235
00236
00237 void SetItemStateImage (
00238 HTREEITEM hItem,
00239 STATEIDX stateidx
00240 );
00241
00242
00243 void SetRootPrefix (
00244 const UNICODE *string
00245 );
00246
00247
00248 void SetView (
00249 GRE_MFC_VIEW *mfcview
00250 );
00251
00252
00253 void SetViewable (
00254 GRE_VIEWABLE *viewable
00255 );
00256
00257
00258 void SetViewMode (
00259 VIEWMODE viewmode
00260 );
00261
00262
00263
00264 int TrackPopupMenu (
00265 CMenu& menu,
00266 const CPoint& mpoint
00267 );
00268
00269 private:
00270
00271 class MYTREECTRL : public CTreeCtrlEx {
00272 public:
00273 MYTREECTRL (
00274 GRE_MFC_TREEVIEW& TreeView
00275 );
00276 HTREEITEM FindItemByPtr (
00277 HTREEITEM hParent,
00278 void *itemptr,
00279 ITEMTYPE itemtype = ITEMTYPE_NotUsed
00280 );
00281 bool IsCreated (
00282 ) const { return (m_hWnd != 0); }
00283 protected:
00284 afx_msg void OnBeginDrag (NM_TREEVIEW* pNM, LRESULT* pResult);
00285 afx_msg BOOL OnCustomDraw (NMTVCUSTOMDRAW* pNM, LRESULT* pResult);
00286 afx_msg void OnDeleteItem (NM_TREEVIEW* pNM, LRESULT* pResult);
00287 afx_msg void OnLButtonDown (UINT nFlags, CPoint point);
00288 afx_msg void OnRButtonDown (UINT nFlags, CPoint point);
00289 afx_msg void OnSelChanged (NM_TREEVIEW* pNM, LRESULT* pResult);
00290 afx_msg void OnSelChanging (NM_TREEVIEW* pNM, LRESULT* pResult);
00291 DECLARE_MESSAGE_MAP()
00292 private:
00293 GRE_MFC_TREEVIEW& m_TreeView;
00294 MYTREECTRL (const MYTREECTRL&);
00295 MYTREECTRL& operator= (const MYTREECTRL&);
00296 };
00297 friend class GRE_MFC_TREEVIEW::MYTREECTRL;
00298
00299 MYTREECTRL m_TreeCtrl;
00300 SIMPLE_ARRAY<ITEMINFO> m_ItemInfo;
00301 GRE_VIEWABLE *m_viewable;
00302 GRE_MFC_VIEW *m_mfcview;
00303 GRE_VIEW *m_view;
00304 VIEWMODE m_viewmode;
00305 double m_LastViewScale;
00306 GRE_ELEMSAMPLE_DC m_LegendDC;
00307 MISTRING m_RootPrefix;
00308 CMenu m_PopupMenuLayout;
00309 CMenu m_PopupMenuGroup;
00310 HTREEITEM m_hPopupItem;
00311
00312 static CImageList& GetImageList (int ImageListType);
00313 static void GRECB_Viewable (GRE_CALLBACK_MSG*, GRE_MFC_TREEVIEW*);
00314
00315 void AddGroupItem (HTREEITEM, HTREEITEM, GRE_GROUP*);
00316 void AddGroupSubItems (GRE_GROUP*, HTREEITEM hGroupItem = 0);
00317 HTREEITEM AddLayerItem (HTREEITEM, HTREEITEM, GRE_LAYER*);
00318 int AllocItem (ITEMTYPE, void*, UINT32 itemvalue = 0, ITEMDRAWFUNC itemdrawfunc = 0);
00319 HTREEITEM GetGroupItem (GRE_GROUP*);
00320 HTREEITEM GetLayerItem (GRE_LAYER*);
00321 const GRE_ELEMSAMPLE_DC& GetLegendDC (GRE_LEGEND*);
00322 void GetRootLabel (MISTRING&) const;
00323 void HandleMsgViewable (const GRE_CALLBACK_MSG&);
00324 void Init ();
00325 void OnCmdCollapseAll ();
00326 void OnCmdExpandAll ();
00327 void OnCmdSetBackgroundColor ();
00328 void OnPopupMenuGroup (const CPoint&, GRE_GROUP*);
00329 void OnPopupMenuLayout (const CPoint&, GRE_LAYOUT*);
00330 void SetGroupStateImage (GRE_GROUP*, HTREEITEM hGroupItem = 0);
00331 void SetLayerStateImage (GRE_LAYER*, HTREEITEM hLayerITem = 0);
00332 bool UpdateGroupLegend (GRE_GROUP*, HTREEITEM hGroupItem = 0, bool forceupdate = false);
00333 void UpdateRootLabel ();
00334 void UpdateVisibilityStates ();
00335 void UpdateVisibilityStatesGroup (HTREEITEM);
00336
00337
00338 GRE_MFC_TREEVIEW (const GRE_MFC_TREEVIEW&);
00339 GRE_MFC_TREEVIEW& operator= (const GRE_MFC_TREEVIEW&);
00340 };
00341
00342 #endif
00343
00344
00345
00346 #ifdef WIN32_MFC
00347
00348 class GRE_MFC_TREEVIEWBAR : public CSizingControlBarG {
00349 public:
00350
00351
00352 GRE_MFC_TREEVIEWBAR (
00353 );
00354
00355
00356 virtual ~GRE_MFC_TREEVIEWBAR (
00357 );
00358
00359
00360 BOOL CreateDft (
00361 CWnd* pParentWnd,
00362 UINT nID
00363 );
00364
00365
00366 GRE_MFC_TREEVIEW::VIEWMODE GetViewMode (
00367 ) const { return (m_TreeView.GetViewMode()); }
00368
00369
00370 void SetTitle (
00371 const UNICODE *string
00372 );
00373
00374
00375 void SetView (
00376 GRE_MFC_VIEW *mfcview
00377 ) { m_TreeView.SetView(mfcview); return; }
00378
00379
00380 void SetViewable (
00381 GRE_VIEWABLE *viewable
00382 ) { m_TreeView.SetViewable(viewable); return; }
00383
00384
00385 void SetViewMode (
00386 GRE_MFC_TREEVIEW::VIEWMODE viewmode
00387 ) { m_TreeView.SetViewMode(viewmode); return; }
00388
00389 protected:
00390 afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct);
00391 DECLARE_MESSAGE_MAP()
00392
00393 private:
00394 GRE_MFC_TREEVIEW m_TreeView;
00395 };
00396
00397 #endif
00398
00399
00400 #endif
00401
00402 #endif