|
|
// InsertionStringMenu.cpp: implementation of the CInsertionStringMenu class.
//
//////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000 Microsoft Corporation
//
// 03-15-00 v-marfin : bug 60935 - Set focus back to edit control
// after inserting a string and set
// cursor in proper location a
//
#include "stdafx.h"
#include "snapin.h"
#include "InsertionStringMenu.h"
#include "WbemClassObject.h"
#include "HMObject.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
BOOL CHiddenWnd::OnCommand(WPARAM wParam, LPARAM lParam) { if( ! m_pMenu ) { return CWnd::OnCommand(wParam,lParam); } return m_pMenu->OnCommand(wParam,lParam); }
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CInsertionStringMenu::CInsertionStringMenu() { m_pEditCtl = NULL; }
CInsertionStringMenu::~CInsertionStringMenu() { }
//////////////////////////////////////////////////////////////////////
// Create
//////////////////////////////////////////////////////////////////////
bool CInsertionStringMenu::Create(CWnd* pEditControl, CHMObject* pObject, bool bRuleMenu /*=true*/) { ASSERT(pEditControl); if( pEditControl == NULL ) { return false; }
ASSERT(pEditControl->GetSafeHwnd()); if( pEditControl->GetSafeHwnd() == NULL ) { return false; } ASSERT(pObject); if( pObject == NULL ) { return false; }
m_pEditCtl = pEditControl; CString sPrefix; if( ! bRuleMenu ) { sPrefix = _T("TargetInstance.EmbeddedStatus."); }
// get the insertion strings
CWbemClassObject ClassObject; ClassObject.Create(pObject->GetSystemName());
HRESULT hr = ClassObject.GetObject(_T("Microsoft_HMThresholdStatusInstance")); if( ! CHECKHRESULT(hr) ) { return false; }
ClassObject.GetPropertyNames(m_saInsertionStrings);
ClassObject.Destroy();
CWbemClassObject* pParentObject = pObject->GetParentClassObject(); CString sObjectPath; CString sNamespace; CStringArray saEmbeddedInstNames; if( pParentObject ) { pParentObject->GetProperty(IDS_STRING_MOF_PATH,sObjectPath); pParentObject->GetProperty(IDS_STRING_MOF_TARGETNAMESPACE,sNamespace); delete pParentObject; pParentObject = NULL; }
if( ! sObjectPath.IsEmpty() ) { int iIndex = -1; if( (iIndex = sObjectPath.Find(_T("."))) != -1 ) { sObjectPath = sObjectPath.Left(iIndex); } CWbemClassObject WmiObject; WmiObject.SetNamespace(_T("\\\\") + pObject->GetSystemName() + _T("\\") + sNamespace); WmiObject.GetObject(sObjectPath); WmiObject.GetPropertyNames(saEmbeddedInstNames); for( int i = 0; i < saEmbeddedInstNames.GetSize(); i++ ) { saEmbeddedInstNames.SetAt(i,_T("%") + sPrefix + _T("EmbeddedInstance.") + saEmbeddedInstNames[i]+ _T("%")); } }
ASSERT(m_saInsertionStrings.GetSize()); if( m_saInsertionStrings.GetSize() == 0 ) { return false; }
for( int i = 0; i < m_saInsertionStrings.GetSize(); i++ ) { m_saInsertionStrings.SetAt(i,_T("%") + sPrefix + m_saInsertionStrings[i] + _T("%")); }
m_saInsertionStrings.Append(saEmbeddedInstNames);
m_pEditCtl->SetCaretPos(CPoint(0,0));
if( ! m_HiddenWnd.Create(NULL,NULL,WS_CHILD,CRect(0,0,10,10),m_pEditCtl,2411) ) { m_saInsertionStrings.RemoveAll(); return false; }
m_HiddenWnd.m_pMenu = this;
m_HiddenWnd.ShowWindow(SW_HIDE);
return true; }
//////////////////////////////////////////////////////////////////////
// DisplayMenu
//////////////////////////////////////////////////////////////////////
void CInsertionStringMenu::DisplayMenu(CPoint& pt) { ASSERT(m_saInsertionStrings.GetSize()); if( m_saInsertionStrings.GetSize() == 0) { return; }
ASSERT(m_pEditCtl); if( m_pEditCtl == NULL ) { return; }
ASSERT(m_pEditCtl->GetSafeHwnd()); if( m_pEditCtl->GetSafeHwnd() == NULL ) { return; }
if( ! CreatePopupMenu() ) { ASSERT(FALSE); return; }
// add each insertion string to the menu
for( int i = 0; i < m_saInsertionStrings.GetSize(); i++ ) { InsertMenu(i,MF_BYPOSITION,i,m_saInsertionStrings[i]); }
TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,&m_HiddenWnd);
DestroyMenu(); }
BOOL CInsertionStringMenu::OnCommand(WPARAM wParam, LPARAM lParam) { ASSERT(m_saInsertionStrings.GetSize()); if( m_saInsertionStrings.GetSize() == 0) { return FALSE; }
ASSERT(m_pEditCtl); if( m_pEditCtl == NULL ) { return FALSE; }
ASSERT(m_pEditCtl->GetSafeHwnd()); if( m_pEditCtl->GetSafeHwnd() == NULL ) { return FALSE; }
int id = LOWORD(wParam);
if( id < m_saInsertionStrings.GetSize() && id >= 0 ) { CPoint point = m_pEditCtl->GetCaretPos(); int iCharIndex = LOWORD(((CEdit*)m_pEditCtl)->CharFromPos(point)); CString sWindowText; m_pEditCtl->GetWindowText(sWindowText); sWindowText.Insert(iCharIndex,m_saInsertionStrings[id]); m_pEditCtl->SetWindowText(sWindowText);
//--------------------------------------------------------
// v-marfin : bug 60935 - Set focus back to edit control
// after inserting a string and set
// cursor in proper location a
m_pEditCtl->SetFocus(); CEdit* pEdit = (CEdit*)m_pEditCtl;
CString sInsertion = m_saInsertionStrings[id]; int nLen = sInsertion.GetLength() + iCharIndex; pEdit->SetSel(nLen,nLen,TRUE); //--------------------------------------------------------
return TRUE; }
return FALSE; }
|