diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-06 22:21:17 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-06 22:21:17 +0000 |
commit | 51e8d9357bb1738b462baa48da9f86e016f936ce (patch) | |
tree | 463241b65d5c3993992f62e313d49aebce220bfc /printing/printing_context_win.h | |
parent | c27a5ed3f25971f028dd1baedd73efb59497ceeb (diff) | |
download | chromium_src-51e8d9357bb1738b462baa48da9f86e016f936ce.zip chromium_src-51e8d9357bb1738b462baa48da9f86e016f936ce.tar.gz chromium_src-51e8d9357bb1738b462baa48da9f86e016f936ce.tar.bz2 |
Printing: Convert PrintingContext into an interface implemented by the separate
platforms.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/3610013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61714 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/printing_context_win.h')
-rw-r--r-- | printing/printing_context_win.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/printing/printing_context_win.h b/printing/printing_context_win.h new file mode 100644 index 0000000..90fc738 --- /dev/null +++ b/printing/printing_context_win.h @@ -0,0 +1,97 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef PRINTING_PRINTING_CONTEXT_WIN_H_ +#define PRINTING_PRINTING_CONTEXT_WIN_H_ + +#include <ocidl.h> +#include <commdlg.h> + +#include <string> + +#include "base/scoped_ptr.h" +#include "build/build_config.h" +#include "gfx/native_widget_types.h" +#include "printing/printing_context.h" + +namespace printing { + +class PrintingContextWin : public PrintingContext { + public: + PrintingContextWin(); + ~PrintingContextWin(); + + // PrintingContext implementation. + virtual void AskUserForSettings(gfx::NativeView parent_view, + int max_pages, + bool has_selection, + PrintSettingsCallback* callback); + virtual Result UseDefaultSettings(); + virtual Result InitWithSettings(const PrintSettings& settings); + virtual Result NewDocument(const string16& document_name); + virtual Result NewPage(); + virtual Result PageDone(); + virtual Result DocumentDone(); + virtual void Cancel(); + virtual void DismissDialog(); + virtual void ReleaseContext(); + virtual gfx::NativeDrawingContext context() const; + +#if defined(UNIT_TEST) + // Sets a fake PrintDlgEx function pointer in tests. + void SetPrintDialog(HRESULT (__stdcall *print_dialog_func)(LPPRINTDLGEX)) { + print_dialog_func_ = print_dialog_func; + } +#endif // defined(UNIT_TEST) + + // Allocates the HDC for a specific DEVMODE. + static bool AllocateContext(const std::wstring& printer_name, + const DEVMODE* dev_mode, + gfx::NativeDrawingContext* context); + + // Retrieves the content of a GetPrinter call. + static void GetPrinterHelper(HANDLE printer, int level, + scoped_array<uint8>* buffer); + + private: + // Class that manages the PrintDlgEx() callbacks. This is meant to be a + // temporary object used during the Print... dialog display. + class CallbackHandler; + + // Used in response to the user canceling the printing. + static BOOL CALLBACK AbortProc(HDC hdc, int nCode); + + // Reads the settings from the selected device context. Updates settings_ and + // its margins. + bool InitializeSettings(const DEVMODE& dev_mode, + const std::wstring& new_device_name, + const PRINTPAGERANGE* ranges, + int number_ranges, + bool selection_only); + + // Retrieves the printer's default low-level settings. On Windows, context_ is + // allocated with this call. + bool GetPrinterSettings(HANDLE printer, + const std::wstring& device_name); + + // Parses the result of a PRINTDLGEX result. + Result ParseDialogResultEx(const PRINTDLGEX& dialog_options); + Result ParseDialogResult(const PRINTDLG& dialog_options); + + // The selected printer context. + HDC context_; + + // The dialog box for the time it is shown. + volatile HWND dialog_box_; + + // Function pointer that defaults to PrintDlgEx. It can be changed using + // SetPrintDialog() in tests. + HRESULT (__stdcall *print_dialog_func_)(LPPRINTDLGEX); + + DISALLOW_COPY_AND_ASSIGN(PrintingContextWin); +}; + +} // namespace printing + +#endif // PRINTING_PRINTING_CONTEXT_WIN_H_ |