277 lines
7.9 KiB
C++
277 lines
7.9 KiB
C++
// AutomaticSessDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "emshell.h"
|
|
#include "AutomaticSessDlg.h"
|
|
#include "Emshellview.h"
|
|
#include "comdef.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CAutomaticSessDlg dialog
|
|
|
|
extern PEmObject GetEmObj(BSTR bstrEmObj);
|
|
|
|
CAutomaticSessDlg::CAutomaticSessDlg(PSessionSettings pSettings, VARIANT *pVar, EmObjectType type, CWnd* pParent /*=NULL*/)
|
|
: CDialog(CAutomaticSessDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CAutomaticSessDlg)
|
|
m_bNotifyAdmin = FALSE;
|
|
m_bMiniDump = FALSE;
|
|
m_bUserDump = FALSE;
|
|
m_bRecursiveMode = FALSE;
|
|
m_strNotifyAdmin = _T("");
|
|
m_strAltSymbolPath = _T("");
|
|
m_bRememberSettings = FALSE;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_pSettings = pSettings;
|
|
m_pECXVariantList = pVar;
|
|
m_emSessionType = type;
|
|
}
|
|
|
|
|
|
void CAutomaticSessDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CAutomaticSessDlg)
|
|
DDX_Control(pDX, IDC_CK_RECURSIVEMODE, m_btnRecursiveMode);
|
|
DDX_Control(pDX, IDC_CK_NOTIFYADMIN, m_btnNotifyAdmin);
|
|
DDX_Control(pDX, IDOK, m_btnOK);
|
|
DDX_Control(pDX, IDC_EDIT_NOTIFYADMIN, m_NotifyAdminEditControl);
|
|
DDX_Control(pDX, IDC_CK_COMMANDSET, m_btnCommandSet);
|
|
DDX_Control(pDX, IDC_LIST_COMMANDSET, m_mainListControl);
|
|
DDX_Check(pDX, IDC_CK_NOTIFYADMIN, m_bNotifyAdmin);
|
|
DDX_Check(pDX, IDC_CK_MINIDUMP, m_bMiniDump);
|
|
DDX_Check(pDX, IDC_CK_USERDUMP, m_bUserDump);
|
|
DDX_Check(pDX, IDC_CK_RECURSIVEMODE, m_bRecursiveMode);
|
|
DDX_Text(pDX, IDC_EDIT_NOTIFYADMIN, m_strNotifyAdmin);
|
|
DDX_Text(pDX, IDC_EDIT_ALTSYMBOLPATH, m_strAltSymbolPath);
|
|
DDX_Check(pDX, IDC_CK_REMEMBERSETTINGS, m_bRememberSettings);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CAutomaticSessDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CAutomaticSessDlg)
|
|
ON_NOTIFY(NM_CLICK, IDC_LIST_COMMANDSET, OnClickListCommandset)
|
|
ON_BN_CLICKED(IDC_CK_NOTIFYADMIN, OnCkNotifyadmin)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CAutomaticSessDlg message handlers
|
|
|
|
void CAutomaticSessDlg::UpdateSessionDlgData(bool bUpdate)
|
|
{
|
|
LVFINDINFO findInfo;
|
|
int nIndex = 0;
|
|
|
|
//if bUpdate is TRUE, we are loading the dialog settings from m_pSettings
|
|
if ( bUpdate ) {
|
|
if ( m_pSettings != NULL ) {
|
|
m_bNotifyAdmin = m_pSettings->dwNotifyAdmin;
|
|
m_bMiniDump = m_pSettings->dwProduceMiniDump;
|
|
m_bUserDump = m_pSettings->dwProduceUserDump;
|
|
m_strNotifyAdmin = m_pSettings->strAdminName;
|
|
m_strAltSymbolPath = m_pSettings->strAltSymbolPath;
|
|
m_strSelectedCommandSet = m_pSettings->strCommandSet;
|
|
|
|
m_NotifyAdminEditControl.EnableWindow( m_bNotifyAdmin );
|
|
|
|
if (m_emSessionType == EMOBJ_SERVICE) {
|
|
m_bRecursiveMode = m_pSettings->dwRecursiveMode;
|
|
m_btnRecursiveMode.EnableWindow(TRUE);
|
|
} else {
|
|
m_btnRecursiveMode.SetCheck(FALSE);
|
|
m_btnRecursiveMode.EnableWindow(FALSE);
|
|
}
|
|
|
|
//Create and initialize a findInfo object to retrieve the index for the item were looking for
|
|
findInfo.flags = LVFI_STRING;
|
|
findInfo.psz = m_strSelectedCommandSet;
|
|
|
|
if ( m_mainListControl.GetItemCount() > 0) {
|
|
//Search for m_strSelectedCommandSet in the list control and select it.
|
|
nIndex = m_mainListControl.FindItem(&findInfo);
|
|
|
|
if ( nIndex != -1 ) {
|
|
//We have found it, now hilight it
|
|
m_mainListControl.SetItemState( nIndex,LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
|
|
m_strSelectedCommandSet = m_mainListControl.GetItemText(nIndex, 0);
|
|
} else {
|
|
//Select the only item in the list
|
|
m_mainListControl.SetItemState( 0,LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
|
|
m_strSelectedCommandSet = m_mainListControl.GetItemText(0, 0);
|
|
}
|
|
}
|
|
else {
|
|
//We have no items in the list, disable the okay button
|
|
m_btnOK.EnableWindow(FALSE);
|
|
}
|
|
}
|
|
}
|
|
//if bUpdate is FALSE, we are saving the dialog settings to m_pSettings
|
|
else {
|
|
m_pSettings->dwNotifyAdmin = m_bNotifyAdmin;
|
|
m_pSettings->dwProduceMiniDump = m_bMiniDump;
|
|
m_pSettings->dwProduceUserDump = m_bUserDump;
|
|
m_pSettings->dwRecursiveMode = m_bRecursiveMode;
|
|
m_pSettings->strAdminName = m_strNotifyAdmin;
|
|
m_pSettings->strAltSymbolPath = m_strAltSymbolPath;
|
|
m_pSettings->strCommandSet = m_strSelectedCommandSet;
|
|
}
|
|
}
|
|
|
|
BOOL CAutomaticSessDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
// TODO: Add extra initialization here
|
|
//Populate the list control with the ECX files.
|
|
HRESULT hr = E_FAIL;
|
|
LONG lLBound = 0;
|
|
LONG lUBound = 0;
|
|
BSTR bstrEmObj = NULL;
|
|
EmObject CurrentObj;
|
|
CString strDescription;
|
|
CString strName;
|
|
|
|
do {
|
|
//Check mark the command set button, but disable it
|
|
m_btnCommandSet.SetCheck(1);
|
|
m_btnCommandSet.EnableWindow(FALSE);
|
|
|
|
//Add the columns to the list control
|
|
m_mainListControl.BeginSetColumn(2);
|
|
strName.LoadString(IDS_AUTOSESSDLG_NAME);
|
|
strDescription.LoadString(IDS_AUTOSESSDLG_DESCRIPTION);
|
|
m_mainListControl.AddColumn(strName);
|
|
m_mainListControl.AddColumn(strDescription);
|
|
m_mainListControl.EndSetColumn();
|
|
|
|
m_mainListControl.ResizeColumnsFitScreen();
|
|
m_mainListControl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
|
|
|
//Get the lower and upper bounds of the variant array
|
|
hr = SafeArrayGetLBound(m_pECXVariantList->parray, 1, &lLBound);
|
|
if(FAILED(hr)) break;
|
|
|
|
hr = SafeArrayGetUBound(m_pECXVariantList->parray, 1, &lUBound);
|
|
if(FAILED(hr)) break;
|
|
|
|
//There are elements at both the lower bound and upper bound, so include them
|
|
for(; lLBound <= lUBound; lLBound++)
|
|
{
|
|
//Get a BSTR object from the safe array
|
|
hr = SafeArrayGetElement(m_pECXVariantList->parray, &lLBound, &bstrEmObj);
|
|
|
|
if (FAILED(hr)) break;
|
|
|
|
//Create a local copy of the EmObject (there aren't any pointers in
|
|
//EmObject structure, so don't worry about doing a deep copy
|
|
CurrentObj = *GetEmObj(bstrEmObj);
|
|
|
|
if (bstrEmObj != NULL ) {
|
|
SysFreeString( bstrEmObj );
|
|
}
|
|
|
|
//Convert the BSTR object to an EmObject and pass it to DisplayData
|
|
DisplayData(&CurrentObj);
|
|
}
|
|
//Synchronize the dialog with the view data
|
|
UpdateSessionDlgData();
|
|
UpdateData(FALSE);
|
|
} while (FALSE);
|
|
|
|
SysFreeString( bstrEmObj );
|
|
|
|
if (FAILED(hr)) {
|
|
((CEmshellApp*)AfxGetApp())->DisplayErrMsgFromHR(hr);
|
|
}
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
HRESULT CAutomaticSessDlg::DisplayData(PEmObject pEmObject)
|
|
{
|
|
_ASSERTE(pEmObject != NULL);
|
|
|
|
HRESULT hr = E_FAIL;
|
|
TCHAR szPid[20] = {0};
|
|
LONG lRow = 0L;
|
|
int nImage = 0;
|
|
CString csPROCStatus;
|
|
|
|
do
|
|
{
|
|
if( pEmObject == NULL ){
|
|
hr = E_INVALIDARG;
|
|
break;
|
|
}
|
|
|
|
_ltot(pEmObject->nId, szPid, 10);
|
|
|
|
lRow = m_mainListControl.SetItemText(-1, 0, pEmObject->szName);
|
|
if(lRow == -1L){
|
|
hr = E_FAIL;
|
|
break;
|
|
}
|
|
|
|
if ( pEmObject->dwBucket1 )
|
|
lRow = m_mainListControl.SetItemText(lRow, 1, pEmObject->szBucket1);
|
|
|
|
hr = S_OK;
|
|
}
|
|
while( false );
|
|
|
|
return hr;
|
|
}
|
|
|
|
void CAutomaticSessDlg::OnClickListCommandset(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
//Set the m_strSelectedCommandSet to the value of the currently selected item
|
|
//in the list
|
|
//Get the currently selected item
|
|
POSITION pos = NULL;
|
|
int nIndex = 0;
|
|
|
|
do {
|
|
pos = m_mainListControl.GetFirstSelectedItemPosition();
|
|
|
|
if ( pos != NULL ) {
|
|
nIndex = m_mainListControl.GetNextSelectedItem(pos);
|
|
m_strSelectedCommandSet = m_mainListControl.GetItemText(nIndex, 0);
|
|
}
|
|
|
|
//Enable the Okay button
|
|
//m
|
|
} while ( FALSE );
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CAutomaticSessDlg::OnCkNotifyadmin()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
// The user has checked the box, enable the edit box
|
|
UpdateData(TRUE);
|
|
m_NotifyAdminEditControl.EnableWindow( m_bNotifyAdmin );
|
|
}
|
|
|
|
void CAutomaticSessDlg::OnOK()
|
|
{
|
|
// TODO: Add extra validation here
|
|
CDialog::OnOK();
|
|
|
|
//Store off the current settings
|
|
UpdateSessionDlgData(FALSE);
|
|
}
|