blob: 353c36d3904ce34bc2f280f24b214700cc968e9c [file] [log] [blame]
[email protected]1407b6e2010-08-27 21:39:481// Copyright (c) 2010 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
[email protected]8ff1d422009-07-07 21:31:395#ifndef PRINTING_PRINTING_CONTEXT_H_
6#define PRINTING_PRINTING_CONTEXT_H_
initial.commit09911bf2008-07-26 23:55:297
initial.commit09911bf2008-07-26 23:55:298#include <string>
9
10#include "base/basictypes.h"
[email protected]b7191422010-09-21 19:18:0511#include "base/callback.h"
[email protected]d9d42992010-09-13 19:39:1912#include "base/string16.h"
[email protected]8ff1d422009-07-07 21:31:3913#include "printing/print_settings.h"
[email protected]08397d52011-02-05 01:53:3814#include "ui/gfx/native_widget_types.h"
initial.commit09911bf2008-07-26 23:55:2915
16namespace printing {
17
[email protected]51e8d9352010-10-06 22:21:1718// An abstraction of a printer context, implemented by objects that describe the
19// user selected printing context. This includes the OS-dependent UI to ask the
20// user about the print settings. Concrete implementations directly talk to the
21// printer and manage the document and page breaks.
initial.commit09911bf2008-07-26 23:55:2922class PrintingContext {
23 public:
24 // Tri-state result for user behavior-dependent functions.
25 enum Result {
26 OK,
27 CANCEL,
28 FAILED,
29 };
30
[email protected]51e8d9352010-10-06 22:21:1731 virtual ~PrintingContext();
initial.commit09911bf2008-07-26 23:55:2932
[email protected]b7191422010-09-21 19:18:0533 // Callback of AskUserForSettings, used to notify the PrintJobWorker when
34 // print settings are available.
35 typedef Callback1<Result>::Type PrintSettingsCallback;
36
initial.commit09911bf2008-07-26 23:55:2937 // Asks the user what printer and format should be used to print. Updates the
[email protected]b7191422010-09-21 19:18:0538 // context with the select device settings. The result of the call is returned
39 // in the callback. This is necessary for Linux, which only has an
40 // asynchronous printing API.
[email protected]51e8d9352010-10-06 22:21:1741 virtual void AskUserForSettings(gfx::NativeView parent_view,
42 int max_pages,
43 bool has_selection,
44 PrintSettingsCallback* callback) = 0;
[email protected]d8254622010-08-13 19:15:4645
initial.commit09911bf2008-07-26 23:55:2946 // Selects the user's default printer and format. Updates the context with the
47 // default device settings.
[email protected]51e8d9352010-10-06 22:21:1748 virtual Result UseDefaultSettings() = 0;
[email protected]38bba4f2010-03-12 05:29:0749
initial.commit09911bf2008-07-26 23:55:2950 // Initializes with predefined settings.
[email protected]51e8d9352010-10-06 22:21:1751 virtual Result InitWithSettings(const PrintSettings& settings) = 0;
initial.commit09911bf2008-07-26 23:55:2952
53 // Does platform specific setup of the printer before the printing. Signal the
54 // printer that a document is about to be spooled.
55 // Warning: This function enters a message loop. That may cause side effects
56 // like IPC message processing! Some printers have side-effects on this call
57 // like virtual printers that ask the user for the path of the saved document;
58 // for example a PDF printer.
[email protected]51e8d9352010-10-06 22:21:1759 virtual Result NewDocument(const string16& document_name) = 0;
initial.commit09911bf2008-07-26 23:55:2960
61 // Starts a new page.
[email protected]51e8d9352010-10-06 22:21:1762 virtual Result NewPage() = 0;
initial.commit09911bf2008-07-26 23:55:2963
64 // Closes the printed page.
[email protected]51e8d9352010-10-06 22:21:1765 virtual Result PageDone() = 0;
initial.commit09911bf2008-07-26 23:55:2966
67 // Closes the printing job. After this call the object is ready to start a new
68 // document.
[email protected]51e8d9352010-10-06 22:21:1769 virtual Result DocumentDone() = 0;
initial.commit09911bf2008-07-26 23:55:2970
[email protected]8ff1d422009-07-07 21:31:3971 // Cancels printing. Can be used in a multi-threaded context. Takes effect
initial.commit09911bf2008-07-26 23:55:2972 // immediately.
[email protected]51e8d9352010-10-06 22:21:1773 virtual void Cancel() = 0;
initial.commit09911bf2008-07-26 23:55:2974
75 // Dismiss the Print... dialog box if shown.
[email protected]51e8d9352010-10-06 22:21:1776 virtual void DismissDialog() = 0;
initial.commit09911bf2008-07-26 23:55:2977
[email protected]51e8d9352010-10-06 22:21:1778 // Releases the native printing context.
79 virtual void ReleaseContext() = 0;
80
81 // Returns the native context used to print.
82 virtual gfx::NativeDrawingContext context() const = 0;
83
84 // Creates an instance of this object. Implementers of this interface should
85 // implement this method to create an object of their implementation. The
86 // caller owns the returned object.
[email protected]ee5f36e42010-12-03 22:40:3787 static PrintingContext* Create(const std::string& app_locale);
[email protected]51e8d9352010-10-06 22:21:1788
89 void set_use_overlays(bool use_overlays) {
90 settings_.use_overlays = use_overlays;
[email protected]b75dca82009-10-13 18:46:2191 }
initial.commit09911bf2008-07-26 23:55:2992
93 const PrintSettings& settings() const {
94 return settings_;
95 }
96
[email protected]51e8d9352010-10-06 22:21:1797 protected:
[email protected]ee5f36e42010-12-03 22:40:3798 explicit PrintingContext(const std::string& app_locale);
[email protected]51e8d9352010-10-06 22:21:1799
100 // Reinitializes the settings for object reuse.
101 void ResetSettings();
initial.commit09911bf2008-07-26 23:55:29102
[email protected]c8ad40c2009-06-08 17:05:21103 // Does bookkeeping when an error occurs.
104 PrintingContext::Result OnError();
initial.commit09911bf2008-07-26 23:55:29105
initial.commit09911bf2008-07-26 23:55:29106 // Complete print context settings.
107 PrintSettings settings_;
108
initial.commit09911bf2008-07-26 23:55:29109 // The dialog box has been dismissed.
110 volatile bool dialog_box_dismissed_;
111
112 // Is a print job being done.
113 volatile bool in_print_job_;
114
115 // Did the user cancel the print job.
116 volatile bool abort_printing_;
117
[email protected]ee5f36e42010-12-03 22:40:37118 // The application locale.
119 std::string app_locale_;
120
[email protected]5930cb62009-12-08 02:04:22121 DISALLOW_COPY_AND_ASSIGN(PrintingContext);
initial.commit09911bf2008-07-26 23:55:29122};
123
124} // namespace printing
125
[email protected]8ff1d422009-07-07 21:31:39126#endif // PRINTING_PRINTING_CONTEXT_H_