windows-nt/Source/XPSP1/NT/printscan/ui/wiaacmgr/upquery.cpp
2020-09-26 16:20:57 +08:00

453 lines
16 KiB
C++

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
*
* TITLE: UPQUERY.CPP
*
* VERSION: 1.0
*
* AUTHOR: ShaunIv
*
* DATE: 9/28/1999
*
* DESCRIPTION: Download progress dialog. Displays the thumbnail and download progress.
*
*******************************************************************************/
#include "precomp.h"
#pragma hdrstop
#include "upquery.h"
#include "resource.h"
#include "simcrack.h"
#include "mboxex.h"
#include "runnpwiz.h"
#include "pviewids.h"
#include <wininet.h>
//
// This is the ID of the help hyperlink
//
#define STR_WORKING_WITH_PICTURES_HYPERLINK TEXT("WorkingWithPictures")
//
// This is the URL to which we navigate to display the "working with pictures" help
//
#define STR_HELP_DESTINATION TEXT("hcp://services/subsite?node=TopLevelBucket_1/Music__video__games_and_photos&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/manage_your_pictures.htm&select=TopLevelBucket_1/Music__video__games_and_photos/photos_and_other_digital_images")
CCommonUploadQueryPage::CCommonUploadQueryPage( HWND hWnd )
: m_hWnd(hWnd),
m_pControllerWindow(NULL),
m_nWiaEventMessage(RegisterWindowMessage(STR_WIAEVENT_NOTIFICATION_MESSAGE))
{
}
CCommonUploadQueryPage::~CCommonUploadQueryPage(void)
{
m_hWnd = NULL;
m_pControllerWindow = NULL;
}
LRESULT CCommonUploadQueryPage::OnInitDialog( WPARAM, LPARAM lParam )
{
//
// Make sure this starts out NULL
//
m_pControllerWindow = NULL;
//
// Get the PROPSHEETPAGE.lParam
//
PROPSHEETPAGE *pPropSheetPage = reinterpret_cast<PROPSHEETPAGE*>(lParam);
if (pPropSheetPage)
{
m_pControllerWindow = reinterpret_cast<CAcquisitionManagerControllerWindow*>(pPropSheetPage->lParam);
if (m_pControllerWindow)
{
m_pControllerWindow->m_WindowList.Add(m_hWnd);
}
}
//
// Bail out
//
if (!m_pControllerWindow)
{
EndDialog(m_hWnd,IDCANCEL);
return -1;
}
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_UPLOAD_NO, BM_SETCHECK, BST_CHECKED, 0 );
return 0;
}
LRESULT CCommonUploadQueryPage::OnSetActive( WPARAM, LPARAM )
{
WIA_PUSH_FUNCTION((TEXT("CCommonUploadQueryPage::OnSetActive")));
//
// We do NOT want to exit on disconnect if we are on this page
//
m_pControllerWindow->m_OnDisconnect = 0;
//
// Set the buttons
//
if (m_pControllerWindow->m_bDisconnected)
{
//
// Don't allow "back" if we've been disabled
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_NEXT );
}
else
{
//
// Allow finish and back
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_NEXT|PSWIZB_BACK );
}
return 0;
}
void CCommonUploadQueryPage::CleanupUploadWizard()
{
//
// Remove the old wizard's pages and clear everything
//
for (UINT i=0;i<m_pControllerWindow->m_nUploadWizardPageCount;++i)
{
if (m_pControllerWindow->m_PublishWizardPages[i])
{
PropSheet_RemovePage( GetParent( m_hWnd ), 0, m_pControllerWindow->m_PublishWizardPages[i] );
}
}
ZeroMemory( m_pControllerWindow->m_PublishWizardPages, sizeof(m_pControllerWindow->m_PublishWizardPages[0])*MAX_WIZ_PAGES );
m_pControllerWindow->m_nUploadWizardPageCount = 0;
//
// Release the old publish wizard
//
if (m_pControllerWindow->m_pPublishingWizard)
{
IUnknown_SetSite( m_pControllerWindow->m_pPublishingWizard, NULL );
}
m_pControllerWindow->m_pPublishingWizard = NULL;
}
LRESULT CCommonUploadQueryPage::OnWizNext( WPARAM, LPARAM )
{
//
// If the user has selected a web transfer, start the web transfer wizard
//
m_pControllerWindow->m_bUploadToWeb = false;
//
// Get the next page. Assume the finish page.
//
HPROPSHEETPAGE hNextPage = PropSheet_IndexToPage( GetParent(m_hWnd), m_pControllerWindow->m_nFinishPageIndex );
//
// Assume we aren't uploading the pictures
//
m_pControllerWindow->m_bUploadToWeb = false;
//
// Initialize the hresult
//
m_pControllerWindow->m_hrUploadResult = S_OK;
//
// Destroy the existing wizard if it exists
//
CleanupUploadWizard();
//
// If the user wants to publish these pictures
//
if (BST_CHECKED != SendDlgItemMessage( m_hWnd, IDC_TRANSFER_UPLOAD_NO, BM_GETCHECK, 0, 0 ))
{
//
// This means we are uploading
//
m_pControllerWindow->m_bUploadToWeb = true;
//
// Assume failure
//
m_pControllerWindow->m_hrUploadResult = E_FAIL;
//
// Which wizard?
//
DWORD dwFlags = SHPWHF_NONETPLACECREATE | SHPWHF_NORECOMPRESS;
LPTSTR pszWizardDefn = TEXT("InternetPhotoPrinting");
if (BST_CHECKED == SendDlgItemMessage( m_hWnd, IDC_TRANSFER_UPLOAD_TO_WEB, BM_GETCHECK, 0, 0 ))
{
dwFlags = 0;
pszWizardDefn = TEXT("PublishingWizard");
}
//
// Get all of the *UNIQUE* downloaded files
//
CSimpleDynamicArray<CSimpleString> UniqueFiles;
m_pControllerWindow->m_DownloadedFileInformationList.GetUniqueFiles(UniqueFiles);
//
// Make sure we have some files
//
if (UniqueFiles.Size())
{
//
// Get the data object for this file set
//
CComPtr<IDataObject> pDataObject;
m_pControllerWindow->m_hrUploadResult = NetPublishingWizard::CreateDataObjectFromFileList( UniqueFiles, &pDataObject );
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult) && pDataObject)
{
//
// Create a new publishing wizard
//
WIA_PRINTGUID((CLSID_PublishingWizard,TEXT("CLSID_PublishingWizard")));
WIA_PRINTGUID((IID_IPublishingWizard,TEXT("IID_IPublishingWizard")));
m_pControllerWindow->m_hrUploadResult = CoCreateInstance( CLSID_PublishingWizard, NULL, CLSCTX_INPROC_SERVER, IID_IPublishingWizard, (void**)&m_pControllerWindow->m_pPublishingWizard );
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult))
{
//
// Initialize the publishing wizard
//
m_pControllerWindow->m_hrUploadResult = m_pControllerWindow->m_pPublishingWizard->Initialize( pDataObject, dwFlags, pszWizardDefn);
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult))
{
//
// Get our wizard site
//
CComPtr<IWizardSite> pWizardSite;
m_pControllerWindow->m_hrUploadResult = m_pControllerWindow->QueryInterface( IID_IWizardSite, (void**)&pWizardSite );
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult))
{
//
// Set the wizard site
//
m_pControllerWindow->m_hrUploadResult = IUnknown_SetSite( m_pControllerWindow->m_pPublishingWizard, pWizardSite );
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult))
{
//
// Get the publishing wizard pages
//
m_pControllerWindow->m_hrUploadResult = m_pControllerWindow->m_pPublishingWizard->AddPages( m_pControllerWindow->m_PublishWizardPages, MAX_WIZ_PAGES, &m_pControllerWindow->m_nUploadWizardPageCount );
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult))
{
//
// Loop through and add all of the pages to the property sheet
//
for (UINT i=0;i<m_pControllerWindow->m_nUploadWizardPageCount && SUCCEEDED(m_pControllerWindow->m_hrUploadResult);++i)
{
//
// Make sure this is a valid page
//
if (m_pControllerWindow->m_PublishWizardPages[i])
{
//
// If we can't add a page, that is an error
//
if (!PropSheet_AddPage( GetParent( m_hWnd ), m_pControllerWindow->m_PublishWizardPages[i] ))
{
WIA_ERROR((TEXT("PropSheet_AddPage failed")));
m_pControllerWindow->m_hrUploadResult = E_FAIL;
}
}
else
{
WIA_ERROR((TEXT("m_pControllerWindow->m_PublishWizardPages[i] was NULL")));
m_pControllerWindow->m_hrUploadResult = E_FAIL;
}
}
//
// If everything is OK up till now, we can transition to the first page of the publishing wizard
//
if (SUCCEEDED(m_pControllerWindow->m_hrUploadResult))
{
hNextPage = m_pControllerWindow->m_PublishWizardPages[0];
}
}
else
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("m_pControllerWindow->m_pPublishingWizard->AddPages failed")));
}
}
else
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("IUnknown_SetSite failed")));
}
}
else
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("m_pControllerWindow->QueryInterface( IID_IWizardSite ) failed")));
}
}
else
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("m_pPublishingWizard->Initialize failed")));
}
}
else
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("CoCreateInstance( CLSID_PublishingWizard failed")));
}
}
else
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("NetPublishingWizard::CreateDataObjectFromFileList failed")));
}
}
else
{
m_pControllerWindow->m_hrUploadResult = E_FAIL;
WIA_ERROR((TEXT("There were no files")));
}
//
// If an error occurred, alert the user and clean up
//
if (FAILED(m_pControllerWindow->m_hrUploadResult))
{
//
// Clean up
//
CleanupUploadWizard();
//
// Tell the user
//
MessageBox( m_hWnd, CSimpleString(IDS_UNABLE_TO_PUBLISH,g_hInstance), CSimpleString(IDS_ERROR_TITLE,g_hInstance), MB_ICONERROR );
}
}
//
// If we have a next page, navigate to it.
//
if (hNextPage)
{
PropSheet_SetCurSel( GetParent(m_hWnd), hNextPage, -1 );
return -1;
}
return 0;
}
LRESULT CCommonUploadQueryPage::OnWizBack( WPARAM, LPARAM )
{
PropSheet_SetCurSel( GetParent(m_hWnd), 0, m_pControllerWindow->m_nDestinationPageIndex );
return 0;
}
LRESULT CCommonUploadQueryPage::OnQueryInitialFocus( WPARAM, LPARAM )
{
LRESULT lResult = 0;
if (BST_CHECKED == SendDlgItemMessage( m_hWnd, IDC_TRANSFER_UPLOAD_TO_WEB, BM_GETCHECK, 0, 0 ))
{
lResult = reinterpret_cast<LRESULT>(GetDlgItem( m_hWnd, IDC_TRANSFER_UPLOAD_TO_WEB ));
}
else if (BST_CHECKED == SendDlgItemMessage( m_hWnd, IDC_TRANSFER_UPLOAD_TO_PRINT, BM_GETCHECK, 0, 0 ))
{
lResult = reinterpret_cast<LRESULT>(GetDlgItem( m_hWnd, IDC_TRANSFER_UPLOAD_TO_PRINT ));
}
else
{
lResult = reinterpret_cast<LRESULT>(GetDlgItem( m_hWnd, IDC_TRANSFER_UPLOAD_NO ));
}
return lResult;
}
LRESULT CCommonUploadQueryPage::OnEventNotification( WPARAM, LPARAM lParam )
{
WIA_PUSH_FUNCTION((TEXT("CCommonUploadQueryPage::OnEventNotification") ));
CGenericWiaEventHandler::CEventMessage *pEventMessage = reinterpret_cast<CGenericWiaEventHandler::CEventMessage *>(lParam);
if (pEventMessage)
{
if (pEventMessage->EventId() == WIA_EVENT_DEVICE_DISCONNECTED)
{
if (PropSheet_GetCurrentPageHwnd(GetParent(m_hWnd)) == m_hWnd)
{
//
// Disable "back"
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_NEXT );
}
}
//
// Don't delete the message, it is deleted in the controller window
//
}
return 0;
}
LRESULT CCommonUploadQueryPage::OnHyperlinkClick( WPARAM wParam, LPARAM lParam )
{
LRESULT lResult = FALSE;
NMLINK *pNmLink = reinterpret_cast<NMLINK*>(lParam);
if (pNmLink)
{
WIA_TRACE((TEXT("ID: %s"),pNmLink->item.szID));
switch (pNmLink->hdr.idFrom)
{
case IDC_TRANSFER_UPLOAD_HELP:
{
if (!lstrcmp(pNmLink->item.szID,STR_WORKING_WITH_PICTURES_HYPERLINK))
{
ShellExecute( m_hWnd, NULL, STR_HELP_DESTINATION, NULL, TEXT(""), SW_SHOWNORMAL );
}
}
}
}
return lResult;
}
LRESULT CCommonUploadQueryPage::OnCommand( WPARAM wParam, LPARAM lParam )
{
SC_BEGIN_COMMAND_HANDLERS()
{
}
SC_END_COMMAND_HANDLERS();
}
LRESULT CCommonUploadQueryPage::OnNotify( WPARAM wParam, LPARAM lParam )
{
SC_BEGIN_NOTIFY_MESSAGE_HANDLERS()
{
SC_HANDLE_NOTIFY_MESSAGE_CONTROL(NM_RETURN,IDC_TRANSFER_UPLOAD_HELP,OnHyperlinkClick);
SC_HANDLE_NOTIFY_MESSAGE_CONTROL(NM_CLICK,IDC_TRANSFER_UPLOAD_HELP,OnHyperlinkClick);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_WIZBACK,OnWizBack);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_WIZNEXT,OnWizNext);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_SETACTIVE,OnSetActive);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_QUERYINITIALFOCUS,OnQueryInitialFocus);
}
SC_END_NOTIFY_MESSAGE_HANDLERS();
}
INT_PTR CALLBACK CCommonUploadQueryPage::DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
SC_BEGIN_DIALOG_MESSAGE_HANDLERS(CCommonUploadQueryPage)
{
SC_HANDLE_DIALOG_MESSAGE( WM_INITDIALOG, OnInitDialog );
SC_HANDLE_DIALOG_MESSAGE( WM_COMMAND, OnCommand );
SC_HANDLE_DIALOG_MESSAGE( WM_NOTIFY, OnNotify );
}
SC_HANDLE_REGISTERED_DIALOG_MESSAGE( m_nWiaEventMessage, OnEventNotification );
SC_END_DIALOG_MESSAGE_HANDLERS();
}