Windows2000/private/ntos/w32/ntgdi/icm/icmui/propdlg.cpp
2020-09-30 17:12:32 +02:00

239 lines
6.6 KiB
C++

/***
Source File: Property Dialogs.CPP
Implements the dialogs used in the Profile Management UI.
Copyright (c) 1996 by Microsoft Corporation
A Pretty Penny Enterprises Production
Change History:
11-01-96 a-robkj@microsoft.com- original version
***/
#include "ICMUI.H"
#include <stdlib.h>
#include "Resource.H"
// CInstallPage member functions
// Class constructor
CInstallPage::CInstallPage(CProfilePropertySheet *pcpps) :
CDialog(pcpps -> Instance(),
pcpps -> Profile().IsInstalled() ? UninstallPage : InstallPage,
pcpps -> Window()), m_cppsBoss(*pcpps){ }
CInstallPage::~CInstallPage() {}
// OnInit function- this initializes the property page
BOOL CInstallPage::OnInit() {
SetDlgItemText(m_hwnd, ProfileNameControl, m_cppsBoss.Profile().GetName());
if (m_cppsBoss.Profile().IsInstalled())
CheckDlgButton(m_hwnd, DeleteFileControl,
m_cppsBoss.DeleteIsOK() ? BST_CHECKED : BST_UNCHECKED);
return TRUE;
}
BOOL CInstallPage::OnCommand(WORD wNotifyCode, WORD wid, HWND hwndCtl) {
switch (wid) {
case DeleteFileControl:
if (wNotifyCode == BN_CLICKED) {
m_cppsBoss.DeleteOnUninstall(
IsDlgButtonChecked(m_hwnd, DeleteFileControl) ==
BST_CHECKED);
return TRUE;
}
break;
case ProfileNameControl:
if (wNotifyCode == EN_SETFOCUS) {
// We don't want the entire string selected and scrolled
SendDlgItemMessage(m_hwnd, ProfileNameControl, EM_SETSEL,
0, 0);
return TRUE;
}
break;
}
return FALSE;
}
// CAdvancedPage member functions
CAdvancedPage::CAdvancedPage(CProfilePropertySheet *pcpps) :
CDialog(pcpps -> Instance(), AdvancedPage, pcpps -> Window()),
m_cppsBoss(*pcpps){ }
// Class destructor
CAdvancedPage::~CAdvancedPage() {}
// Update private function- fill the list box, and set all the buttons
// properly.
void CAdvancedPage::Update() {
// Add the associations to the list
SendDlgItemMessage(m_hwnd, DeviceListControl, LB_RESETCONTENT, 0, 0);
for (unsigned u = m_cppsBoss.AssociationCount(); u--; ) {
int iItem = SendDlgItemMessage(m_hwnd, DeviceListControl, LB_ADDSTRING,
0, (LPARAM) m_cppsBoss.DisplayName(u));
SendDlgItemMessage(m_hwnd, DeviceListControl, LB_SETITEMDATA, iItem,
(LPARAM) m_cppsBoss.Association(u));
}
// If there are no associations, disable the Remove Devices button
EnableWindow(GetDlgItem(m_hwnd, RemoveDeviceButton),
m_cppsBoss.Profile().AssociationCount());
// If there are no devices, or all are associated, disable the Add
// Devices button.
EnableWindow(GetDlgItem(m_hwnd, AddDeviceButton),
m_cppsBoss.Profile().DeviceCount() &&
m_cppsBoss.Profile().DeviceCount() > m_cppsBoss.AssociationCount());
}
// OnInit function- this initializes the property page
BOOL CAdvancedPage::OnInit() {
SetDlgItemText(m_hwnd, ProfileNameControl, m_cppsBoss.Profile().GetName());
// Add the associations to the list, etc.
Update();
return TRUE;
}
// OnCommand override- handles control notifications
BOOL CAdvancedPage::OnCommand(WORD wNotifyCode, WORD wid, HWND hwndCtl) {
switch (wid) {
case AddDeviceButton:
if (wNotifyCode == BN_CLICKED) {
CAddDeviceDialog cadd(m_cppsBoss, m_hwnd);
Update();
return TRUE;
}
break;
case RemoveDeviceButton:
if (wNotifyCode == BN_CLICKED) {
int i = SendDlgItemMessage(m_hwnd, DeviceListControl,
LB_GETCURSEL, 0, 0);
if (i == -1)
return TRUE;
unsigned uItem = SendDlgItemMessage(m_hwnd, DeviceListControl,
LB_GETITEMDATA, i, 0);
m_cppsBoss.Dissociate(uItem);
Update();
return TRUE;
}
break;
case DeviceListControl:
switch (wNotifyCode) {
case LBN_SELCHANGE:
EnableWindow(GetDlgItem(m_hwnd, RemoveDeviceButton),
-1 != SendMessage(hwndCtl, LB_GETCURSEL, 0, 0));
return TRUE;
}
break;
}
return FALSE;
}
// CAddDeviceDialog class constructor
CAddDeviceDialog::CAddDeviceDialog(CProfilePropertySheet& cpps,
HWND hwndParent) :
CDialog(cpps.Instance(), AddDeviceDialog, hwndParent), m_cppsBoss(cpps) {
DoModal();
}
// Dialog Initialization routine
BOOL CAddDeviceDialog::OnInit() {
CProfile& cpThis = m_cppsBoss.Profile();
m_hwndList = GetDlgItem(m_hwnd, DeviceListControl);
m_hwndButton = GetDlgItem(m_hwnd, AddDeviceButton);
// This must not list associated (tentatively) devices, per the spec
for (unsigned uDevice = 0; uDevice < cpThis.DeviceCount(); uDevice++) {
for (unsigned u = 0; u < m_cppsBoss.AssociationCount(); u++)
if (uDevice == m_cppsBoss.Association(u))
break;
if (u < m_cppsBoss.AssociationCount())
continue; // Don't insert this one...
int idItem = SendMessage(m_hwndList, LB_ADDSTRING, 0,
(LPARAM) cpThis.DisplayName(uDevice));
SendMessage(m_hwndList, LB_SETITEMDATA, idItem, (LPARAM) uDevice);
}
if (SendMessage(m_hwndList, LB_GETCOUNT, 0, 0))
SendMessage(m_hwndList, LB_SETCURSEL, 0, 0);
EnableWindow(m_hwndButton, -1 !=
SendMessage(m_hwndList, LB_GETCURSEL, 0, 0));
return TRUE;
}
// Dialog notification handler
BOOL CAddDeviceDialog::OnCommand(WORD wNotification, WORD wid,
HWND hwndControl){
switch (wNotification) {
case LBN_SELCHANGE:
EnableWindow(m_hwndButton, -1 !=
SendMessage(m_hwndList, LB_GETCURSEL, 0, 0));
return TRUE;
case BN_CLICKED:
if (wid == AddDeviceButton) {
int i = SendMessage(m_hwndList, LB_GETCURSEL, 0, 0);
if (i == -1)
return TRUE;
unsigned uItem = (unsigned) SendMessage(m_hwndList,
LB_GETITEMDATA, i, 0);
m_cppsBoss.Associate(uItem);
}
break;
case LBN_DBLCLK:
return OnCommand(BN_CLICKED, AddDeviceButton, m_hwndButton);
}
return CDialog::OnCommand(wNotification, wid, hwndControl);
}