/****************************************************************************** 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 #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); }