Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

266 lines
6.7 KiB

/******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 2000
*
* TITLE: Nameit.cpp
*
* VERSION: 1.0
*
* AUTHOR: KeisukeT
*
* DATE: 27 Mar, 2000
*
* DESCRIPTION:
* Device naming page of WIA class installer.
*
*
*******************************************************************************/
//
// Precompiled header
//
#include "precomp.h"
#pragma hdrstop
//
// Include
//
#include "nameit.h"
//
// Function
//
CNameDevicePage::CNameDevicePage(PINSTALLER_CONTEXT pInstallerContext) :
CInstallWizardPage(pInstallerContext, NameTheDevice)
{
//
// Set link to previous/next page. This page should show up.
//
m_uPreviousPage = IDD_DYNAWIZ_SELECT_NEXTPAGE;
m_uNextPage = EmeraldCity;
//
// Initialize member.
//
m_pInstallerContext = pInstallerContext;
}
CNameDevicePage::~CNameDevicePage() {
} // CNameDevicePage()
BOOL
CNameDevicePage::OnNotify(
LPNMHDR lpnmh
)
{
BOOL bRet;
DWORD dwMessageId;
DebugTrace(TRACE_PROC_ENTER,(("CNameDevicePage::OnNotify: Enter... \r\n")));
//
// Initialize local.
//
bRet = FALSE;
dwMessageId = 0;
//
// Dispatch message.
//
switch(lpnmh->code){
case PSN_KILLACTIVE:
{
CString csFriendlyName;
DebugTrace(TRACE_STATUS,(("CNameDevicePage::OnNotify: PSN_KILLACTIVE.\r\n")));
//
// Dialog is about to disappear. Set FriendlyName.
//
if(NULL == m_pCDevice){
DebugTrace(TRACE_WARNING,(("CNameDevicePage::OnNotify: WARNING!! CDevice doesn't exist.\r\n")));
bRet = FALSE;
goto OnNotify_return;
}
//
// Get FriendlyName from text box.
//
csFriendlyName.GetContents(GetDlgItem(m_hwnd, DeviceFriendlyName));
//
// Check the FriendlyName only when user push 'NEXT'.
//
if(m_bNextButtonPushed){
DWORD dwLength;
//
// Check length.
//
dwLength = lstrlen((LPCTSTR)csFriendlyName);
if(0 == dwLength){
dwMessageId = NoDeviceName;
}
if(dwLength > MAX_FRIENDLYNAME){
dwMessageId = DeviceNameTooLong;
}
//
// Check if it's unique.
//
if(!csFriendlyName.IsEmpty()){
//
// Acquire mutex to access name store.
//
if(ERROR_SUCCESS != m_pCDevice->AcquireInstallerMutex(MAX_MUTEXTIMEOUT)){ // it must be done at least in 60 sec.
DebugTrace(TRACE_ERROR,("CNameDevicePage::OnNotify: ERROR!! Unable to acquire mutex in 60 sec.\r\n"));
} // if(ERROR_SUCCESS != AcquireInstallerMutex(60000))
//
// Refresh current device list.
//
m_pCDevice->CollectNames();
//
// See if Friendly is unique.
//
if(!(m_pCDevice->IsFriendlyNameUnique((LPTSTR)csFriendlyName))){
dwMessageId = DuplicateDeviceName;
} // if(!(m_pCDevice->IsFriendlyNameUnique((LPTSTR)csFriendlyName)))
} // if(!csFriendlyName.IsEmpty())
//
// If FriendlyName is invalid, show error MessageBox.
//
if(0 != dwMessageId){
//
// Select text box.
//
SendDlgItemMessage(m_hwnd,
DeviceFriendlyName,
EM_SETSEL,
0,
MAKELPARAM(0, -1));
SetFocus(GetDlgItem(m_hwnd, DeviceFriendlyName));
//
// Show error message box.
//
ShowInstallerMessage(dwMessageId);
//
// Don't leave this page.
//
SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, TRUE);
bRet = TRUE;
goto OnNotify_return;
} else { // if(0 != dwMessageId)
//
// Set FriendlyName.
//
m_pCDevice->SetFriendlyName((LPTSTR)csFriendlyName);
} // // if(0 != dwMessageId)
} // else (m_bNextButtonPushed)
//
// Release mutex.
//
m_pCDevice->ReleaseInstallerMutex();
//
// Reset pCDevice.
//
m_pCDevice = NULL;
bRet = TRUE;
goto OnNotify_return;
} // case PSN_KILLACTIVE
case PSN_SETACTIVE:
{
DebugTrace(TRACE_STATUS,(("CNameDevicePage::OnNotify: PSN_SETACTIVE.\r\n")));
//
// Get current CDevice object;
//
m_pCDevice = (CDevice *)m_pInstallerContext->pDevice;
if(NULL == m_pCDevice){
DebugTrace(TRACE_ERROR, (("CNameDevicePage::OnNotify: ERROR!! CDevice is not created.\r\n")));
}
//
// Show current friendly name.
//
SetDlgItemText(m_hwnd, DeviceFriendlyName, m_pCDevice->GetFriendlyName());
//
// Limit the text upto MAX_FRIENDLYNAME. (=64)
//
SendDlgItemMessage(m_hwnd, DeviceFriendlyName, EM_LIMITTEXT, MAX_FRIENDLYNAME, 0);
//
// If "PortSelect = no", then set previous page to device selection page.
//
if(PORTSELMODE_NORMAL != m_pCDevice->GetPortSelectMode())
{
m_uPreviousPage = IDD_DYNAWIZ_SELECTDEV_PAGE;
} else {
m_uPreviousPage = IDD_DYNAWIZ_SELECT_NEXTPAGE;
}
goto OnNotify_return;
} // case PSN_SETACTIVE:
} // switch(lpnmh->code)
OnNotify_return:
//
// Release mutex. ReleaseInstallerMutex() will handle invalid handle also, so we can call anyway.
//
if(NULL != m_pCDevice){
m_pCDevice->ReleaseInstallerMutex();
} // if(NULL != m_pCDevice)
DebugTrace(TRACE_PROC_LEAVE,(("CNameDevicePage::OnNotify: Leaving... Ret=0x%x.\r\n"), bRet));
return bRet;
} // CNameDevicePage::OnNotify()