mirror of
https://git.openafs.org/openafs.git
synced 2025-02-01 14:07:39 +00:00
243 lines
6.4 KiB
C++
243 lines
6.4 KiB
C++
/*
|
|
* Copyright 2000, International Business Machines Corporation and others.
|
|
* All Rights Reserved.
|
|
*
|
|
* This software has been released under the terms of the IBM Public
|
|
* License. For details, see the LICENSE file in the top-level source
|
|
* directory or online at http://www.openafs.org/dl/license10.html
|
|
*/
|
|
|
|
/*
|
|
* INCLUDES _________________________________________________________________
|
|
*
|
|
*/
|
|
extern "C" {
|
|
#include <afs/param.h>
|
|
#include <afs/stds.h>
|
|
}
|
|
|
|
#include "afscfg.h"
|
|
#include "resource.h"
|
|
|
|
|
|
/*
|
|
* DEFINITIONS _________________________________________________________________
|
|
*
|
|
*/
|
|
static HWND hDlg = 0;
|
|
extern int nOptionButtonSeparationHeight; // Comes from backup_server_page.cpp
|
|
|
|
|
|
/*
|
|
* PROTOTYPES _________________________________________________________________
|
|
*
|
|
*/
|
|
static void OnInitDialog(HWND hwndDlg);
|
|
static void CantConfig(UINT nMsgID);
|
|
static void EnableSysControlMachine(BOOL bEnable);
|
|
static void ShowSysControlMachine(TCHAR *pszSysControlMachine);
|
|
static void CheckEnableNextButton();
|
|
|
|
|
|
/*
|
|
* EXPORTED FUNCTIONS _________________________________________________________________
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Dialog Proc _________________________________________________________________
|
|
*
|
|
*/
|
|
BOOL CALLBACK SysControlPageDlgProc(HWND hwndDlg, UINT msg, WPARAM wp, LPARAM lp)
|
|
{
|
|
if (WizStep_Common_DlgProc (hwndDlg, msg, wp, lp))
|
|
return FALSE;
|
|
|
|
switch (msg) {
|
|
case WM_INITDIALOG:
|
|
OnInitDialog(hwndDlg);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wp)) {
|
|
case IDNEXT:
|
|
g_pWiz->SetState(sidSTEP_TWELVE);
|
|
break;
|
|
|
|
case IDBACK:
|
|
g_pWiz->SetState(sidSTEP_TEN);
|
|
break;
|
|
|
|
case IDC_SYS_CONTROL_SERVER:
|
|
g_CfgData.configSCS = CS_CONFIGURE;
|
|
g_CfgData.configSCC = CS_DONT_CONFIGURE;
|
|
EnableSysControlMachine(FALSE);
|
|
break;
|
|
|
|
case IDC_SYS_CONTROL_CLIENT:
|
|
g_CfgData.configSCS = CS_DONT_CONFIGURE;
|
|
g_CfgData.configSCC = CS_CONFIGURE;
|
|
EnableSysControlMachine(TRUE);
|
|
SetFocus(GetDlgItem(hDlg, IDC_SYS_CONTROL_MACHINE));
|
|
break;
|
|
|
|
case IDC_DONT_CONFIGURE:
|
|
g_CfgData.configSCS = CS_DONT_CONFIGURE;
|
|
g_CfgData.configSCC = CS_DONT_CONFIGURE;
|
|
EnableSysControlMachine(FALSE);
|
|
break;
|
|
|
|
case IDC_SYS_CONTROL_MACHINE:
|
|
if (HIWORD(wp) == EN_CHANGE)
|
|
CheckEnableNextButton();
|
|
break;
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/*
|
|
* STATIC FUNCTIONS _________________________________________________________________
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Event Handler Functions _________________________________________________________________
|
|
*
|
|
*/
|
|
static void OnInitDialog(HWND hwndDlg)
|
|
{
|
|
hDlg = hwndDlg;
|
|
|
|
g_pWiz->EnableButtons(BACK_BUTTON | NEXT_BUTTON);
|
|
g_pWiz->SetButtonText(IDNEXT, IDS_NEXT);
|
|
g_pWiz->SetDefaultControl(IDNEXT);
|
|
|
|
if (g_CfgData.configSCS == CS_ALREADY_CONFIGURED) {
|
|
CantConfig(IDS_ALREADY_A_SYS_CONTROL_SERVER);
|
|
return;
|
|
} else if (g_CfgData.configSCC == CS_ALREADY_CONFIGURED) {
|
|
CantConfig(IDS_ALREADY_A_SYS_CONTROL_CLIENT);
|
|
return;
|
|
}
|
|
|
|
// Should this step be disabled? Yes, if this machine
|
|
// is not configured as a database or file server.
|
|
if (!ConfiguredOrConfiguring(g_CfgData.configFS) && !ConfiguredOrConfiguring(g_CfgData.configDB)) {
|
|
CantConfig(IDS_SC_NOT_A_DB_OR_FS_SERVER);
|
|
EnableStep(g_CfgData.configSCS, FALSE);
|
|
EnableStep(g_CfgData.configSCC, FALSE);
|
|
return;
|
|
}
|
|
|
|
// Do this in case they were disabled on the last run through
|
|
EnableStep(g_CfgData.configSCS);
|
|
EnableStep(g_CfgData.configSCC);
|
|
|
|
// If this is the first server, then it can't be a SCC
|
|
if (g_CfgData.bFirstServer) {
|
|
// Disable the SCC step
|
|
EnableStep(g_CfgData.configSCC, FALSE);
|
|
|
|
// Hide the SCC controls
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_CLIENT_DESC, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_CLIENT, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_MACHINE_LABEL, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_MACHINE, FALSE);
|
|
|
|
// Move remaining controls to fill the holes left from
|
|
// hiding the SCC controls
|
|
|
|
// Get position of the "Do not configure" option button; we will position
|
|
// the other controls relative to this one
|
|
RECT rectDNC;
|
|
GetWindowRect(GetDlgItem(hDlg, IDC_DONT_CONFIGURE), &rectDNC);
|
|
|
|
// Get position of the SCS option button
|
|
RECT rectSCS;
|
|
GetWindowRect(GetDlgItem(hDlg, IDC_SYS_CONTROL_SERVER), &rectSCS);
|
|
|
|
// Calc offset between the two
|
|
int nOffset = rectDNC.top - rectSCS.top;
|
|
|
|
// Separate the two option controls
|
|
nOffset -= nOptionButtonSeparationHeight;
|
|
|
|
// Move the controls
|
|
MoveWnd(hDlg, IDC_SYS_CONTROL_MACHINE_QUESTION, 0, nOffset);
|
|
MoveWnd(hDlg, IDC_SYS_CONTROL_SERVER, 0, nOffset);
|
|
|
|
SetWndText(hDlg, IDC_TITLE, IDS_CONFIG_SCS);
|
|
SetWndText(hDlg, IDC_SYS_CONTROL_MACHINE_QUESTION, IDS_SYS_CONTROL_SERVER_ONLY_MSG);
|
|
SetWndText(hDlg, IDC_DONT_CONFIGURE, IDS_DONT_CONFIG_SYS_CONTROL_SERVER_MSG);
|
|
}
|
|
|
|
if (g_CfgData.configSCS == CS_CONFIGURE)
|
|
SetCheck(hDlg, IDC_SYS_CONTROL_SERVER);
|
|
else if (g_CfgData.configSCC == CS_CONFIGURE) {
|
|
SetCheck(hDlg, IDC_SYS_CONTROL_CLIENT);
|
|
EnableSysControlMachine(TRUE);
|
|
} else
|
|
SetCheck(hDlg, IDC_DONT_CONFIGURE);
|
|
}
|
|
|
|
/*
|
|
* Utility Functions _________________________________________________________________
|
|
*
|
|
*/
|
|
static void CantConfig(UINT nMsgID)
|
|
{
|
|
TCHAR szMsg[cchRESOURCE];
|
|
|
|
GetString(szMsg, nMsgID);
|
|
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_MACHINE_QUESTION, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_SERVER, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_CLIENT, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_MACHINE_LABEL, FALSE);
|
|
ShowWnd(hDlg, IDC_SYS_CONTROL_MACHINE, FALSE);
|
|
ShowWnd(hDlg, IDC_DONT_CONFIGURE, FALSE);
|
|
|
|
ShowWnd(hDlg, IDC_CANT_CONFIG_MSG);
|
|
SetWndText(hDlg, IDC_CANT_CONFIG_MSG, szMsg);
|
|
}
|
|
|
|
static void EnableSysControlMachine(BOOL bEnable)
|
|
{
|
|
EnableWnd(hDlg, IDC_SYS_CONTROL_MACHINE_LABEL, bEnable);
|
|
EnableWnd(hDlg, IDC_SYS_CONTROL_MACHINE, bEnable);
|
|
|
|
if (bEnable)
|
|
ShowSysControlMachine(g_CfgData.szSysControlMachine);
|
|
else
|
|
ShowSysControlMachine(TEXT(""));
|
|
|
|
CheckEnableNextButton();
|
|
}
|
|
|
|
static void ShowSysControlMachine(TCHAR *pszSysControlMachine)
|
|
{
|
|
SetWndText(hDlg, IDC_SYS_CONTROL_MACHINE, pszSysControlMachine);
|
|
}
|
|
|
|
static void CheckEnableNextButton()
|
|
{
|
|
BOOL bEnable = TRUE;
|
|
|
|
if (IsButtonChecked(hDlg, IDC_SYS_CONTROL_CLIENT)) {
|
|
GetWndText(hDlg, IDC_SYS_CONTROL_MACHINE, g_CfgData.szSysControlMachine, MAX_MACHINE_NAME_LEN);
|
|
|
|
if (lstrlen(g_CfgData.szSysControlMachine) == 0)
|
|
bEnable = FALSE;
|
|
}
|
|
|
|
if (bEnable)
|
|
g_pWiz->EnableButtons(BACK_BUTTON | NEXT_BUTTON);
|
|
else
|
|
g_pWiz->EnableButtons(BACK_BUTTON);
|
|
}
|
|
|