Leaked source code of windows server 2003
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.
 
 
 
 
 
 

553 lines
14 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000 - 2001.
//
// File: AddDlg.cpp
//
// Contents: Add Dialogs are presented when user clicks add button. For
// Add Task, Add Group etc. This file has implementation of add dlgs.
//
//----------------------------------------------------------------------------
#include "headers.h"
/******************************************************************************
Class: CBaseAddDialog
Purpose: This is the base class for all Add Dialog classes.
******************************************************************************/
BOOL
CBaseAddDialog::
OnInitDialog()
{
TRACE_METHOD_EX(DEB_SNAPIN,CBaseAddDialog,OnInitDialog)
VERIFY(m_listCtrl.SubclassDlgItem(m_nIDListCtrl,this));
m_listCtrl.Initialize();
//Add AzObjects from list to ListControl
POSITION pos = m_listAzObjectsToDisplay.GetHeadPosition();
for (int i=0;i < m_listAzObjectsToDisplay.GetCount();i++)
{
CBaseAz* pBaseAz = m_listAzObjectsToDisplay.GetNext(pos);
//Add Item to ListControl
VERIFY( AddBaseAzToListCtrl(&m_listCtrl,
m_listCtrl.GetItemCount(),
pBaseAz,
m_uiListCtrlFlags) != -1);
}
//Sort the listctrl entries
m_listCtrl.Sort();
return TRUE;
}
void
CBaseAddDialog
::OnOK()
{
OnOkCancel(FALSE);
}
void
CBaseAddDialog::
OnCancel()
{
OnOkCancel(TRUE);
}
void
CBaseAddDialog::
OnOkCancel(BOOL bCancel)
{
//Get ListCotrol
int iRowCount = m_listCtrl.GetItemCount();
for( int iRow = 0; iRow < iRowCount; iRow++)
{
CBaseAz* pBaseAz = (CBaseAz*)(m_listCtrl.GetItemData(iRow));
ASSERT(pBaseAz);
//user Pressed Cancel, delete all items
if(bCancel)
delete pBaseAz;
else
{
//if checkbox for an item is checked, add it to the list
//else delete it
if(m_listCtrl.GetCheck(iRow))
m_listAzObjectsSelected.AddTail(pBaseAz);
else
delete pBaseAz;
}
}
if(bCancel)
CDialog::OnCancel();
else
CDialog::OnOK();
}
/******************************************************************************
Class: CAddOperationDlg
Purpose: Add Operation Dlg box
******************************************************************************/
BEGIN_MESSAGE_MAP(CAddOperationDlg, CBaseAddDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CAddOperationDlg
::CAddOperationDlg(CList<CBaseAz*,CBaseAz*>& listAzObjectsToDisplay,
CList<CBaseAz*,CBaseAz*>& listAzObjectsSelected)
:CBaseAddDialog(listAzObjectsToDisplay,
listAzObjectsSelected,
CAddOperationDlg::IDD,
IDC_LIST,
Col_For_Add_Object,
COL_NAME |COL_PARENT_TYPE|COL_DESCRIPTION)
{
}
CAddOperationDlg
::~CAddOperationDlg()
{
}
/******************************************************************************
Class: CAddTaskDlg
Purpose: Add Task Dlg box
******************************************************************************/
BEGIN_MESSAGE_MAP(CAddTaskDlg, CBaseAddDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CAddTaskDlg::
CAddTaskDlg(CList<CBaseAz*,CBaseAz*>& listAzObjectsToDisplay,
CList<CBaseAz*,CBaseAz*>& listAzObjectsSelected,
ULONG IDD_DIALOG)
:CBaseAddDialog(listAzObjectsToDisplay,
listAzObjectsSelected,
IDD_DIALOG,
IDC_LIST,
Col_For_Add_Object,
COL_NAME |COL_PARENT_TYPE|COL_DESCRIPTION)
{
}
CAddTaskDlg
::~CAddTaskDlg()
{
}
/******************************************************************************
Class: CAddGroupDlg
Purpose: Add Group Dlg box
******************************************************************************/
BEGIN_MESSAGE_MAP(CAddGroupDlg, CBaseAddDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CAddGroupDlg
::CAddGroupDlg(CList<CBaseAz*,CBaseAz*>& listAzObjectsToDisplay,
CList<CBaseAz*,CBaseAz*>& listAzObjectsSelected)
:CBaseAddDialog(listAzObjectsToDisplay,
listAzObjectsSelected,
CAddGroupDlg::IDD,
IDC_LIST,
Col_For_Add_Object,
COL_NAME |COL_PARENT_TYPE|COL_DESCRIPTION)
{
}
CAddGroupDlg
::~CAddGroupDlg()
{
}
//+----------------------------------------------------------------------------
// Function:GetSelectedAzObjects
// Synopsis:Display the add dlg box for eObjecType and return the objects
// selected by user
// Arguments:hwnd
// eObjectType: Shows Add Dlg for this objecttype
// pContainerAz:ContainerAz object from whose child objects are
// shown
// listObjectsSelected: Gets list of selected object types
// Returns:
//-----------------------------------------------------------------------------
BOOL GetSelectedAzObjects(IN HWND hWnd,
IN OBJECT_TYPE_AZ eObjectType,
IN CContainerAz* pContainerAz,
OUT CList<CBaseAz*,CBaseAz*>& listObjectsSelected)
{
TRACE_FUNCTION_EX(DEB_SNAPIN,GetSelectedAzObjects)
if(!pContainerAz)
{
ASSERT(pContainerAz);
return FALSE;
}
//Get All the object of type eObjectType at pRoleTaskContainerAz
CList<CBaseAz*,CBaseAz*> listChildObjectsToDisplay;
HRESULT hr = GetAllAzChildObjects(pContainerAz,
eObjectType,
listChildObjectsToDisplay);
if(FAILED(hr))
{
CString strError;
GetSystemError(strError, hr);
//Display Generic Error Message
DisplayError(hWnd,
IDS_ERROR_OPERATION_FAILED,
(LPWSTR)(LPCWSTR)strError);
return FALSE;
}
//if there are no objects to add, show the error message and quit
if(!listChildObjectsToDisplay.GetCount())
{
switch(eObjectType)
{
case OPERATION_AZ:
DisplayInformation(hWnd,IDS_NO_OPERATIONS_TO_ADD);
break;
case GROUP_AZ:
DisplayInformation(hWnd,IDS_NO_GROUP_TO_ADD);
break;
default:
ASSERT(FALSE);
break;
}
return TRUE;
}
//Display Appropriate Dialog box
if(eObjectType == OPERATION_AZ)
{
CAddOperationDlg dlgAddOperation(listChildObjectsToDisplay,
listObjectsSelected);
dlgAddOperation.DoModal();
}
else if(eObjectType == GROUP_AZ)
{
CAddGroupDlg dlgAddGroup(listChildObjectsToDisplay,
listObjectsSelected);
dlgAddGroup.DoModal();
}
return TRUE;
}
//+----------------------------------------------------------------------------
// Function:GetSelectedTasks
// Synopsis:Display the add dlg box for Tasks/RoleDefintions
// and return the objects selected by user
// Arguments:hwnd
// bTaskIsRoleDefintion if True Display AddTask else Add Role Def.
// pContainerAz:ContainerAz object from whose child objects are
// shown
// listObjectsSelected: Gets list of selected object types
// Returns:
//-----------------------------------------------------------------------------
BOOL GetSelectedTasks(IN HWND hWnd,
IN BOOL bTaskIsRoleDefintion,
IN CContainerAz* pContainerAz,
OUT CList<CBaseAz*,CBaseAz*>& listObjectsSelected)
{
if(!pContainerAz)
{
ASSERT(pContainerAz);
return FALSE;
}
//Get All the object of type eObjectType at pRoleTaskContainerAz
CList<CBaseAz*,CBaseAz*> listListOfAllTasks;
HRESULT hr = GetAllAzChildObjects(pContainerAz,
TASK_AZ,
listListOfAllTasks);
if(FAILED(hr))
{
CString strError;
GetSystemError(strError, hr);
//Display Generic Error Message
DisplayError(hWnd,
IDS_ERROR_OPERATION_FAILED,
(LPWSTR)(LPCWSTR)strError);
return FALSE;
}
CList<CBaseAz*,CBaseAz*> listChildObjectsToDisplay;
POSITION pos = listListOfAllTasks.GetHeadPosition();
for( int i = 0; i < listListOfAllTasks.GetCount(); ++i)
{
CTaskAz* pTaskAz = dynamic_cast<CTaskAz*>(listListOfAllTasks.GetNext(pos));
ASSERT(pTaskAz);
if((bTaskIsRoleDefintion && pTaskAz->IsRoleDefinition())
||(!bTaskIsRoleDefintion) && !pTaskAz->IsRoleDefinition())
listChildObjectsToDisplay.AddTail(pTaskAz);
else
delete pTaskAz;
}
//if there are no objects to add, show the error message and quit
if(!listChildObjectsToDisplay.GetCount())
{
if(bTaskIsRoleDefintion)
DisplayInformation(hWnd,IDS_NO_ROLE_DEFINITION_TO_ADD);
else
DisplayInformation(hWnd,IDS_NO_TASKS_TO_ADD);
return TRUE ;
}
CAddTaskDlg dlgAddTask(listChildObjectsToDisplay,
listObjectsSelected,
bTaskIsRoleDefintion? IDD_ADD_ROLE_DEFINITION_1 :IDD_ADD_TASK);
//Get List of Tasks to be Added
dlgAddTask.DoModal();
return TRUE;
}
/******************************************************************************
Class: CAddDefinition
Purpose:Property Page for Add Definition Tab. Allows to add Role, Task or
Operation
******************************************************************************/
BEGIN_MESSAGE_MAP(CAddDefinition, CPropertyPage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL
CAddDefinition::
OnInitDialog()
{
TRACE_METHOD_EX(DEB_SNAPIN,CAddDefinition,OnInitDialog)
VERIFY(m_listCtrl.SubclassDlgItem(IDC_LIST,this));
m_listCtrl.Initialize();
//
//Get List of Objects to Display
//
CList<CBaseAz*,CBaseAz*> listAzObjectsToDisplay;
HRESULT hr = S_OK;
if(m_eObjectType == TASK_AZ)
{
CList<CBaseAz*,CBaseAz*> listTasks;
hr = GetAllAzChildObjects(m_pContainerAz,
TASK_AZ,
listTasks);
if(SUCCEEDED(hr))
{
POSITION pos = listTasks.GetHeadPosition();
for( int i = 0; i < listTasks.GetCount(); ++i)
{
CTaskAz* pTaskAz = dynamic_cast<CTaskAz*>(listTasks.GetNext(pos));
ASSERT(pTaskAz);
if((m_bTaskIsRoleDefintion && pTaskAz->IsRoleDefinition())
||(!m_bTaskIsRoleDefintion && !pTaskAz->IsRoleDefinition()))
{
listAzObjectsToDisplay.AddTail(pTaskAz);
}
else
delete pTaskAz;
}
}
}
else
{
hr = GetAllAzChildObjects(m_pContainerAz,
m_eObjectType,
listAzObjectsToDisplay);
}
if(FAILED(hr))
{
CString strError;
GetSystemError(strError, hr);
//Display Generic Error Message
DisplayError(m_hWnd,
IDS_ERROR_OPERATION_FAILED,
(LPWSTR)(LPCWSTR)strError);
return FALSE;
}
//if there are no objects to add, show the error message and quit
if(!listAzObjectsToDisplay.GetCount())
{
if(m_eObjectType == TASK_AZ)
{
if(m_bTaskIsRoleDefintion)
DisplayInformation(m_hWnd,IDS_NO_ROLE_DEFINITION_TO_ADD);
else
DisplayInformation(m_hWnd,IDS_NO_TASKS_TO_ADD);
}
else
{
DisplayInformation(m_hWnd,IDS_NO_OPERATIONS_TO_ADD);
}
return TRUE ;
}
//Add AzObjects from list to ListControl
POSITION pos = listAzObjectsToDisplay.GetHeadPosition();
for (int i=0;i < listAzObjectsToDisplay.GetCount();i++)
{
CBaseAz* pBaseAz = listAzObjectsToDisplay.GetNext(pos);
//Add Item to ListControl
VERIFY( AddBaseAzToListCtrl(&m_listCtrl,
m_listCtrl.GetItemCount(),
pBaseAz,
COL_NAME |COL_PARENT_TYPE|COL_DESCRIPTION) != -1);
}
m_listCtrl.Sort();
return TRUE;
}
void
CAddDefinition
::OnOK()
{
OnOkCancel(FALSE);
}
void
CAddDefinition::
OnCancel()
{
OnOkCancel(TRUE);
}
void
CAddDefinition::
OnOkCancel(BOOL bCancel)
{
int iRowCount = m_listCtrl.GetItemCount();
for( int iRow = 0; iRow < iRowCount; iRow++)
{
CBaseAz* pBaseAz = (CBaseAz*)m_listCtrl.GetItemData(iRow);
ASSERT(pBaseAz);
//user Pressed Cancel, delete all items
if(bCancel)
delete pBaseAz;
else
{
//if checkbox for an item is checked, add it to the list
//else delete it
if(m_listCtrl.GetCheck(iRow))
m_listAzObjectsSelected.AddTail(pBaseAz);
else
delete pBaseAz;
}
}
if(bCancel)
CDialog::OnCancel();
else
CDialog::OnOK();
}
//+----------------------------------------------------------------------------
// Function:GetSelectedDefinitions
// Synopsis:Display the dlg boxes for Tasks/RoleDefintions/Operations
// and return the objects selected by user
// Arguments:hwnd
// bRoleDefintion if True Display Add Role dialog also.
// pContainerAz:ContainerAz object from whose child objects are
// shown
// listObjectsSelected: Gets list of selected object types
// Returns:
//-----------------------------------------------------------------------------
BOOL GetSelectedDefinitions(IN BOOL bAllowRoleDefinition,
IN CContainerAz* pContainerAz,
OUT CList<CBaseAz*,CBaseAz*>& listObjectsSelected)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if(!pContainerAz)
{
ASSERT(pContainerAz);
return FALSE;
}
CPropertySheet sheet(IDS_ADD_DEFINITION);
CAddDefinition *ppageRole = NULL;
//Add Role Definition Page
if(bAllowRoleDefinition)
{
ppageRole= new CAddDefinition(listObjectsSelected,
IDD_ADD_ROLE_DEFINITION,
pContainerAz,
TASK_AZ,
TRUE);
if(!ppageRole)
{
return FALSE;
}
sheet.AddPage(ppageRole);
}
//Add Task Page
CAddDefinition pageTask(listObjectsSelected,
IDD_ADD_TASK,
pContainerAz,
TASK_AZ,
FALSE);
sheet.AddPage(&pageTask);
CContainerAz * pOperationContainer
= (pContainerAz->GetObjectType() == SCOPE_AZ) ? pContainerAz->GetParentAz():pContainerAz;
//Add Operation Page
CAddDefinition pageOperation(listObjectsSelected,
IDD_ADD_OPERATION,
pOperationContainer,
OPERATION_AZ,
FALSE);
sheet.AddPage(&pageOperation);
//Remove the apply button
sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
//Display the sheet
sheet.DoModal();
if(ppageRole)
delete ppageRole;
return TRUE;
}