//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: amcview.h // //-------------------------------------------------------------------------- // AMCView.h : interface of the CAMCView class // ///////////////////////////////////////////////////////////////////////////// #ifndef __AMCVIEW_H__ #define __AMCVIEW_H__ #ifndef __CONTROLS_H__ #include "controls.h" #endif // this is needed for inline CAMCView::GetScopeTreePtr below #ifndef AMCDOC_H__ #include "amcdoc.h" #endif // this is needed for CAMCView::GetParentFrame below #ifndef CHILDFRM_H #include "childfrm.h" #endif #include "amcpriv.h" #include "cclvctl.h" #include "amcnav.h" #include "conview.h" // for CConsoleView #include "treeobsv.h" #include "stdbar.h" #define UNINIT_VALUE -1 // Unitialised value #define BORDERPADDING 4 // Some multiple that stops the splitter from // being pushed into the right border #define AMC_LISTCTRL_CLSID _T("{1B3C1394-D68B-11CF-8C2B-00AA003CA9F6}") // REVIEW embed this in the class so it's hidden // NOTE struct added to protected section // Forward declarations class CAMCDoc; class CAMCTreeView; class CAMCGenericOcxCtrl; class CAMCWebViewCtrl; class CAMCView; class CListViewSub; class CCCListViewCtrl; class COCXHostView; class CHistoryList; class CChildFrame; class CViewTracker; class CBookmark; class CTaskPadHost; class CMemento; class CViewSettings; class CFolderTabView; class CMMCToolBar; class CAMCViewToolbars; class CStandardToolbar; struct NMFOLDERTAB; struct TRACKER_INFO; struct SViewUpdateInfo; typedef CList CHMTNODEList; #ifdef DBG extern CTraceTag tagSplitterTracking; #endif //____________________________________________________________________________ // // class: ViewSettings //____________________________________________________________________________ // class ViewSettings { public: struct ScopeSettings { int cxWidth; int cxMin; }; explicit ViewSettings(CAMCView* v); ~ViewSettings() { } int GetViewID() const { return m_nViewID; } BOOL IsDescriptionbarVisible() const { return m_bDescriptionbarVisible; } int GetViewMode() const { return m_nViewMode; } long GetListViewStyle() const { return m_nListViewStyle; } const ScopeSettings& GetScopeSettings() const { return m_Scope; } BOOL IsScopePaneVisible() const { return m_bScopePaneVisible; } void GetDefaultColumnWidths(int w[2]) { w[0] = m_DefaultColumnWidths[0]; w[1] = m_DefaultColumnWidths[1]; } long GetDefaultLVStyle() { return m_DefaultLVStyle; } private: int m_nViewID; BOOL m_bDescriptionbarVisible; int m_nViewMode; long m_nListViewStyle; ScopeSettings m_Scope; BOOL m_bScopePaneVisible; long m_DefaultLVStyle; int m_DefaultColumnWidths[2]; }; /*+-------------------------------------------------------------------------* * class CAMCView * * * PURPOSE: The console view UI class * *+-------------------------------------------------------------------------*/ class CAMCView: public CView, public CConsoleView, public CTiedObject, public CXMLObject, public CEventSource, public CTreeViewObserver, public CListViewActivationObserver, public COCXHostActivationObserver, public CAMCDocumentObserver, public CListViewObserver { friend class CMainFrame; friend void CALLBACK TrackerCallback(TRACKER_INFO* pinfo, bool bAcceptChange, bool fSyncLayout); // Object model related private: ViewPtr m_spView; public: // View interface //####################################################################### //####################################################################### // // Item and item collection related methods // //####################################################################### //####################################################################### SC Scget_ActiveScopeNode( PPNODE ppNode); SC Scput_ActiveScopeNode( PNODE pNode); SC Scget_Selection( PPNODES ppNodes); SC Scget_ListItems( PPNODES ppNodes); SC ScSnapinScopeObject( VARIANT& varScopeNode, PPDISPATCH ScopeNodeObject); SC ScSnapinSelectionObject( PPDISPATCH SelectedObject); //####################################################################### //####################################################################### SC ScIs (PVIEW pView, VARIANT_BOOL *pbTheSame); SC Scget_Document( PPDOCUMENT ppDocument ); //####################################################################### //####################################################################### // // Selection changing methods // //####################################################################### //####################################################################### SC ScSelectAll(); SC ScSelect( PNODE pNode); SC ScDeselect( PNODE pNode); SC ScIsSelected( PNODE pNode, PBOOL pIsSelected); //####################################################################### //####################################################################### // // Verb and selection related methods // //####################################################################### //####################################################################### SC ScDisplayScopeNodePropertySheet(VARIANT& varScopeNode); SC ScDisplaySelectionPropertySheet(); SC ScCopyScopeNode( VARIANT& varScopeNode); SC ScCopySelection(); SC ScDeleteScopeNode( VARIANT& varScopeNode); SC ScDeleteSelection(); SC ScRenameScopeNode( BSTR bstrNewName, VARIANT& varScopeNode); SC ScRenameSelectedItem( BSTR bstrNewName); SC Scget_ScopeNodeContextMenu( VARIANT& varScopeNode, PPCONTEXTMENU ppContextMenu, bool bMatchGivenNode = false); SC Scget_SelectionContextMenu( PPCONTEXTMENU ppContextMenu); SC ScRefreshScopeNode( VARIANT& varScopeNode); SC ScRefreshSelection(); SC ScExecuteSelectionMenuItem(BSTR MenuItemPath); SC ScExecuteScopeNodeMenuItem(BSTR MenuItemPath, VARIANT& varScopeNode /* = ActiveScopeNode */); SC ScExecuteShellCommand(BSTR Command, BSTR Directory, BSTR Parameters, BSTR WindowState); //####################################################################### //####################################################################### // // Frame and view related methods // //####################################################################### //####################################################################### SC Scget_Frame( PPFRAME ppFrame); SC ScClose(); SC Scget_ScopeTreeVisible( PBOOL pbVisible ); SC Scput_ScopeTreeVisible( BOOL bVisible ); SC ScBack(); SC ScForward(); SC Scput_StatusBarText(BSTR StatusBarText); SC Scget_Memento(PBSTR Memento); SC ScViewMemento(BSTR Memento); //####################################################################### //####################################################################### // // List related methods // //####################################################################### //####################################################################### SC Scget_Columns( PPCOLUMNS Columns); SC Scget_CellContents( PNODE Node, long Column, PBSTR CellContents); SC ScExportList( BSTR bstrFile, ExportListOptions exportoptions /* = ExportListOptions_Default*/); SC Scget_ListViewMode( PLISTVIEWMODE pMode); SC Scput_ListViewMode( ListViewMode mode); //####################################################################### //####################################################################### // // ActiveX control related methods // //####################################################################### //####################################################################### SC Scget_ControlObject( PPDISPATCH Control); // helper functions SC ScGetOptionalScopeNodeParameter(VARIANT &varScopeNode, PPNODE ppNode, bool& bMatchedGivenNode); SC ScExecuteMenuItem(PCONTEXTMENU pContextMenu, BSTR MenuItemPath); SC ScGetMMCView(View **ppView); // Frame interface SC ScMaximize (); SC ScMinimize (); SC ScRestore (); SC Scget_Left ( LPINT pCoord ); SC Scput_Left ( INT coord ); SC Scget_Right ( LPINT pCoord); SC Scput_Right ( INT coord ); SC Scget_Top ( LPINT pCoord); SC Scput_Top ( INT coord ); SC Scget_Bottom ( LPINT pCoord); SC Scput_Bottom ( INT coord ); // Frame interface for the view extension hosted frame SC ScSetViewExtensionFrame(bool bShowListView, INT top, INT left, INT bottom, INT right); // Frame int helpers enum coord_t { LEFT, TOP, RIGHT, BOTTOM }; SC ScGetFrameCoord (LPINT pCoord, coord_t eCoord ); SC ScSetFrameCoord (INT coord, coord_t eCoord ); SC ScGetRectCoord (const RECT& rect, LPINT pCoord, coord_t eCoord ); SC ScSetRectCoord (RECT& rect, INT coord, coord_t eCoord ); // Node locating helpers (used from view control) SC ScFindResultItemForScopeNode( PNODE pNode, HRESULTITEM &itm ); SC ScGetScopeNode( HNODE hNode, PPNODE ppNode ); SC ScNotifySelect (INodeCallback* pCallback, HNODE hNode, bool fMultiSelect, bool fSelect, SELECTIONINFO* pSelInfo); protected: // create from serialization only CAMCView(); DECLARE_DYNCREATE(CAMCView); // Helper methods. private: enum EListSaveErrorType {LSaveReadOnly, LSaveCantCreate, LSaveCantWrite}; bool Write2File(HANDLE hfile, TCHAR const * strwrite, int type); void ListSaveErrorMes(EListSaveErrorType etype, HANDLE hfile = NULL, LPCTSTR lpFileName = NULL); SC ScExportListWorker(); SC ScGetExportListFile (CString& strFileName, bool& bUnicode, bool& bTabDelimited, bool& bSelectedRowsOnly); SC ScCreateExportListFile(const CString& strFileName, bool bUnicode, bool bShowErrorDialogs, HANDLE& hFile); SC ScWriteExportListData (const CString& strFileName, bool bUnicode, bool bTabDelimited, bool bSelectedRowsOnly, bool bShowErrorDialogs = true); SC ScUpdateStandardbarMMCButtons(); void SetScopePaneVisible(bool bVisible); // tree observer methods virtual SC ScOnItemDeselected(HNODE hNode); virtual SC ScOnTreeViewActivated (); // ListViewActivationObserver methods. virtual SC ScOnListViewActivated (); virtual SC ScOnListViewItemUpdated (int nIndex); // called when an item is updated // OCX or Web HostActivationObserver mthods. virtual SC ScOnOCXHostActivated (); // AMCDoc observer virtual SC ScDocumentLoadCompleted (CAMCDoc *pDoc); // Persistence related methods. public: DEFINE_XML_TYPE(XML_TAG_VIEW); virtual void Persist(CPersistor& persistor); // Loads all of the local data previously saved by Save(). Restores // the window to the original state. // Returns true if the data and window state is successfully restored. bool Load(IStream& stream); bool IsDirty(); void SetDirty (bool bDirty = true) { m_bDirty = bDirty; // m_pDocument->SetModifiedFlag (bDirty); } // Information set and get methods public: // Enum types for args // NOTE: Enum values are relevant! enum EUIStyleType {uiClientEdge,uiNoClientEdge}; CAMCDoc* GetDocument(); CHistoryList* GetHistoryList() { return m_pHistoryList; } void GetPaneInfo(ViewPane ePane, int* pcxCur,int* pcxMin); void SetPaneInfo(ViewPane ePane, int cxCur, int cxMin); CView* GetPaneView(ViewPane ePane); // what's in the view? bool HasList () const { return m_ViewData.HasList(); } bool HasOCX () const { return m_ViewData.HasOCX(); } bool HasWebBrowser () const { return m_ViewData.HasWebBrowser(); } bool HasListPad () const; bool HasListOrListPad () const; DWORD GetListOptions() const { return m_ViewData.GetListOptions();} DWORD GetHTMLOptions() const { return m_ViewData.GetHTMLOptions();} DWORD GetOCXOptions() const { return m_ViewData.GetOCXOptions();} DWORD GetMiscOptions() const { return m_ViewData.GetMiscOptions();} CDescriptionCtrl& GetRightDescCtrl(void) { return m_RightDescCtrl; } BOOL IsVerbEnabled(MMC_CONSOLE_VERB verb); void GetDefaultColumnWidths(int columnWidth[2]); void SetDefaultColumnWidths(int columnWidth[2], BOOL fUpdate = TRUE); CStandardToolbar* GetStdToolbar() const; INodeCallback* GetNodeCallback(); // returns a reference to view's callback interface IScopeTreeIter* GetScopeIterator(); // returns a reference to view's scope tree interator IScopeTree* GetScopeTree(); // returns a reference to scope tree friend ViewSettings; void GetTaskpadID(GUID &guidID); ViewSettings* GetViewSettings() { ViewSettings* pVS = new ViewSettings(this); ASSERT(pVS != NULL); return pVS; } CAMCTreeView* GetTreeCtrl() { return m_pTreeCtrl; } void SetUsingDefColumns(bool bDefColumns) { m_bDefColumns = bDefColumns; } bool UsingDefColumns() { return m_bDefColumns; } bool IsScopePaneVisible(void) const; UINT GetViewID(void); void SetViewID(UINT id) { m_nViewID = m_ViewData.m_nViewID = id; } SViewData* GetViewData() { return &m_ViewData; } bool IsVirtualList() { return (m_ViewData.IsVirtualList()); } bool AreStdToolbarsAllowed() const { return !(m_ViewData.m_lWindowOptions & MMC_NW_OPTION_NOTOOLBARS); } bool IsScopePaneAllowed() const { return !(m_ViewData.m_lWindowOptions & MMC_NW_OPTION_NOSCOPEPANE); } bool HasCustomTitle() const { return (m_ViewData.m_lWindowOptions & MMC_NW_OPTION_CUSTOMTITLE); } bool IsPersisted() const { return (!(m_ViewData.m_lWindowOptions & MMC_NW_OPTION_NOPERSIST) && !m_fRootedAtNonPersistedDynamicNode); } bool IsAuthorModeView() const { return m_bAuthorModeView; } void SetAuthorModeView(bool fAuthorMode) { m_bAuthorModeView = fAuthorMode; } static CAMCView* CAMCView::GetActiveView(); // Returns the most recently activated CAMCView. bool IsTracking() const; long GetDefaultListViewStyle() const; void SetDefaultListViewStyle(long style); int GetViewMode() const; private: BOOL IsSelectingNode() { return (m_nSelectNestLevel > 0); } SC ScSpecialResultpaneSelectionActivate(bool bActivate); SC ScTreeViewSelectionActivate(bool bActivate); SC ScListViewSelectionActivate(bool bActivate); bool CanInsertScopeItemInResultPane(); // Operations public: SC ScUpdateWindowTitle(); SC ScActivate(); SC ScOnMinimize(bool fMinimized); SC ScOnSize(UINT nType, int cx, int cy); SC ScApplyViewExtension (LPCTSTR pszURL); // Scope Pane : Tree View. UINT GetTreeItem(CHMTNODEList* pNodeList, HTREEITEM* phItem); HTREEITEM FindChildNode(HTREEITEM hti, DWORD dwItemDataKey); HTREEITEM FindHTreeItem(HMTNODE hMTNode, HTREEITEM htiFirst); BOOL QueryForReName(TV_DISPINFO* ptvdi, LRESULT* pResult); void SetRootNode(HMTNODE hMTNode); HNODE GetRootNode(void); HRESULT GetNodePath(HTREEITEM hti, HTREEITEM htiRoot, CBookmark* pbm); HRESULT GetRootNodePath(CBookmark* pbm); HRESULT GetSelectedNodePath(CBookmark* pbm); void SelectNode(MTNODEID ID, GUID &guidTaskpad); // Result Pane. SC ScInitDefListView(LPUNKNOWN pUnkResultsPane); SC ScAddDefaultColumns(); SC ScOnSelectNode(HNODE hNode, BOOL &bAddSubFolders); SC ScSetResultPane(HNODE hNode, CResultViewType rvt, int viewMode, bool bUsingHistory); SC ScGetProperty(int iIndex, BSTR bstrPropertyName, PBSTR pbstrPropertyValue); SC ScGetNodetype(int iIndex, PBSTR Nodetype); LPUNKNOWN GetPaneUnknown(ViewPane ePane); void OpenResultItem(HNODE hNode); BOOL OnListCtrlItemDblClk(void); BOOL DispatchListCtrlNotificationMsg(LPARAM lParam, LRESULT* pResult); BOOL CreateListCtrl(int nID, CCreateContext* pContext); void SetListViewOptions(DWORD dwListOptions); SC ScAttachListViewAsResultPane(); SC ScAttachWebViewAsResultPane(); SC ScAttachOCXAsResultPane(HNODE hNode); void ShowResultPane(CView * pWnd, EUIStyleType nStyle); long GetListViewStyle(); CView* GetResultView () const; void SetListViewMultiSelect(BOOL bMultiSelect); bool CanDoDragDrop(); void DeSelectResultPane(HNODE hNodeSel); HRESULT NotifyListPad (BOOL b); // General (both) view related. LPCTSTR GetWindowTitle(void); BOOL RenameItem(HNODE hNode, BOOL bScopeItem, MMC_COOKIE lResultItemCookie, LPWSTR pszText, LRESULT* pResult); void CloseView(); void DeleteView(); // REVIEW int's are not enum! void SetPane(ViewPane ePane, CView* pView, EUIStyleType nStyle=uiClientEdge); bool DeflectActivation (BOOL fActivate, CView* pDeactivatingView); void SetChildFrameWnd(HWND m_hChildFrameWnd); void SetPaneFocus(); void SetPaneWithFocus(UINT pane); SC ScDeferSettingFocusToResultPane(); SC ScSetFocusToResultPane(); // Other helpers. void OnActionMenu(CPoint pt, LPCRECT prcExclude); void OnViewMenu(CPoint pt, LPCRECT prcExclude); void OnFavoritesMenu(CPoint point, LPCRECT prcExclude); void UpdateSnapInHelpMenus(CMenu* pMenu); void OnRefresh(); void OnUpdatePasteBtn(); SC ScShowScopePane (bool fShow, bool fForce = false); SC ScConsoleVerb (int nVerb); SC ScProcessConsoleVerb (HNODE hNode, bool bScope, LPARAM lResultCookie, int nVerb); SC ScUpOneLevel (); SC ScWebCommand (WebCommand eCommand); SC ScAddPageBreakAndNavigate (bool fAddPageBreak, bool fNavigate, LPCTSTR szURL); void OnDeleteEmptyView(); SC ScUpdateMMCMenus(); // Columns helpers SC ScColumnInfoListChanged(const CColumnInfoList& colInfoList); SC ScGetPersistedColumnInfoList(CColumnInfoList *pColInfoList); SC ScDeletePersistedColumnData(); /* * Message Handlers. */ // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMCView) public: virtual void OnDraw(CDC* pDC); // overridden to draw this view virtual void OnInitialUpdate(); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint); virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView); virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); //}}AFX_VIRTUAL virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult ); // Generated message map functions protected: //{{AFX_MSG(CAMCView) afx_msg void OnLButtonDown(UINT nFlags, CPoint pt); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSetFocus(CWnd* pOldWnd); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); afx_msg void OnDestroy(); afx_msg void OnUpdateFileSnapinmanager(CCmdUI* pCmdUI); afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); afx_msg void OnNextPane(); afx_msg void OnPrevPane(); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); afx_msg void OnContextHelp(); afx_msg void OnSnapInHelp(); afx_msg void OnSnapinAbout(); afx_msg void OnHelpTopics(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnPaletteChanged(CWnd* pwndFocus); afx_msg BOOL OnQueryNewPalette( ); afx_msg void OnSysColorChange(); afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG // keep these outside the AFX_MSG markers so ClassWizard won't munge them afx_msg void OnUpdateNextPane(CCmdUI* pCmdUI); afx_msg void OnUpdatePrevPane(CCmdUI* pCmdUI); afx_msg void OnUpdateShiftF10(CCmdUI* pCmdUI); afx_msg void OnVerbAccelKey(UINT nID); afx_msg void OnShiftF10(); afx_msg void OnAmcNodeNew(UINT nID); afx_msg void OnAmcNodeNewUpdate(CCmdUI* pCmdUI); afx_msg void OnDrawClipboard(); afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection); afx_msg LRESULT OnProcessMultiSelectionChanges(WPARAM, LPARAM); afx_msg LRESULT OnJiggleListViewFocus (WPARAM, LPARAM); afx_msg LRESULT OnDeferRecalcLayout (WPARAM, LPARAM); afx_msg LRESULT OnConnectToCIC (WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnConnectToTPLV(WPARAM wParam, LPARAM lParam) {return ScOnConnectToTPLV(wParam, lParam).ToHr();} SC ScOnConnectToTPLV(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnShowWebContextMenu (WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetDescriptionBarText (WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnAddPageBreakAndNavigate(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnGetIconInfoForSelectedNode(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnAppCommand(WPARAM wParam, LPARAM lParam); afx_msg void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu); // result based tabs. afx_msg void OnChangedResultTab(NMHDR *nmhdr, LRESULT *pRes); public: DECLARE_MESSAGE_MAP() // Implementation public: virtual ~CAMCView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: int m_nSelectNestLevel; UINT m_nViewID; HMTNODE m_hMTNode; // root node for this view IScopeTreeIterPtr m_spScopeTreeIter; // view's iterator to scope tree INodeCallbackPtr m_spNodeCallback; // view's callback interface bool m_bAuthorModeView; // Saved in author mode (user can't close) bool m_bDefColumns; long m_DefaultLVStyle; int m_columnWidth[2]; // Last selection bool m_bLastSelWasMultiSel; enum eCurrentActivePane { eActivePaneNone, // No pane is active. eActivePaneScope, eActivePaneResult, }; eCurrentActivePane m_eCurrentActivePane; // Tells if scope or result was the active pane. // Check for sel-change data bool m_bProcessMultiSelectionChanges; CDescriptionCtrl m_RightDescCtrl; // control bar embedded members IScopeTree* GetScopeTreePtr(); // The document may release the scope tree without notifying the view. // The view should always go through this function to obtain a pointer // to the the scope tree. private: HNODE m_ListPadNode; int m_iFocusedLV; bool m_bLVItemSelected; int m_nReleaseViews; // Attributes protected: //--------------------------------------------------------------------- // NOTE: ePane_Tasks is defined to have a pane identifier for the // task view pane. Currently no task view information is stored // in the pane info array, so the use of ePane_Tasks as an index is // of limited value. //---------------------------------------------------------------------- // Pane information implementation structure struct PaneInfo { CView* pView; // Pointer to the view int cx; // 0 means hidden int cxIdeal; // user set size or size before hidden int cxMin; // below that try not to show }; // child window IDs enum { /* * Bug 344422: these IDs should be maintained for compatibility * with automated tests */ IDC_TreeView = 12785, IDC_ListView = 12786, IDC_GenericOCXCtrl = 12787, IDC_WebViewCtrl = 12788, IDC_OCXHostView, IDC_TaskView, IDC_RightDescBar, IDC_TaskpadTitle, IDC_ListCaption, IDC_ResultTabCtrl, IDC_ViewExtensionView, }; // Pointers to actual controls CAMCTreeView * m_pTreeCtrl; // Tree control CCCListViewCtrl * m_pListCtrl; // Default list control CAMCWebViewCtrl * m_pWebViewCtrl; // Private web view control CAMCWebViewCtrl * m_pViewExtensionCtrl; // Private web view control for view extensions COCXHostView * m_pOCXHostView; // host for OCX's CFolderTabView * m_pResultFolderTabView; // current state information PaneInfo m_PaneInfo[ePane_Count]; // Array of panes int m_nViewMode; // current listview mode for all node that use listviews in this view bool m_bRenameListPadItem; protected: CChildFrame* GetParentFrame() const; void SetDescBarVisible(bool b) { m_ViewData.SetDescBarVisible (b); } bool IsDescBarVisible(void) const { return m_ViewData.IsDescBarVisible(); } void SetStatusBarVisible(bool bVisible) { if (bVisible) m_ViewData.m_dwToolbarsDisplayed |= STATUS_BAR; else m_ViewData.m_dwToolbarsDisplayed &= ~STATUS_BAR; } bool IsStatusBarVisible(void) const { return ((m_ViewData.m_dwToolbarsDisplayed & STATUS_BAR) != 0); } void SetTaskpadTabsAllowed(bool b) { m_ViewData.SetTaskpadTabsAllowed(b); } bool AreTaskpadTabsAllowed(void) const { return m_ViewData.AreTaskpadTabsAllowed(); } // implementation attributes which control layout of the splitter static const CSize m_sizEdge; // 3-D edge static const int m_cxSplitter; // amount of space between panes // splitter bar and hit test enums enum ESplitType {splitBox, splitBar, splitIntersection, splitBorder}; enum HitTestValue {hitNo, hitSplitterBox, hitSplitterBar}; bool m_bDirty; HTREEITEM m_htiStartingSelectedNode; bool m_fRootedAtNonPersistedDynamicNode; bool m_fSnapinDisplayedHelp; bool m_fActivatingSpecialResultPane; bool m_fViewExtended; HTREEITEM m_htiCut; // implementation routines public: void AdjustTracker (int cx, int cy); void SaveStartingSelectedNode(); bool HasNodeSelChanged(); // layout methods void DeferRecalcLayout(bool fUseIdleTaskQueue = true, bool bArrangeIcons = false); void RecalcLayout(void); void LayoutResultFolderTabView (CDeferWindowPos& dwp, CRect& rectRemaining); void LayoutScopePane (CDeferWindowPos& dwp, CRect& rectRemaining); void LayoutResultPane (CDeferWindowPos& dwp, CRect& rectRemaining); void LayoutResultDescriptionBar (CDeferWindowPos& dwp, CRect& rectRemaining); void LayoutResultView (CDeferWindowPos& dwp, const CRect& rectRemaining); public: // CConsoleView methods virtual SC ScCut (HTREEITEM htiCut); virtual SC ScPaste (); virtual SC ScToggleStatusBar (); virtual SC ScToggleDescriptionBar (); virtual SC ScToggleScopePane (); virtual SC ScToggleTaskpadTabs (); virtual SC ScContextHelp (); virtual SC ScHelpTopics (); virtual SC ScShowSnapinHelpTopic (LPCTSTR pszTopic); virtual SC ScSaveList (); virtual SC ScGetFocusedItem (HNODE& hNode, LPARAM& lCookie, bool& fScope); virtual SC ScSetFocusToPane (ViewPane ePane); virtual SC ScSelectNode (MTNODEID id, bool bSelectExactNode = false); // Select the given node. virtual SC ScExpandNode (MTNODEID id, bool fExpand, bool fExpandVisually); virtual SC ScShowWebContextMenu (); virtual SC ScSetDescriptionBarText (LPCTSTR pszDescriptionText); virtual SC ScViewMemento (CMemento* pMemento); virtual SC ScChangeViewMode (int nNewMode); virtual SC ScJiggleListViewFocus (); virtual SC ScRenameListPadItem (); virtual SC ScOrganizeFavorites (); // bring up the "Organize Favorites" dialog. virtual SC ScLineUpIcons (); // line up the icons in the list virtual SC ScAutoArrangeIcons (); // auto arrange the icons in the list virtual SC ScOnRefresh (HNODE hNode, bool bScope, LPARAM lResultItemParam); // refreshes the view virtual SC ScOnRename (CContextMenuInfo *pContextInfo); // allows the user to rename the specified item virtual SC ScRenameScopeNode (HMTNODE hMTNode); // put the specified scope node into rename mode. virtual SC ScGetStatusBar (CConsoleStatusBar **ppStatusBar); virtual SC ScAddViewExtension (const CViewExtensionData& ved); virtual ViewPane GetFocusedPane (); virtual int GetListSize (); virtual HNODE GetSelectedNode (); virtual HWND CreateFavoriteObserver (HWND hwndParent, int nID); private: /* * CDeferredLayout - deferred layout object */ class CDeferredLayout : public CIdleTask { public: CDeferredLayout(CAMCView* pAMCView); ~CDeferredLayout(); // IIdleTask methods SC ScDoWork(); SC ScGetTaskID(ATOM* pID); SC ScMerge(CIdleTask* pitMergeFrom); bool Attach (CAMCView* pwndAMCView); private: typedef std::set WindowCollection; WindowCollection m_WindowsToLayout; const ATOM m_atomTask; }; protected: // Tracking and and hit testing methods int HitTestPane(CPoint& pointTreeCtrlCoord); void OnTreeContextMenu(CPoint& point, CPoint& pointTreeCtrlCoord, HTREEITEM htiRClicked); void OnListContextMenu(CPoint& point); void OnContextMenuForTreeItem(int iIndex, HNODE hNode, CPoint& point, DATA_OBJECT_TYPES type_of_pane = CCT_SCOPE, HTREEITEM htiRClicked = NULL, MMC_CONTEXT_MENU_TYPES eMenuType = MMC_CONTEXT_MENU_DEFAULT, LPCRECT prcExclude = NULL, bool bAllowDefaultItem = true); void OnContextMenuForListItem(int iIndex, HRESULTITEM hHitTestItem, CPoint& point, MMC_CONTEXT_MENU_TYPES eMenuType = MMC_CONTEXT_MENU_DEFAULT, LPCRECT prcExclude = NULL, bool bAllowDefaultItem = true); // Internal functions and data private: UINT ClipPath(CHMTNODEList* pNodeList, POSITION& rpos, HNODE hNode); SC ScInitializeMemento(CMemento &memento); void OnAddToFavorites(); void OnAdd(SViewUpdateInfo *pvui); void OnUpdateSelectionForDelete(SViewUpdateInfo* pvui); void OnDelete(SViewUpdateInfo *pvui); void OnModify(SViewUpdateInfo *pvui); void OnUpdateTaskpadNavigation(SViewUpdateInfo *pvui); void ChangePane(AMCNavDir eDir); int _GetLVItemData(LPARAM *lParam, UINT flags); int _GetLVSelectedItemData(LPARAM *lParam); int _GetLVFocusedItemData(LPARAM *lParam); HRESULT SendGenericNotify(NCLBK_NOTIFY_TYPE nclbk); void IdentifyRootNode(); void CalcMaxHostedFrameRect (CRect& rect); void MapViewPtToHostedFramePt (CPoint& pt); void MapHostedFramePtToViewPt (CPoint& pt); void PointMapperWorker (CPoint& pt, bool fViewToHostedFrame); SC ScOnLeftOrRightMouseClickInListView(); bool OnListItemChanged (NM_LISTVIEW* pnmlv); int OnVirtualListItemsStateChanged(LPNMLVODSTATECHANGE lpStateChange ); SC ScPostMultiSelectionChangesMessage(); SC ScCompleteInitialization(); HMTNODE GetHMTNode(HTREEITEM hti); BOOL OwnsResultList(HTREEITEM hti); void OnContextMenuForTreeBackground(CPoint& point, LPCRECT prcExclude = NULL, bool bAllowDefaultItem = true); void ArrangeIcon(long style); void PrivateChangeListViewMode(int nMode); BOOL CommonListViewUpdate() { if (!HasList()) return FALSE; if (m_pListCtrl == NULL) { TRACE(_T("View is supposed to be a listview but the member is NULL!")); ASSERT(FALSE); return FALSE; } return TRUE; } //LRESULT OnLVDeleteKeyPressed(WPARAM wParam, LPARAM lParam); LRESULT HandleLVMessage(UINT message, WPARAM wParam, LPARAM lParam); BOOL OnSharedKeyDown(WORD mVKey); CView* CreateView (CCreateContext* pContext, int nID, DWORD dwStyle); bool CreateView (int nID); bool CreateFolderCtrls(); SC ScCreateToolbarObjects (); typedef std::vector TIDVector; void AddFavItemsToCMenu(CMenu& menu, CFavorites* pFavs, TREEITEMID tid, TIDVector& vItemIDs); SC ScHelpWorker (LPCTSTR pszHelpTopic); SC ScGetSelectedLVItem(LPARAM& lvData); SC ScGetHNodeFromPNode(const PNODE& pNode, HNODE& hNode); SC ScExecuteScopeItemVerb (MMC_CONSOLE_VERB verb, VARIANT& varScopeNode, BSTR bstrNewName); SC ScExecuteResultItemVerb(MMC_CONSOLE_VERB verb, BSTR bstrNewName); SC ScAddFolderTabs( HNODE hNode , const CLSID& tabToSelect ); SC ScCreateTaskpadHost(); // for snapin taskpads private: CString m_strWindowTitle; SViewData m_ViewData; CRect m_rectResultFrame; CRect m_rectVSplitter; CHistoryList* m_pHistoryList; CViewTracker* m_pTracker; ITaskPadHostPtr m_spTaskPadHost; FramePtr m_spFrame; FramePtr m_spViewExtFrame; // a frame pointer for the internal view extension hosted frame containing the primary snapin's view. // Toolbars related to this view. std::auto_ptr m_spAMCViewToolbars; std::auto_ptr m_spStandardToolbar; // map with view extension URL addresses typedef std::map CViewExtensionURLs; CViewExtensionURLs m_ViewExtensionURLs; private: /* * private, registered window messages */ static const UINT m_nShowWebContextMenuMsg; static const UINT m_nProcessMultiSelectionChangesMsg; static const UINT m_nAddPageBreakAndNavigateMsg; static const UINT m_nJiggleListViewFocusMsg; static const UINT m_nDeferRecalcLayoutMsg; }; #ifndef _DEBUG // debug version in AMCView.cpp inline CAMCDoc* CAMCView::GetDocument() { return (CAMCDoc*)m_pDocument; } #endif CAMCView* GetAMCView (CWnd* pwnd); /*+-------------------------------------------------------------------------* * class CViewTemplateList * * * PURPOSE: Used as the helper to persist CAMCView objects, when loading * Since CAMCView need small ammount of data to be known prior to * creating it (and thus prior to persisting CAMCView), * we persist a CViewTemplateList to collect all data. * Afterwards we create views using that list and persist them * *+-------------------------------------------------------------------------*/ class CViewTemplateList : public XMLListCollectionBase { public: // defines data to be stored as std::pair objects typedef std::pair< CBookmark, CPersistor > ViewTemplB_Type; typedef std::pair< int /*nViewID*/, ViewTemplB_Type > ViewTempl_Type; // defines collection to be used for storing data about views typedef std::vector< ViewTempl_Type > List_Type; // creator must provide a XML type CViewTemplateList(LPCTSTR strXmlType) : m_strXmlType(strXmlType) {} // accessory to get the list of gathered data inline List_Type& GetList() { return m_ViewsList; } // Pesistence staff used from CPersistor virtual void Persist(CPersistor& persistor); virtual void OnNewElement(CPersistor& persistor); virtual LPCTSTR GetXMLType() { return m_strXmlType; } private: List_Type m_ViewsList; LPCTSTR m_strXmlType; }; /*+-------------------------------------------------------------------------* * class CXMLWindowPlacement * * * PURPOSE: class persists WINDOWPLACEMENT to xml * *+-------------------------------------------------------------------------*/ class CXMLWindowPlacement : public CXMLObject { WINDOWPLACEMENT& m_rData; public: CXMLWindowPlacement(WINDOWPLACEMENT& rData) : m_rData(rData) {} protected: DEFINE_XML_TYPE(XML_TAG_WINDOW_PLACEMENT); virtual void Persist(CPersistor &persistor); }; #include "amcview.inl" #endif // __AMCVIEW_H__