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.
528 lines
15 KiB
528 lines
15 KiB
/*****************************************************************************
|
|
*
|
|
* $Workfile: AddMInfo.cpp $
|
|
*
|
|
* Copyright (C) 1997 Hewlett-Packard Company.
|
|
* Copyright (c) 1997 Microsoft Corporation.
|
|
* All rights reserved.
|
|
*
|
|
* 11311 Chinden Blvd.
|
|
* Boise, Idaho 83714
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include "precomp.h"
|
|
#include "UIMgr.h"
|
|
#include "DevPort.h"
|
|
#include "AddMInfo.h"
|
|
#include "Resource.h"
|
|
#include "MibABC.h"
|
|
#include "TcpMonUI.h"
|
|
|
|
//
|
|
// FUNCTION: CMoreInfoDlg constructor
|
|
//
|
|
// PURPOSE: initialize a CMoreInfoDlg class
|
|
//
|
|
CMoreInfoDlg::CMoreInfoDlg() : m_DPList( )
|
|
{
|
|
memset(&m_PortDataStandard, 0, sizeof(m_PortDataStandard));
|
|
memset(&m_PortDataCustom, 0, sizeof(m_PortDataCustom));
|
|
|
|
lstrcpyn(m_szCurrentSelection, DEFAULT_COMBO_SELECTION, MAX_SECTION_NAME);
|
|
|
|
} // constructor
|
|
|
|
|
|
//
|
|
// FUNCTION: CMoreInfoDlg destructor
|
|
//
|
|
// PURPOSE: deinitialize a CMoreInfoDlg class
|
|
//
|
|
CMoreInfoDlg::~CMoreInfoDlg()
|
|
{
|
|
} // destructor
|
|
|
|
|
|
//
|
|
// FUNCTION: MoreInfoDialog(HWND, UINT, WPARAM, LPARAM)
|
|
//
|
|
// PURPOSE: To process messages from the summary dialog for adding a port.
|
|
//
|
|
// MESSAGES:
|
|
//
|
|
// WM_INITDIALOG - intializes the page
|
|
// WM_COMMAND - handles button presses and text changes in edit controls.
|
|
//
|
|
//
|
|
INT_PTR CALLBACK MoreInfoDialog(
|
|
HWND hDlg,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
CMoreInfoDlg *wndDlg = NULL;
|
|
|
|
wndDlg = (CMoreInfoDlg *)GetWindowLongPtr(hDlg, GWLP_USERDATA);
|
|
|
|
switch (message) {
|
|
case WM_INITDIALOG:
|
|
wndDlg = new CMoreInfoDlg;
|
|
if( wndDlg == NULL )
|
|
return( FALSE );
|
|
|
|
SetWindowLongPtr(hDlg, GWLP_USERDATA, (UINT_PTR)wndDlg);
|
|
return wndDlg->OnInitDialog(hDlg, wParam, lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
return wndDlg->OnCommand(hDlg, wParam, lParam);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
return wndDlg->OnNotify(hDlg, wParam, lParam);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
delete wndDlg;
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
|
|
} // AddPortDialog
|
|
|
|
|
|
//
|
|
// FUNCTION: OnInitDialog(HWND hDlg)
|
|
//
|
|
// PURPOSE: Initialize the dialog.
|
|
//
|
|
BOOL CMoreInfoDlg::OnInitDialog(HWND hDlg, WPARAM, LPARAM lParam)
|
|
{
|
|
m_pParams = (ADD_PARAM_PACKAGE *) ((PROPSHEETPAGE *) lParam)->lParam;
|
|
|
|
CheckRadioButton(hDlg, IDC_RADIO_STANDARD, IDC_RADIO_CUSTOM, IDC_RADIO_STANDARD);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_DEVICES), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS), FALSE);
|
|
|
|
return TRUE;
|
|
|
|
} // OnInitDialog
|
|
|
|
|
|
//
|
|
// FUNCTION: OnCommand()
|
|
//
|
|
// PURPOSE: Process WM_COMMAND message
|
|
//
|
|
BOOL CMoreInfoDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch(HIWORD(wParam)) {
|
|
case BN_CLICKED:
|
|
return OnButtonClicked(hDlg, wParam, lParam);
|
|
break;
|
|
|
|
/*
|
|
case LBN_SELCHANGE:
|
|
return OnSelChange(hDlg, wParam, lParam);
|
|
break;
|
|
*/
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
} // OnCommand
|
|
|
|
#if 0
|
|
//
|
|
// FUNCTION: OnSelChange()
|
|
//
|
|
// PURPOSE: Process WM_COMMAND's LBN_SELCHANGE message
|
|
//
|
|
BOOL CMoreInfoDlg::OnSelChange(HWND hDlg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
// The selection in the combo box changed.
|
|
HWND hwndComboBox = NULL;
|
|
|
|
hwndComboBox = (HWND) lParam; // handle of list box
|
|
GetPrinterData(hwndComboBox, m_pParams->pData->sztHostAddress);
|
|
|
|
return TRUE;
|
|
|
|
} // OnSelChange
|
|
|
|
#endif
|
|
|
|
//
|
|
// FUNCTION: GetPrinterData(HWND hwndControl, BOOL *Unknown)
|
|
//
|
|
// PURPOSE: Gets the socket number of the selected item.
|
|
//
|
|
// Arguments: hwndControl is the handle of the combo box.
|
|
//
|
|
// Return Value: Returns the socket number associated with the selected item
|
|
//
|
|
void CMoreInfoDlg::GetPrinterData(HWND hwndControl,
|
|
LPCTSTR pszAddress
|
|
)
|
|
{
|
|
LRESULT iSelectedIndex = 0;
|
|
CDevicePort *pPortInfo = NULL;
|
|
|
|
iSelectedIndex = SendMessage(hwndControl,
|
|
CB_GETCURSEL,
|
|
(WPARAM)0,
|
|
(LPARAM)0);
|
|
|
|
pPortInfo = (CDevicePort *) SendMessage(hwndControl,
|
|
CB_GETITEMDATA,
|
|
(WPARAM)iSelectedIndex,
|
|
(LPARAM)0);
|
|
if ( (DWORD_PTR)pPortInfo != CB_ERR) {
|
|
|
|
pPortInfo->ReadPortInfo(pszAddress, &m_PortDataStandard, m_pParams->bBypassNetProbe);
|
|
lstrcpyn( m_szCurrentSelection, pPortInfo->GetName(), MAX_SECTION_NAME);
|
|
m_pParams->bMultiPort = ( pPortInfo->GetPortIndex() == 0);
|
|
lstrcpyn(m_pParams->sztSectionName,pPortInfo->GetPortKeyName(), MAX_SECTION_NAME);
|
|
} else {
|
|
|
|
//
|
|
// DSN Fill out the default structure
|
|
//
|
|
m_PortDataStandard.dwPortNumber = DEFAULT_PORT_NUMBER;
|
|
lstrcpyn(m_PortDataStandard.sztSNMPCommunity,
|
|
DEFAULT_SNMP_COMUNITY,
|
|
MAX_SNMP_COMMUNITY_STR_LEN);
|
|
m_PortDataStandard.dwSNMPDevIndex = 1;
|
|
}
|
|
} // GetPrinterData
|
|
|
|
|
|
//
|
|
// FUNCTION: OnNotify()
|
|
//
|
|
// PURPOSE: Process WM_NOTIFY message
|
|
//
|
|
BOOL CMoreInfoDlg::OnNotify(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (((NMHDR FAR *) lParam)->code) {
|
|
case PSN_KILLACTIVE:
|
|
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
|
|
return 1;
|
|
|
|
case PSN_RESET:
|
|
//
|
|
// reset to the original values
|
|
//
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
|
|
break;
|
|
|
|
case PSN_SETACTIVE:
|
|
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT | PSWIZB_BACK);
|
|
OnSetActive(hDlg);
|
|
break;
|
|
|
|
case PSN_WIZBACK:
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_ADDPORT);
|
|
|
|
memcpy(m_pParams->pData, &m_PortDataStandard, sizeof(PORT_DATA_1));
|
|
break;
|
|
|
|
case PSN_WIZNEXT:
|
|
//
|
|
// the Next button was pressed
|
|
//
|
|
if( IsDlgButtonChecked(hDlg, IDC_RADIO_STANDARD) == BST_CHECKED ) {
|
|
|
|
HWND hList = NULL;
|
|
HCURSOR hNewCursor = NULL;
|
|
HCURSOR hOldCursor = NULL;
|
|
|
|
if ( hNewCursor = LoadCursor(NULL, IDC_WAIT) )
|
|
hOldCursor = SetCursor(hNewCursor);
|
|
|
|
hList = GetDlgItem(hDlg, IDC_COMBO_DEVICES);
|
|
|
|
GetPrinterData(hList, m_pParams->pData->sztHostAddress);
|
|
|
|
if ( m_pParams->bMultiPort == FALSE ) {
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_SUMMARY);
|
|
}
|
|
memcpy(m_pParams->pData,
|
|
&m_PortDataStandard,
|
|
sizeof(PORT_DATA_1));
|
|
|
|
lstrcpyn(m_pParams->sztPortDesc,
|
|
m_szCurrentSelection,
|
|
SIZEOF_IN_CHAR(m_pParams->sztPortDesc));
|
|
|
|
if ( hNewCursor )
|
|
SetCursor(hOldCursor);
|
|
|
|
} else {
|
|
|
|
//
|
|
// if(IsDlgButtonChecked(hDlg, IDC_RADIO_CUSTOM) == BST_CHECKED)
|
|
//
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_DIALOG_SUMMARY);
|
|
memcpy(m_pParams->pData, &m_PortDataCustom, sizeof(PORT_DATA_1));
|
|
m_pParams->bMultiPort = FALSE;
|
|
*m_pParams->sztPortDesc = '\0';
|
|
}
|
|
break;
|
|
|
|
case PSN_QUERYCANCEL:
|
|
m_pParams->dwLastError = ERROR_CANCELLED;
|
|
return FALSE;
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
} // OnCommand
|
|
|
|
HRESULT
|
|
DynamicLoadString (
|
|
IN HINSTANCE hInst,
|
|
IN UINT uID,
|
|
IN UINT cchInitialCount,
|
|
OUT LPWSTR* ppszString
|
|
)
|
|
/*++
|
|
This function allocates memory using 'new' operator and loads string using LoadString call.
|
|
Caller is responsible for deleting the allocated memory.
|
|
The buffer space is insufficient if there is no extra character left after terminating char.
|
|
In this case, it releases the memory, allocates new bigger buffer and calls LoadString again.
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
UINT cchCount = cchInitialCount + 1;
|
|
|
|
for (;;)
|
|
{
|
|
LPWSTR pszString = new WCHAR [cchCount];
|
|
if (pszString == NULL)
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
break;
|
|
}
|
|
UINT cchLoadStringCount = LoadString (hInst,
|
|
uID,
|
|
pszString,
|
|
cchCount);
|
|
if (cchLoadStringCount == 0)
|
|
{
|
|
//
|
|
// String does not exist
|
|
//
|
|
*pszString = L'\0';
|
|
*ppszString = pszString;
|
|
hr = S_FALSE;
|
|
break;
|
|
}
|
|
//
|
|
// If the buffer is full (string content plus terminating char)
|
|
// we need to increase the buffer to be sure the whole string is loaded
|
|
//
|
|
if (cchLoadStringCount + 1 < cchCount)
|
|
{
|
|
//
|
|
// After terminating char of the copied string must remain at least one empty place
|
|
// This is a sign that we have whole string
|
|
//
|
|
*ppszString = pszString;
|
|
hr = S_OK;
|
|
break;
|
|
}
|
|
//
|
|
// Increase the size of the buffer and load string again
|
|
//
|
|
delete [] pszString;
|
|
cchCount *= 2;
|
|
}
|
|
|
|
return hr;
|
|
}//end DynamicLoadString
|
|
|
|
//
|
|
// FUNCTION: OnSetActive()
|
|
//
|
|
// PURPOSE: Process PSN_SETACTIVE part of the WM_NOTIFY message
|
|
//
|
|
void CMoreInfoDlg::OnSetActive(HWND hDlg)
|
|
{
|
|
WCHAR* pszMoreInfoReason = NULL;
|
|
|
|
memcpy( &m_PortDataStandard, m_pParams->pData, sizeof(PORT_DATA_1) );
|
|
memcpy( &m_PortDataCustom, m_pParams->pData, sizeof(PORT_DATA_1) );
|
|
|
|
FillComboBox(hDlg);
|
|
|
|
switch(m_pParams->dwDeviceType) {
|
|
case ERROR_DEVICE_NOT_FOUND:
|
|
(VOID) DynamicLoadString (g_hInstance,
|
|
IDS_STRING_DEV_NOT_FOUND,
|
|
MAX_REASON_STRLEN,
|
|
&pszMoreInfoReason);
|
|
break;
|
|
|
|
case SUCCESS_DEVICE_UNKNOWN:
|
|
(VOID) DynamicLoadString (g_hInstance,
|
|
IDS_STRING_UNKNOWN_DEV,
|
|
MAX_REASON_STRLEN,
|
|
&pszMoreInfoReason);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (pszMoreInfoReason)
|
|
{
|
|
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_MOREINFO_REASON), pszMoreInfoReason);
|
|
}
|
|
else
|
|
{
|
|
SetWindowText(GetDlgItem(hDlg, IDC_STATIC_MOREINFO_REASON), L"");
|
|
}
|
|
delete [] pszMoreInfoReason;
|
|
} // OnSetActive
|
|
|
|
|
|
//
|
|
// FUNCTION: OnButtonClicked()
|
|
//
|
|
// PURPOSE: Process BN_CLICKED message
|
|
//
|
|
BOOL CMoreInfoDlg::OnButtonClicked(HWND hDlg, WPARAM wParam, LPARAM)
|
|
{
|
|
int idButton = (int) LOWORD(wParam); // identifier of button
|
|
// HWND hwndButton = (HWND) lParam;
|
|
|
|
switch(idButton)
|
|
{
|
|
case IDC_BUTTON_SETTINGS:
|
|
m_pParams->UIManager->ConfigPortUI(hDlg,
|
|
&m_PortDataCustom,
|
|
m_pParams->hXcvPrinter,
|
|
m_pParams->pszServer,
|
|
TRUE);
|
|
break;
|
|
|
|
case IDC_RADIO_STANDARD:
|
|
CheckRadioButton(hDlg, IDC_RADIO_STANDARD, IDC_RADIO_CUSTOM, IDC_RADIO_STANDARD);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_DEVICES), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS), FALSE);
|
|
SetFocus(GetDlgItem(hDlg, IDC_COMBO_DEVICES));
|
|
break;
|
|
|
|
case IDC_RADIO_CUSTOM:
|
|
CheckRadioButton(hDlg, IDC_RADIO_STANDARD, IDC_RADIO_CUSTOM, IDC_RADIO_CUSTOM);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_COMBO_DEVICES), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS), TRUE);
|
|
SetFocus(GetDlgItem(hDlg, IDC_BUTTON_SETTINGS));
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
break;
|
|
}
|
|
return TRUE;
|
|
|
|
} // OnButtonClicked
|
|
|
|
|
|
//
|
|
// FUNCTION: FillComboBox(HWND hDlg)
|
|
//
|
|
// PURPOSE: Fills the combo box with values gotten from the ini file.
|
|
// The associated item data is used to pair the port number with the
|
|
// device types.
|
|
//
|
|
// Arguments: hDlg is the handle of the dialog box.
|
|
//
|
|
void CMoreInfoDlg::FillComboBox(HWND hDlg)
|
|
{
|
|
LRESULT index = 0;
|
|
HWND hList = NULL;
|
|
CDevicePort *pDP = NULL;
|
|
TCHAR sztGenericNetworkCard[MAX_TITLE_LENGTH];
|
|
|
|
hList = GetDlgItem(hDlg, IDC_COMBO_DEVICES);
|
|
// Possible Values in m_pParams->dwDeviceType:
|
|
// ERROR_DEVICE_NOT_FOUND
|
|
// SUCCESS_DEVICE_MULTI_PORT
|
|
// SUCCESS_DEVICE_UNKNOWN
|
|
|
|
index = SendMessage(hList,
|
|
CB_GETCURSEL,
|
|
(WPARAM)0,
|
|
(LPARAM)0);
|
|
|
|
if (index == CB_ERR) {
|
|
// This is the first time, initiliaze the list
|
|
|
|
index = SendMessage(hList, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
|
|
|
|
//
|
|
// Initialize the list of variables
|
|
//
|
|
if(m_pParams->dwDeviceType == ERROR_DEVICE_NOT_FOUND ||
|
|
m_pParams->dwDeviceType == SUCCESS_DEVICE_UNKNOWN) {
|
|
m_DPList.GetDevicePortsList(NULL);
|
|
} else { // SUCCESS_DEVICE_MULTI_PORT
|
|
m_DPList.GetDevicePortsList(m_pParams->sztSectionName);
|
|
}
|
|
|
|
for(pDP = m_DPList.GetFirst(); pDP != NULL; pDP = m_DPList.GetNext()) {
|
|
|
|
index = SendMessage(hList,
|
|
CB_ADDSTRING,
|
|
(WPARAM)0,
|
|
(LPARAM)pDP->GetName());
|
|
SendMessage(hList,
|
|
CB_SETITEMDATA,
|
|
(WPARAM)index,
|
|
(LPARAM)pDP);
|
|
}
|
|
|
|
index = SendMessage(hList,
|
|
CB_SETCURSEL,
|
|
(WPARAM)0,
|
|
(LPARAM)0);
|
|
|
|
if((m_pParams->dwDeviceType == ERROR_DEVICE_NOT_FOUND ||
|
|
m_pParams->dwDeviceType == SUCCESS_DEVICE_UNKNOWN) &&
|
|
(*m_szCurrentSelection != '\0') ) {
|
|
|
|
index = SendMessage(hList,
|
|
CB_SELECTSTRING,
|
|
(WPARAM)-1,
|
|
(LPARAM)m_szCurrentSelection);
|
|
}
|
|
|
|
SendMessage(hList, CB_SETCURSEL, (WPARAM)index, (LPARAM)0);
|
|
|
|
if (LoadString(g_hInstance, IDS_GENERIC_NETWORK_CARD, sztGenericNetworkCard, MAX_TITLE_LENGTH))
|
|
SendMessage(hList, CB_SELECTSTRING, 0, (LPARAM)sztGenericNetworkCard);
|
|
}
|
|
|
|
|
|
} // FillComboBox
|
|
|
|
|
|
|