/*======================================================================================// | Process Control // | // |Copyright (c) 1998 Sequent Computer Systems, Incorporated. All rights reserved. // | // |File Name: RuleFolder.cpp // | // |Description: Implementation of rules node // | // |Created: Paul Skoglund 08-1998 // | // |Rev History: // | // |=======================================================================================*/ #include "StdAfx.h" #include "BaseNode.h" using std::list; ////////////////////////////////////////////////////////////////////////////////////////// // // The "Rules" folder... // const GUID CRuleFolder::m_GUID = {0xff9baf61,0x064e,0x11d2,{0x80, 0x14,0x00,0x10,0x4b,0x9a,0x31,0x06} }; const TCHAR *const CRuleFolder::m_szGUID = _T("{ff9baf61-064e-11d2-8014-00104b9a3106}"); CRuleFolder::CRuleFolder(CBaseNode *pParent) : CBaseNode(MANAGEMENTRULE_NODE, pParent), m_ID(0), m_NodeList(0) { LoadStringHelper(m_name, IDS_RULES_FOLDER); } CRuleFolder::~CRuleFolder() { FreeNodes(); } void CRuleFolder::FreeNodes() { ATLTRACE(_T("CRuleFolder::FreeNodes()\n") ); for (list::iterator i = m_NodeList.begin(); i != m_NodeList.end(); ++i) { (*i)->Release(); //delete *i; } m_NodeList.clear(); } LPCTSTR CRuleFolder::GetNodeName() { return m_name; } HRESULT CRuleFolder::GetDisplayInfo(RESULTDATAITEM &ResultItem) { if (ResultItem.bScopeItem) { if( ResultItem.mask & RDI_STR ) { if (0 == ResultItem.nCol) ResultItem.str = const_cast(GetNodeName()); else ResultItem.str = _T(""); } if (ResultItem.mask & RDI_IMAGE) ResultItem.nImage = sImage(); return S_OK; } return E_UNEXPECTED; } HRESULT CRuleFolder::OnShow(BOOL bSelecting, HSCOPEITEM hItem, IHeaderCtrl2* ipHeaderCtrl, IConsole2* ipConsole2) { ASSERT(hItem == GetID()); if (!bSelecting) return S_OK; ITEM_STR str; LoadStringHelper(str, IDS_NAME_HDR); VERIFY(S_OK == ipHeaderCtrl->InsertColumn( NAME_COLUMN, str, 0, NAME_COLUMN_WIDTH )); return SendViewChange(ipConsole2, NULL, PC_VIEW_UPDATEALL); } HRESULT CRuleFolder::OnExpand(BOOL bExpand, HSCOPEITEM hItem, IConsoleNameSpace2 *ipConsoleNameSpace2) { ASSERT(ipConsoleNameSpace2); if(!ipConsoleNameSpace2) return E_UNEXPECTED; if (bExpand) { VERIFY( S_OK == AddNode(ipConsoleNameSpace2, new CNameRuleFolder(this) ) ); VERIFY( S_OK == AddNode(ipConsoleNameSpace2, new CProcessRuleFolder(this) ) ); VERIFY( S_OK == AddNode(ipConsoleNameSpace2, new CJobRuleFolder(this) ) ); } return S_OK; } HRESULT CRuleFolder::AddNode(IConsoleNameSpace2 *ipConsoleNameSpace2, CBaseNode *pSubNode) { HRESULT hr = S_OK; SCOPEDATAITEM sdi = {0}; if (!pSubNode) return E_OUTOFMEMORY; // Place our folder into the scope pane sdi.mask = SDI_STR | // Displayname is valid SDI_PARAM | // lParam is valid SDI_IMAGE | // nImage is valid SDI_OPENIMAGE | // nOpenImage is valid SDI_CHILDREN | // cChildren is valid SDI_PARENT; sdi.displayname = (LPOLESTR)MMC_CALLBACK; sdi.nImage = pSubNode->sImage(); sdi.nOpenImage = pSubNode->sOpenImage(); //sdi.nState = ??? sdi.cChildren = pSubNode->GetChildrenCount(); sdi.lParam = reinterpret_cast (pSubNode); sdi.relativeID = m_ID; hr = ipConsoleNameSpace2->InsertItem( &sdi ); if (SUCCEEDED(hr)) { pSubNode->SetID(sdi.ID); m_NodeList.push_front( pSubNode ); } else { pSubNode->Release(); //delete pSubNode; } return hr; } HRESULT CRuleFolder::OnHelpCmd(IDisplayHelp *ipDisplayHelp) { if (!ipDisplayHelp) return E_UNEXPECTED; ipDisplayHelp->ShowTopic(const_cast(HELP_ru_overview)); return S_OK; } HRESULT CRuleFolder::OnSelect(BOOL bScope, BOOL bSelect, IConsoleVerb* ipConsoleVerb) { ASSERT(bScope); return S_OK; } HRESULT CRuleFolder::OnSelect(BOOL bScope, BOOL bSelect, IConsoleVerb* ipConsoleVerb, LPARAM Cookie) { ASSERT(!bScope); return S_OK; } HRESULT CRuleFolder::OnViewChange(IResultData *ipResultData, LPARAM thing, LONG_PTR hint) { ASSERT(ipResultData); if (!ipResultData) return E_UNEXPECTED; VERIFY(ipResultData->ModifyViewStyle(MMC_SINGLESEL, MMC_NOSORTHEADER) == S_OK); return ShowAllItems(ipResultData, FALSE); } HRESULT CRuleFolder::ShowAllItems(IResultData* ipResultData, BOOL bCacheValid) { // should be nothing to delete... return ipResultData->DeleteAllRsltItems(); }