windows-nt/Source/XPSP1/NT/admin/activec/inc/mmcdata.h
2020-09-26 16:20:57 +08:00

361 lines
11 KiB
C++

//____________________________________________________________________________
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: MMCData.h
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 2/27/1997 RaviR Created
//____________________________________________________________________________
//
#ifndef __MMCDATA__H__
#define __MMCDATA__H__
#include "ndmgr.h"
#include "mmcptrs.h"
class CToolBarCtrlEx;
class CMultiSelection;
class CConsoleFrame;
class CConsoleView;
class CConsoleStatusBar;
class CMenuButtonsMgr;
class CAMCViewToolbarsMgr;
class CNode;
class CXMLObject;
class CStdVerbButtons;
class CConsoleDocument;
//////////////////////////////////////////////////////////////////////////////
//
// SConsoleData structure.
//
enum ProgramMode
{
eMode_Author,
eMode_User,
eMode_User_MDI,
eMode_User_SDI,
eMode_Count,
eMode_First = eMode_Author,
eMode_Last = eMode_User_SDI,
eMode_Error = -1
};
enum ConsoleFlags
{
eFlag_ShowStatusBar = 0x00000001,
eFlag_HelpDocInvalid = 0x00000002,
eFlag_LogicalReadOnly = 0x00000004,
eFlag_PreventViewCustomization = 0x00000008,
// DO NOT USE 0x00000010 - an obsolete flag that was used in MMC1.2 to disallow context menus on taskpads.
eFlag_Default = eFlag_ShowStatusBar,
eFlag_All = 0x0000000f,
};
// The current MMC version: 2.0
#define MMC_VERSION_MAJOR 2
#define MMC_VERSION_MINOR 0
#define MakeConsoleFileVer(major_ver,minor_ver) \
MakeConsoleFileVer_(major_ver, minor_ver, 0)
#define MakeConsoleFileVer_(major_ver,minor_ver,minor_subver) \
((DWORD)(((DWORD)(BYTE)(major_ver)<<16)|((WORD)(BYTE)(minor_ver)<<8)|(BYTE)(minor_subver)))
#define GetConsoleFileMajorVersion(eFileVer) ((BYTE)((eFileVer)>>16))
#define GetConsoleFileMinorVersion(eFileVer) ((BYTE)(((WORD)(eFileVer)) >> 8))
#define GetConsoleFileMinorSubversion(eFileVer) ((BYTE)(eFileVer))
enum ConsoleFileVersion
{
FileVer_0100 = MakeConsoleFileVer (1, 0), // MMC v1.0
FileVer_0110 = MakeConsoleFileVer (1, 1), // MMC v1.1
FileVer_0120 = MakeConsoleFileVer (1, 2), // MMC v1.2
FileVer_0200 = MakeConsoleFileVer (2, 0), // MMC v2.0
FileVer_Current = FileVer_0200,
FileVer_Invalid = -1,
};
inline bool IsValidProgramMode (ProgramMode eMode)
{
return ((eMode >= eMode_First) && (eMode <= eMode_Last));
}
inline bool IsValidFileVersion (ConsoleFileVersion eFileVer)
{
return ((eFileVer == FileVer_0100) ||
(eFileVer == FileVer_0110) ||
(eFileVer == FileVer_0120) ||
(eFileVer == FileVer_0200));
}
inline bool IsCurrentFileVersion (ConsoleFileVersion eFileVer)
{
return (eFileVer == FileVer_Current);
}
#define NAVLIST_LEVELS 2
struct SConsoleData
{
SConsoleData()
:
m_hwndMainFrame (NULL),
m_pConsoleFrame (NULL),
m_eAppMode (eMode_Author),
m_eConsoleMode (eMode_Author),
m_dwFlags (eFlag_Default),
m_eFileVer (FileVer_Invalid),
m_pXMLPersistColumnData(NULL),
m_pConsoleDocument(NULL)
{
}
ProgramMode GetMode() const
{
return (m_eAppMode);
}
ProgramMode GetConsoleMode() const
{
return (m_eConsoleMode);
}
ConsoleFileVersion GetFileVersion() const
{
return (m_eFileVer);
}
CConsoleFrame* GetConsoleFrame() const
{
return (m_pConsoleFrame);
}
void SetScopeTree (IScopeTree* pScopeTree)
{
// hook this console data to the scope tree
m_spScopeTree = pScopeTree;
// hook the scope tree to this console data
m_spScopeTree->SetConsoleData (reinterpret_cast<LPARAM>(this));
}
IScopeTreePtr m_spScopeTree;
HWND m_hwndMainFrame;
CConsoleFrame* m_pConsoleFrame;
ProgramMode m_eAppMode;
ProgramMode m_eConsoleMode;
ConsoleFileVersion m_eFileVer;
DWORD m_dwFlags;
// Console's column data
IPersistStreamPtr m_spPersistStreamColumnData;
CXMLObject* m_pXMLPersistColumnData;
// access to document from node manager side
CConsoleDocument* m_pConsoleDocument;
}; // struct SConsoleData
//////////////////////////////////////////////////////////////////////////////
//
// SViewData structure.
//
const DWORD STD_MENUS = 0x00000001;
const DWORD STD_BUTTONS = 0x00000002;
const DWORD SNAPIN_MENUS = 0x00000004;
const DWORD SNAPIN_BUTTONS = 0x00000008;
const DWORD STATUS_BAR = 0x80000000;
// The status bar isn't really a "toolbar" per se, but it's visibility
// status is stored with the rest of these bits so we don't have to change
// the view data stream format to accomodate it.
const DWORD ALL_TOOLBARS = 0x0000000f;
inline DWORD ToolbarsOf (DWORD dwToolbars)
{ return (dwToolbars & ALL_TOOLBARS); }
inline DWORD StatusBarOf (DWORD dwToolbars)
{ return (dwToolbars & STATUS_BAR); }
struct SViewData
{
friend class CAMCView;
private:
enum eFlag
{
eFlag_ScopePaneVisible = 0x00000001, // Scope pane visible
eFlag_DescBarVisible = 0x00000008,
eFlag_VirtualList = 0x00000010,
eFlag_TaskpadTabsAllowed = 0x00000040,
// default for new views
eFlag_Default = eFlag_ScopePaneVisible |
eFlag_TaskpadTabsAllowed
};
public:
SViewData() :
m_dwFlags (eFlag_Default),
m_pStatusBar (NULL),
m_pConsoleView (NULL),
m_pConsoleData (NULL),
m_nViewID (0),
m_hwndView (NULL),
m_hwndChildFrame (NULL),
m_hwndListCtrl (NULL),
m_lWindowOptions (0),
m_pMultiSelection (NULL),
m_dwToolbarsDisplayed (ALL_TOOLBARS | STATUS_BAR), // enable all
m_bSnapinChangingView (FALSE),
m_pMenuButtonsMgr (NULL),
m_pAMCViewToolbarsMgr (NULL),
m_pStdVerbButtons (NULL)
{
}
private:
DWORD m_dwFlags; // manipulate with accessors
void SetFlag (eFlag flag, bool fSet)
{
if (fSet)
m_dwFlags |= flag;
else
m_dwFlags &= ~flag;
}
bool TestFlag (eFlag flag) const
{
return ((m_dwFlags & flag) ? true : false);
}
public:
void SetScopePaneVisible (bool b = true) { SetFlag (eFlag_ScopePaneVisible, b); }
void SetDescBarVisible (bool b = true) { SetFlag (eFlag_DescBarVisible, b); }
void SetVirtualList (bool b = true) { SetFlag (eFlag_VirtualList, b); }
void SetTaskpadTabsAllowed (bool b = true) { SetFlag (eFlag_TaskpadTabsAllowed, b); }
public:
bool IsScopePaneVisible () const { return (TestFlag (eFlag_ScopePaneVisible)); }
bool IsDescBarVisible () const { return (TestFlag (eFlag_DescBarVisible)); }
bool IsVirtualList () const { return (TestFlag (eFlag_VirtualList) & HasList()); }
bool HasList () const { return m_rvt.HasList(); }
bool HasOCX () const { return m_rvt.HasOCX(); }
bool HasWebBrowser () const { return m_rvt.HasWebBrowser(); }
bool HasListPad () const { return (HasWebBrowser() && (NULL != m_hwndListCtrl)); }
bool AreTaskpadTabsAllowed () const { return (TestFlag (eFlag_TaskpadTabsAllowed)); }
DWORD GetListOptions() const { return m_rvt.GetListOptions();}
DWORD GetHTMLOptions() const { return m_rvt.GetHTMLOptions();}
DWORD GetOCXOptions() const { return m_rvt.GetOCXOptions();}
DWORD GetMiscOptions() const { return m_rvt.GetMiscOptions();}
LPCOLESTR GetURL() const { return m_rvt.GetURL();}
LPCOLESTR GetOCX() const { return m_rvt.GetOCX();}
void SetResultViewType(CResultViewType &rvt) { m_rvt = rvt;}
CConsoleStatusBar* GetStatusBar() const { return (m_pStatusBar); }
CConsoleView* GetConsoleView() const { return (m_pConsoleView); }
void SetStatusBar (CConsoleStatusBar* pStatusBar)
{ m_pStatusBar = pStatusBar; }
void SetConsoleView (CConsoleView* pConsoleView)
{ m_pConsoleView = pConsoleView; }
CMenuButtonsMgr* GetMenuButtonsMgr() const { return (m_pMenuButtonsMgr); }
void SetMenuButtonsMgr (CMenuButtonsMgr* pMenuButtonsMgr) { m_pMenuButtonsMgr = pMenuButtonsMgr; }
CAMCViewToolbarsMgr* GetAMCViewToolbarsMgr() const { return (m_pAMCViewToolbarsMgr); }
void SetAMCViewToolbarsMgr (CAMCViewToolbarsMgr* pAMCViewToolbarsMgr) { m_pAMCViewToolbarsMgr = pAMCViewToolbarsMgr; }
CStdVerbButtons* GetStdVerbButtons() const { return (m_pStdVerbButtons); }
void SetStdVerbButtons (CStdVerbButtons* pStdVerbButtons) { m_pStdVerbButtons = pStdVerbButtons; }
private:
CConsoleStatusBar* m_pStatusBar;
CConsoleView* m_pConsoleView;
CMenuButtonsMgr* m_pMenuButtonsMgr;
CAMCViewToolbarsMgr* m_pAMCViewToolbarsMgr;
CStdVerbButtons* m_pStdVerbButtons;
public:
SConsoleData* m_pConsoleData;
int m_nViewID;
HWND m_hwndView;
HWND m_hwndChildFrame;
HWND m_hwndListCtrl;
long m_lWindowOptions;
IFramePrivatePtr m_spNodeManager;
IResultDataPrivatePtr m_spResultData;
IImageListPrivatePtr m_spRsltImageList;
IConsoleVerbPtr m_spVerbSet;
INodeCallbackPtr m_spNodeCallback;
IControlbarsCachePtr m_spControlbarsCache;
ITaskCallbackPtr m_spTaskCallback;
CMultiSelection* m_pMultiSelection;
DWORD m_dwToolbarsDisplayed;
// Is snapin changing the view now.
BOOL m_bSnapinChangingView;
bool IsStandardMenusAllowed()
{
return (m_dwToolbarsDisplayed & STD_MENUS);
}
bool IsSnapinMenusAllowed()
{
return (m_dwToolbarsDisplayed & SNAPIN_MENUS);
}
protected:
CResultViewType m_rvt;
};
#include <pshpack8.h> // for Win64
struct CreateNewViewStruct
{
MTNODEID idRootNode; // in: ID of the root node of the view
long lWindowOptions; // in: window creation options, MMC_NW_OPTION_*
bool fVisible; // in: is the window visible?
SViewData* pViewData; // out: view data for the new view
HNODE hRootNode; // out: root node of the new view
};
#include <poppack.h>
#endif // __MMCDATA__H__