From dad38613e753b09f6565e3dc7e08beab6b7b4ae1 Mon Sep 17 00:00:00 2001 From: "locka%iol.ie" Date: Tue, 13 Apr 2004 09:21:06 +0000 Subject: [PATCH] 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 --- .../src/common/IOleCommandTargetImpl.h | 3 +- .../activex/src/control/MozillaBrowser.cpp | 15 +- .../activex/src/control/MozillaControl.rc | 217 +++++--- .../activex/src/control/PageSetupDlg.h | 504 ++++++++++++++++++ .../browser/activex/src/control/resource.h | 28 +- 5 files changed, 699 insertions(+), 68 deletions(-) create mode 100644 mozilla/embedding/browser/activex/src/control/PageSetupDlg.h diff --git a/mozilla/embedding/browser/activex/src/common/IOleCommandTargetImpl.h b/mozilla/embedding/browser/activex/src/common/IOleCommandTargetImpl.h index 524e708f997..4e32ff124b5 100644 --- a/mozilla/embedding/browser/activex/src/common/IOleCommandTargetImpl.h +++ b/mozilla/embedding/browser/activex/src/common/IOleCommandTargetImpl.h @@ -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) diff --git a/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp b/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp index fd3f348cd22..65271685d9f 100644 --- a/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp +++ b/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp @@ -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 print(do_GetInterface(mWebBrowser)); + nsCOMPtr printSettings; + if(!print || + NS_FAILED(print->GetGlobalPrintSettings(getter_AddRefs(printSettings)))) + { + return 0; + } + + // show the page setup dialog + CPageSetupDlg dlg(printSettings); + dlg.DoModal(); return 0; } diff --git a/mozilla/embedding/browser/activex/src/control/MozillaControl.rc b/mozilla/embedding/browser/activex/src/control/MozillaControl.rc index ee6f29b6fa6..47bcdab2fd9 100644 --- a/mozilla/embedding/browser/activex/src/control/MozillaControl.rc +++ b/mozilla/embedding/browser/activex/src/control/MozillaControl.rc @@ -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 diff --git a/mozilla/embedding/browser/activex/src/control/PageSetupDlg.h b/mozilla/embedding/browser/activex/src/control/PageSetupDlg.h new file mode 100644 index 00000000000..54c08011056 --- /dev/null +++ b/mozilla/embedding/browser/activex/src/control/PageSetupDlg.h @@ -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 + * + * 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 +{ +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 +{ +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 +{ +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 +{ +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 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 diff --git a/mozilla/embedding/browser/activex/src/control/resource.h b/mozilla/embedding/browser/activex/src/control/resource.h index 667460adc6c..4340c46dee5 100644 --- a/mozilla/embedding/browser/activex/src/control/resource.h +++ b/mozilla/embedding/browser/activex/src/control/resource.h @@ -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