You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
8.5 KiB
314 lines
8.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 2000 - 2001.
|
|
//
|
|
// File: compdata.cpp
|
|
//
|
|
// Contents:
|
|
//
|
|
// History: 07-26-2001 Hiteshr Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "headers.h"
|
|
|
|
// {1F5EEC01-1214-4d94-80C5-4BDCD2014DDD}
|
|
const GUID CLSID_RoleSnapin =
|
|
{ 0x1f5eec01, 0x1214, 0x4d94, { 0x80, 0xc5, 0x4b, 0xdc, 0xd2, 0x1, 0x4d, 0xdd } };
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CRoleComponentDataObject)
|
|
|
|
CRoleComponentDataObject::CRoleComponentDataObject()
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN, CRoleComponentDataObject)
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CRoleComponentDataObject)
|
|
|
|
m_columnSetList.AddTail(new CRoleDefaultColumnSet(L"---Default Column Set---"));
|
|
}
|
|
|
|
CRoleComponentDataObject::~CRoleComponentDataObject()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN, CRoleComponentDataObject)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CRoleComponentDataObject)
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CRoleComponentDataObject::
|
|
CompareObjects(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,CompareObjects)
|
|
|
|
if(!lpDataObjectA || !lpDataObjectB)
|
|
{
|
|
ASSERT(lpDataObjectA);
|
|
ASSERT(lpDataObjectB);
|
|
}
|
|
|
|
CInternalFormatCracker ifcA, ifcB;
|
|
VERIFY(SUCCEEDED(ifcA.Extract(lpDataObjectA)));
|
|
VERIFY(SUCCEEDED(ifcB.Extract(lpDataObjectB)));
|
|
|
|
CTreeNode* pNodeA = ifcA.GetCookieAt(0);
|
|
CTreeNode* pNodeB = ifcB.GetCookieAt(0);
|
|
|
|
if(!pNodeA || !pNodeB)
|
|
{
|
|
ASSERT(pNodeA != NULL);
|
|
ASSERT(pNodeB != NULL);
|
|
return S_FALSE;
|
|
}
|
|
|
|
if(pNodeA == pNodeB)
|
|
return S_OK;
|
|
|
|
//Check if the are of same type container or leafnode
|
|
if(pNodeA->IsContainer() != pNodeB->IsContainer())
|
|
return S_FALSE;
|
|
|
|
CBaseAz* pBaseAzA = (dynamic_cast<CBaseNode*>(pNodeA))->GetBaseAzObject();
|
|
CBaseAz* pBaseAzB = (dynamic_cast<CBaseNode*>(pNodeB))->GetBaseAzObject();
|
|
|
|
ASSERT(pBaseAzA);
|
|
ASSERT(pBaseAzB);
|
|
|
|
if(CompareBaseAzObjects(pBaseAzA,pBaseAzB))
|
|
{
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|
|
|
|
CRootData*
|
|
CRoleComponentDataObject::
|
|
OnCreateRootData()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject, OnCreateRootData)
|
|
|
|
CRoleRootData* pRoleRootNode = new CRoleRootData(this);
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
CString szSnapinName;
|
|
szSnapinName.LoadString(IDS_SNAPIN_NAME);
|
|
pRoleRootNode->SetDisplayName(szSnapinName);
|
|
return pRoleRootNode;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CRoleComponentDataObject::
|
|
CreateComponent(LPCOMPONENT* ppComponent)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,CreateComponent)
|
|
|
|
if(!ppComponent)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_POINTER;
|
|
}
|
|
|
|
CComObject<CRoleComponentObject>* pObject;
|
|
HRESULT hr = CComObject<CRoleComponentObject>::CreateInstance(&pObject);
|
|
if(FAILED(hr))
|
|
{
|
|
DBG_OUT_HRESULT(hr);
|
|
return hr;
|
|
}
|
|
|
|
ASSERT(pObject != NULL);
|
|
|
|
//
|
|
// Store IComponentData
|
|
//
|
|
pObject->SetIComponentData(this);
|
|
|
|
hr = pObject->QueryInterface(IID_IComponent,
|
|
reinterpret_cast<void**>(ppComponent));
|
|
CHECK_HRESULT(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
BOOL
|
|
CRoleComponentDataObject::LoadResources()
|
|
{
|
|
return
|
|
LoadContextMenuResources(CRootDataMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CAdminManagerNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CApplicationNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CScopeNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CGroupCollectionNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CRoleCollectionNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CTaskCollectionNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CGroupNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CRoleNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CTaskNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(COperationCollectionNodeMenuHolder::GetMenuMap()) &&
|
|
LoadContextMenuResources(CRoleDefinitionCollectionNodeMenuHolder::GetMenuMap()) &&
|
|
LoadResultHeaderResources(_DefaultHeaderStrings,N_DEFAULT_HEADER_COLS);
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRoleComponentDataObject::OnSetImages(LPIMAGELIST lpScopeImage)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN, CRoleComponentDataObject, OnSetImages)
|
|
|
|
return LoadIcons(lpScopeImage);
|
|
|
|
}
|
|
|
|
|
|
LPCWSTR
|
|
CRoleComponentDataObject::
|
|
GetHTMLHelpFileName()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN, CRoleComponentDataObject, GetHTMLHelpFileName)
|
|
Dbg(DEB_SNAPIN,"HTMLHelpFile is %ws\n", g_szHTMLHelpFileName);
|
|
return g_szHTMLHelpFileName;
|
|
}
|
|
|
|
void
|
|
CRoleComponentDataObject::
|
|
OnNodeContextHelp(CNodeList* /*pNode*/)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnNodeContextHelp)
|
|
|
|
CComPtr<IDisplayHelp> spHelp;
|
|
HRESULT hr = GetConsole()->QueryInterface(IID_IDisplayHelp, (void **)&spHelp);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CString strHelpPath = g_szLinkHTMLHelpFileName;
|
|
strHelpPath += L"::/";
|
|
strHelpPath += g_szTopHelpNodeName;
|
|
spHelp->ShowTopic((LPOLESTR)(LPCWSTR)strHelpPath);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void
|
|
CRoleComponentDataObject::
|
|
OnNodeContextHelp(CTreeNode*)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnNodeContextHelp)
|
|
CComPtr<IDisplayHelp> spHelp;
|
|
HRESULT hr = GetConsole()->QueryInterface(IID_IDisplayHelp, (void **)&spHelp);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CString strHelpPath = g_szLinkHTMLHelpFileName;
|
|
strHelpPath += L"::/";
|
|
strHelpPath += g_szTopHelpNodeName;
|
|
spHelp->ShowTopic((LPOLESTR)(LPCWSTR)strHelpPath);
|
|
}
|
|
}
|
|
|
|
void
|
|
CRoleComponentDataObject::OnTimer()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnTimer)
|
|
|
|
}
|
|
|
|
void
|
|
CRoleComponentDataObject::OnTimerThread(WPARAM /*wParam*/, LPARAM /*lParam*/)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnTimerThread)
|
|
}
|
|
|
|
CTimerThread*
|
|
CRoleComponentDataObject::OnCreateTimerThread()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnCreateTimerThread)
|
|
return NULL;
|
|
}
|
|
|
|
CColumnSet*
|
|
CRoleComponentDataObject::GetColumnSet(LPCWSTR lpszID)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject, GetColumnSet)
|
|
return m_columnSetList.FindColumnSet(lpszID);
|
|
}
|
|
|
|
|
|
void
|
|
CBaseRoleExecContext::
|
|
Wait()
|
|
{
|
|
// The message loop lasts until we get a WM_QUIT message,
|
|
// upon which we shall return from the function.
|
|
while (TRUE)
|
|
{
|
|
|
|
DWORD result = 0;
|
|
MSG msg ;
|
|
|
|
// Read all of the messages in this next loop,
|
|
// removing each message as we read it.
|
|
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
|
{
|
|
// If it's a quit message
|
|
if(msg.message == WM_QUIT)
|
|
{
|
|
return;
|
|
}
|
|
else if((msg.message == WM_LBUTTONDOWN) ||
|
|
(msg.message == WM_RBUTTONDOWN) ||
|
|
(msg.message == WM_KEYDOWN))
|
|
{
|
|
//Ignore these messages while in wait
|
|
continue;
|
|
}
|
|
|
|
// Otherwise, dispatch the message.
|
|
DispatchMessage(&msg);
|
|
} // End of PeekMessage while loop.
|
|
|
|
// Wait for any message sent or posted to this queue
|
|
// or for one of the passed handles be set to signaled.
|
|
result = MsgWaitForMultipleObjects(1, &m_hEventHandle,
|
|
FALSE, INFINITE, QS_ALLINPUT);
|
|
|
|
// The result tells us the type of event we have.
|
|
if (result == (WAIT_OBJECT_0 + 1))
|
|
{
|
|
// New messages have arrived.
|
|
// Continue to the top of the always while loop to
|
|
// dispatch them and resume waiting.
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
// One of the handles became signaled.
|
|
return;
|
|
} // End of else clause.
|
|
} // End of the always while loop.
|
|
}
|
|
|
|
void CDisplayHelpFromPropPageExecContext::
|
|
Execute(LPARAM /*arg*/)
|
|
{
|
|
CComPtr<IDisplayHelp> spHelp;
|
|
HRESULT hr = m_pComponentDataObject->GetConsole()->QueryInterface(IID_IDisplayHelp, (void **)&spHelp);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = spHelp->ShowTopic((LPOLESTR)(LPCWSTR)m_strHelpPath);
|
|
CHECK_HRESULT(hr);
|
|
}
|
|
}
|
|
|
|
//
|
|
//Helper Class for displaying secondary property pages from
|
|
//Existing property pages. For example on double clicking
|
|
//a member of group, display the property of member. Since
|
|
//propertysheet needs to be brought up from main thread, a
|
|
//message is posted from PropertyPage thread to Main thread.
|
|
//An instance of this class is sent as param and main
|
|
//thread calls execute on the Instance
|
|
//
|
|
|
|
void
|
|
CPropPageExecContext::Execute(LPARAM /*arg*/)
|
|
{
|
|
FindOrCreateModelessPropertySheet((CRoleComponentDataObject*)pComponentDataObject,pTreeNode);
|
|
}
|
|
|