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