Add page setup dialog to ActiveX control & fix com exception in IOleCommandTargetImpl. b=225045 r=atemon@elansoftware.com sr=bzbarsky a=asa

git-svn-id: svn://10.0.0.236/trunk@154785 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
locka%iol.ie
2004-04-13 09:21:06 +00:00
parent c1ef641ecd
commit dad38613e7
5 changed files with 699 additions and 68 deletions

View File

@@ -238,8 +238,7 @@ public:
{
pCI->pfnCommandProc(pT, pCI->pCmdGUID, pCI->nCmdID, nCmdexecopt, pvaIn, pvaOut);
}
else if (pCI->nWindowsCmdID != 0 &&
!(nCmdexecopt & OLECMDEXECOPT_SHOWHELP))
else if (pCI->nWindowsCmdID != 0 && nCmdexecopt != OLECMDEXECOPT_SHOWHELP)
{
HWND hwndTarget = pT->GetCommandTargetWindow();
if (hwndTarget)

View File

@@ -51,6 +51,7 @@
#include "MozillaBrowser.h"
#include "IEHtmlDocument.h"
#include "PropertyDlg.h"
#include "PageSetupDlg.h"
#include "PromptService.h"
#include "HelperAppDlg.h"
#include "WindowCreator.h"
@@ -564,9 +565,19 @@ HRESULT CMozillaBrowser::OnDraw(ATL_DRAWINFO& di)
LRESULT CMozillaBrowser::OnPageSetup(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
NG_TRACE_METHOD(CMozillaBrowser::OnPageSetup);
MessageBox(_T("No page setup yet!"), _T("Control Message"), MB_OK);
// TODO show the page setup dialog
nsCOMPtr<nsIWebBrowserPrint> print(do_GetInterface(mWebBrowser));
nsCOMPtr<nsIPrintSettings> printSettings;
if(!print ||
NS_FAILED(print->GetGlobalPrintSettings(getter_AddRefs(printSettings))))
{
return 0;
}
// show the page setup dialog
CPageSetupDlg dlg(printSettings);
dlg.DoModal();
return 0;
}

View File

@@ -1,4 +1,4 @@
//Microsoft Developer Studio generated resource script.
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
@@ -27,18 +27,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
3 TEXTINCLUDE
BEGIN
"1 TYPELIB ""MozillaControl.tlb""\r\n"
"\0"
@@ -47,7 +47,6 @@ END
#endif // APSTUDIO_INVOKED
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
@@ -70,21 +69,16 @@ BEGIN
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "\0"
VALUE "FileDescription", "Mozilla ActiveX control and plugin module\0"
VALUE "FileExtents", "*|*|*.axs\0"
VALUE "FileOpenName", "ActiveX (*.*)|ActiveX (*.*)|ActiveScript(*.axs)\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "MOZCTL\0"
VALUE "LegalCopyright", "Copyright 1999\0"
VALUE "LegalTrademarks", "\0"
VALUE "MIMEType", "application/x-oleobject|application/oleobject|text/x-activescript\0"
VALUE "OriginalFilename", "MOZCTL.DLL\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "Mozilla ActiveX control and plugin support\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
VALUE "SpecialBuild", "\0"
VALUE "FileDescription", "Mozilla ActiveX control and plugin module"
VALUE "FileExtents", "*|*|*.axs"
VALUE "FileOpenName", "ActiveX (*.*)|ActiveX (*.*)|ActiveScript(*.axs)"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "MOZCTL"
VALUE "LegalCopyright", "Copyright 1999"
VALUE "MIMEType", "application/x-oleobject|application/oleobject|text/x-activescript"
VALUE "OriginalFilename", "MOZCTL.DLL"
VALUE "ProductName", "Mozilla ActiveX control and plugin support"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
@@ -93,15 +87,13 @@ BEGIN
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// REGISTRY
//
IDR_MOZILLABROWSER REGISTRY DISCARDABLE "MozillaBrowser.rgs"
IDR_MOZILLABROWSER REGISTRY "MozillaBrowser.rgs"
/////////////////////////////////////////////////////////////////////////////
//
@@ -110,14 +102,14 @@ IDR_MOZILLABROWSER REGISTRY DISCARDABLE "MozillaBrowser.rgs"
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_MOZILLABROWSER ICON DISCARDABLE "MozillaBrowser.ico"
IDI_MOZILLABROWSER ICON "MozillaBrowser.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_POPUP_DOCUMENT MENU DISCARDABLE
IDR_POPUP_DOCUMENT MENU
BEGIN
POPUP "Page Popup"
BEGIN
@@ -137,7 +129,7 @@ BEGIN
END
END
IDR_POPUP_LINK MENU DISCARDABLE
IDR_POPUP_LINK MENU
BEGIN
POPUP "Link Popup"
BEGIN
@@ -150,7 +142,7 @@ BEGIN
END
END
IDR_POPUP_TEXT MENU DISCARDABLE
IDR_POPUP_TEXT MENU
BEGIN
POPUP "Selection Popup"
BEGIN
@@ -162,7 +154,7 @@ BEGIN
END
END
IDR_POPUP_IMAGE MENU DISCARDABLE
IDR_POPUP_IMAGE MENU
BEGIN
POPUP "Image Popup"
BEGIN
@@ -180,8 +172,9 @@ END
// Dialog
//
IDD_PROMPT DIALOG DISCARDABLE 0, 0, 263, 113
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
IDD_PROMPT DIALOG 0, 0, 263, 113
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Enter Value"
FONT 8, "MS Sans Serif"
BEGIN
@@ -195,8 +188,9 @@ BEGIN
ICON IDI_MOZILLABROWSER,IDC_QUESTION,7,7,20,20
END
IDD_PROMPTUSERPASS DIALOG DISCARDABLE 0, 0, 263, 135
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
IDD_PROMPTUSERPASS DIALOG 0, 0, 263, 135
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Authentication Required"
FONT 8, "MS Sans Serif"
BEGIN
@@ -212,8 +206,9 @@ BEGIN
ICON IDI_MOZILLABROWSER,IDC_QUESTION,7,7,20,20
END
IDD_CONFIRMEX DIALOG DISCARDABLE 0, 0, 263, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
IDD_CONFIRMEX DIALOG 0, 0, 263, 95
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Confirmation"
FONT 8, "MS Sans Serif"
BEGIN
@@ -226,6 +221,65 @@ BEGIN
WS_TABSTOP,7,52,249,19
END
IDD_PPAGE_LINK DIALOG 0, 0, 185, 170
STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Address: (URL)",IDC_STATIC,0,68,27,20
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,32,185,1
LTEXT "type",IDC_TYPE,35,53,149,8
LTEXT "Type:",IDC_STATIC,0,38,19,8
LTEXT "protocol",IDC_PROTOCOL,35,38,149,8
EDITTEXT IDC_ADDRESS,35,68,149,61,ES_MULTILINE | ES_AUTOVSCROLL |
ES_READONLY
ICON IDI_MOZILLABROWSER,IDC_STATIC,5,6,20,20
END
IDD_PAGESETUP DIALOGEX 0, 0, 276, 221
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Page Setup"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,167,200,50,14
PUSHBUTTON "Cancel",IDCANCEL,219,200,50,14
CONTROL "",IDC_TAB,"SysTabControl32",TCS_TOOLTIPS,7,7,262,191
CONTROL "",IDC_PAGE_MARKER,"Static",SS_BLACKFRAME | NOT
WS_VISIBLE,10,23,255,170
END
IDD_PPAGE_MARGINS DIALOGEX 0, 0, 255, 170
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Margins (in millimeters)",IDC_STATIC,0,0,255,104
GROUPBOX "Headers && Footers",IDC_STATIC,0,105,255,59
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,101,30,51,51
RTEXT "Top:",IDC_STATIC,84,16,16,8
EDITTEXT IDC_MARGIN_TOP,107,13,40,14,ES_AUTOHSCROLL
LTEXT "Left:",IDC_STATIC,56,36,16,8
EDITTEXT IDC_MARGIN_LEFT,56,48,40,14,ES_AUTOHSCROLL
EDITTEXT IDC_MARGIN_BOTTOM,107,84,40,14,ES_AUTOHSCROLL
RTEXT "Bottom:",IDC_STATIC,74,87,26,8
LTEXT "Right:",IDC_STATIC,157,36,20,8
EDITTEXT IDC_MARGIN_RIGHT,157,48,40,14,ES_AUTOHSCROLL
COMBOBOX IDC_HDR_LEFT,26,117,61,126,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX IDC_HDR_MIDDLE,96,117,61,155,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_HDR_RIGHT,164,117,61,157,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_FTR_LEFT,26,144,61,99,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX IDC_FTR_MIDDLE,96,144,61,104,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_FTR_RIGHT,164,144,61,138,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Left:",IDC_STATIC,48,133,16,8
LTEXT "Center:",IDC_STATIC,113,133,26,8
LTEXT "Right:",IDC_STATIC,184,133,20,8
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -233,7 +287,7 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
GUIDELINES DESIGNINFO
BEGIN
IDD_PROMPT, DIALOG
BEGIN
@@ -258,6 +312,14 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 88
END
IDD_PAGESETUP, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 269
TOPMARGIN, 7
BOTTOMMARGIN, 214
END
END
#endif // APSTUDIO_INVOKED
@@ -267,19 +329,21 @@ END
// String Table
//
STRINGTABLE DISCARDABLE
STRINGTABLE
BEGIN
IDS_PROJNAME "MozillaControl"
IDS_HEADERFOOTER_OPTIONS
"-- Blank --|Title|URL|Date/Time|Page #|Page # of #||Custom..."
END
STRINGTABLE DISCARDABLE
STRINGTABLE
BEGIN
IDS_LOCATEMOZILLA "The browser control does not know where Mozilla is installed and may not function correctly.\nDo you want to locate Mozilla now?"
IDS_LOCATEMOZILLATITLE "Cannot locate Mozilla bin directory"
IDS_CANNOTCREATEPREFS "The Mozilla control cannot create a critical component. This prevents the control from functioning correctly. Possible reasons for the problem are:\n\n1. The PATH environment variable does not point to the Mozilla bin directory.\n2. The registry key HKEY_LOCAL_MACHINE\\Software\\Mozilla\\BinDirectoryPath registry key has not been set or is incorrect\n3. The file component.reg has not been generated or is empty.\n\nPlease refer to http://www.iol.ie/~locka/mozilla/mozilla.htm for guidance on how to resolve these problems."
END
STRINGTABLE DISCARDABLE
STRINGTABLE
BEGIN
IDS_CONFIRMEX_OK "OK"
IDS_CONFIRMEX_CANCEL "Cancel"
@@ -308,8 +372,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
// Dialog
//
IDD_PROPERTIES DIALOG DISCARDABLE 0, 0, 199, 204
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
IDD_PROPERTIES DIALOG 0, 0, 199, 204
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Properties"
FONT 8, "MS Sans Serif"
BEGIN
@@ -319,20 +383,6 @@ BEGIN
WS_VISIBLE,7,7,185,170
END
IDD_PPAGE_LINK DIALOG DISCARDABLE 0, 0, 185, 170
STYLE WS_CHILD | WS_VISIBLE
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Address: (URL)",IDC_STATIC,0,68,27,20
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,32,185,1
LTEXT "type",IDC_TYPE,35,53,149,8
LTEXT "Type:",IDC_STATIC,0,38,19,8
LTEXT "protocol",IDC_PROTOCOL,35,38,149,8
EDITTEXT IDC_ADDRESS,35,68,149,61,ES_MULTILINE | ES_AUTOVSCROLL |
ES_READONLY
ICON IDI_MOZILLABROWSER,IDC_STATIC,5,6,20,20
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -340,7 +390,7 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
GUIDELINES DESIGNINFO
BEGIN
IDD_PROPERTIES, DIALOG
BEGIN
@@ -370,8 +420,9 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_EIRE
// Dialog
//
IDD_HELPERAPP DIALOG DISCARDABLE 0, 0, 285, 161
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
IDD_HELPERAPP DIALOG 0, 0, 285, 161
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "Downloading"
FONT 8, "MS Sans Serif"
BEGIN
@@ -397,9 +448,9 @@ BEGIN
ES_READONLY
END
IDD_PROGRESS DIALOG DISCARDABLE 0, 0, 244, 102
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
IDD_PROGRESS DIALOG 0, 0, 244, 102
STYLE DS_SETFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
@@ -414,6 +465,42 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,96,81,50,14
END
IDD_PPAGE_FORMAT DIALOGEX 0, 0, 255, 170
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Format",IDC_STATIC,0,0,255,91
GROUPBOX "Options",IDC_STATIC,0,95,255,35
CONTROL "Print Background (colors && images)",
IDC_PRINTBACKGROUND,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,109,127,10
LTEXT "Orientation:",IDC_STATIC,7,13,40,8
CONTROL "Portrait",IDC_PORTRAIT,"Button",BS_AUTORADIOBUTTON,91,
13,40,10
CONTROL "Landscape",IDC_LANDSCAPE,"Button",BS_AUTORADIOBUTTON,91,
30,50,10
LTEXT "Scale:",IDC_STATIC,7,67,20,8
EDITTEXT IDC_SCALE,37,64,30,14,ES_AUTOHSCROLL
LTEXT "%",IDC_STATIC,73,67,8,8
CONTROL "Shrink to fit page width",IDC_SHRINKTOFIT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,87,67,90,10
END
IDD_CUSTOM_FIELD DIALOGEX 0, 0, 262, 96
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Custom Value"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Value:",IDC_STATIC,7,37,21,8
EDITTEXT IDC_VALUE,7,48,248,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,151,75,50,14
PUSHBUTTON "Cancel",IDCANCEL,205,75,50,14
LTEXT "Type the value you wish to show in the page.",
IDC_MESSAGE,35,7,220,35
ICON IDI_MOZILLABROWSER,IDC_QUESTION,7,7,21,20
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -421,7 +508,7 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
GUIDELINES DESIGNINFO
BEGIN
IDD_HELPERAPP, DIALOG
BEGIN
@@ -438,6 +525,14 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 95
END
IDD_CUSTOM_FIELD, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 255
TOPMARGIN, 7
BOTTOMMARGIN, 89
END
END
#endif // APSTUDIO_INVOKED

View File

@@ -0,0 +1,504 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Adam Lock <adamlock@eircom.net>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef PAGESETUPDLG_H
#define PAGESETUPDLG_H
#include "resource.h"
#include "nsIPrintSettings.h"
/* VC98 doesn't define _tstof() */
#if defined(_MSC_VER) && _MSC_VER < 1300
#ifndef UNICODE
#define _tstof atof
#else
inline double _wtof(const wchar_t *string)
{
USES_CONVERSION;
return atof(W2CA(string));
}
#define _tstof _wtof
#endif
#endif
class CCustomFieldDlg : public CDialogImpl<CCustomFieldDlg>
{
public:
enum { IDD = IDD_CUSTOM_FIELD };
BEGIN_MSG_MAP(CCustomFieldDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
END_MSG_MAP()
nsString m_field;
CCustomFieldDlg(const nsAString &str) :
m_field(str)
{
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
USES_CONVERSION;
SetDlgItemText(IDC_VALUE, W2CT(m_field.get()));
return 0;
}
LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
TCHAR szBuf[128];
GetDlgItemText(IDC_VALUE, szBuf, sizeof(szBuf) / sizeof(szBuf[0]));
USES_CONVERSION;
m_field = T2CW(szBuf);
EndDialog(IDOK);
return 0;
}
LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
EndDialog(IDCANCEL);
return 0;
}
};
class CPageSetupFormatDlg : public CDialogImpl<CPageSetupFormatDlg>
{
public:
enum { IDD = IDD_PPAGE_FORMAT };
BEGIN_MSG_MAP(CPageSetupFormatDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDC_SHRINKTOFIT, OnClickShrinkToFit)
END_MSG_MAP()
CPageSetupFormatDlg()
{
}
void Init(nsIPrintSettings *aPrintSettings)
{
// Set landscape / portrait mode
PRInt32 orientation = nsIPrintSettings::kPortraitOrientation;
aPrintSettings->GetOrientation(&orientation);
SendDlgItemMessage(
(orientation == nsIPrintSettings::kPortraitOrientation)
? IDC_PORTRAIT : IDC_LANDSCAPE,
BM_SETCHECK,
BST_CHECKED, 0);
// Set scaling
TCHAR szBuf[10];
double scaling = 1.0;
aPrintSettings->GetScaling(&scaling);
_stprintf(szBuf, _T("%.1f"), scaling * 100.0);
SetDlgItemText(IDC_SCALE, szBuf);
// Set shrink to fit (& disable scale field)
PRBool shrinkToFit = PR_FALSE;
aPrintSettings->GetShrinkToFit(&shrinkToFit);
CheckDlgButton(IDC_SHRINKTOFIT, shrinkToFit ? BST_CHECKED : BST_UNCHECKED);
::EnableWindow(GetDlgItem(IDC_SCALE), shrinkToFit ? FALSE : TRUE);
// Print background - we use PrintBGColors to control both images & colours
PRBool printBGColors = PR_TRUE;
aPrintSettings->GetPrintBGColors(&printBGColors);
CheckDlgButton(IDC_PRINTBACKGROUND, printBGColors ? BST_CHECKED : BST_UNCHECKED);
}
void Apply(nsIPrintSettings *aPrintSettings)
{
// Background options are tied to a single checkbox
PRBool boolVal =
(SendDlgItemMessage(IDC_PRINTBACKGROUND, BM_GETCHECK) == BST_CHECKED) ?
PR_TRUE : PR_FALSE;
aPrintSettings->SetPrintBGColors(boolVal);
aPrintSettings->SetPrintBGImages(boolVal);
// Print scale
TCHAR szBuf[128];
GetDlgItemText(IDC_SCALE, szBuf, sizeof(szBuf) / sizeof(szBuf[0]));
double scale = _tstof(szBuf) / 100.0;
aPrintSettings->SetScaling(scale);
// Shrink to fit
PRBool shrinkToFit =
(IsDlgButtonChecked(IDC_SHRINKTOFIT) == BST_CHECKED) ? PR_TRUE : PR_FALSE;
aPrintSettings->SetShrinkToFit(shrinkToFit);
// Landscape or portrait
PRInt32 orientation = nsIPrintSettings::kLandscapeOrientation;
if (SendDlgItemMessage(IDC_PORTRAIT, BM_GETCHECK) == BST_CHECKED)
{
orientation = nsIPrintSettings::kPortraitOrientation;
}
aPrintSettings->SetOrientation(orientation);
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
LRESULT OnClickShrinkToFit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
BOOL bEnableScale = TRUE;
if (IsDlgButtonChecked(IDC_SHRINKTOFIT) == BST_CHECKED)
bEnableScale = FALSE;
::EnableWindow(GetDlgItem(IDC_SCALE), bEnableScale);
return 0;
}
};
class CPageSetupMarginsDlg : public CDialogImpl<CPageSetupMarginsDlg>
{
public:
nsString mHdrLeft;
nsString mHdrCenter;
nsString mHdrRight;
nsString mFtrLeft;
nsString mFtrCenter;
nsString mFtrRight;
enum { IDD = IDD_PPAGE_MARGINS };
BEGIN_MSG_MAP(CPageSetupMarginsDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_RANGE_HANDLER(IDC_HDR_LEFT, IDC_FTR_RIGHT, OnHeaderFooterChange)
END_MSG_MAP()
CPageSetupMarginsDlg()
{
}
const wchar_t * const * GetHeaderFooterValues(size_t &aNumValues) const
{
static const wchar_t *szValues[] = {
L"",
L"&T",
L"&U",
L"&D",
L"&P",
L"&PT"
};
aNumValues = sizeof(szValues) / sizeof(szValues[0]);
return szValues;
}
const TCHAR * const * GetHeaderFooterOptions(size_t &aNumOptions) const
{
static const TCHAR *szOptions[] =
{
_T("-- Blank --"),
_T("Title"),
_T("URL"),
_T("Date/Time"),
_T("Page #"),
_T("Page # of #"),
_T("Custom...")
};
aNumOptions = sizeof(szOptions) / sizeof(szOptions[0]);
return szOptions;
}
void Init(nsIPrintSettings *aPrintSettings)
{
double top = 0.0;
double left = 0.0;
double right = 0.0;
double bottom = 0.0;
aPrintSettings->GetMarginTop(&top);
aPrintSettings->GetMarginLeft(&left);
aPrintSettings->GetMarginRight(&right);
aPrintSettings->GetMarginBottom(&bottom);
// Get the margins
TCHAR szBuf[16];
_stprintf(szBuf, _T("%5.2f"), top);
SetDlgItemText(IDC_MARGIN_TOP, szBuf);
_stprintf(szBuf, _T("%5.2f"), left);
SetDlgItemText(IDC_MARGIN_LEFT, szBuf);
_stprintf(szBuf, _T("%5.2f"), right);
SetDlgItemText(IDC_MARGIN_RIGHT, szBuf);
_stprintf(szBuf, _T("%5.2f"), bottom);
SetDlgItemText(IDC_MARGIN_BOTTOM, szBuf);
// Get the header & footer settings
PRUnichar* uStr = nsnull;
aPrintSettings->GetHeaderStrLeft(&uStr);
mHdrLeft = uStr;
SetComboIndex(IDC_HDR_LEFT, uStr);
if (uStr != nsnull) nsMemory::Free(uStr);
aPrintSettings->GetHeaderStrCenter(&uStr);
mHdrCenter = uStr;
SetComboIndex(IDC_HDR_MIDDLE, uStr);
if (uStr != nsnull) nsMemory::Free(uStr);
aPrintSettings->GetHeaderStrRight(&uStr);
mHdrRight = uStr;
SetComboIndex(IDC_HDR_RIGHT, uStr);
if (uStr != nsnull) nsMemory::Free(uStr);
aPrintSettings->GetFooterStrLeft(&uStr);
mFtrLeft = uStr;
SetComboIndex(IDC_FTR_LEFT, uStr);
if (uStr != nsnull) nsMemory::Free(uStr);
aPrintSettings->GetFooterStrCenter(&uStr);
mFtrCenter = uStr;
SetComboIndex(IDC_FTR_MIDDLE, uStr);
if (uStr != nsnull) nsMemory::Free(uStr);
aPrintSettings->GetFooterStrRight(&uStr);
mFtrRight = uStr;
SetComboIndex(IDC_FTR_RIGHT, uStr);
if (uStr != nsnull) nsMemory::Free(uStr);
}
void SetComboIndex(int aID, const wchar_t *szValue)
{
size_t nValues;
const wchar_t * const * szValues = GetHeaderFooterValues(nValues);
int nCurSel = 0;
if (szValue[0] != L'\0')
{
while (nCurSel < nValues)
{
if (wcscmp(szValue, szValues[nCurSel]) == 0)
{
break;
}
++nCurSel;
}
// nCurSel might contain nValues but that just means the
// Custom... field gets selected.
}
SendDlgItemMessage(aID, CB_SETCURSEL, nCurSel);
}
void Apply(nsIPrintSettings *aPrintSettings)
{
TCHAR szBuf[128];
const size_t kBufSize = sizeof(szBuf) / sizeof(szBuf[0]);
GetDlgItemText(IDC_MARGIN_TOP, szBuf, kBufSize);
aPrintSettings->SetMarginTop(_tstof(szBuf));
GetDlgItemText(IDC_MARGIN_LEFT, szBuf, kBufSize);
aPrintSettings->SetMarginLeft(_tstof(szBuf));
GetDlgItemText(IDC_MARGIN_BOTTOM, szBuf, kBufSize);
aPrintSettings->SetMarginBottom(_tstof(szBuf));
GetDlgItemText(IDC_MARGIN_RIGHT, szBuf, kBufSize);
aPrintSettings->SetMarginRight(_tstof(szBuf));
aPrintSettings->SetHeaderStrLeft(mHdrLeft.get());
aPrintSettings->SetHeaderStrCenter(mHdrCenter.get());
aPrintSettings->SetHeaderStrRight(mHdrRight.get());
aPrintSettings->SetFooterStrLeft(mFtrLeft.get());
aPrintSettings->SetFooterStrCenter(mFtrCenter.get());
aPrintSettings->SetFooterStrRight(mFtrRight.get());
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
size_t nOptions;
const TCHAR * const *szOptions = GetHeaderFooterOptions(nOptions);
// Fill out the drop down choices
for (size_t i = 0; i < nOptions; ++i)
{
const TCHAR *szOption = szOptions[i];
SendDlgItemMessage(IDC_HDR_LEFT, CB_ADDSTRING, 0, LPARAM(szOption));
SendDlgItemMessage(IDC_HDR_MIDDLE, CB_ADDSTRING, 0, LPARAM(szOption));
SendDlgItemMessage(IDC_HDR_RIGHT, CB_ADDSTRING, 0, LPARAM(szOption));
SendDlgItemMessage(IDC_FTR_LEFT, CB_ADDSTRING, 0, LPARAM(szOption));
SendDlgItemMessage(IDC_FTR_MIDDLE, CB_ADDSTRING, 0, LPARAM(szOption));
SendDlgItemMessage(IDC_FTR_RIGHT, CB_ADDSTRING, 0, LPARAM(szOption));
}
return 0;
}
LRESULT OnHeaderFooterChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
if (wNotifyCode != CBN_SELCHANGE)
{
bHandled = FALSE;
return 0;
}
// One of the header / footer combos has changed, so set the string
// to the updated value.
nsString *pStr = nsnull;
switch (wID)
{
case IDC_HDR_LEFT: pStr = &mHdrLeft; break;
case IDC_HDR_MIDDLE: pStr = &mHdrCenter; break;
case IDC_HDR_RIGHT: pStr = &mHdrRight; break;
case IDC_FTR_LEFT: pStr = &mFtrLeft; break;
case IDC_FTR_MIDDLE: pStr = &mFtrCenter; break;
case IDC_FTR_RIGHT: pStr = &mFtrRight; break;
}
if (!pStr)
{
return 0;
}
size_t nValues;
const wchar_t * const * szValues = GetHeaderFooterValues(nValues);
int nCurSel = SendDlgItemMessage(wID, CB_GETCURSEL);
if (nCurSel == nValues) // Custom...
{
CCustomFieldDlg dlg(*pStr);
if (dlg.DoModal() == IDOK)
{
*pStr = dlg.m_field;
}
// Update combo in case their custom value is not custom at all
// For example, if someone opens the custom dlg and types "&P"
// (i.e. "Page #"), we should select that since it is already a
// choice in the combo.
SetComboIndex(wID, pStr->get());
}
else
{
*pStr = szValues[nCurSel];
}
return 0;
}
};
class CPageSetupDlg : public CDialogImpl<CPageSetupDlg>
{
public:
enum { IDD = IDD_PAGESETUP };
CPPageDlg *mPPage;
BEGIN_MSG_MAP(CPageSetupDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
NOTIFY_HANDLER(IDC_TAB, TCN_SELCHANGE, OnTabSelChange)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
END_MSG_MAP()
nsCOMPtr<nsIPrintSettings> mPrintSettings;
CPageSetupFormatDlg mFormatDlg;
CPageSetupMarginsDlg mMarginsDlg;
CPageSetupDlg(nsIPrintSettings *aPrintSettings) :
mPrintSettings(aPrintSettings)
{
}
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// The marker tells us where to stick the pages
RECT rcMarker;
::GetWindowRect(GetDlgItem(IDC_PAGE_MARKER), &rcMarker);
ScreenToClient(&rcMarker);
// Create the two pages, the first is shown, the second is not
mFormatDlg.Create(m_hWnd);
mFormatDlg.Init(mPrintSettings);
mFormatDlg.SetWindowPos(HWND_TOP, &rcMarker, SWP_SHOWWINDOW);
mMarginsDlg.Create(m_hWnd);
mMarginsDlg.Init(mPrintSettings);
mMarginsDlg.SetWindowPos(HWND_TOP, &rcMarker, SWP_HIDEWINDOW);
// Get the tab control
HWND hwndTab = GetDlgItem(IDC_TAB);
TCITEM tcItem;
memset(&tcItem, 0, sizeof(tcItem));
tcItem.mask = TCIF_TEXT;
tcItem.pszText = _T("Format && Options");
TabCtrl_InsertItem(hwndTab, 0, &tcItem);
tcItem.pszText = _T("Margins && Header / Footer");
TabCtrl_InsertItem(hwndTab, 1, &tcItem);
TabCtrl_SetCurSel(hwndTab, 0);
return 0;
}
LRESULT OnTabSelChange(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
HWND hwndTab = GetDlgItem(IDC_TAB);
if (TabCtrl_GetCurSel(hwndTab) == 0)
{
mFormatDlg.SetWindowPos(HWND_TOP, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
mMarginsDlg.ShowWindow(SW_HIDE);
}
else
{
mMarginsDlg.SetWindowPos(HWND_TOP, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
mFormatDlg.ShowWindow(SW_HIDE);
}
return 0;
}
LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
mFormatDlg.Apply(mPrintSettings);
mMarginsDlg.Apply(mPrintSettings);
EndDialog(IDOK);
return 0;
}
LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
EndDialog(IDCANCEL);
return 0;
}
};
#endif

