Windows2003-3790/inetcore/outlookexpress/msoeacct/connect.cpp
2020-09-30 16:53:55 +02:00

378 lines
13 KiB
C++

/*
* 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 <commctrl.h>
#include <imnxport.h>
#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;
}