/* * c o n n e c t . c p p * * Purpose: * Implements connection dialog tab page * * Owner: * brettm. * * Copyright (C) Microsoft Corp. 1993, 1994. */ #include "pch.hxx" #include #include #include "acctman.h" #include "acctui.h" #include "connect.h" #include "dllmain.h" #include "resource.h" #include "accthelp.h" #include "server.h" #include "demand.h" ASSERTDATA /* * p r o t o t y p e s * */ void EnableConnectoidWindows(HWND hwnd) { BOOL fEnable, fLan; HWND hwndCombo, hwndModem; hwndModem = GetDlgItem(hwnd, IDC_MODEM_CHECK); fLan = (BST_CHECKED == IsDlgButtonChecked(hwnd, idcLan)); if (hwndModem != NULL) EnableWindow(hwndModem, fLan); if (fLan && hwndModem != NULL && BST_CHECKED == Button_GetCheck(hwndModem)) fEnable = TRUE; else if (BST_CHECKED == IsDlgButtonChecked(hwnd, idcRas)) fEnable = TRUE; else fEnable = FALSE; hwndCombo = GetDlgItem(hwnd, idcRasConnection); EnableWindow(hwndCombo, fEnable); EnableWindow(GetDlgItem(hwnd, idcRasAdd), fEnable); EnableWindow(GetDlgItem(hwnd, idcRasDesc), fEnable); EnableWindow(GetDlgItem(hwnd, idchkConnectOnStartup), fEnable); if (fEnable) fEnable = (ComboBox_GetCurSel(hwndCombo) != CB_ERR); EnableWindow(GetDlgItem(hwnd, idcRasProp), fEnable); } void ConnectPage_InitDialog(HWND hwnd, LPSTR szEntryName, LPSTR szBackup, DWORD iConnectType, BOOL fFirstInit) { HWND hwndCombo, hwndModem; int iSel; DWORD dw; Assert(szEntryName != NULL); hwndCombo = GetDlgItem(hwnd, idcRasConnection); if (fFirstInit) { SetIntlFont(hwndCombo); HrFillRasCombo(hwndCombo, FALSE, NULL); } // Fill in the connection type and if the person already has a // RAS connection set up make the combo box select that one by // default CheckRadioButton(hwnd, idcLan, idcRas, idcLan + iConnectType); hwndModem = GetDlgItem(hwnd, IDC_MODEM_CHECK); if (iConnectType == CONNECTION_TYPE_LAN && hwndModem != NULL && szBackup != NULL) { Button_SetCheck(hwndModem, BST_CHECKED); szEntryName = szBackup; } iSel = (*szEntryName != 0) ? ComboBox_FindStringExact(hwndCombo, -1, szEntryName) : 0; ComboBox_SetCurSel(hwndCombo, iSel); EnableConnectoidWindows(hwnd); } // if pAcct is NULL, we're in the wizard, otherwise we're in the prop sheet void ConnectPage_WMCommand(HWND hwnd, HWND hwndCmd, int id, WORD wCmd, IImnAccount *pAcct) { BOOL fEnable; if (wCmd == BN_CLICKED) { switch (id) { case idcRasAdd: ConnectPage_MakeNewConnection(hwnd); EnableWindow(GetDlgItem(hwnd, idcRasProp), ComboBox_GetCurSel(GetDlgItem(hwnd, idcRasConnection)) != CB_ERR); break; case idcRasProp: ConnectPage_EditConnection(hwnd); break; default: EnableConnectoidWindows(hwnd); if (pAcct != NULL) { PropSheet_Changed(GetParent(hwnd), hwnd); PropSheet_QuerySiblings(GetParent(hwnd), SM_SETDIRTY, PAGE_RAS); } break; } } else if (wCmd == CBN_SELENDOK && id == idcRasConnection) { EnableConnectoidWindows(hwnd); if (pAcct != NULL) { PropSheet_Changed(GetParent(hwnd), hwnd); PropSheet_QuerySiblings(GetParent(hwnd), SM_SETDIRTY, PAGE_RAS); } } } const static HELPMAP g_rgCtxMapConnect[] = { {idcLan, IDH_NEWS_SERV_CNKT_LAN}, {idcManual, IDH_NEWS_SERV_CNKT_MAN}, {idcRas, IDH_NEWS_SERV_CNKT_DIALUP}, {idcRasDesc, IDH_NEWS_SERV_CNKT_DIALUP_CONNECT}, {idcRasConnection, IDH_NEWS_SERV_CNKT_DIALUP_CONNECT}, {idcRasProp, IDH_NEWS_SERV_CNKT_PROPS}, {idcRasAdd, IDH_NEWS_SERV_CNKT_ADD}, {idchkConnectOnStartup, IDH_INETCOMM_AUTO_CONNECT}, {IDC_MODEM_CHECK, IDH_CONNECTION_VIA_MODEM}, {0,0}}; INT_PTR CALLBACK ConnectPage_DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { ACCTTYPE type; NMHDR *pnmh; CAccount *pAcct; BOOL fModem; int iSel; HWND hwndModem, hwndCombo; SERVER_TYPE sfType; char *psz, szEntryName[CCHMAX_CONNECTOID], szBackup[CCHMAX_CONNECTOID]; TCHAR szRes[CCHMAX_STRINGRES]; DWORD dw, dwFlags; pAcct = (CAccount *)GetWindowLongPtr(hwnd, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: // Get the ServerParams and store them in our extra bytes pAcct = (CAccount *)((PROPSHEETPAGE *)lParam)->lParam; SetWindowLongPtr(hwnd, DWLP_USER, (LPARAM)pAcct); Assert(pAcct); pAcct->GetAccountType(&type); Assert(type == ACCT_MAIL || type == ACCT_NEWS); // Get the connection info if (FAILED(pAcct->GetPropSz(AP_RAS_CONNECTOID, szEntryName, ARRAYSIZE(szEntryName)))) szEntryName[0] = 0; if (FAILED(pAcct->GetPropDw(AP_RAS_CONNECTION_TYPE, &dw))) dw = CONNECTION_TYPE_LAN; if (!!(pAcct->m_dwDlgFlags & ACCTDLG_BACKUP_CONNECT) && SUCCEEDED(pAcct->GetPropSz(AP_RAS_BACKUP_CONNECTOID, szBackup, ARRAYSIZE(szBackup)))) { psz = szBackup; } else { psz = NULL; } ConnectPage_InitDialog(hwnd, szEntryName, psz, dw, TRUE); if (FAILED(pAcct->GetPropDw(AP_RAS_CONNECTION_FLAGS, &dw))) dw = 0; Button_SetCheck(GetDlgItem(hwnd, idchkConnectOnStartup), !!(dw & CF_AUTO_CONNECT) ? BST_CHECKED : BST_UNCHECKED); if (type == ACCT_MAIL) { LoadString(g_hInstRes, idsMailConDlgLabel, szRes, ARRAYSIZE(szRes)); SetWindowText(GetDlgItem(hwnd, idcRasDlgLabel), szRes); // figure out what kind of server we are PropSheet_QuerySiblings(GetParent(hwnd), MSM_GETSERVERTYPE, (LPARAM)&sfType); if (sfType == SERVER_MAIL || sfType == SERVER_IMAP) ShowWindow(GetDlgItem(hwnd, idchkConnectOnStartup), SW_HIDE); } PropSheet_QuerySiblings(GetParent(hwnd), SM_INITIALIZED, PAGE_RAS); PropSheet_UnChanged(GetParent(hwnd), hwnd); return (TRUE); case WM_HELP: case WM_CONTEXTMENU: return OnContextHelp(hwnd, uMsg, wParam, lParam, g_rgCtxMapConnect); case WM_COMMAND: ConnectPage_WMCommand(hwnd, GET_WM_COMMAND_HWND(wParam, lParam), GET_WM_COMMAND_ID(wParam, lParam), GET_WM_COMMAND_CMD(wParam, lParam), pAcct); return (TRUE); case WM_NOTIFY: pnmh = (NMHDR *)lParam; switch (pnmh->code) { case PSN_APPLY: // BEGIN validation hwndCombo = GetDlgItem(hwnd, idcRasConnection); fModem = FALSE; if (IsDlgButtonChecked(hwnd, idcLan)) { dw = CONNECTION_TYPE_LAN; hwndModem = GetDlgItem(hwnd, IDC_MODEM_CHECK); if (hwndModem != NULL) fModem = Button_GetCheck(hwndModem); } else if (IsDlgButtonChecked(hwnd, idcManual)) { dw = CONNECTION_TYPE_MANUAL; } else { dw = CONNECTION_TYPE_RAS; } if (dw == CONNECTION_TYPE_RAS || fModem) { iSel = ComboBox_GetCurSel(hwndCombo); if (iSel == CB_ERR) { SetFocus(hwndCombo); InvalidAcctProp(hwnd, NULL, idsErrChooseConnection, iddServerProp_Connect); return(TRUE); } ComboBox_GetLBText(hwndCombo, iSel, szEntryName); } // END validation pAcct->SetPropDw(AP_RAS_CONNECTION_TYPE, dw); if (fModem) pAcct->SetPropSz(AP_RAS_BACKUP_CONNECTOID, szEntryName); else pAcct->SetProp(AP_RAS_BACKUP_CONNECTOID, NULL, 0); dwFlags = 0; if (dw != CONNECTION_TYPE_RAS) { pAcct->SetProp(AP_RAS_CONNECTOID, NULL, 0); } else { pAcct->SetPropSz(AP_RAS_CONNECTOID, szEntryName); // figure out what kind of server we are pAcct->GetAccountType(&type); if (type == ACCT_MAIL) PropSheet_QuerySiblings(GetParent(hwnd), MSM_GETSERVERTYPE, (LPARAM)&sfType); else sfType = SERVER_NEWS; if (sfType != SERVER_MAIL) { if (IsDlgButtonChecked(hwnd, idchkConnectOnStartup)) dwFlags = CF_AUTO_CONNECT; } } pAcct->SetPropDw(AP_RAS_CONNECTION_FLAGS, dwFlags); PropSheet_UnChanged(GetParent(hwnd), hwnd); dw = PAGE_RAS; PropSheet_QuerySiblings(GetParent(hwnd), SM_SAVECHANGES, (LPARAM)&dw); if (dw == -1) { SetWindowLongPtr(hwnd, DWLP_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE); return(TRUE); } break; } return(TRUE); } return (FALSE); } /******************************************************************* NAME: EditConnectoid SYNOPSIS: Brings up RNA dialog for connectoid properties for selected connectoid ********************************************************************/ BOOL ConnectPage_EditConnection(HWND hDlg) { BOOL fRet = FALSE; HWND hwndCombo = GetDlgItem(hDlg, idcRasConnection); Assert(hwndCombo); // shouldn't get here unless there is selection in combo box Assert(ComboBox_GetCurSel(hwndCombo) >= 0); TCHAR szEntryName[RAS_MaxEntryName + 1] = ""; ComboBox_GetText(hwndCombo, szEntryName, sizeof(szEntryName)); if (lstrlen(szEntryName)) { if (SUCCEEDED(HrEditPhonebookEntry(hDlg, szEntryName, NULL))) fRet = TRUE; } return fRet; } /******************************************************************* NAME: MakeNewConnectoid SYNOPSIS: Launches RNA new connectoid wizard; selects newly created connectoid (if any) in combo box ********************************************************************/ BOOL ConnectPage_MakeNewConnection(HWND hDlg) { BOOL fRet=FALSE; if (SUCCEEDED(HrCreatePhonebookEntry(hDlg, NULL))) { HWND hwndCombo = GetDlgItem(hDlg, idcRasConnection); Assert(hwndCombo); HrFillRasCombo(hwndCombo, TRUE, NULL); fRet = TRUE; } else { // Bug #27986 - Let the user know why we failed do do anything, eh? AcctMessageBox(hDlg, MAKEINTRESOURCE(idsAccountManager), MAKEINTRESOURCE(idsErrNoRas1), MAKEINTRESOURCE(idsErrNoRas2), MB_OK | MB_ICONINFORMATION); } return fRet; }