View File

@@ -1,9 +1,10 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Microsoft Visual C++ generated include file.
// Used by MozillaControl.rc
//
#define IDS_PROJNAME 100
#define IDR_MOZILLABROWSER 101
#define IDS_HEADERFOOTER_OPTIONS 101
#define IDI_MOZILLABROWSER 201
#define IDC_CHECKMSG 201
#define IDR_POPUP_PAGE 202
@@ -30,7 +31,11 @@
#define IDC_VALUE 213
#define IDD_PROGRESS 213
#define IDC_USERNAME 214
#define IDD_PAGESETUP 214
#define IDC_PASSWORD 215
#define IDD_PPAGE_FORMAT 215
#define IDD_PPAGE_MARGINS 216
#define IDD_CUSTOM_FIELD 217
#define IDC_CHOOSE 218
#define IDC_URL 222
#define IDC_CONTENTTYPE 223
@@ -38,6 +43,23 @@
#define IDC_SOURCE 225
#define IDC_DESTINATION 226
#define IDC_PROGRESS 227
#define IDC_TAB 229
#define IDC_PAGE_MARKER 230
#define IDC_PRINTBACKGROUND 231
#define IDC_PORTRAIT 232
#define IDC_LANDSCAPE 233
#define IDC_SCALE 234
#define IDC_SHRINKTOFIT 235
#define IDC_MARGIN_TOP 236
#define IDC_MARGIN_LEFT 237
#define IDC_MARGIN_BOTTOM 238
#define IDC_MARGIN_RIGHT 239
#define IDC_HDR_LEFT 240
#define IDC_HDR_MIDDLE 241
#define IDC_HDR_RIGHT 242
#define IDC_FTR_LEFT 243
#define IDC_FTR_MIDDLE 244
#define IDC_FTR_RIGHT 245
#define IDC_OPENWITHAPP 300
#define IDC_SAVETOFILE 301
#define IDS_LOCATEMOZILLA 1000
@@ -89,9 +111,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 214
#define _APS_NEXT_RESOURCE_VALUE 218
#define _APS_NEXT_COMMAND_VALUE 32792
#define _APS_NEXT_CONTROL_VALUE 228
#define _APS_NEXT_CONTROL_VALUE 246
#define _APS_NEXT_SYMED_VALUE 102
#endif
#endif