1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef PRINTING_PRINTING_CONTEXT_H_ 6#define PRINTING_PRINTING_CONTEXT_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/callback.h" 12#include "base/strings/string16.h" 13#include "printing/print_settings.h" 14#include "ui/gfx/native_widget_types.h" 15 16namespace base { 17class DictionaryValue; 18} 19 20namespace printing { 21 22// An abstraction of a printer context, implemented by objects that describe the 23// user selected printing context. This includes the OS-dependent UI to ask the 24// user about the print settings. Concrete implementations directly talk to the 25// printer and manage the document and page breaks. 26class PRINTING_EXPORT PrintingContext { 27 public: 28 // Tri-state result for user behavior-dependent functions. 29 enum Result { 30 OK, 31 CANCEL, 32 FAILED, 33 }; 34 35 virtual ~PrintingContext(); 36 37 // Callback of AskUserForSettings, used to notify the PrintJobWorker when 38 // print settings are available. 39 typedef base::Callback<void(Result)> PrintSettingsCallback; 40 41 // Asks the user what printer and format should be used to print. Updates the 42 // context with the select device settings. The result of the call is returned 43 // in the callback. This is necessary for Linux, which only has an 44 // asynchronous printing API. 45 virtual void AskUserForSettings(gfx::NativeView parent_view, 46 int max_pages, 47 bool has_selection, 48 const PrintSettingsCallback& callback) = 0; 49 50 // Selects the user's default printer and format. Updates the context with the 51 // default device settings. 52 virtual Result UseDefaultSettings() = 0; 53 54 // Updates printer related settings. |job_settings| contains all print job 55 // settings information. |ranges| has the new page range settings. 56 virtual Result UpdatePrinterSettings( 57 const base::DictionaryValue& job_settings, 58 const PageRanges& ranges) = 0; 59 60 // Updates Print Settings. |job_settings| contains all print job 61 // settings information. |ranges| has the new page range settings. 62 Result UpdatePrintSettings(const base::DictionaryValue& job_settings, 63 const PageRanges& ranges); 64 65 // Initializes with predefined settings. 66 virtual Result InitWithSettings(const PrintSettings& settings) = 0; 67 68 // Does platform specific setup of the printer before the printing. Signal the 69 // printer that a document is about to be spooled. 70 // Warning: This function enters a message loop. That may cause side effects 71 // like IPC message processing! Some printers have side-effects on this call 72 // like virtual printers that ask the user for the path of the saved document; 73 // for example a PDF printer. 74 virtual Result NewDocument(const string16& document_name) = 0; 75 76 // Starts a new page. 77 virtual Result NewPage() = 0; 78 79 // Closes the printed page. 80 virtual Result PageDone() = 0; 81 82 // Closes the printing job. After this call the object is ready to start a new 83 // document. 84 virtual Result DocumentDone() = 0; 85 86 // Cancels printing. Can be used in a multi-threaded context. Takes effect 87 // immediately. 88 virtual void Cancel() = 0; 89 90 // Releases the native printing context. 91 virtual void ReleaseContext() = 0; 92 93 // Returns the native context used to print. 94 virtual gfx::NativeDrawingContext context() const = 0; 95 96 // Creates an instance of this object. Implementers of this interface should 97 // implement this method to create an object of their implementation. The 98 // caller owns the returned object. 99 static PrintingContext* Create(const std::string& app_locale); 100 101 void set_margin_type(MarginType type); 102 103 const PrintSettings& settings() const { 104 return settings_; 105 } 106 107 protected: 108 explicit PrintingContext(const std::string& app_locale); 109 110 // Reinitializes the settings for object reuse. 111 void ResetSettings(); 112 113 // Does bookkeeping when an error occurs. 114 PrintingContext::Result OnError(); 115 116 // Complete print context settings. 117 PrintSettings settings_; 118 119 // The dialog box has been dismissed. 120 volatile bool dialog_box_dismissed_; 121 122 // Is a print job being done. 123 volatile bool in_print_job_; 124 125 // Did the user cancel the print job. 126 volatile bool abort_printing_; 127 128 // The application locale. 129 std::string app_locale_; 130 131 DISALLOW_COPY_AND_ASSIGN(PrintingContext); 132}; 133 134} // namespace printing 135 136#endif // PRINTING_PRINTING_CONTEXT_H_ 137