|
|
//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
////////////////////////////////////////////////////////////////////////////////
|