867 lines
24 KiB
C++
867 lines
24 KiB
C++
|
//-----------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1997.
|
||
|
//
|
||
|
// File: D L G A T M . C P P
|
||
|
//
|
||
|
// Contents: CTcpArpcPage and CATMAddressDialog implementation
|
||
|
//
|
||
|
// Notes: The "ARP Client" page and dialog
|
||
|
//
|
||
|
// Author: tongl 1 July 1997 Created
|
||
|
//
|
||
|
//-----------------------------------------------------------------------
|
||
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
#include "tcpipobj.h"
|
||
|
#include "ncatlui.h"
|
||
|
#include "ncstl.h"
|
||
|
#include "tcpconst.h"
|
||
|
#include "tcpmacro.h"
|
||
|
#include "tcputil.h"
|
||
|
#include "tcphelp.h"
|
||
|
|
||
|
#include "atmcommon.h"
|
||
|
|
||
|
#include "dlgatm.h"
|
||
|
#include "dlgaddr.h"
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// CAtmArpcPage
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Message map functions
|
||
|
LRESULT CAtmArpcPage::OnInitDialog(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
m_hMTUEditBox = GetDlgItem(IDC_EDT_ATM_MaxTU);
|
||
|
Assert(m_hMTUEditBox);
|
||
|
|
||
|
// ARP Server
|
||
|
m_hArps.m_hList = GetDlgItem(IDC_LBX_ATM_ArpsAddrs);
|
||
|
m_hArps.m_hAdd = GetDlgItem(IDC_PSB_ATM_ArpsAdd);
|
||
|
m_hArps.m_hEdit = GetDlgItem(IDC_PSB_ATM_ArpsEdt);
|
||
|
m_hArps.m_hRemove = GetDlgItem(IDC_PSB_ATM_ArpsRmv);
|
||
|
m_hArps.m_hUp = GetDlgItem(IDC_PSB_ATM_ArpsUp);
|
||
|
m_hArps.m_hDown = GetDlgItem(IDC_PSB_ATM_ArpsDown);
|
||
|
|
||
|
// MAR Server
|
||
|
m_hMars.m_hList = GetDlgItem(IDC_LBX_ATM_MarsAddrs);
|
||
|
m_hMars.m_hAdd = GetDlgItem(IDC_PSB_ATM_MarsAdd);
|
||
|
m_hMars.m_hEdit = GetDlgItem(IDC_PSB_ATM_MarsEdt);
|
||
|
m_hMars.m_hRemove = GetDlgItem(IDC_PSB_ATM_MarsRmv);
|
||
|
m_hMars.m_hUp = GetDlgItem(IDC_PSB_ATM_MarsUp);
|
||
|
m_hMars.m_hDown = GetDlgItem(IDC_PSB_ATM_MarsDown);
|
||
|
|
||
|
// Set the up\down arrow icons
|
||
|
SendDlgItemMessage(IDC_PSB_ATM_ArpsUp, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconUpArrow));
|
||
|
SendDlgItemMessage(IDC_PSB_ATM_ArpsDown, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconDownArrow));
|
||
|
|
||
|
SendDlgItemMessage(IDC_PSB_ATM_MarsUp, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconUpArrow));
|
||
|
SendDlgItemMessage(IDC_PSB_ATM_MarsDown, BM_SETIMAGE, IMAGE_ICON,
|
||
|
reinterpret_cast<LPARAM>(g_hiconDownArrow));
|
||
|
|
||
|
// Set MTU edit box length
|
||
|
::SendMessage(m_hMTUEditBox, EM_SETLIMITTEXT, MAX_MTU_LENGTH, 0);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnContextMenu(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnHelp(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
|
||
|
Assert(lphi);
|
||
|
|
||
|
if (HELPINFO_WINDOW == lphi->iContextType)
|
||
|
{
|
||
|
ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP,
|
||
|
m_adwHelpIDs);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// Notify handlers for the property page
|
||
|
LRESULT CAtmArpcPage::OnActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
SetInfo();
|
||
|
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, 0);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
// All error values are loaded and then checked here
|
||
|
// while all non-error values are checked in OnApply
|
||
|
BOOL err = FALSE; // Allow page to lose active status
|
||
|
|
||
|
// In non-PVC only mode, if either of the list boxes (ARPS or MARS)
|
||
|
// is empty for any bound atm card, we can't leave the page.
|
||
|
if (BST_UNCHECKED == IsDlgButtonChecked(IDC_CHK_ATM_PVCONLY))
|
||
|
{
|
||
|
int nArps = Tcp_ListBox_GetCount(m_hArps.m_hList);
|
||
|
int nMars = Tcp_ListBox_GetCount(m_hMars.m_hList);
|
||
|
|
||
|
if ((nArps==0) || (nMars ==0))
|
||
|
{
|
||
|
NcMsgBox(m_hWnd, IDS_MSFT_TCP_TEXT, IDS_INVALID_ATMSERVERLIST,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
|
||
|
|
||
|
err = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// MTU value
|
||
|
WCHAR szData[MAX_MTU_LENGTH+1];
|
||
|
szData[0]= 0;
|
||
|
::GetWindowText(GetDlgItem(IDC_EDT_ATM_MaxTU), szData, MAX_MTU_LENGTH+1);
|
||
|
|
||
|
// check the range of the number
|
||
|
PWSTR pStr;
|
||
|
unsigned long num = wcstoul(szData, &pStr, 10);
|
||
|
|
||
|
int nId = IDS_MTU_RANGE_WORD;
|
||
|
|
||
|
if (num < MIN_MTU || num > MAX_MTU)
|
||
|
{
|
||
|
NcMsgBox(::GetActiveWindow(),
|
||
|
IDS_MSFT_TCP_TEXT,
|
||
|
nId,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
|
||
|
::SetFocus(m_hMTUEditBox);
|
||
|
|
||
|
err = TRUE;
|
||
|
}
|
||
|
|
||
|
if (!err)
|
||
|
{
|
||
|
UpdateInfo();
|
||
|
}
|
||
|
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, err);
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnApply(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
BOOL nResult = PSNRET_NOERROR;
|
||
|
|
||
|
if (!IsModified())
|
||
|
{
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, nResult);
|
||
|
return nResult;
|
||
|
}
|
||
|
|
||
|
UpdateInfo();
|
||
|
|
||
|
// pass the info back to its parent dialog
|
||
|
m_pParentDlg->m_fPropShtOk = TRUE;
|
||
|
|
||
|
if(!m_pParentDlg->m_fPropShtModified)
|
||
|
m_pParentDlg->m_fPropShtModified = IsModified();
|
||
|
|
||
|
// reset status
|
||
|
SetModifiedTo(FALSE); // this page is no longer modified
|
||
|
|
||
|
::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, nResult);
|
||
|
return nResult;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnCancel(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnQueryCancel(int idCtrl, LPNMHDR pnmh, BOOL& fHandled)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// Control message handlers
|
||
|
|
||
|
// PVC Only
|
||
|
LRESULT CAtmArpcPage::OnPVCOnly(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
BOOL fChecked = (BST_CHECKED == IsDlgButtonChecked(IDC_CHK_ATM_PVCONLY));
|
||
|
if (fChecked != m_pAdapterInfo->m_fPVCOnly)
|
||
|
{
|
||
|
PageModified();
|
||
|
}
|
||
|
|
||
|
EnableGroup(!fChecked);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// ARP server controls
|
||
|
LRESULT CAtmArpcPage::OnArpServer(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch (wNotifyCode)
|
||
|
{
|
||
|
case LBN_SELCHANGE:
|
||
|
SetButtons(m_hArps, NUM_ATMSERVER_LIMIT);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnAddArps(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_hAddressList = m_hArps.m_hList;
|
||
|
OnServerAdd(m_hArps, c_szArpServer);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnEditArps(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_hAddressList = m_hArps.m_hList;
|
||
|
OnServerEdit(m_hArps, c_szArpServer);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnRemoveArps(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
BOOL fRemoveArps = TRUE;
|
||
|
OnServerRemove(m_hArps, fRemoveArps);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnArpsUp(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
OnServerUp(m_hArps);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnArpsDown(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
OnServerDown(m_hArps);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// MAR server controls
|
||
|
LRESULT CAtmArpcPage::OnMarServer(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch (wNotifyCode)
|
||
|
{
|
||
|
case LBN_SELCHANGE:
|
||
|
SetButtons(m_hMars, NUM_ATMSERVER_LIMIT);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnAddMars(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_hAddressList = m_hMars.m_hList;
|
||
|
OnServerAdd(m_hMars, c_szMarServer);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnEditMars(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
m_hAddressList = m_hMars.m_hList;
|
||
|
OnServerEdit(m_hMars, c_szMarServer);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnRemoveMars(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
BOOL fRemoveArps = FALSE;
|
||
|
OnServerRemove(m_hMars, fRemoveArps);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnMarsUp(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
OnServerUp(m_hMars);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnMarsDown(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
OnServerDown(m_hMars);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmArpcPage::OnMaxTU(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
switch(wNotifyCode)
|
||
|
{
|
||
|
case EN_CHANGE:
|
||
|
PageModified();
|
||
|
break;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
//
|
||
|
// Helper functions
|
||
|
//
|
||
|
|
||
|
// Update the server addresses and MTU of the deselected card
|
||
|
void CAtmArpcPage::UpdateInfo()
|
||
|
{
|
||
|
// PVC Only
|
||
|
m_pAdapterInfo->m_fPVCOnly =
|
||
|
(BST_CHECKED == IsDlgButtonChecked(IDC_CHK_ATM_PVCONLY));
|
||
|
|
||
|
// Update ARP server address
|
||
|
FreeCollectionAndItem(m_pAdapterInfo->m_vstrARPServerList);
|
||
|
int nCount = Tcp_ListBox_GetCount(m_hArps.m_hList);
|
||
|
|
||
|
WCHAR szARPS[MAX_ATM_ADDRESS_LENGTH+1];
|
||
|
for (int i=0; i< nCount; i++)
|
||
|
{
|
||
|
Tcp_ListBox_GetText(m_hArps.m_hList, i, szARPS);
|
||
|
m_pAdapterInfo->m_vstrARPServerList.push_back(new tstring(szARPS));
|
||
|
}
|
||
|
|
||
|
// Update MAR server address
|
||
|
FreeCollectionAndItem(m_pAdapterInfo->m_vstrMARServerList);
|
||
|
nCount = Tcp_ListBox_GetCount(m_hMars.m_hList);
|
||
|
|
||
|
WCHAR szMARS[MAX_ATM_ADDRESS_LENGTH+1];
|
||
|
for (i=0; i< nCount; i++)
|
||
|
{
|
||
|
Tcp_ListBox_GetText(m_hMars.m_hList, i, szMARS);
|
||
|
m_pAdapterInfo->m_vstrMARServerList.push_back(new tstring(szMARS));
|
||
|
}
|
||
|
|
||
|
// MTU
|
||
|
WCHAR szMTU[MAX_MTU_LENGTH+1];
|
||
|
GetDlgItemText(IDC_EDT_ATM_MaxTU, szMTU, MAX_MTU_LENGTH+1);
|
||
|
m_pAdapterInfo->m_dwMTU = _wtoi(szMTU);
|
||
|
}
|
||
|
|
||
|
// Set the other controls according to the current adapter
|
||
|
void CAtmArpcPage::SetInfo()
|
||
|
{
|
||
|
Assert(m_pAdapterInfo);
|
||
|
|
||
|
if (m_pAdapterInfo != NULL)
|
||
|
{
|
||
|
Assert (m_pAdapterInfo->m_fIsAtmAdapter);
|
||
|
|
||
|
if (m_pAdapterInfo->m_fIsAtmAdapter)
|
||
|
{
|
||
|
// ARP server IDC_LBX_ATM_ArpsAddrs
|
||
|
int nResult;
|
||
|
|
||
|
Tcp_ListBox_ResetContent(m_hArps.m_hList);
|
||
|
|
||
|
for(VSTR_ITER iterARPServer = m_pAdapterInfo->m_vstrARPServerList.begin();
|
||
|
iterARPServer != m_pAdapterInfo->m_vstrARPServerList.end() ;
|
||
|
++iterARPServer)
|
||
|
{
|
||
|
nResult = Tcp_ListBox_InsertString(m_hArps.m_hList, -1,
|
||
|
(*iterARPServer)->c_str());
|
||
|
}
|
||
|
|
||
|
// set slection to first item
|
||
|
if (nResult >= 0)
|
||
|
Tcp_ListBox_SetCurSel(m_hArps.m_hList, 0);
|
||
|
|
||
|
// MAR server IDC_LBX_ATM_MarsAddrs
|
||
|
Tcp_ListBox_ResetContent(m_hMars.m_hList);
|
||
|
|
||
|
for(VSTR_ITER iterMARServer = m_pAdapterInfo->m_vstrMARServerList.begin();
|
||
|
iterMARServer != m_pAdapterInfo->m_vstrMARServerList.end() ;
|
||
|
++iterMARServer)
|
||
|
{
|
||
|
nResult = Tcp_ListBox_InsertString(m_hMars.m_hList, -1,
|
||
|
(*iterMARServer)->c_str());
|
||
|
}
|
||
|
|
||
|
// set slection to first item
|
||
|
if (nResult >= 0)
|
||
|
Tcp_ListBox_SetCurSel(m_hMars.m_hList, 0);
|
||
|
|
||
|
// MTU
|
||
|
WCHAR szBuf[MAX_MTU_LENGTH];
|
||
|
wsprintfW(szBuf, c_szItoa, m_pAdapterInfo->m_dwMTU);
|
||
|
SetDlgItemText(IDC_EDT_ATM_MaxTU, szBuf);
|
||
|
|
||
|
// Set push buttons state
|
||
|
SetButtons(m_hArps, NUM_ATMSERVER_LIMIT);
|
||
|
SetButtons(m_hMars, NUM_ATMSERVER_LIMIT);
|
||
|
|
||
|
// Set PVC Only check box
|
||
|
CheckDlgButton(IDC_CHK_ATM_PVCONLY, m_pAdapterInfo->m_fPVCOnly);
|
||
|
if(m_pAdapterInfo->m_fPVCOnly)
|
||
|
{
|
||
|
EnableGroup(FALSE);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
void CAtmArpcPage::EnableGroup(BOOL fEnable)
|
||
|
{
|
||
|
::EnableWindow(GetDlgItem(IDC_LBX_ATM_ArpsAddrs), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsAdd), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsEdt), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsRmv), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsUp), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_ArpsDown), fEnable);
|
||
|
|
||
|
::EnableWindow(GetDlgItem(IDC_LBX_ATM_MarsAddrs), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsAdd), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsEdt), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsRmv), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsUp), fEnable);
|
||
|
::EnableWindow(GetDlgItem(IDC_PSB_ATM_MarsDown), fEnable);
|
||
|
|
||
|
if (fEnable)
|
||
|
{
|
||
|
// Set push buttons state
|
||
|
SetButtons(m_hArps, NUM_ATMSERVER_LIMIT);
|
||
|
SetButtons(m_hMars, NUM_ATMSERVER_LIMIT);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CAtmArpcPage::OnServerAdd(HANDLES hGroup, PCTSTR pszTitle)
|
||
|
{
|
||
|
m_fEditState = FALSE;
|
||
|
CAtmAddressDialog * pDlgSrv = new CAtmAddressDialog(this, g_aHelpIDs_IDD_ATM_ADDR);
|
||
|
|
||
|
pDlgSrv->SetTitle(pszTitle);
|
||
|
|
||
|
if (pDlgSrv->DoModal() == IDOK)
|
||
|
{
|
||
|
tstring strNewAddress;
|
||
|
if (!lstrcmpW(pszTitle, c_szArpServer))
|
||
|
{
|
||
|
strNewAddress = m_strNewArpsAddress;
|
||
|
|
||
|
// empty strings, this removes the saved address
|
||
|
m_strNewArpsAddress = c_szEmpty;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Assert(!lstrcmpW(pszTitle, c_szMarServer));
|
||
|
strNewAddress = m_strNewMarsAddress;
|
||
|
|
||
|
// empty strings, this removes the saved address
|
||
|
m_strNewMarsAddress = c_szEmpty;
|
||
|
}
|
||
|
int idx = Tcp_ListBox_InsertString(hGroup.m_hList,
|
||
|
-1,
|
||
|
strNewAddress.c_str());
|
||
|
|
||
|
PageModified();
|
||
|
|
||
|
Assert(idx >= 0);
|
||
|
if (idx >= 0)
|
||
|
{
|
||
|
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx);
|
||
|
SetButtons(hGroup, NUM_ATMSERVER_LIMIT);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// release dialog object
|
||
|
delete pDlgSrv;
|
||
|
}
|
||
|
|
||
|
void CAtmArpcPage::OnServerEdit(HANDLES hGroup, PCWSTR pszTitle)
|
||
|
{
|
||
|
m_fEditState = TRUE;
|
||
|
Assert(Tcp_ListBox_GetCount(hGroup.m_hList));
|
||
|
|
||
|
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList);
|
||
|
Assert(idx >= 0);
|
||
|
|
||
|
// save off the removed address and delete it from the listview
|
||
|
if (idx >= 0)
|
||
|
{
|
||
|
WCHAR buf[MAX_ATM_ADDRESS_LENGTH+1];
|
||
|
|
||
|
Assert(Tcp_ListBox_GetTextLen(hGroup.m_hList, idx) <= celems(buf));
|
||
|
Tcp_ListBox_GetText(hGroup.m_hList, idx, buf);
|
||
|
|
||
|
BOOL fEditArps = !lstrcmpW(pszTitle, c_szArpServer);
|
||
|
|
||
|
// used by dialog to display what to edit
|
||
|
if (fEditArps)
|
||
|
{
|
||
|
m_strNewArpsAddress = buf;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_strNewMarsAddress = buf;
|
||
|
}
|
||
|
|
||
|
CAtmAddressDialog * pDlgSrv = new CAtmAddressDialog(this, g_aHelpIDs_IDD_ATM_ADDR);
|
||
|
|
||
|
pDlgSrv->SetTitle(pszTitle);
|
||
|
|
||
|
if (pDlgSrv->DoModal() == IDOK)
|
||
|
{
|
||
|
// replace the item in the listview with the new information
|
||
|
Tcp_ListBox_DeleteString(hGroup.m_hList, idx);
|
||
|
|
||
|
PageModified();
|
||
|
|
||
|
if (fEditArps)
|
||
|
{
|
||
|
m_strMovingEntry = m_strNewArpsAddress;
|
||
|
|
||
|
// restore the original removed address
|
||
|
m_strNewArpsAddress = buf;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_strMovingEntry = m_strNewMarsAddress;
|
||
|
|
||
|
// restore the original removed address
|
||
|
m_strNewMarsAddress = buf;
|
||
|
}
|
||
|
|
||
|
ListBoxInsertAfter(hGroup.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// empty strings, this removes the saved address
|
||
|
if (fEditArps)
|
||
|
{
|
||
|
m_strNewArpsAddress = c_szEmpty;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_strNewMarsAddress = c_szEmpty;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
delete pDlgSrv;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CAtmArpcPage::OnServerRemove(HANDLES hGroup, BOOL fRemoveArps)
|
||
|
{
|
||
|
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList);
|
||
|
Assert(idx >=0);
|
||
|
|
||
|
if (idx >=0)
|
||
|
{
|
||
|
WCHAR buf[MAX_ATM_ADDRESS_LENGTH+1];
|
||
|
Assert(Tcp_ListBox_GetTextLen(hGroup.m_hList, idx) <= celems(buf));
|
||
|
|
||
|
Tcp_ListBox_GetText(hGroup.m_hList, idx, buf);
|
||
|
|
||
|
if (fRemoveArps)
|
||
|
{
|
||
|
m_strNewArpsAddress = buf;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_strNewMarsAddress = buf;
|
||
|
}
|
||
|
Tcp_ListBox_DeleteString(hGroup.m_hList, idx);
|
||
|
|
||
|
PageModified();
|
||
|
|
||
|
// select a new item
|
||
|
int nCount;
|
||
|
if ((nCount = Tcp_ListBox_GetCount(hGroup.m_hList)) != LB_ERR)
|
||
|
{
|
||
|
// select the previous item in the list
|
||
|
if (idx)
|
||
|
--idx;
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx);
|
||
|
}
|
||
|
SetButtons(hGroup, NUM_ATMSERVER_LIMIT);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CAtmArpcPage::OnServerUp(HANDLES hGroup)
|
||
|
{
|
||
|
Assert(m_hArps.m_hList);
|
||
|
|
||
|
int nCount = Tcp_ListBox_GetCount(hGroup.m_hList);
|
||
|
Assert(nCount);
|
||
|
|
||
|
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList);
|
||
|
Assert(idx != 0);
|
||
|
|
||
|
if (ListBoxRemoveAt(hGroup.m_hList, idx, &m_strMovingEntry) == FALSE)
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
--idx;
|
||
|
PageModified();
|
||
|
ListBoxInsertAfter(hGroup.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
|
||
|
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx);
|
||
|
SetButtons(hGroup, NUM_ATMSERVER_LIMIT);
|
||
|
}
|
||
|
|
||
|
void CAtmArpcPage::OnServerDown(HANDLES hGroup)
|
||
|
{
|
||
|
Assert(hGroup.m_hList);
|
||
|
|
||
|
int nCount = Tcp_ListBox_GetCount(hGroup.m_hList);
|
||
|
Assert(nCount);
|
||
|
|
||
|
int idx = Tcp_ListBox_GetCurSel(hGroup.m_hList);
|
||
|
--nCount;
|
||
|
|
||
|
Assert(idx != nCount);
|
||
|
|
||
|
if (ListBoxRemoveAt(hGroup.m_hList, idx, &m_strMovingEntry) == FALSE)
|
||
|
{
|
||
|
Assert(FALSE);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
++idx;
|
||
|
PageModified();
|
||
|
|
||
|
ListBoxInsertAfter(hGroup.m_hList, idx, m_strMovingEntry.c_str());
|
||
|
Tcp_ListBox_SetCurSel(hGroup.m_hList, idx);
|
||
|
SetButtons(hGroup, NUM_ATMSERVER_LIMIT);
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// CAtmAddressDialog
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////
|
||
|
|
||
|
CAtmAddressDialog::CAtmAddressDialog(CAtmArpcPage * pAtmArpcPage, const DWORD* adwHelpIDs)
|
||
|
{
|
||
|
m_pParentDlg = pAtmArpcPage;
|
||
|
m_adwHelpIDs = adwHelpIDs;
|
||
|
m_hOkButton = 0;
|
||
|
};
|
||
|
|
||
|
CAtmAddressDialog::~CAtmAddressDialog(){};
|
||
|
|
||
|
LRESULT CAtmAddressDialog::OnInitDialog(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
// set title
|
||
|
SetDlgItemText(IDCST_ATM_AddrName, m_szTitle);
|
||
|
|
||
|
BOOL fEditArps = !lstrcmpW(m_szTitle, c_szArpServer);
|
||
|
|
||
|
// change the "Ok" button to "Add" if we are not editing
|
||
|
|
||
|
if (FALSE == m_pParentDlg->m_fEditState)
|
||
|
SetDlgItemText(IDOK, L"Add");
|
||
|
|
||
|
// Set the position of the pop up dialog to be right over the listbox
|
||
|
// on parent dialog
|
||
|
|
||
|
RECT rect;
|
||
|
|
||
|
Assert(m_pParentDlg->m_hAddressList);
|
||
|
::GetWindowRect(m_pParentDlg->m_hAddressList, &rect);
|
||
|
SetWindowPos(NULL, rect.left, rect.top, 0,0,
|
||
|
SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
|
||
|
|
||
|
// Save handles to the "Ok" button and the edit box
|
||
|
m_hOkButton = GetDlgItem(IDOK);
|
||
|
m_hEditBox = GetDlgItem(IDC_EDT_ATM_Address);
|
||
|
|
||
|
// ATM addresses have a 40 character limit + separaters
|
||
|
::SendMessage(m_hEditBox, EM_SETLIMITTEXT, MAX_ATM_ADDRESS_LENGTH*1.5, 0);
|
||
|
|
||
|
// add the address that was just removed
|
||
|
tstring strNewAddress = fEditArps ? m_pParentDlg->m_strNewArpsAddress : m_pParentDlg->m_strNewMarsAddress;
|
||
|
if (strNewAddress.size())
|
||
|
{
|
||
|
::SetWindowText(m_hEditBox, strNewAddress.c_str());
|
||
|
::SendMessage(m_hEditBox, EM_SETSEL, 0, -1);
|
||
|
::EnableWindow(m_hOkButton, TRUE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (fEditArps)
|
||
|
{
|
||
|
m_pParentDlg->m_strNewArpsAddress = c_szEmpty;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pParentDlg->m_strNewMarsAddress = c_szEmpty;
|
||
|
}
|
||
|
::EnableWindow(m_hOkButton, FALSE);
|
||
|
}
|
||
|
|
||
|
::SetFocus(m_hEditBox);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmAddressDialog::OnContextMenu(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
ShowContextHelp(m_hWnd, HELP_CONTEXTMENU, m_adwHelpIDs);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CAtmAddressDialog::OnHelp(UINT uMsg, WPARAM wParam,
|
||
|
LPARAM lParam, BOOL& fHandled)
|
||
|
{
|
||
|
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
|
||
|
Assert(lphi);
|
||
|
|
||
|
if (HELPINFO_WINDOW == lphi->iContextType)
|
||
|
{
|
||
|
ShowContextHelp(static_cast<HWND>(lphi->hItemHandle), HELP_WM_HELP,
|
||
|
m_adwHelpIDs);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// If the "Ok button is pushed
|
||
|
LRESULT CAtmAddressDialog::OnOk(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
WCHAR szAtmAddress[MAX_ATM_ADDRESS_LENGTH+1];
|
||
|
int i =0;
|
||
|
int nId =0;
|
||
|
|
||
|
// Get the current address from the control and
|
||
|
// add them to the adapter if valid
|
||
|
::GetWindowText(m_hEditBox, szAtmAddress, MAX_ATM_ADDRESS_LENGTH+1);
|
||
|
|
||
|
if (! FIsValidAtmAddress(szAtmAddress, &i, &nId))
|
||
|
{ // If invalid ATM address, we pop up a message box and set focus
|
||
|
// back to the edit box
|
||
|
|
||
|
// REVIEW(tongl): report first invalid character in mesg box
|
||
|
NcMsgBox(m_hWnd, IDS_MSFT_TCP_TEXT, IDS_INCORRECT_ATM_ADDRESS,
|
||
|
MB_APPLMODAL | MB_ICONEXCLAMATION | MB_OK);
|
||
|
|
||
|
::SetFocus(GetDlgItem(IDC_EDT_ATM_Address));
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// We check if the newly added or modified string is already in the list,
|
||
|
// if so, we do not add a duplicate address
|
||
|
|
||
|
// m_hCurrentAddressList is the handle to either ARPS list or MARS list
|
||
|
int nCount = Tcp_ListBox_GetCount(m_pParentDlg->m_hAddressList);
|
||
|
if (nCount) // if the list is not empty
|
||
|
{
|
||
|
int i;
|
||
|
WCHAR szBuff[MAX_ATM_ADDRESS_LENGTH+1];
|
||
|
for (i=0; i<nCount; i++)
|
||
|
{
|
||
|
Tcp_ListBox_GetText(m_pParentDlg->m_hAddressList, i, szBuff);
|
||
|
|
||
|
if (lstrcmpW(szAtmAddress, szBuff) ==0) // If string is already on the list
|
||
|
{
|
||
|
EndDialog(IDCANCEL);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL fArpsDialog = !lstrcmpW(m_szTitle, c_szArpServer);
|
||
|
if (m_pParentDlg->m_fEditState == FALSE) // Add new address
|
||
|
{
|
||
|
if (fArpsDialog)
|
||
|
{
|
||
|
m_pParentDlg->m_strNewArpsAddress = szAtmAddress;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pParentDlg->m_strNewMarsAddress = szAtmAddress;
|
||
|
}
|
||
|
}
|
||
|
else // if edit, see if string is having a diferent value now
|
||
|
{
|
||
|
if (fArpsDialog)
|
||
|
{
|
||
|
if(m_pParentDlg->m_strNewArpsAddress != szAtmAddress)
|
||
|
m_pParentDlg->m_strNewArpsAddress = szAtmAddress; // update save addresses
|
||
|
else
|
||
|
EndDialog(IDCANCEL);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(m_pParentDlg->m_strNewMarsAddress != szAtmAddress)
|
||
|
m_pParentDlg->m_strNewMarsAddress = szAtmAddress; // update save addresses
|
||
|
else
|
||
|
EndDialog(IDCANCEL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
EndDialog(IDOK);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// If the "Cancel" button is pushed
|
||
|
LRESULT CAtmAddressDialog::OnCancel(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
EndDialog(IDCANCEL);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// If the edit box contents is changed
|
||
|
LRESULT CAtmAddressDialog::OnChange(WORD wNotifyCode, WORD wID,
|
||
|
HWND hWndCtl, BOOL& fHandled)
|
||
|
{
|
||
|
WCHAR buf[2];
|
||
|
|
||
|
// Enable or disable the "Ok" button
|
||
|
// based on whether the edit box is empty
|
||
|
|
||
|
if (::GetWindowText(m_hEditBox, buf, celems(buf)) == 0)
|
||
|
::EnableWindow(m_hOkButton, FALSE);
|
||
|
else
|
||
|
::EnableWindow(m_hOkButton, TRUE);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void CAtmAddressDialog::SetTitle(PCWSTR pszTitle)
|
||
|
{
|
||
|
Assert(pszTitle);
|
||
|
lstrcpyW(m_szTitle, pszTitle);
|
||
|
}
|
||
|
|