mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
380 lines
10 KiB
380 lines
10 KiB
// ATlkDlg.cpp : Implementation of CATLKRoutingDlg and CATLKGeneralDlg
|
|
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "atlkobj.h"
|
|
#include "ncatlui.h"
|
|
#include "ncui.h"
|
|
#include "atlkhlp.h"
|
|
|
|
extern const WCHAR c_szDevice[];
|
|
extern const WCHAR c_szNetCfgHelpFile[];
|
|
|
|
const WCHAR c_chAmpersand = L'&';
|
|
const WCHAR c_chAsterisk = L'*';
|
|
const WCHAR c_chColon = L':';
|
|
const WCHAR c_chPeriod = L'.';
|
|
const WCHAR c_chQuote = L'\"';
|
|
const WCHAR c_chSpace = L' ';
|
|
|
|
//
|
|
// Function: PGetCurrentAdapterInfo
|
|
//
|
|
// Purpose: Based on the currently selected item in the adapter combobox.
|
|
// Extract and return the AdapterInfo *
|
|
//
|
|
// Parameters: pATLKEnv [IN] - Enviroment block for this property page
|
|
//
|
|
// Returns: CAdapterInfo *, Pointer to the adapter info if it exists,
|
|
// NULL otherwise
|
|
//
|
|
static CAdapterInfo *PGetCurrentAdapterInfo(CATLKEnv * pATLKEnv)
|
|
{
|
|
Assert(NULL != pATLKEnv);
|
|
if (pATLKEnv->AdapterInfoList().empty())
|
|
{
|
|
return NULL;
|
|
}
|
|
else
|
|
{
|
|
return pATLKEnv->AdapterInfoList().front();
|
|
}
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::CATLKGeneralDlg
|
|
//
|
|
// Purpose: ctor for the CATLKGeneralDlg class
|
|
//
|
|
// Parameters: pmsc - Ptr to the ATLK notification object
|
|
// pATLKEnv - Ptr to the current ATLK configuration
|
|
//
|
|
// Returns: nothing
|
|
//
|
|
CATLKGeneralDlg::CATLKGeneralDlg(CATlkObj *pmsc, CATLKEnv * pATLKEnv)
|
|
{
|
|
m_pmsc = pmsc;
|
|
m_pATLKEnv = pATLKEnv;
|
|
Assert(NULL != m_pATLKEnv);
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::~CATLKGeneralDlg
|
|
//
|
|
// Purpose: dtor for the CATLKGeneralDlg class
|
|
//
|
|
// Parameters: none
|
|
//
|
|
// Returns: nothing
|
|
//
|
|
CATLKGeneralDlg::~CATLKGeneralDlg()
|
|
{
|
|
// Don't free m_pmsc or m_pATLKEnv, they're borrowed only
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::HandleChkBox
|
|
//
|
|
// Purpose: Process the BN_PUSHBUTTON message for ATLK's General page
|
|
//
|
|
// Parameters: Standard ATL params
|
|
//
|
|
// Returns: LRESULT, 0L
|
|
//
|
|
LRESULT CATLKGeneralDlg::HandleChkBox(WORD wNotifyCode, WORD wID,
|
|
HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (BN_CLICKED == wNotifyCode)
|
|
{
|
|
UINT uIsCheckBoxChecked;
|
|
|
|
uIsCheckBoxChecked = IsDlgButtonChecked(CHK_GENERAL_DEFAULT);
|
|
|
|
::EnableWindow(GetDlgItem(CMB_GENERAL_ZONE),
|
|
uIsCheckBoxChecked);
|
|
::EnableWindow(GetDlgItem(IDC_TXT_ZONELIST),
|
|
uIsCheckBoxChecked);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::OnInitDialog
|
|
//
|
|
// Purpose: Process the WM_INITDIALOG message for ATLK's General page
|
|
//
|
|
// Parameters: Standard ATL params
|
|
//
|
|
// Returns: LRESULT, 0L
|
|
//
|
|
LRESULT
|
|
CATLKGeneralDlg::OnInitDialog(UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
tstring strDefPort;
|
|
CAdapterInfo * pAI = PGetCurrentAdapterInfo(m_pATLKEnv);
|
|
HWND hwndChk = GetDlgItem(CHK_GENERAL_DEFAULT);
|
|
HCURSOR WaitCursor;
|
|
|
|
WaitCursor = BeginWaitCursor();
|
|
|
|
// If no adapters we're successfully added, disable everything
|
|
if (NULL == pAI)
|
|
{
|
|
::EnableWindow(hwndChk, FALSE);
|
|
::EnableWindow(GetDlgItem(CMB_GENERAL_ZONE), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_TXT_ZONELIST), FALSE);
|
|
::EnableWindow(::GetDlgItem(::GetParent(m_hWnd), IDOK), FALSE);
|
|
EndWaitCursor(WaitCursor);
|
|
return 0L;
|
|
}
|
|
|
|
// Retain what we currently consider the "Default" adapter
|
|
strDefPort = c_szDevice;
|
|
strDefPort += pAI->SzBindName();
|
|
if (0 == _wcsicmp(strDefPort.c_str(), m_pATLKEnv->SzDefaultPort()))
|
|
{
|
|
::CheckDlgButton(m_hWnd, CHK_GENERAL_DEFAULT, 1);
|
|
::EnableWindow(hwndChk, FALSE);
|
|
}
|
|
else
|
|
{
|
|
// Disable the zone combo if the current adapter is not the
|
|
// default adapter.
|
|
::EnableWindow(GetDlgItem(CMB_GENERAL_ZONE), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_TXT_ZONELIST), FALSE);
|
|
}
|
|
|
|
// danielwe: RAID #347398: Hide the checkbox completely if this is a
|
|
// LocalTalk adapter.
|
|
//
|
|
if (pAI->DwMediaType() == MEDIATYPE_LOCALTALK)
|
|
{
|
|
::ShowWindow(GetDlgItem(CHK_GENERAL_DEFAULT), SW_HIDE);
|
|
}
|
|
|
|
// Populate the Zone dialog
|
|
RefreshZoneCombo();
|
|
|
|
SetChangedFlag();
|
|
|
|
EndWaitCursor(WaitCursor);
|
|
return 1L;
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::RefreshZoneCombo()
|
|
//
|
|
// Purpose: Populate the Zone combo box with the supplied list of zones
|
|
//
|
|
// Parameters: pAI - Adapter info
|
|
//
|
|
// Returns: none
|
|
//
|
|
VOID CATLKGeneralDlg::RefreshZoneCombo()
|
|
{
|
|
HWND hwndComboZones = GetDlgItem(CMB_GENERAL_ZONE);
|
|
INT nIdx;
|
|
CAdapterInfo * pAI = PGetCurrentAdapterInfo(m_pATLKEnv);
|
|
|
|
if (NULL == pAI)
|
|
return; // No adapter selected, available
|
|
|
|
::SendMessage(hwndComboZones, CB_RESETCONTENT, 0, 0L);
|
|
|
|
// Populate the Zone dialog
|
|
if (!pAI->FSeedingNetwork() || !m_pATLKEnv->FRoutingEnabled())
|
|
{
|
|
// this port is not seeding the network
|
|
// if we found a router on this port then add the found zone
|
|
// list to the desired zone box. Else do nothing.
|
|
if(pAI->FRouterOnNetwork())
|
|
{
|
|
if (pAI->LstpstrDesiredZoneList().empty())
|
|
return;
|
|
|
|
if (FALSE == FAddZoneListToControl(&pAI->LstpstrDesiredZoneList()))
|
|
return;
|
|
|
|
nIdx = ::SendMessage(hwndComboZones, CB_FINDSTRINGEXACT, -1,
|
|
(LPARAM)m_pATLKEnv->SzDesiredZone());
|
|
::SendMessage(hwndComboZones, CB_SETCURSEL,
|
|
((CB_ERR == nIdx) ? 0 : nIdx), 0L);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// This port is seeding the network, populate the zone list with the
|
|
// zones managed by this port.
|
|
if (pAI->LstpstrZoneList().empty())
|
|
return;
|
|
|
|
if (FALSE == FAddZoneListToControl(&pAI->LstpstrZoneList()))
|
|
return;
|
|
|
|
nIdx = ::SendMessage(hwndComboZones, CB_FINDSTRINGEXACT,
|
|
-1, (LPARAM)m_pATLKEnv->SzDesiredZone());
|
|
if (CB_ERR == nIdx)
|
|
nIdx = ::SendMessage(hwndComboZones, CB_FINDSTRINGEXACT,
|
|
-1, (LPARAM)pAI->SzDefaultZone());
|
|
|
|
::SendMessage(hwndComboZones, CB_SETCURSEL,
|
|
((CB_ERR == nIdx) ? 0 : nIdx), 0L);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::FAddZoneListToControl
|
|
//
|
|
// Purpose: Populate the Zone combo box with the supplied list of zones
|
|
//
|
|
// Parameters: plstpstr - Pointer to a list of pointers to tstrings
|
|
//
|
|
// Returns: BOOL, TRUE if at least one zone was added to the combo box
|
|
//
|
|
BOOL CATLKGeneralDlg::FAddZoneListToControl(list<tstring*> * plstpstr)
|
|
{
|
|
HWND hwndComboZones = GetDlgItem(CMB_GENERAL_ZONE);
|
|
list<tstring*>::iterator iter;
|
|
tstring * pstr;
|
|
|
|
Assert(NULL != plstpstr);
|
|
for (iter = plstpstr->begin();
|
|
iter != plstpstr->end();
|
|
iter++)
|
|
{
|
|
pstr = *iter;
|
|
::SendMessage(hwndComboZones, CB_ADDSTRING, 0, (LPARAM)pstr->c_str());
|
|
}
|
|
|
|
return (0 != ::SendMessage(hwndComboZones, CB_GETCOUNT, 0, 0L));
|
|
}
|
|
|
|
//
|
|
// Function: CATLKGeneralDlg::OnOk
|
|
//
|
|
// Purpose: Process the PSN_APPLY notification for the property page
|
|
//
|
|
// Parameters: Standard ATL params
|
|
//
|
|
// Returns: LRESULT, 0L
|
|
//
|
|
LRESULT
|
|
CATLKGeneralDlg::OnOk(INT idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
|
{
|
|
INT nIdx;
|
|
CAdapterInfo * pAI = PGetCurrentAdapterInfo(m_pATLKEnv);
|
|
HWND hwndComboZones = GetDlgItem(CMB_GENERAL_ZONE);
|
|
|
|
if (NULL == pAI)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if (IsDlgButtonChecked(CHK_GENERAL_DEFAULT))
|
|
{
|
|
tstring strPortName;
|
|
|
|
// Retain adapter selection as the default port
|
|
//
|
|
strPortName = c_szDevice;
|
|
strPortName += pAI->SzBindName();
|
|
if (wcscmp(strPortName.c_str(), m_pATLKEnv->SzDefaultPort()))
|
|
{
|
|
m_pATLKEnv->SetDefaultPort(strPortName.c_str());
|
|
m_pATLKEnv->SetDefAdapterChanged(TRUE);
|
|
|
|
// Tell the user what checking the box means...
|
|
//
|
|
tstring str;
|
|
str = SzLoadIds(IDS_ATLK_INBOUND_MSG1);
|
|
str += SzLoadIds(IDS_ATLK_INBOUND_MSG2);
|
|
::MessageBox(m_hWnd, str.c_str(),
|
|
SzLoadIds(IDS_CAPTION_NETCFG), MB_OK);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// If the check box is not checked then the zone combo is
|
|
// disabled and its contents don't need to be retained.
|
|
return 0;
|
|
}
|
|
|
|
// Retain the zone selection as the default zone
|
|
nIdx = ::SendMessage(hwndComboZones, CB_GETCURSEL, 0, 0L);
|
|
if (CB_ERR != nIdx)
|
|
{
|
|
WCHAR szBuf[MAX_ZONE_NAME_LEN + 1];
|
|
if (CB_ERR != ::SendMessage(hwndComboZones, CB_GETLBTEXT, nIdx,
|
|
(LPARAM)(PCWSTR)szBuf))
|
|
{
|
|
// If the new zone is different then the original, then
|
|
// mark the adapter as dirty
|
|
|
|
if (0 != _wcsicmp(szBuf, m_pATLKEnv->SzDesiredZone()))
|
|
{
|
|
// If the earlier desired zone was NOT NULL, only then
|
|
// mark adapter dirty to request a PnP to the stack
|
|
if (0 != _wcsicmp(c_szEmpty, m_pATLKEnv->SzDesiredZone()))
|
|
{
|
|
pAI->SetDirty(TRUE);
|
|
}
|
|
}
|
|
m_pATLKEnv->SetDesiredZone(szBuf);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: CATLKGeneralDlg::OnContextMenu
|
|
//
|
|
// Desc: Bring up context-sensitive help
|
|
//
|
|
// Args: Standard command parameters
|
|
//
|
|
// Return: LRESULT
|
|
//
|
|
LRESULT
|
|
CATLKGeneralDlg::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled)
|
|
{
|
|
if (g_aHelpIDs_DLG_ATLK_GENERAL != NULL)
|
|
{
|
|
::WinHelp(m_hWnd,
|
|
c_szNetCfgHelpFile,
|
|
HELP_CONTEXTMENU,
|
|
(ULONG_PTR)g_aHelpIDs_DLG_ATLK_GENERAL);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Method: CATLKGeneralDlg::OnHelp
|
|
//
|
|
// Desc: Bring up context-sensitive help when dragging ? icon over a control
|
|
//
|
|
// Args: Standard command parameters
|
|
//
|
|
// Return: LRESULT
|
|
//
|
|
//
|
|
LRESULT
|
|
CATLKGeneralDlg::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled)
|
|
{
|
|
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
|
|
Assert(lphi);
|
|
|
|
if ((g_aHelpIDs_DLG_ATLK_GENERAL != NULL) && (HELPINFO_WINDOW == lphi->iContextType))
|
|
{
|
|
::WinHelp(static_cast<HWND>(lphi->hItemHandle),
|
|
c_szNetCfgHelpFile,
|
|
HELP_WM_HELP,
|
|
(ULONG_PTR)g_aHelpIDs_DLG_ATLK_GENERAL);
|
|
}
|
|
return 0;
|
|
}
|