mfctreeview.h

Go to the documentation of this file.
00001 /**
00002  * \file mfctreeview.h <gre/mfctreeview.h>
00003  * \brief GRE MFC_TREEVIEW class
00004  *
00005  * \if NODOC
00006  * $Id: mfctreeview.h_v 1.4 2003/09/15 13:48:59 fileserver!dwilliss Exp $
00007  *
00008  * $Log: mfctreeview.h_v $
00009  * Revision 1.4  2003/09/15 13:48:59  fileserver!dwilliss
00010  * Doxygen
00011  *
00012  * Revision 1.3  2003/07/30 15:36:35  mju
00013  * Ignore entire header as for legacy only.
00014  *
00015  * Revision 1.2  2003/06/18 13:56:59  mju
00016  * Include stuff for MFC.
00017  *
00018  * Revision 1.1  2003/06/17 13:40:07  mju
00019  * Initial revision
00020  * \endif
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          //! Maximum of 15 state images!
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       //! Constructor.
00154       GRE_MFC_TREEVIEW (
00155          GRE_VIEWABLE *viewable = 0,
00156          GRE_MFC_VIEW *mfcview = 0
00157          );
00158 
00159       //! Destructor.
00160       ~GRE_MFC_TREEVIEW (
00161          );
00162 
00163       //! Compute item height multiplier for desired height in pixels.
00164       int ComputeHeightMult (
00165          int height                          //!< Desired item height in pixels
00166          ) const;
00167 
00168       //! Compute string of specified width.
00169       //! This is used by custom-draw for a base label where the legend sample goes.
00170       void ComputeStringForWidth (
00171          int width,                          //!< Width in pixels
00172          MISTRING& string                    //!< String returned
00173          );
00174 
00175       //! Create the control.
00176       //! Returns 'false' if failed or 'true' if succeeded.
00177       bool Create (
00178          CWnd *pParentWnd,
00179          UINT nID
00180          );
00181 
00182       //! Get DLGPARENT using TreeView.
00183       MDLGPARENT GetDlgParent (
00184          ) { return (&m_TreeCtrl); }
00185 
00186       //! Get GRE_VIEW pointer.
00187       GRE_VIEW* GetView (
00188          ) const { return (m_view); }
00189 
00190       //! Get current viewing mode.
00191       VIEWMODE GetViewMode (
00192          ) const { return (m_viewmode); }
00193 
00194       //! Insert item into TreeView with label from resource lookup.
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       //! Insert item into TreeView with UNICODE label.
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       //! Insert custom-drawn item.
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       //! Redraw view, uses 50 millisecond delay to avoid flashing.
00233       void RedrawView (
00234          );
00235 
00236       //! Set "state image" for item.
00237       void SetItemStateImage (
00238          HTREEITEM hItem,
00239          STATEIDX stateidx
00240          );
00241 
00242       //! Set root item label prefix.
00243       void SetRootPrefix (
00244          const UNICODE *string
00245          );
00246 
00247       //! Set associated view.
00248       void SetView (
00249          GRE_MFC_VIEW *mfcview
00250          );
00251 
00252       //! Set viewable object.
00253       void SetViewable (
00254          GRE_VIEWABLE *viewable
00255          );
00256 
00257       //! Set viewing mode.
00258       void SetViewMode (
00259          VIEWMODE viewmode
00260          );
00261 
00262       //! Track popup menu on right mouse button.
00263       //! @return Command ID of menu item chosen or 0 if none/error.
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       // UNIMPLEMENTED
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       //! Constructor.
00352       GRE_MFC_TREEVIEWBAR (
00353          );
00354 
00355       //! Destructor.
00356       virtual ~GRE_MFC_TREEVIEWBAR (
00357          );
00358 
00359       //! Create with default options.
00360       BOOL CreateDft (
00361          CWnd* pParentWnd,
00362          UINT nID
00363          );
00364 
00365       //! Get current viewing mode.
00366       GRE_MFC_TREEVIEW::VIEWMODE GetViewMode (
00367          ) const { return (m_TreeView.GetViewMode()); }
00368 
00369       //! Set title prefix for when undocked.
00370       void SetTitle (
00371          const UNICODE *string
00372          );
00373 
00374       //! Set view to associate with TreeView.
00375       void SetView (
00376          GRE_MFC_VIEW *mfcview
00377          ) { m_TreeView.SetView(mfcview); return; }
00378 
00379       //! Set viewable object.
00380       void SetViewable (
00381          GRE_VIEWABLE *viewable
00382          ) { m_TreeView.SetViewable(viewable); return; }
00383 
00384       //! Set viewing mode.
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 //!< GENERATING_DOXYGEN_OUTPUT
00401 
00402 #endif   //!< INC_GRE_MFCTREEVIEW_H

Generated on Tue Dec 14 13:18:14 2004 for TNTsdk by  doxygen 1.3.8-20040913