//Copyright (c) 1998 - 1999 Microsoft Corporation /******************************************************************************* * * dialogs.cpp * * implementation of WINCFG dialogs * * copyright notice: Copyright 1996, Citrix Systems Inc. * * $Author: donm $ Butch Davis * * $Log: N:\nt\private\utils\citrix\winutils\tscfg\VCS\dialogs.cpp $ * * Rev 1.59 18 Apr 1998 15:32:48 donm * Added capability bits * * Rev 1.58 06 Feb 1998 14:37:52 donm * fixed trap when no encyrption levels * * Rev 1.2 29 Jan 1998 17:29:10 donm * sets default encryption and grays out control properly * * Rev 1.1 15 Jan 1998 17:57:08 thanhl * Hydra merge * * Rev 1.56 13 Jan 1998 14:08:18 donm * gets encryption levels from extension DLL * * Rev 1.55 31 Jul 1997 16:33:20 butchd * update * * Rev 1.54 25 Mar 1997 15:42:14 butchd * update * * Rev 1.53 16 Nov 1996 16:11:48 butchd * update * * Rev 1.52 27 Sep 1996 17:52:22 butchd * update * *******************************************************************************/ /* * include files */ #include "stdafx.h" #include "wincfg.h" #include "appsvdoc.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif extern CWincfgApp *pApp; /* * Global variables for WINUTILS Common functions. */ extern "C" HWND WinUtilsAppWindow; /* * Global command line variables. */ //////////////////////////////////////////////////////////////////////////////// // CAdvancedWinStationDlg class construction / destruction, implementation /******************************************************************************* * * CAdvancedWinStationDlg - CAdvancedWinStationDlg constructor * * ENTRY: * EXIT: * (Refer to MFC CDialog::CDialog documentation) * ******************************************************************************/ CAdvancedWinStationDlg::CAdvancedWinStationDlg() : CBaseDialog(CAdvancedWinStationDlg::IDD) { //{{AFX_DATA_INIT(CAdvancedWinStationDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } // end CAdvancedWinStationDlg::CAdvancedWinStationDlg //////////////////////////////////////////////////////////////////////////////// // CAdvancedWinStationDlg operations /******************************************************************************* * * HandleEnterEscKey - CAdvancedWinStationDlg member function: * private operation * * If the ENTER or ESC key is pressed while a combo box is dropped down, * treat as combo box selection (suppress OnOk/OnCancel notification). * * ENTRY: * nID (input) * IDOK if OK button (ENTER) brought us here; otherwise, IDCANCEL for * Cancel button (ESC). * EXIT: * TRUE to process Enter/Esc (perform OnOk/OnCancel); FALSE to ignore * (a combo box is dropped down). * ******************************************************************************/ BOOL CAdvancedWinStationDlg::HandleEnterEscKey(int nID) { CComboBox *pEncryption = (CComboBox *)GetDlgItem(IDC_AWS_SECURITY_ENCRYPT); CComboBox *pBroken = (CComboBox *)GetDlgItem(IDC_AWS_BROKEN); CComboBox *pReconnect = (CComboBox *)GetDlgItem(IDC_AWS_RECONNECT); CComboBox *pShadow = (CComboBox *)GetDlgItem(IDC_AWS_SHADOW); /* * Check encryption level combo-box. */ if ( pEncryption->GetDroppedState() ) { if ( nID == IDCANCEL ) // select original selection for(ULONG i = 0; i < m_NumEncryptionLevels; i++) { if((int)(m_UserConfig.MinEncryptionLevel) == (int)(m_pEncryptionLevels[i].RegistryValue)) pEncryption->SetCurSel(i); } pEncryption->ShowDropDown(FALSE); return(FALSE); } /* * Check broken connection combo-box. */ if ( pBroken->GetDroppedState() ) { if ( nID == IDCANCEL ) // select original selection pBroken->SetCurSel((int)(m_UserConfig.fResetBroken)); pBroken->ShowDropDown(FALSE); return(FALSE); } /* * Check reconnect session combo-box. */ if ( pReconnect->GetDroppedState() ) { if ( nID == IDCANCEL ) // select original selection pReconnect->SetCurSel((int)(m_UserConfig.fReconnectSame)); pReconnect->ShowDropDown(FALSE); return(FALSE); } /* * Check shadowing combo-box. */ if ( pShadow->GetDroppedState() ) { if ( nID == IDCANCEL ) // select original selection pShadow->SetCurSel((int)(m_UserConfig.Shadow)); pShadow->ShowDropDown(FALSE); return(FALSE); } /* * No combo boxes are down; process Enter/Esc */ return(TRUE); } // end CAdvancedWinStationDlg::HandleEnterEscKey //////////////////////////////////////////////////////////////////////////////// // CAdvancedWinStationDlg message map BEGIN_MESSAGE_MAP(CAdvancedWinStationDlg, CBaseDialog) //{{AFX_MSG_MAP(CAdvancedWinStationDlg) ON_BN_CLICKED(IDC_AWS_CONNECTION_NONE, OnClickedAwsConnectionNone) ON_BN_CLICKED(IDC_AWS_CONNECTION_INHERIT, OnClickedAwsConnectionInherit) ON_BN_CLICKED(IDC_AWS_DISCONNECTION_NONE, OnClickedAwsDisconnectionNone) ON_BN_CLICKED(IDC_AWS_DISCONNECTION_INHERIT, OnClickedAwsDisconnectionInherit) ON_BN_CLICKED(IDC_AWS_IDLE_NONE, OnClickedAwsIdleNone) ON_BN_CLICKED(IDC_AWS_IDLE_INHERIT, OnClickedAwsIdleInherit) ON_BN_CLICKED(IDC_AWS_AUTOLOGON_INHERIT, OnClickedAwsAutologonInherit) ON_BN_CLICKED(IDC_AWS_AUTOLOGON_PASSWORD_PROMPT, OnClickedAwsPromptForPassword) ON_BN_CLICKED(IDC_AWS_INITIALPROGRAM_INHERIT, OnClickedAwsInitialprogramInherit) ON_BN_CLICKED(IDC_AWS_INITIALPROGRAM_PUBLISHEDONLY, OnClickedAwsInitialprogramPublishedonly) // ON_BN_CLICKED(IDC_AWS_SECURITY_DISABLEENCRYPTION, OnClickedAwsSecurityDisableencryption) ON_BN_CLICKED(IDC_AWS_USEROVERRIDE_DISABLEWALLPAPER, OnClickedAwsUseroverrideDisablewallpaper) ON_BN_CLICKED(IDC_AWS_BROKEN_INHERIT, OnClickedAwsBrokenInherit) ON_BN_CLICKED(IDC_AWS_RECONNECT_INHERIT, OnClickedAwsReconnectInherit) ON_BN_CLICKED(IDC_AWS_SHADOW_INHERIT, OnClickedAwsShadowInherit) //}}AFX_MSG_MAP END_MESSAGE_MAP() //////////////////////////////////////////////////////////////////////////////// // CAdvancedWinStationDlg commands /******************************************************************************* * * OnInitDialog - CAdvancedWinStationDlg member function: command (override) * * Performs the dialog intialization. * * ENTRY: * EXIT: * (Refer to CDialog::OnInitDialog documentation) * ******************************************************************************/ BOOL CAdvancedWinStationDlg::OnInitDialog() { int i; CString string; CComboBox *pComboBox; /* * Call the parent classes' OnInitDialog to perform default dialog * initialization. */ CBaseDialog::OnInitDialog(); m_Capabilities = m_pTermObject ? m_pTermObject->m_Capabilities : 0; /* * Set WinStation state radio buttons. */ CheckRadioButton( IDC_AWS_WSDISABLED, IDC_AWS_WSENABLED, IDC_AWS_WSDISABLED + (int)m_fEnableWinStation ); /* * Set the Connection Timeout fields. */ CheckDlgButton( IDC_AWS_CONNECTION_NONE, m_UserConfig.MaxConnectionTime ? FALSE : TRUE); OnClickedAwsConnectionNone(); CheckDlgButton( IDC_AWS_CONNECTION_INHERIT, m_UserConfig.fInheritMaxSessionTime ); OnClickedAwsConnectionInherit(); /* * Set the Disconnection Timeout fields. */ CheckDlgButton( IDC_AWS_DISCONNECTION_NONE, m_UserConfig.MaxDisconnectionTime ? FALSE : TRUE); OnClickedAwsDisconnectionNone(); CheckDlgButton( IDC_AWS_DISCONNECTION_INHERIT, m_UserConfig.fInheritMaxDisconnectionTime ); OnClickedAwsDisconnectionInherit(); /* * Set the Idle Timeout fields. */ CheckDlgButton( IDC_AWS_IDLE_NONE, m_UserConfig.MaxIdleTime ? FALSE : TRUE); OnClickedAwsIdleNone(); CheckDlgButton( IDC_AWS_IDLE_INHERIT, m_UserConfig.fInheritMaxIdleTime ); OnClickedAwsIdleInherit(); /* * Set AutoLogon fields. */ CheckDlgButton( IDC_AWS_AUTOLOGON_PASSWORD_PROMPT, m_UserConfig.fPromptForPassword ); CheckDlgButton( IDC_AWS_AUTOLOGON_INHERIT, m_UserConfig.fInheritAutoLogon ); OnClickedAwsAutologonInherit(); /* * Set Initial Program fields. */ CheckDlgButton( IDC_AWS_INITIALPROGRAM_INHERIT, m_UserConfig.fInheritInitialProgram ); CheckDlgButton( IDC_AWS_INITIALPROGRAM_PUBLISHEDONLY, m_UserConfig.fDisableExe ); OnClickedAwsInitialprogramInherit(); /* * Load combo box strings and set Security fields. */ pComboBox = (CComboBox *)GetDlgItem(IDC_AWS_SECURITY_ENCRYPT); m_pEncryptionLevels = NULL; m_NumEncryptionLevels = 0L; m_DefaultEncryptionLevelIndex = 0; BOOL bSet = FALSE; // Get the array of encryption levels from the extension DLL if(m_pTermObject && m_pTermObject->m_hExtensionDLL && m_pTermObject->m_lpfnExtEncryptionLevels) m_NumEncryptionLevels = (*m_pTermObject->m_lpfnExtEncryptionLevels)(&(m_pTermObject->m_WdConfig.Wd.WdName), &m_pEncryptionLevels); if(m_pEncryptionLevels) { // Loop through the encryption levels, read in their strings, // and add them to the combo box for(UINT i = 0; i < m_NumEncryptionLevels; i++) { TCHAR estring[128]; if(::LoadString(m_pTermObject->m_hExtensionDLL, m_pEncryptionLevels[i].StringID, estring, 127)) { pComboBox->AddString(estring); } // If this is the default encryption level, remember its value if(m_pEncryptionLevels[i].Flags & ELF_DEFAULT) m_DefaultEncryptionLevelIndex = i; // If this is the currently selected encryption level if(m_pEncryptionLevels[i].RegistryValue == (DWORD)m_UserConfig.MinEncryptionLevel) { bSet = TRUE; pComboBox->SetCurSel(i); } } // If the WinStation's encryption level didn't match one of the // levels returned by the extension DLL, set the level to the // default if(!bSet) { pComboBox->SetCurSel(m_DefaultEncryptionLevelIndex); m_UserConfig.MinEncryptionLevel = (UCHAR)(m_pEncryptionLevels[m_DefaultEncryptionLevelIndex].RegistryValue); } } else { // There aren't any encryption levels // Disable the combo box GetDlgItem(IDL_AWS_SECURITY_ENCRYPT1)->EnableWindow(FALSE); pComboBox->EnableWindow(FALSE); m_UserConfig.MinEncryptionLevel = 0; } CheckDlgButton( IDC_AWS_SECURITY_DEFAULTGINA, m_UserConfig.fUseDefaultGina ); /* * Set User Profile Override fields */ CheckDlgButton( IDC_AWS_USEROVERRIDE_DISABLEWALLPAPER, m_UserConfig.fWallPaperDisabled ); /* * Load combo box strings and set Connection fields. */ pComboBox = (CComboBox *)GetDlgItem(IDC_AWS_BROKEN); string.LoadString(IDS_AWS_BROKEN_DISCONNECT); pComboBox->AddString(string); string.LoadString(IDS_AWS_BROKEN_RESET); pComboBox->AddString(string); pComboBox->SetCurSel(m_UserConfig.fResetBroken); CheckDlgButton( IDC_AWS_BROKEN_INHERIT, m_UserConfig.fInheritResetBroken ); OnClickedAwsBrokenInherit(); /* * Load combo box strings and set Reconnection fields. */ pComboBox = (CComboBox *)GetDlgItem(IDC_AWS_RECONNECT); string.LoadString(IDS_AWS_RECONNECT_FROM_ANY); pComboBox->AddString(string); string.LoadString(IDS_AWS_RECONNECT_FROM_THIS); pComboBox->AddString(string); pComboBox->SetCurSel(m_UserConfig.fReconnectSame); CheckDlgButton( IDC_AWS_RECONNECT_INHERIT, m_UserConfig.fInheritReconnectSame ); OnClickedAwsReconnectInherit(); /* * Load combo box strings and set Shadow fields. */ pComboBox = (CComboBox *)GetDlgItem(IDC_AWS_SHADOW); string.LoadString(IDS_AWS_SHADOW_DISABLED); pComboBox->AddString(string); string.LoadString(IDS_AWS_SHADOW_ENABLED_ON_ON); pComboBox->AddString(string); string.LoadString(IDS_AWS_SHADOW_ENABLED_ON_OFF); pComboBox->AddString(string); string.LoadString(IDS_AWS_SHADOW_ENABLED_OFF_ON); pComboBox->AddString(string); string.LoadString(IDS_AWS_SHADOW_ENABLED_OFF_OFF); pComboBox->AddString(string); pComboBox->SetCurSel(m_UserConfig.Shadow); CheckDlgButton( IDC_AWS_SHADOW_INHERIT, m_UserConfig.fInheritShadow ); if(m_Capabilities & WDC_SHADOWING) { OnClickedAwsShadowInherit(); } else { GetDlgItem(IDL_AWS_SHADOW)->EnableWindow(FALSE); GetDlgItem(IDC_AWS_SHADOW)->EnableWindow(FALSE); GetDlgItem(IDC_AWS_SHADOW_INHERIT)->EnableWindow(FALSE); } /* * Process based on document's read/write state. */ if ( m_bReadOnly ) { /* * Document is 'read-only': disable all dialog controls and labels * except for CANCEL and HELP buttons. */ for ( i=IDL_AWS_WSSTATE; i <=IDC_AWS_SHADOW_INHERIT; i++ ) GetDlgItem(i)->EnableWindow(FALSE); GetDlgItem(IDOK)->EnableWindow(FALSE); } else { /* * The document is 'read-write': set the maximum length for the edit * controls. */ ((CEdit *)GetDlgItem(IDC_AWS_AUTOLOGON_USERNAME)) ->LimitText(USERNAME_LENGTH); ((CEdit *)GetDlgItem(IDC_AWS_AUTOLOGON_DOMAIN)) ->LimitText(DOMAIN_LENGTH); ((CEdit *)GetDlgItem(IDC_AWS_AUTOLOGON_PASSWORD)) ->LimitText(PASSWORD_LENGTH); ((CEdit *)GetDlgItem(IDC_AWS_AUTOLOGON_CONFIRM_PASSWORD)) ->LimitText(PASSWORD_LENGTH); ((CEdit *)GetDlgItem(IDC_AWS_INITIALPROGRAM_COMMANDLINE)) ->LimitText(INITIALPROGRAM_LENGTH); ((CEdit *)GetDlgItem(IDC_AWS_INITIALPROGRAM_WORKINGDIRECTORY)) ->LimitText(DIRECTORY_LENGTH); ((CEdit *)GetDlgItem(IDC_AWS_CONNECTION)) ->LimitText(CONNECTION_TIME_DIGIT_MAX-1); ((CEdit *)GetDlgItem(IDC_AWS_DISCONNECTION)) ->LimitText(DISCONNECTION_TIME_DIGIT_MAX-1); ((CEdit *)GetDlgItem(IDC_AWS_IDLE)) ->LimitText(IDLE_TIME_DIGIT_MAX-1); /* * If this WinStation is the System Console, disable the WinStation * state fields. */ if ( m_bSystemConsole ) for ( i=IDL_AWS_WSSTATE; i <=IDC_AWS_WSENABLED; i++ ) GetDlgItem(i)->EnableWindow(FALSE); } /* * Set all combo boxes to use the 'extended' UI. */ ((CComboBox *)GetDlgItem(IDC_AWS_SECURITY_ENCRYPT))->SetExtendedUI(TRUE); ((CComboBox *)GetDlgItem(IDC_AWS_BROKEN))->SetExtendedUI(TRUE); ((CComboBox *)GetDlgItem(IDC_AWS_RECONNECT))->SetExtendedUI(TRUE); ((CComboBox *)GetDlgItem(IDC_AWS_SHADOW))->SetExtendedUI(TRUE); return(TRUE); } // end CAdvancedWinStationDlg::OnInitDialog /******************************************************************************* * * OnClickedAwsConnectionNone - CAdvancedWinStationDlg * member function: command * * Process the connection timeout field when the 'none' checkbox is * checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsConnectionNone() { if ( ((CButton *)GetDlgItem(IDC_AWS_CONNECTION_NONE))->GetCheck() ) { /* * The user checked 'none' box: blank the connection * timeout field, set to zero, and disable it. */ SetDlgItemText(IDC_AWS_CONNECTION, TEXT("")); m_UserConfig.MaxConnectionTime = 0; GetDlgItem(IDL_AWS_CONNECTION)->EnableWindow(FALSE); GetDlgItem(IDC_AWS_CONNECTION)->EnableWindow(FALSE); } else { TCHAR string[CONNECTION_TIME_DIGIT_MAX]; /* * The user unchecked 'none' box: enable the connection timeout * field, fill it in (default if necessary), and set focus there. */ GetDlgItem(IDL_AWS_CONNECTION)->EnableWindow(TRUE); GetDlgItem(IDC_AWS_CONNECTION)->EnableWindow(TRUE); if ( !m_UserConfig.MaxConnectionTime ) m_UserConfig.MaxConnectionTime = (CONNECTION_TIME_DEFAULT * TIME_RESOLUTION); wsprintf(string, TEXT("%lu"), m_UserConfig.MaxConnectionTime / TIME_RESOLUTION); SetDlgItemText(IDC_AWS_CONNECTION, string); GotoDlgCtrl(GetDlgItem(IDC_AWS_CONNECTION)); } } // end CAdvancedWinStationDlg::OnClickedAwsConnectionNone /******************************************************************************* * * OnClickedAwsConnectionInherit - CAdvancedWinStationDlg * member function: command * * Process the connection timeout field when the 'inherit user config' * checkbox is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsConnectionInherit() { if ( (m_UserConfig.fInheritMaxSessionTime = ((CButton *)GetDlgItem(IDC_AWS_CONNECTION_INHERIT))->GetCheck()) ) { /* * When 'inherit' button is checked, default to 'none'. */ CheckDlgButton(IDC_AWS_CONNECTION_NONE, TRUE); OnClickedAwsConnectionNone(); } GetDlgItem(IDL_AWS_CONNECTION)-> EnableWindow( (m_UserConfig.fInheritMaxSessionTime || !m_UserConfig.MaxConnectionTime) ? FALSE : TRUE ); GetDlgItem(IDC_AWS_CONNECTION)-> EnableWindow( (m_UserConfig.fInheritMaxSessionTime || !m_UserConfig.MaxConnectionTime) ? FALSE : TRUE ); GetDlgItem(IDC_AWS_CONNECTION_NONE)-> EnableWindow(m_UserConfig.fInheritMaxSessionTime ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsConnectionInherit /******************************************************************************* * * OnClickedAwsDisconnectionNone - CAdvancedWinStationDlg * member function: command * * Process the disconnection timeout field when the 'none' checkbox is * checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsDisconnectionNone() { if ( ((CButton *)GetDlgItem(IDC_AWS_DISCONNECTION_NONE))->GetCheck() ) { /* * The user checked 'none' box: blank the disconnection * timeout field, set to zero, and disable it. */ SetDlgItemText(IDC_AWS_DISCONNECTION, TEXT("")); m_UserConfig.MaxDisconnectionTime = 0; GetDlgItem(IDL_AWS_DISCONNECTION)->EnableWindow(FALSE); GetDlgItem(IDC_AWS_DISCONNECTION)->EnableWindow(FALSE); } else { TCHAR string[DISCONNECTION_TIME_DIGIT_MAX]; /* * The user unchecked 'none' box: enable the disconnection timeout * field, fill it in (default if necessary), and set focus there. */ GetDlgItem(IDL_AWS_DISCONNECTION)->EnableWindow(TRUE); GetDlgItem(IDC_AWS_DISCONNECTION)->EnableWindow(TRUE); if ( !m_UserConfig.MaxDisconnectionTime ) m_UserConfig.MaxDisconnectionTime = (DISCONNECTION_TIME_DEFAULT * TIME_RESOLUTION); wsprintf(string, TEXT("%lu"), m_UserConfig.MaxDisconnectionTime / TIME_RESOLUTION); SetDlgItemText(IDC_AWS_DISCONNECTION, string); GotoDlgCtrl(GetDlgItem(IDC_AWS_DISCONNECTION)); } } // end CAdvancedWinStationDlg::OnClickedAwsDisconnectionNone /******************************************************************************* * * OnClickedAwsDisconnectionInherit - CAdvancedWinStationDlg * member function: command * * Process the disconnection timeout field when the 'inherit user config' * checkbox is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsDisconnectionInherit() { if ( (m_UserConfig.fInheritMaxDisconnectionTime = ((CButton *)GetDlgItem(IDC_AWS_DISCONNECTION_INHERIT))->GetCheck()) ) { /* * When 'inherit' button is checked, default to 'none'. */ CheckDlgButton(IDC_AWS_DISCONNECTION_NONE, TRUE); OnClickedAwsDisconnectionNone(); } GetDlgItem(IDL_AWS_DISCONNECTION)-> EnableWindow( (m_UserConfig.fInheritMaxDisconnectionTime || !m_UserConfig.MaxDisconnectionTime) ? FALSE : TRUE ); GetDlgItem(IDC_AWS_DISCONNECTION)-> EnableWindow( (m_UserConfig.fInheritMaxDisconnectionTime || !m_UserConfig.MaxDisconnectionTime) ? FALSE : TRUE ); GetDlgItem(IDC_AWS_DISCONNECTION_NONE)-> EnableWindow(m_UserConfig.fInheritMaxDisconnectionTime ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsDisconnectionInherit /******************************************************************************* * * OnClickedAwsIdleNone - CAdvancedWinStationDlg member function: command * * Process the idle timeout field when the 'none' checkbox is * checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsIdleNone() { if ( ((CButton *)GetDlgItem(IDC_AWS_IDLE_NONE))->GetCheck() ) { /* * The user checked 'none' box: blank the idle * timeout field, set to zero, and disable it. */ SetDlgItemText(IDC_AWS_IDLE, TEXT("")); m_UserConfig.MaxIdleTime = 0; GetDlgItem(IDL_AWS_IDLE)->EnableWindow(FALSE); GetDlgItem(IDC_AWS_IDLE)->EnableWindow(FALSE); } else { TCHAR string[IDLE_TIME_DIGIT_MAX]; /* * The user unchecked 'none' box: enable the idle timeout * field, fill it in (default if necessary), and set focus there. */ GetDlgItem(IDL_AWS_IDLE)->EnableWindow(TRUE); GetDlgItem(IDC_AWS_IDLE)->EnableWindow(TRUE); if ( !m_UserConfig.MaxIdleTime ) m_UserConfig.MaxIdleTime = (IDLE_TIME_DEFAULT * TIME_RESOLUTION); wsprintf(string, TEXT("%lu"), m_UserConfig.MaxIdleTime / TIME_RESOLUTION); SetDlgItemText(IDC_AWS_IDLE, string); GotoDlgCtrl(GetDlgItem(IDC_AWS_IDLE)); } } // end CAdvancedWinStationDlg::OnClickedAwsIdleNone /******************************************************************************* * * OnClickedAwsIdleInherit - CAdvancedWinStationDlg member function: command * * Process the idle timeout field when the 'inherit user config' checkbox * is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsIdleInherit() { if ( (m_UserConfig.fInheritMaxIdleTime = ((CButton *)GetDlgItem(IDC_AWS_IDLE_INHERIT))->GetCheck()) ) { /* * When 'inherit' button is checked, default to 'none'. */ CheckDlgButton(IDC_AWS_IDLE_NONE, TRUE); OnClickedAwsIdleNone(); } GetDlgItem(IDL_AWS_IDLE)-> EnableWindow( (m_UserConfig.fInheritMaxIdleTime || !m_UserConfig.MaxIdleTime) ? FALSE : TRUE ); GetDlgItem(IDC_AWS_IDLE)-> EnableWindow( (m_UserConfig.fInheritMaxIdleTime || !m_UserConfig.MaxIdleTime) ? FALSE : TRUE ); GetDlgItem(IDC_AWS_IDLE_NONE)-> EnableWindow(m_UserConfig.fInheritMaxIdleTime ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsIdleInherit /******************************************************************************* * * OnClickedAwsAutologonInherit - CAdvancedWinStationDlg * member function: command * * Process the auto logon fields when the 'inherit client config' checkbox\ * is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsAutologonInherit() { if ( (m_UserConfig.fInheritAutoLogon = ((CButton *)GetDlgItem(IDC_AWS_AUTOLOGON_INHERIT))->GetCheck()) ) { /* * When 'inherit' button is checked, default fields to empty. */ memset(m_UserConfig.UserName, 0, sizeof(m_UserConfig.UserName)); memset(m_UserConfig.Domain, 0, sizeof(m_UserConfig.Domain)); memset(m_UserConfig.Password, 0, sizeof(m_UserConfig.Password)); } SetDlgItemText(IDC_AWS_AUTOLOGON_USERNAME, m_UserConfig.UserName); SetDlgItemText(IDC_AWS_AUTOLOGON_DOMAIN, m_UserConfig.Domain); SetDlgItemText(IDC_AWS_AUTOLOGON_PASSWORD, m_UserConfig.Password); SetDlgItemText(IDC_AWS_AUTOLOGON_CONFIRM_PASSWORD, m_UserConfig.Password); GetDlgItem(IDL_AWS_AUTOLOGON_USERNAME)-> EnableWindow(m_UserConfig.fInheritAutoLogon ? FALSE : TRUE); GetDlgItem(IDC_AWS_AUTOLOGON_USERNAME)-> EnableWindow(m_UserConfig.fInheritAutoLogon ? FALSE : TRUE); GetDlgItem(IDL_AWS_AUTOLOGON_DOMAIN)-> EnableWindow(m_UserConfig.fInheritAutoLogon ? FALSE : TRUE); GetDlgItem(IDC_AWS_AUTOLOGON_DOMAIN)-> EnableWindow(m_UserConfig.fInheritAutoLogon ? FALSE : TRUE); GetDlgItem(IDL_AWS_AUTOLOGON_PASSWORD)-> EnableWindow((!m_UserConfig.fInheritAutoLogon && !m_UserConfig.fPromptForPassword)); GetDlgItem(IDC_AWS_AUTOLOGON_PASSWORD)-> EnableWindow((!m_UserConfig.fInheritAutoLogon && !m_UserConfig.fPromptForPassword)); GetDlgItem(IDL_AWS_AUTOLOGON_CONFIRM_PASSWORD)-> EnableWindow((!m_UserConfig.fInheritAutoLogon && !m_UserConfig.fPromptForPassword)); GetDlgItem(IDC_AWS_AUTOLOGON_CONFIRM_PASSWORD)-> EnableWindow((!m_UserConfig.fInheritAutoLogon && !m_UserConfig.fPromptForPassword)); if(!m_UserConfig.fInheritAutoLogon) GetDlgItem(IDC_AWS_AUTOLOGON_USERNAME)->SetFocus(); } // end CAdvancedWinStationDlg::OnClickedAwsAutologonInherit /******************************************************************************* * * OnClickedAwsPromptforPassword - CAdvancedWinStationDlg * member function: command * * Process the auto logon fields when the 'Prompt for password' checkbox\ * is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsPromptForPassword() { if ( (m_UserConfig.fPromptForPassword = ((CButton *)GetDlgItem(IDC_AWS_AUTOLOGON_PASSWORD_PROMPT))->GetCheck()) ) { /* * When 'Prompt for Password' button is checked, default password field to empty. */ memset(m_UserConfig.Password, 0, sizeof(m_UserConfig.Password)); } if(m_UserConfig.fInheritAutoLogon) return; SetDlgItemText(IDC_AWS_AUTOLOGON_PASSWORD, m_UserConfig.Password); SetDlgItemText(IDC_AWS_AUTOLOGON_CONFIRM_PASSWORD, m_UserConfig.Password); GetDlgItem(IDL_AWS_AUTOLOGON_PASSWORD)-> EnableWindow(m_UserConfig.fPromptForPassword ? FALSE : TRUE); GetDlgItem(IDC_AWS_AUTOLOGON_PASSWORD)-> EnableWindow(m_UserConfig.fPromptForPassword ? FALSE : TRUE); GetDlgItem(IDL_AWS_AUTOLOGON_CONFIRM_PASSWORD)-> EnableWindow(m_UserConfig.fPromptForPassword ? FALSE : TRUE); GetDlgItem(IDC_AWS_AUTOLOGON_CONFIRM_PASSWORD)-> EnableWindow(m_UserConfig.fPromptForPassword ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsPromptforPassword /******************************************************************************* * * OnClickedAwsInitialprogramInherit - CAdvancedWinStationDlg * member function: command * * Process the initial program fields when the 'inherit client/user config' * checkbox is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsInitialprogramInherit() { if ( (m_UserConfig.fInheritInitialProgram = ((CButton *)GetDlgItem(IDC_AWS_INITIALPROGRAM_INHERIT))->GetCheck()) ) { /* * When 'inherit' button is checked, default fields to empty. */ memset(m_UserConfig.InitialProgram, 0, sizeof(m_UserConfig.InitialProgram)); memset(m_UserConfig.WorkDirectory, 0, sizeof(m_UserConfig.WorkDirectory)); } else { /* * When 'inherit' button is unchecked, set 'published only' to 'off'. */ CheckDlgButton( IDC_AWS_INITIALPROGRAM_PUBLISHEDONLY, m_UserConfig.fDisableExe = FALSE ); } SetDlgItemText(IDC_AWS_INITIALPROGRAM_COMMANDLINE, m_UserConfig.InitialProgram); SetDlgItemText(IDC_AWS_INITIALPROGRAM_WORKINGDIRECTORY, m_UserConfig.WorkDirectory); GetDlgItem(IDL_AWS_INITIALPROGRAM_COMMANDLINE1)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? FALSE : TRUE); GetDlgItem(IDL_AWS_INITIALPROGRAM_COMMANDLINE2)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? FALSE : TRUE); GetDlgItem(IDC_AWS_INITIALPROGRAM_COMMANDLINE)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? FALSE : TRUE); GetDlgItem(IDL_AWS_INITIALPROGRAM_WORKINGDIRECTORY1)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? FALSE : TRUE); GetDlgItem(IDL_AWS_INITIALPROGRAM_WORKINGDIRECTORY2)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? FALSE : TRUE); GetDlgItem(IDC_AWS_INITIALPROGRAM_WORKINGDIRECTORY)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? FALSE : TRUE); if(!(m_Capabilities & WDC_PUBLISHED_APPLICATIONS)) { GetDlgItem(IDC_AWS_INITIALPROGRAM_PUBLISHEDONLY)->EnableWindow(FALSE); } else { GetDlgItem(IDC_AWS_INITIALPROGRAM_PUBLISHEDONLY)-> EnableWindow(m_UserConfig.fInheritInitialProgram ? TRUE : FALSE); } } // end CAdvancedWinStationDlg::OnClickedAwsInitialprogramInherit /******************************************************************************* * * OnClickedAwsInitialprogramPublishedonly - CAdvancedWinStationDlg * member function: command * * Set the state of fDisableExe flag when 'Only run Published * Applications' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsInitialprogramPublishedonly() { m_UserConfig.fDisableExe = ((CButton *)GetDlgItem(IDC_AWS_INITIALPROGRAM_PUBLISHEDONLY))->GetCheck(); } // end CAdvancedWinStationDlg::OnClickedAwsInitialprogramPublishedonly /******************************************************************************* * * OnClickedAwsSecurityDisableencryption - * CAdvancedWinStationDlg member function: command * * Set the state of fDisableEncryption flag when 'Disable encryption after * Logon' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsSecurityDisableencryption() { // m_UserConfig.fDisableEncryption = // ((CButton *)GetDlgItem(IDC_AWS_SECURITY_DISABLEENCRYPTION))->GetCheck(); } // end CAdvancedWinStationDlg::OnClickedAwsSecurityDisableencryption /******************************************************************************* * * OnClickedAwsUseroverrideDisablewallpaper - * CAdvancedWinStationDlg member function: command * * Set the state of fWallPaperDisabled flag when 'Disable Wallpaper' * checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsUseroverrideDisablewallpaper() { m_UserConfig.fWallPaperDisabled = ((CButton *)GetDlgItem(IDC_AWS_USEROVERRIDE_DISABLEWALLPAPER))->GetCheck(); } // end CAdvancedWinStationDlg::OnClickedAwsUseroverrideDisablewallpaper /******************************************************************************* * * OnClickedAwsBrokenInherit - CAdvancedWinStationDlg member function: command * * Process the broken connection fields when the 'user specified' * checkbox is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsBrokenInherit() { m_UserConfig.fInheritResetBroken = ((CButton *)GetDlgItem(IDC_AWS_BROKEN_INHERIT))->GetCheck(); GetDlgItem(IDL_AWS_BROKEN1)-> EnableWindow(m_UserConfig.fInheritResetBroken ? FALSE : TRUE); GetDlgItem(IDC_AWS_BROKEN)-> EnableWindow(m_UserConfig.fInheritResetBroken ? FALSE : TRUE); GetDlgItem(IDL_AWS_BROKEN2)-> EnableWindow(m_UserConfig.fInheritResetBroken ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsBrokenInherit /******************************************************************************* * * OnClickedAwsReconnectInherit - CAdvancedWinStationDlg * member function: command * * Process the reconnect sessions fields when the 'user specified' * checkbox is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsReconnectInherit() { m_UserConfig.fInheritReconnectSame = ((CButton *)GetDlgItem(IDC_AWS_RECONNECT_INHERIT))->GetCheck(); GetDlgItem(IDL_AWS_RECONNECT1)-> EnableWindow(m_UserConfig.fInheritReconnectSame ? FALSE : TRUE); GetDlgItem(IDC_AWS_RECONNECT)-> EnableWindow(m_UserConfig.fInheritReconnectSame ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsReconnectInherit /******************************************************************************* * * OnClickedAwsShadowInherit - CAdvancedWinStationDlg member function: command * * Process the shadowing fields when the 'user specified' checkbox is * checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedWinStationDlg::OnClickedAwsShadowInherit() { m_UserConfig.fInheritShadow = ((CButton *)GetDlgItem(IDC_AWS_SHADOW_INHERIT))->GetCheck(); GetDlgItem(IDL_AWS_SHADOW)-> EnableWindow(m_UserConfig.fInheritShadow ? FALSE : TRUE); GetDlgItem(IDC_AWS_SHADOW)-> EnableWindow(m_UserConfig.fInheritShadow ? FALSE : TRUE); } // end CAdvancedWinStationDlg::OnClickedAwsShadowInherit /******************************************************************************* * * OnOK - CAdvancedWinStationDlg member function: command (override) * * Read all control contents back into the dialog's member variables * before closing the dialog. * * ENTRY: * EXIT: * (Refer to CDialog::OnOk documentation) * ******************************************************************************/ void CAdvancedWinStationDlg::OnOK() { /* * If the Enter key was pressed while a combo box was dropped down, ignore * it (treat as combo list selection only). */ if ( !HandleEnterEscKey(IDOK) ) return; /* * Get WinStation state. */ m_fEnableWinStation = (GetCheckedRadioButton( IDC_AWS_WSDISABLED, IDC_AWS_WSENABLED ) - IDC_AWS_WSDISABLED ); /* * Get Connection Timeout settings. */ if ( IsDlgButtonChecked(IDC_AWS_CONNECTION_NONE) ) { m_UserConfig.MaxConnectionTime = 0; } else { TCHAR string[CONNECTION_TIME_DIGIT_MAX], *endptr; ULONG ul; GetDlgItemText(IDC_AWS_CONNECTION, string, lengthof(string)); ul = lstrtoul(string, &endptr, 10); if ( (*endptr != TEXT('\0')) || (ul < CONNECTION_TIME_MIN) || (ul > CONNECTION_TIME_MAX) ) { ERROR_MESSAGE(( IDP_INVALID_CONNECTIONTIMEOUT, CONNECTION_TIME_MIN, CONNECTION_TIME_MAX )) GotoDlgCtrl(GetDlgItem(IDC_AWS_CONNECTION)); return; } else m_UserConfig.MaxConnectionTime = ul * TIME_RESOLUTION; } m_UserConfig.fInheritMaxSessionTime = IsDlgButtonChecked(IDC_AWS_CONNECTION_INHERIT); /* * Get Disconnection Timeout settings. */ if ( IsDlgButtonChecked(IDC_AWS_DISCONNECTION_NONE) ) { m_UserConfig.MaxDisconnectionTime = 0; } else { TCHAR string[DISCONNECTION_TIME_DIGIT_MAX], *endptr; ULONG ul; GetDlgItemText(IDC_AWS_DISCONNECTION, string, lengthof(string)); ul = lstrtoul(string, &endptr, 10); if ( (*endptr != TEXT('\0')) || (ul < DISCONNECTION_TIME_MIN) || (ul > DISCONNECTION_TIME_MAX) ) { ERROR_MESSAGE(( IDP_INVALID_DISCONNECTIONTIMEOUT, DISCONNECTION_TIME_MIN, DISCONNECTION_TIME_MAX )) GotoDlgCtrl(GetDlgItem(IDC_AWS_DISCONNECTION)); return; } else m_UserConfig.MaxDisconnectionTime = ul * TIME_RESOLUTION; } m_UserConfig.fInheritMaxDisconnectionTime = IsDlgButtonChecked(IDC_AWS_DISCONNECTION_INHERIT); /* * Get Idle Timeout settings. */ if ( IsDlgButtonChecked(IDC_AWS_IDLE_NONE) ) { m_UserConfig.MaxIdleTime = 0; } else { TCHAR string[IDLE_TIME_DIGIT_MAX], *endptr; ULONG ul; GetDlgItemText(IDC_AWS_IDLE, string, lengthof(string)); ul = lstrtoul(string, &endptr, 10); if ( (*endptr != TEXT('\0')) || (ul < IDLE_TIME_MIN) || (ul > IDLE_TIME_MAX) ) { ERROR_MESSAGE(( IDP_INVALID_IDLETIMEOUT, IDLE_TIME_MIN, IDLE_TIME_MAX )) GotoDlgCtrl(GetDlgItem(IDC_AWS_IDLE)); return; } else m_UserConfig.MaxIdleTime = ul * TIME_RESOLUTION; } m_UserConfig.fInheritMaxIdleTime = IsDlgButtonChecked(IDC_AWS_IDLE_INHERIT); /* * Get and check AutoLogon password text settings. */ { TCHAR szConfirmPassword[PASSWORD_LENGTH+1]; GetDlgItemText( IDC_AWS_AUTOLOGON_PASSWORD, m_UserConfig.Password, lengthof(m_UserConfig.Password) ); GetDlgItemText( IDC_AWS_AUTOLOGON_CONFIRM_PASSWORD, szConfirmPassword, lengthof(szConfirmPassword) ); if ( lstrcmp(m_UserConfig.Password, szConfirmPassword) ) { ERROR_MESSAGE((IDP_INVALID_PASSWORDS_DONT_MATCH)) GotoDlgCtrl(GetDlgItem(IDC_AWS_AUTOLOGON_PASSWORD)); return; } } /* * Get other AutoLogon settings. */ GetDlgItemText( IDC_AWS_AUTOLOGON_USERNAME, m_UserConfig.UserName, lengthof(m_UserConfig.UserName) ); GetDlgItemText( IDC_AWS_AUTOLOGON_DOMAIN, m_UserConfig.Domain, lengthof(m_UserConfig.Domain) ); m_UserConfig.fPromptForPassword = IsDlgButtonChecked(IDC_AWS_AUTOLOGON_PASSWORD_PROMPT); /* * Get Initial Program settings. */ GetDlgItemText( IDC_AWS_INITIALPROGRAM_COMMANDLINE, m_UserConfig.InitialProgram, lengthof(m_UserConfig.InitialProgram) ); GetDlgItemText( IDC_AWS_INITIALPROGRAM_WORKINGDIRECTORY, m_UserConfig.WorkDirectory, lengthof(m_UserConfig.WorkDirectory) ); /* * Get encryption level, broken connection, reconnect, and shadow settings. */ if(m_pEncryptionLevels) { m_UserConfig.MinEncryptionLevel = (BYTE)m_pEncryptionLevels[((CComboBox *)GetDlgItem(IDC_AWS_SECURITY_ENCRYPT))->GetCurSel()].RegistryValue; } m_UserConfig.fUseDefaultGina = IsDlgButtonChecked(IDC_AWS_SECURITY_DEFAULTGINA); m_UserConfig.fResetBroken = ((CComboBox *)GetDlgItem(IDC_AWS_BROKEN))->GetCurSel(); m_UserConfig.fReconnectSame = ((CComboBox *)GetDlgItem(IDC_AWS_RECONNECT))->GetCurSel(); m_UserConfig.Shadow = (SHADOWCLASS)((CComboBox *)GetDlgItem(IDC_AWS_SHADOW))->GetCurSel(); /* * Call the parent classes' OnOk to complete dialog closing * and destruction. */ CBaseDialog::OnOK(); } // end CAdvancedWinStationDlg::OnOk /******************************************************************************* * * OnCancel - CAdvancedWinStationDlg member function: command (override) * * Cancel dialog. * * ENTRY: * EXIT: * (Refer to CDialog::OnCancel documentation) * ******************************************************************************/ void CAdvancedWinStationDlg::OnCancel() { /* * If the Esc key was pressed while a combo box was dropped down, ignore * it (treat as combo close-up and cancel only). */ if ( !HandleEnterEscKey(IDCANCEL) ) return; /* * Call the parent classes' OnCancel to complete dialog closing * and destruction. */ CBaseDialog::OnCancel(); } // end CAdvancedWinStationDlg::OnCancel //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // CClientSettingsDlg class construction / destruction, implementation /******************************************************************************* * * CClientSettingsDlg - CClientSettingsDlg constructor * * ENTRY: * EXIT: * (Refer to MFC CDialog::CDialog documentation) * ******************************************************************************/ CClientSettingsDlg::CClientSettingsDlg() : CBaseDialog(CClientSettingsDlg::IDD) { //{{AFX_DATA_INIT(CClientSettingsDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } // end CClientSettingsDlg::CClientSettingsDlg //////////////////////////////////////////////////////////////////////////////// // CClientSettingsDlg operations //////////////////////////////////////////////////////////////////////////////// // CClientSettingsDlg message map BEGIN_MESSAGE_MAP(CClientSettingsDlg, CBaseDialog) //{{AFX_MSG_MAP(CClientSettingsDlg) ON_BN_CLICKED(IDC_CS_CONNECTION_DRIVES, OnClickedCsClientdevicesDrives) ON_BN_CLICKED(IDC_CS_CONNECTION_PRINTERS, OnClickedCsClientdevicesPrinters) ON_BN_CLICKED(IDC_CS_CONNECTION_INHERIT, OnClickedCsClientdevicesInherit) ON_BN_CLICKED(IDC_CS_CONNECTION_FORCEPRTDEF, OnClickedCsClientdevicesForceprtdef) ON_BN_CLICKED(IDC_CS_MAPPING_DRIVES, OnClickedCsMappingDrives) ON_BN_CLICKED(IDC_CS_MAPPING_WINDOWSPRINTERS, OnClickedCsMappingWindowsprinters) ON_BN_CLICKED(IDC_CS_MAPPING_DOSLPTS, OnClickedCsMappingDoslpts) ON_BN_CLICKED(IDC_CS_MAPPING_COMPORTS, OnClickedCsMappingComports) ON_BN_CLICKED(IDC_CS_MAPPING_CLIPBOARD, OnClickedCsMappingClipboard) ON_BN_CLICKED(IDC_CS_MAPPING_AUDIO, OnClickedCsMappingAudio) //}}AFX_MSG_MAP END_MESSAGE_MAP() //////////////////////////////////////////////////////////////////////////////// // CClientSettingsDlg commands /******************************************************************************* * * OnInitDialog - CClientSettingsDlg member function: command (override) * * Performs the dialog intialization. * * ENTRY: * EXIT: * (Refer to CDialog::OnInitDialog documentation) * ******************************************************************************/ BOOL CClientSettingsDlg::OnInitDialog() { int i; /* * Call the parent classes' OnInitDialog to perform default dialog * initialization. */ CBaseDialog::OnInitDialog(); /* * Set Connection fields. */ CheckDlgButton( IDC_CS_CONNECTION_DRIVES, m_UserConfig.fAutoClientDrives ); CheckDlgButton( IDC_CS_CONNECTION_PRINTERS, m_UserConfig.fAutoClientLpts ); CheckDlgButton( IDC_CS_CONNECTION_FORCEPRTDEF, m_UserConfig.fForceClientLptDef ); CheckDlgButton( IDC_CS_CONNECTION_INHERIT, m_UserConfig.fInheritAutoClient ); /* * Set Mapping Override fields. */ CheckDlgButton( IDC_CS_MAPPING_DRIVES, m_UserConfig.fDisableCdm ); CheckDlgButton( IDC_CS_MAPPING_WINDOWSPRINTERS, m_UserConfig.fDisableCpm ); CheckDlgButton( IDC_CS_MAPPING_DOSLPTS, m_UserConfig.fDisableLPT ); CheckDlgButton( IDC_CS_MAPPING_COMPORTS, m_UserConfig.fDisableCcm ); CheckDlgButton( IDC_CS_MAPPING_CLIPBOARD, m_UserConfig.fDisableClip ); CheckDlgButton( IDC_CS_MAPPING_AUDIO, m_UserConfig.fDisableCam ); /* * Set proper control states based on selections. */ OnClickedCsClientdevicesInherit(); /* * Process based on document's read/write state. */ if ( m_bReadOnly ) { /* * Document is 'read-only': disable all dialog controls and labels * except for CANCEL and HELP buttons. */ for ( i=IDL_CS_CONNECTION; i <=IDC_CS_MAPPING_AUDIO; i++ ) GetDlgItem(i)->EnableWindow(FALSE); GetDlgItem(IDOK)->EnableWindow(FALSE); } else { /* * Enable/Disable Controls based on capabilities of the Wd */ GetDlgItem(IDC_CS_MAPPING_DRIVES)->EnableWindow((m_Capabilities & WDC_CLIENT_DRIVE_MAPPING) > 0); GetDlgItem(IDC_CS_MAPPING_WINDOWSPRINTERS)->EnableWindow((m_Capabilities & WDC_WIN_CLIENT_PRINTER_MAPPING) > 0); GetDlgItem(IDC_CS_MAPPING_DOSLPTS)->EnableWindow((m_Capabilities & WDC_CLIENT_LPT_PORT_MAPPING) > 0); GetDlgItem(IDC_CS_MAPPING_COMPORTS)->EnableWindow((m_Capabilities & WDC_CLIENT_COM_PORT_MAPPING) > 0); GetDlgItem(IDC_CS_MAPPING_CLIPBOARD)->EnableWindow((m_Capabilities & WDC_CLIENT_CLIPBOARD_MAPPING) > 0); GetDlgItem(IDC_CS_MAPPING_AUDIO)->EnableWindow((m_Capabilities & WDC_CLIENT_AUDIO_MAPPING) > 0); GetDlgItem(IDC_CS_CONNECTION_INHERIT)->EnableWindow((m_Capabilities & WDC_CLIENT_CONNECT_MASK) > 0); } return(TRUE); } // end CClientSettingsDlg::OnInitDialog /******************************************************************************* * * OnClickedCsClientdevicesDrives - * CClientSettingsDlg member function: command * * Set the state of fAutoClientDrives flag when 'Connect client drives at * Logon' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsClientdevicesDrives() { m_UserConfig.fAutoClientDrives = ((CButton *)GetDlgItem(IDC_CS_CONNECTION_DRIVES))->GetCheck(); } // end CClientSettingsDlg::OnClickedCsClientdevicesDrives /******************************************************************************* * * OnClickedCsClientdevicesPrinters - * CClientSettingsDlg member function: command * * Set the state of fAutoClientLpts flag when 'Connect client LPTs at * Logon' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsClientdevicesPrinters() { m_UserConfig.fAutoClientLpts = ((CButton *)GetDlgItem(IDC_CS_CONNECTION_PRINTERS))->GetCheck(); } // end CClientSettingsDlg::OnClickedCsClientdevicesPrinters /******************************************************************************* * * OnClickedCsClientdevicesForceprtdef - * CClientSettingsDlg member function: command * * Set the state of fForceClientLptDef flag when 'Default to main client * printer' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsClientdevicesForceprtdef() { m_UserConfig.fForceClientLptDef = ((CButton *)GetDlgItem(IDC_CS_CONNECTION_FORCEPRTDEF))->GetCheck(); } // end CClientSettingsDlg::OnClickedCsClientdevicesForceprtdef /******************************************************************************* * * OnClickedCsClientdevicesInherit - CClientSettingsDlg * member function: command * * Process the Connection fields when the 'inherit user config' * checkbox is checked or unchecked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsClientdevicesInherit() { m_UserConfig.fInheritAutoClient = ((CButton *)GetDlgItem(IDC_CS_CONNECTION_INHERIT))->GetCheck(); if(!(m_Capabilities & WDC_CLIENT_DRIVE_MAPPING)) { GetDlgItem(IDC_CS_CONNECTION_DRIVES)->EnableWindow(FALSE); } else { GetDlgItem(IDC_CS_CONNECTION_DRIVES)-> EnableWindow( (m_UserConfig.fInheritAutoClient || m_UserConfig.fDisableCdm) ? FALSE : TRUE ); } if(!(m_Capabilities & (WDC_WIN_CLIENT_PRINTER_MAPPING | WDC_CLIENT_LPT_PORT_MAPPING))) { GetDlgItem(IDC_CS_CONNECTION_PRINTERS)->EnableWindow(FALSE); GetDlgItem(IDC_CS_CONNECTION_FORCEPRTDEF)->EnableWindow(FALSE); } else { GetDlgItem(IDC_CS_CONNECTION_PRINTERS)-> EnableWindow( (m_UserConfig.fInheritAutoClient || (m_UserConfig.fDisableCpm && m_UserConfig.fDisableLPT) ) ? FALSE : TRUE ); GetDlgItem(IDC_CS_CONNECTION_FORCEPRTDEF)-> EnableWindow( (m_UserConfig.fInheritAutoClient || (m_UserConfig.fDisableCpm && m_UserConfig.fDisableLPT) ) ? FALSE : TRUE ); } } // end CClientSettingsDlg::OnClickedCsClientdevicesInherit /******************************************************************************* * * OnClickedCsMappingDrives - CClientSettingsDlg member function: command * * Set the state of fDisableCdm flag and related controls when * 'Disable Client Drive Mapping' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsMappingDrives() { m_UserConfig.fDisableCdm = ((CButton *)GetDlgItem(IDC_CS_MAPPING_DRIVES))->GetCheck(); OnClickedCsClientdevicesInherit(); } // end CClientSettingsDlg::OnClickedCsMappingDrives /******************************************************************************* * * OnClickedCsMappingWindowsprinters - CClientSettingsDlg * member function: command * * Set the state of fDisableCpm flag and related controls when * 'Disable Windows Client Printer Mapping' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsMappingWindowsprinters() { m_UserConfig.fDisableCpm = ((CButton *)GetDlgItem(IDC_CS_MAPPING_WINDOWSPRINTERS))->GetCheck(); OnClickedCsClientdevicesInherit(); } // end CClientSettingsDlg::OnClickedCsMappingWindowsprinters /******************************************************************************* * * OnClickedCsMappingDoslpts - CClientSettingsDlg member function: command * * Set the state of fDisableLPT flag and related controls when * 'Disable DOS Client LPT Port Mapping' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsMappingDoslpts() { m_UserConfig.fDisableLPT = ((CButton *)GetDlgItem(IDC_CS_MAPPING_DOSLPTS))->GetCheck(); OnClickedCsClientdevicesInherit(); } // end CClientSettingsDlg::OnClickedCsMappingDoslpts /******************************************************************************* * * OnClickedCsMappingComports - CClientSettingsDlg member function: command * * Set the state of fDisableCcm flag when 'Disable Client COM Port * Mapping' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsMappingComports() { m_UserConfig.fDisableCcm = ((CButton *)GetDlgItem(IDC_CS_MAPPING_COMPORTS))->GetCheck(); } // end CClientSettingsDlg::OnClickedCsMappingComports /******************************************************************************* * * OnClickedCsMappingClipboard - CClientSettingsDlg member function: command * * Set the state of fDisableClip flag when 'Disable Client Clipboard * Mapping' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsMappingClipboard() { m_UserConfig.fDisableClip = ((CButton *)GetDlgItem(IDC_CS_MAPPING_CLIPBOARD))->GetCheck(); } // end CClientSettingsDlg::OnClickedCsMappingClipboard /******************************************************************************* * * OnClickedCsMappingAudio - CClientSettingsDlg member function: command * * Set the state of fDisableCam flag when 'Disable Client Audio * Mapping' checkbox is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CClientSettingsDlg::OnClickedCsMappingAudio() { m_UserConfig.fDisableCam = ((CButton *)GetDlgItem(IDC_CS_MAPPING_AUDIO))->GetCheck(); } // end CClientSettingsDlg::OnClickedCsMappingAudio /******************************************************************************* * * OnOK - CClientSettingsDlg member function: command (override) * * Read all control contents back into the dialog's member variables * before closing the dialog. * * ENTRY: * EXIT: * (Refer to CDialog::OnOk documentation) * ******************************************************************************/ void CClientSettingsDlg::OnOK() { /* * Call the parent classes' OnOk to complete dialog closing * and destruction. */ CBaseDialog::OnOK(); } // end CClientSettingsDlg::OnOk /******************************************************************************* * * OnCancel - CClientSettingsDlg member function: command (override) * * Cancel dialog. * * ENTRY: * EXIT: * (Refer to CDialog::OnCancel documentation) * ******************************************************************************/ void CClientSettingsDlg::OnCancel() { /* * Call the parent classes' OnCancel to complete dialog closing * and destruction. */ CBaseDialog::OnCancel(); } // end CClientSettingsDlg::OnCancel //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // CAdvancedAsyncDlg class construction / destruction, implementation /******************************************************************************* * * CAdvancedAsyncDlg - CAdvancedAsyncDlg constructor * * ENTRY: * EXIT: * (Refer to MFC CDialog::CDialog documentation) * ******************************************************************************/ CAdvancedAsyncDlg::CAdvancedAsyncDlg() : CBaseDialog(CAdvancedAsyncDlg::IDD) { //{{AFX_DATA_INIT(CAdvancedAsyncDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } // end CAdvancedAsyncDlg::CAdvancedAsyncDlg //////////////////////////////////////////////////////////////////////////////// // CAdvancedAsyncDlg operations /******************************************************************************* * * HandleEnterEscKey - CAdvancedAsyncDlg member function: private operation * * If the ENTER or ESC key is pressed while a combo box is dropped down, * treat as combo box selection (suppress OnOk/OnCancel notification). * * ENTRY: * nID (input) * IDOK if OK button (ENTER) brought us here; otherwise, IDCANCEL for * Cancel button (ESC). * EXIT: * TRUE to process Enter/Esc (perform OnOk/OnCancel); FALSE to ignore * (a combo box is dropped down). * ******************************************************************************/ BOOL CAdvancedAsyncDlg::HandleEnterEscKey(int nID) { /* * Check HW Flow Receive and Transmit combo boxes. */ if ( ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX))->GetDroppedState() ) { if ( nID == IDCANCEL ) { // select original selection ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX))-> SetCurSel(m_Async.FlowControl.HardwareReceive); } ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX))->ShowDropDown(FALSE); return(FALSE); } if ( ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX))->GetDroppedState() ) { if ( nID == IDCANCEL ) { // select original selection ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX))-> SetCurSel(m_Async.FlowControl.HardwareTransmit); } ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX))->ShowDropDown(FALSE); return(FALSE); } /* * No combo boxes are down; process Enter/Esc. */ return(TRUE); } // end CAdvancedAsyncDlg::HandleEnterEscKey /******************************************************************************* * * SetFields - CAdvancedAsyncDlg member function: private operation * * Set the dialog fields. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::SetFields() { int nId; /* * Set the FLOWCONTROL radio buttons. */ switch( m_Async.FlowControl.Type ) { case FlowControl_None: nId = IDC_ASYNC_ADVANCED_FLOWCONTROL_NONE; break; case FlowControl_Hardware: nId = IDC_ASYNC_ADVANCED_FLOWCONTROL_HARDWARE; break; case FlowControl_Software: nId = IDC_ASYNC_ADVANCED_FLOWCONTROL_SOFTWARE; break; } CheckRadioButton( IDC_ASYNC_ADVANCED_FLOWCONTROL_HARDWARE, IDC_ASYNC_ADVANCED_FLOWCONTROL_NONE, nId ); /* * Set the text of the Hardware flowcontrol button. */ SetHWFlowText(); /* * If a modem is defined, disable the Flow Control fields, since they cannot * be modified (must match modem's flow control established in Modem dialog). */ if ( m_bModem ) { for ( nId = IDL_ASYNC_ADVANCED_FLOWCONTROL; nId <= IDC_ASYNC_ADVANCED_FLOWCONTROL_NONE; nId++ ) GetDlgItem(nId)->EnableWindow(FALSE); } /* * Call member functions to set the Global, Hardware, and Software fields. */ SetGlobalFields(); SetHWFields(); SetSWFields(); } // end CAdvancedAsyncDlg::SetFields /******************************************************************************* * * SetHWFlowText - CAdvancedAsyncDlg member function: private operation * * Set the contents of the flow control configuration field. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::SetHWFlowText() { CString str( TEXT("Hardware (") ); switch ( m_Async.FlowControl.HardwareReceive ) { case ReceiveFlowControl_None: str += TEXT(".../"); break; case ReceiveFlowControl_RTS: str += TEXT("RTS/"); break; case ReceiveFlowControl_DTR: str += TEXT("DTR/"); break; } switch ( m_Async.FlowControl.HardwareTransmit ) { case TransmitFlowControl_None: str += TEXT("...)"); break; case TransmitFlowControl_CTS: str += TEXT("CTS)"); break; case TransmitFlowControl_DSR: str += TEXT("DSR)"); break; } SetDlgItemText( IDC_ASYNC_ADVANCED_FLOWCONTROL_HARDWARE, str ); } // end CAdvancedAsyncDlg::SetHWFlowText /******************************************************************************* * * SetGlobalFields - CAdvancedAsyncDlg member function: private operation * * Set the 'global' dialog fields common to both HW and SW flowcontrol. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::SetGlobalFields() { /* * Select proper DTR radio button. */ CheckRadioButton( IDC_ASYNC_ADVANCED_DTROFF, IDC_ASYNC_ADVANCED_DTRON, IDC_ASYNC_ADVANCED_DTROFF + (int)m_Async.FlowControl.fEnableDTR ); /* * Select proper RTS radio button. */ CheckRadioButton( IDC_ASYNC_ADVANCED_RTSOFF, IDC_ASYNC_ADVANCED_RTSON, IDC_ASYNC_ADVANCED_RTSOFF + (int)m_Async.FlowControl.fEnableRTS ); /* * Set the PARITY radio buttons. */ CheckRadioButton( IDC_ASYNC_ADVANCED_PARITY_NONE, IDC_ASYNC_ADVANCED_PARITY_SPACE, IDC_ASYNC_ADVANCED_PARITY_NONE + (int)m_Async.Parity ); /* * Set the STOPBITS radio buttons. */ CheckRadioButton( IDC_ASYNC_ADVANCED_STOPBITS_1, IDC_ASYNC_ADVANCED_STOPBITS_2, IDC_ASYNC_ADVANCED_STOPBITS_1 + (int)m_Async.StopBits ); /* * Set the BYTESIZE radio buttons. * * NOTE: the constant '7' that is subtracted from the stored ByteSize * must track the lowest allowed byte size / BYTESIZE radio button. */ CheckRadioButton( IDC_ASYNC_ADVANCED_BYTESIZE_7, IDC_ASYNC_ADVANCED_BYTESIZE_8, IDC_ASYNC_ADVANCED_BYTESIZE_7 + ((int)m_Async.ByteSize - 7) ); /* * If the currently selected Wd is an ICA type, disable the BYTESIZE * group box and buttons - user can't change from default. */ if ( m_nWdFlag & WDF_ICA ) { int i; for ( i = IDL_ASYNC_ADVANCED_BYTESIZE; i <= IDC_ASYNC_ADVANCED_BYTESIZE_8; i++ ) GetDlgItem(i)->EnableWindow(FALSE); } } // end CAdvancedAsyncDlg::SetGlobalFields /******************************************************************************* * * SetHWFields - CAdvancedAsyncDlg member function: private operation * * Set the dialog fields specific to HW flowcontrol. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::SetHWFields() { int i; /* * Initialize HW Receive class combo-box */ ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX))-> SetCurSel(m_Async.FlowControl.HardwareReceive); /* * If HW flow control is selected AND the HW Receive class is set to * ReceiveFlowControl_DTR, disable the DTR controls & labels. * Otherwise, enable the DTR control & labels. */ for ( i=IDL_ASYNC_ADVANCED_DTRSTATE; i <=IDC_ASYNC_ADVANCED_DTRON; i++ ) GetDlgItem(i)->EnableWindow( ((m_Async.FlowControl.Type == FlowControl_Hardware) && (m_Async.FlowControl.HardwareReceive == ReceiveFlowControl_DTR)) ? FALSE : TRUE ); /* * Initialize HW Transmit class combo-box. */ ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX))-> SetCurSel(m_Async.FlowControl.HardwareTransmit); /* * If HW flow control is selected AND the HW Receive class is set to * ReceiveFlowControl_RTS, disable the RTS controls & labels. * Otherwise, enable the RTS control & labels. */ for ( i=IDL_ASYNC_ADVANCED_RTSSTATE; i <=IDC_ASYNC_ADVANCED_RTSON; i++ ) GetDlgItem(i)->EnableWindow( ((m_Async.FlowControl.Type == FlowControl_Hardware) && (m_Async.FlowControl.HardwareReceive == ReceiveFlowControl_RTS)) ? FALSE : TRUE ); /* * Enable or disable all HW fields. */ for ( i=IDL_ASYNC_ADVANCED_HARDWARE; i <=IDC_ASYNC_ADVANCED_HWTX; i++ ) GetDlgItem(i)->EnableWindow(m_Async.FlowControl.Type == FlowControl_Hardware); } // end CAdvancedAsyncDlg::SetHWFields /******************************************************************************* * * SetSWFields - CAdvancedAsyncDlg member function: private operation * * Set the dialog fields specific to SW flowcontrol. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::SetSWFields() { TCHAR string[UCHAR_DIGIT_MAX]; int i; /* * Initialize Xon character edit control. */ wsprintf( string, (m_nHexBase ? TEXT("0x%02X") : TEXT("%d")), (UCHAR)m_Async.FlowControl.XonChar ); SetDlgItemText( IDC_ASYNC_ADVANCED_XON, string ); ((CEdit *)GetDlgItem(IDC_ASYNC_ADVANCED_XON)) ->SetModify(FALSE); ((CEdit *)GetDlgItem(IDC_ASYNC_ADVANCED_XON)) ->LimitText( UCHAR_DIGIT_MAX-1 ); /* * Initialize Xoff character edit control. */ wsprintf( string, (m_nHexBase ? TEXT("0x%02X") : TEXT("%d")), (UCHAR)m_Async.FlowControl.XoffChar ); SetDlgItemText( IDC_ASYNC_ADVANCED_XOFF, string ); ((CEdit *)GetDlgItem(IDC_ASYNC_ADVANCED_XOFF)) ->SetModify(FALSE); ((CEdit *)GetDlgItem(IDC_ASYNC_ADVANCED_XOFF)) ->LimitText( UCHAR_DIGIT_MAX-1 ); /* * Initialize the Xon/Xoff base control. */ CheckRadioButton( IDC_ASYNC_ADVANCED_BASEDEC, IDC_ASYNC_ADVANCED_BASEHEX, IDC_ASYNC_ADVANCED_BASEDEC + m_nHexBase ); /* * Enable or disable all SW fields. */ for ( i=IDL_ASYNC_ADVANCED_SOFTWARE; i <=IDC_ASYNC_ADVANCED_BASEHEX; i++ ) GetDlgItem(i)->EnableWindow(m_Async.FlowControl.Type == FlowControl_Software); } // end CAdvancedAsyncDlg::SetSWFields /******************************************************************************* * * GetFields - CAdvancedAsyncDlg member function: private operation * * Fetch and validate the dialog fields. * * ENTRY: * EXIT: * (BOOL) * Returns TRUE if all fields were valid; FALSE otherwise. If FALSE, * will have output an error message and set the focus back to the * field in error for the user to correct. * ******************************************************************************/ BOOL CAdvancedAsyncDlg::GetFields() { /* * Call member functions to get the Flow Control, Global, Hardware, and * Software fields. */ GetFlowControlFields(); if ( !GetGlobalFields() ) return(FALSE); if ( !GetHWFields() ) return(FALSE); if ( !GetSWFields(TRUE) ) return(FALSE); return(TRUE); } // end CAdvancedAsyncDlg::GetFields /******************************************************************************* * * GetFlowControlFields - CAdvancedAsyncDlg member function: private operation * * Fetch the flow control configuration field contents. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::GetFlowControlFields() { switch ( GetCheckedRadioButton( IDC_ASYNC_ADVANCED_FLOWCONTROL_HARDWARE, IDC_ASYNC_ADVANCED_FLOWCONTROL_NONE ) ) { case IDC_ASYNC_ADVANCED_FLOWCONTROL_NONE: m_Async.FlowControl.Type = FlowControl_None; break; case IDC_ASYNC_ADVANCED_FLOWCONTROL_SOFTWARE: m_Async.FlowControl.Type = FlowControl_Software; break; case IDC_ASYNC_ADVANCED_FLOWCONTROL_HARDWARE: m_Async.FlowControl.Type = FlowControl_Hardware; break; } } // end CAdvancedAsyncDlg::GetFlowControlFields /******************************************************************************* * * GetGlobalFields - CAdvancedAsyncDlg member function: private operation * * Fetch and validate the 'global' dialog fields common to both HW and * SW flowcontrol. * * ENTRY: * * EXIT: * (BOOL) * Returns TRUE if all fields were valid; FALSE otherwise. If FALSE, * will have output an error message and set the focus back to the * field in error for the user to correct. * ******************************************************************************/ BOOL CAdvancedAsyncDlg::GetGlobalFields() { /* * Fetch DTR state. */ m_Async.FlowControl.fEnableDTR = (GetCheckedRadioButton( IDC_ASYNC_ADVANCED_DTROFF, IDC_ASYNC_ADVANCED_DTRON ) - IDC_ASYNC_ADVANCED_DTROFF); /* * Fetch RTS state. */ m_Async.FlowControl.fEnableRTS = (GetCheckedRadioButton( IDC_ASYNC_ADVANCED_RTSOFF, IDC_ASYNC_ADVANCED_RTSON ) - IDC_ASYNC_ADVANCED_RTSOFF); /* * Fetch the selected PARITY. */ m_Async.Parity = (ULONG) (GetCheckedRadioButton( IDC_ASYNC_ADVANCED_PARITY_NONE, IDC_ASYNC_ADVANCED_PARITY_SPACE ) - IDC_ASYNC_ADVANCED_PARITY_NONE); /* * Fetch the selected STOPBITS. */ m_Async.StopBits = (ULONG) (GetCheckedRadioButton( IDC_ASYNC_ADVANCED_STOPBITS_1, IDC_ASYNC_ADVANCED_STOPBITS_2 ) - IDC_ASYNC_ADVANCED_STOPBITS_1); /* * Fetch the selected BYTESIZE. * * NOTE: the constant '7' that is added to the stored ByteSize * must track the lowest allowed byte size / BYTESIZE radio button. */ m_Async.ByteSize = (ULONG) (GetCheckedRadioButton( IDC_ASYNC_ADVANCED_BYTESIZE_7, IDC_ASYNC_ADVANCED_BYTESIZE_8 ) - IDC_ASYNC_ADVANCED_BYTESIZE_7 + 7); return(TRUE); } // end CAdvancedAsyncDlg::GetGlobalFields /******************************************************************************* * * GetHWFields - CAdvancedAsyncDlg member function: private operation * * Fetch and validate the dialog fields specific to HW flowcontrol. * * ENTRY: * * EXIT: * (BOOL) * Returns TRUE if all fields were valid; FALSE otherwise. If FALSE, * will have output an error message and set the focus back to the * field in error for the user to correct. * ******************************************************************************/ BOOL CAdvancedAsyncDlg::GetHWFields() { /* * Fetch the HW receive flow class. */ m_Async.FlowControl.HardwareReceive = (RECEIVEFLOWCONTROLCLASS) ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX))->GetCurSel(); /* * Fetch the HW transmit flow class. */ m_Async.FlowControl.HardwareTransmit = (TRANSMITFLOWCONTROLCLASS) ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX))->GetCurSel(); return(TRUE); } // end CAdvancedAsyncDlg::GetHWFields /******************************************************************************* * * GetSWFields - CAdvancedAsyncDlg member function: private operation * * Fetch and optionally validate the dialog fields specific to SW * flowcontrol. * * ENTRY: * bValidate (input) * TRUE if validation is desired; FALSE if no validation desired. * EXIT: * (BOOL) * Returns TRUE if all fields were valid or if no validation was * desired; FALSE otherwise. If FALSE, will have output an error * message and set the focus back to the field in error for the * user to correct. * ******************************************************************************/ BOOL CAdvancedAsyncDlg::GetSWFields( BOOL bValidate ) { TCHAR string[UCHAR_DIGIT_MAX], *endptr; ULONG ul; int nNewHexBase, base; /* * Determine the current state of the base controls and save. */ nNewHexBase = (GetCheckedRadioButton( IDC_ASYNC_ADVANCED_BASEDEC, IDC_ASYNC_ADVANCED_BASEHEX ) - IDC_ASYNC_ADVANCED_BASEDEC); /* * Fetch and convert XON character. */ GetDlgItemText(IDC_ASYNC_ADVANCED_XON, string, lengthof(string)); /* * If the edit box is modified, use the 'new' base for conversion. */ base = ((CEdit *)GetDlgItem(IDC_ASYNC_ADVANCED_XON))->GetModify() ? nNewHexBase : m_nHexBase; ul = lstrtoul( string, &endptr, (base ? 16 : 10) ); /* * If validation is requested and there is a problem with the input, * complain and allow user to fix. */ if ( bValidate && ((*endptr != TEXT('\0')) || (ul < 0) || (ul > 255)) ) { /* * Invalid character in field or invalid value. */ ERROR_MESSAGE((IDP_INVALID_XONXOFF)) /* * Set focus to the control so that it can be fixed. */ GotoDlgCtrl(GetDlgItem(IDC_ASYNC_ADVANCED_XON)); return(FALSE); } /* * Save the Xon character. */ m_Async.FlowControl.XonChar = (UCHAR)ul; /* * Fetch and convert XOFF character. */ GetDlgItemText(IDC_ASYNC_ADVANCED_XOFF, string, lengthof(string)); /* * If the edit box is modified, use the 'new' base for conversion. */ base = ((CEdit *)GetDlgItem(IDC_ASYNC_ADVANCED_XOFF))->GetModify() ? nNewHexBase : m_nHexBase; ul = lstrtoul( string, &endptr, (base ? 16 : 10) ); /* * If validation is requested and there is a problem with the input, * complain and allow user to fix. */ if ( bValidate && ((*endptr != TEXT('\0')) || (ul < 0) || (ul > 255)) ) { /* * Invalid character in field or invalid value. */ ERROR_MESSAGE((IDP_INVALID_XONXOFF)) /* * Set focus to the control so that it can be fixed. */ GotoDlgCtrl(GetDlgItem(IDC_ASYNC_ADVANCED_XOFF)); return(FALSE); } /* * Save the Xoff character. */ m_Async.FlowControl.XoffChar = (UCHAR)ul; /* * Save the current base state. */ m_nHexBase = nNewHexBase; return(TRUE); } // end CAdvancedAsyncDlg::GetSWFields //////////////////////////////////////////////////////////////////////////////// // CAdvancedAsyncDlg message map BEGIN_MESSAGE_MAP(CAdvancedAsyncDlg, CBaseDialog) //{{AFX_MSG_MAP(CAdvancedAsyncDlg) ON_BN_CLICKED(IDC_ASYNC_ADVANCED_BASEDEC, OnClickedAsyncAdvancedBasedec) ON_BN_CLICKED(IDC_ASYNC_ADVANCED_BASEHEX, OnClickedAsyncAdvancedBasehex) ON_CBN_CLOSEUP(IDC_ASYNC_ADVANCED_HWRX, OnCloseupAsyncAdvancedHwrx) ON_CBN_SELCHANGE(IDC_ASYNC_ADVANCED_HWRX, OnSelchangeAsyncAdvancedHwrx) ON_CBN_CLOSEUP(IDC_ASYNC_ADVANCED_HWTX, OnCloseupAsyncAdvancedHwtx) ON_CBN_SELCHANGE(IDC_ASYNC_ADVANCED_HWTX, OnSelchangeAsyncAdvancedHwtx) ON_BN_CLICKED(IDC_ASYNC_ADVANCED_FLOWCONTROL_HARDWARE, OnClickedAsyncAdvancedFlowcontrolHardware) ON_BN_CLICKED(IDC_ASYNC_ADVANCED_FLOWCONTROL_SOFTWARE, OnClickedAsyncAdvancedFlowcontrolSoftware) ON_BN_CLICKED(IDC_ASYNC_ADVANCED_FLOWCONTROL_NONE, OnClickedAsyncAdvancedFlowcontrolNone) //}}AFX_MSG_MAP END_MESSAGE_MAP() //////////////////////////////////////////////////////////////////////////////// // CAdvancedAsyncDlg commands /******************************************************************************* * * OnInitDialog - CAdvancedAsyncDlg member function: command (override) * * Performs the dialog intialization. * * ENTRY: * EXIT: * (Refer to CDialog::OnInitDialog documentation) * ******************************************************************************/ BOOL CAdvancedAsyncDlg::OnInitDialog() { int i; CString string; CComboBox *pComboBox; /* * Call the parent classes' OnInitDialog to perform default dialog * initialization. */ CBaseDialog::OnInitDialog(); /* * Load up combo boxes with strings. */ pComboBox = (CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX); string.LoadString(IDS_ASYNC_ADVANCED_HWRX_NOTHING); pComboBox->AddString(string); string.LoadString(IDS_ASYNC_ADVANCED_HWRX_TURN_OFF_RTS); pComboBox->AddString(string); string.LoadString(IDS_ASYNC_ADVANCED_HWRX_TURN_OFF_DTR); pComboBox->AddString(string); pComboBox = (CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX); string.LoadString(IDS_ASYNC_ADVANCED_HWTX_ALWAYS); pComboBox->AddString(string); string.LoadString(IDS_ASYNC_ADVANCED_HWTX_WHEN_CTS_IS_ON); pComboBox->AddString(string); string.LoadString(IDS_ASYNC_ADVANCED_HWTX_WHEN_DSR_IS_ON); pComboBox->AddString(string); /* * Initalize all dialog fields. */ SetFields(); if ( m_bReadOnly ) { /* * Document is 'read-only': disable all dialog controls and labels * except for CANCEL & HELP buttons. */ for ( i=IDL_ASYNC_ADVANCED_FLOWCONTROL; i <=IDC_ASYNC_ADVANCED_BYTESIZE_8; i++ ) GetDlgItem(i)->EnableWindow(FALSE); GetDlgItem(IDOK)->EnableWindow(FALSE); } /* * Set all combo boxes to use the 'extended' UI. */ ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX))->SetExtendedUI(TRUE); ((CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX))->SetExtendedUI(TRUE); return(TRUE); } // end CAdvancedAsyncDlg::OnInitDialog /******************************************************************************* * * OnClickedAsyncAdvancedFlowcontrolHardware - * CAdvancedAsyncDlg member function: command * * Change the state of the FlowControl flags and corresponding dialog * controls when HARDWARE is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnClickedAsyncAdvancedFlowcontrolHardware() { GetFlowControlFields(); SetFields(); } // end CAdvancedAsyncDlg::OnClickedAsyncAdvancedFlowcontrolHardware /******************************************************************************* * * OnClickedAsyncAdvancedFlowcontrolSoftware - * CAdvancedAsyncDlg member function: command * * Change the state of the FlowControl flags and corresponding dialog * controls when SOFTWARE is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnClickedAsyncAdvancedFlowcontrolSoftware() { GetFlowControlFields(); SetFields(); } // end CAdvancedAsyncDlg::OnClickedAsyncAdvancedFlowcontrolSoftware /******************************************************************************* * * OnClickedAsyncAdvancedFlowcontrolNone - * CAdvancedAsyncDlg member function: command * * Change the state of the FlowControl flags and corresponding dialog * controls when NONE is clicked. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnClickedAsyncAdvancedFlowcontrolNone() { GetFlowControlFields(); SetFields(); } // end CAdvancedAsyncDlg::OnClickedAsyncAdvancedFlowcontrolNone /******************************************************************************* * * OnCloseupAsyncAdvancedHwrx - CAdvancedAsyncDlg member function: command * * Invoke OnSelchangeAsyncAdvancedHwrx() when 'receive' HW flow combo box * closes up. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnCloseupAsyncAdvancedHwrx() { OnSelchangeAsyncAdvancedHwrx(); } // end CAdvancedAsyncDlg::OnCloseupAsyncAdvancedHwrx /******************************************************************************* * * OnSelchangeAsyncAdvancedHwrx - CAdvancedAsyncDlg member function: command * * Process new Hardware Receive Flow Control selection. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnSelchangeAsyncAdvancedHwrx() { CComboBox *pHWRx = (CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWRX); /* * Ignore this notification if the combo box is in a dropped-down * state. */ if ( pHWRx->GetDroppedState() ) return; /* * Fetch and Set the Hardware fields to update. */ GetHWFields(); SetHWFields(); SetHWFlowText(); } // end CAdvancedAsyncDlg::OnSelchangeAsyncAdvancedHwrx /******************************************************************************* * * OnCloseupAsyncAdvancedHwtx - CAdvancedAsyncDlg member function: command * * Invoke OnSelchangeAsyncAdvancedHwtx() when 'transmit' HW flow combo box * closes up. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnCloseupAsyncAdvancedHwtx() { OnSelchangeAsyncAdvancedHwtx(); } // end CAdvancedAsyncDlg::OnCloseupAsyncAdvancedHwtx /******************************************************************************* * * OnSelchangeAsyncAdvancedHwtx - CAdvancedAsyncDlg member function: command * * Process new Hardware Transmit Flow Control selection. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnSelchangeAsyncAdvancedHwtx() { CComboBox *pHWTx = (CComboBox *)GetDlgItem(IDC_ASYNC_ADVANCED_HWTX); /* * Ignore this notification if the combo box is in a dropped-down * state. */ if ( pHWTx->GetDroppedState() ) return; /* * Fetch and Set the Hardware fields to update. */ GetHWFields(); SetHWFields(); SetHWFlowText(); } // end CAdvancedAsyncDlg::OnSelchangeAsyncAdvancedHwtx /******************************************************************************* * * OnClickedAsyncAdvancedBasedec - CAdvancedAsyncDlg member function: command * * Process request to display numbers using decimal base. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnClickedAsyncAdvancedBasedec() { /* * Get/Set the SW fields to display in decimal base. */ GetSWFields(FALSE); SetSWFields(); } // end CAdvancedAsyncDlg::OnClickedAsyncAdvancedBasedec /******************************************************************************* * * OnClickedAsyncAdvancedBasehex - CAdvancedAsyncDlg member function: command * * Process request to display numbers using hexadecimal base. * * ENTRY: * EXIT: * ******************************************************************************/ void CAdvancedAsyncDlg::OnClickedAsyncAdvancedBasehex() { /* * Get/Set the SW fields to display in hexadecimal base. */ GetSWFields(FALSE); SetSWFields(); } // end CAdvancedAsyncDlg::OnClickedAsyncAdvancedBasehex /******************************************************************************* * * OnOK - CAdvancedAsyncDlg member function: command (override) * * Read all control contents back into the Async config structure * before closing the dialog. * * ENTRY: * EXIT: * (Refer to CDialog::OnOk documentation) * ******************************************************************************/ void CAdvancedAsyncDlg::OnOK() { /* * If the Enter key was pressed while a combo box was dropped down, ignore * it (treat as combo list selection only). */ if ( !HandleEnterEscKey(IDOK) ) return; /* * Fetch the field contents. Return (don't close dialog) if a problem * was found. */ if ( !GetFields() ) return; /* * Call the parent classes' OnOk to complete dialog closing * and destruction. */ CBaseDialog::OnOK(); } // end CAdvancedAsyncDlg::OnOK /******************************************************************************* * * OnCancel - CAdvancedAsyncDlg member function: command (override) * * Cancel the dialog. * * ENTRY: * EXIT: * (Refer to CDialog::OnCancel documentation) * ******************************************************************************/ void CAdvancedAsyncDlg::OnCancel() { /* * If the Esc key was pressed while a combo box was dropped down, ignore * it (treat as combo close-up and cancel only). */ if ( !HandleEnterEscKey(IDCANCEL) ) return; /* * Call the parent classes' OnCancel to complete dialog closing * and destruction. */ CBaseDialog::OnCancel(); } // end CAdvancedAsyncDlg::OnCancel ////////////////////////////////////////////////////////////////////////////////