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

Generated on Wed May 31 15:26:41 2006 for TNTsdk by  doxygen 1.3.8-20040913