1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
// Copyright (c) 2011 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_H_
#define PRINTING_PRINTING_CONTEXT_H_
#include <memory>
#include <string>
#include "base/callback.h"
#include "base/macros.h"
#include "base/strings/string16.h"
#include "printing/print_settings.h"
#include "skia/ext/native_drawing_context.h"
#include "ui/gfx/native_widget_types.h"
namespace base {
class DictionaryValue;
}
namespace printing {
// An abstraction of a printer context, implemented by objects that describe the
// user selected printing context. This includes the OS-dependent UI to ask the
// user about the print settings. Concrete implementations directly talk to the
// printer and manage the document and page breaks.
class PRINTING_EXPORT PrintingContext {
public:
// Printing context delegate.
class Delegate {
public:
Delegate() {}
virtual ~Delegate() {}
// Returns parent view to use for modal dialogs.
virtual gfx::NativeView GetParentView() = 0;
// Returns application locale.
virtual std::string GetAppLocale() = 0;
};
// Tri-state result for user behavior-dependent functions.
enum Result {
OK,
CANCEL,
FAILED,
};
virtual ~PrintingContext();
// Callback of AskUserForSettings, used to notify the PrintJobWorker when
// print settings are available.
typedef base::Callback<void(Result)> PrintSettingsCallback;
// Asks the user what printer and format should be used to print. Updates the
// context with the select device settings. The result of the call is returned
// in the callback. This is necessary for Linux, which only has an
// asynchronous printing API.
// On Android, when |is_scripted| is true, calling it initiates a full
// printing flow from the framework's PrintManager.
// (see https://codereview.chromium.org/740983002/)
virtual void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) = 0;
// Selects the user's default printer and format. Updates the context with the
// default device settings.
virtual Result UseDefaultSettings() = 0;
// Updates the context with PDF printer settings.
Result UsePdfSettings();
// Returns paper size to be used for PDF or Cloud Print in device units.
virtual gfx::Size GetPdfPaperSizeDeviceUnits() = 0;
// Updates printer settings.
// |external_preview| is true if pdf is going to be opened in external
// preview. Used by MacOS only now to open Preview.app.
virtual Result UpdatePrinterSettings(bool external_preview,
bool show_system_dialog,
int page_count) = 0;
// Updates Print Settings. |job_settings| contains all print job
// settings information. |ranges| has the new page range settings.
Result UpdatePrintSettings(const base::DictionaryValue& job_settings);
// Does platform specific setup of the printer before the printing. Signal the
// printer that a document is about to be spooled.
// Warning: This function enters a message loop. That may cause side effects
// like IPC message processing! Some printers have side-effects on this call
// like virtual printers that ask the user for the path of the saved document;
// for example a PDF printer.
virtual Result NewDocument(const base::string16& document_name) = 0;
// Starts a new page.
virtual Result NewPage() = 0;
// Closes the printed page.
virtual Result PageDone() = 0;
// Closes the printing job. After this call the object is ready to start a new
// document.
virtual Result DocumentDone() = 0;
// Cancels printing. Can be used in a multi-threaded context. Takes effect
// immediately.
virtual void Cancel() = 0;
// Releases the native printing context.
virtual void ReleaseContext() = 0;
// Returns the native context used to print.
virtual skia::NativeDrawingContext context() const = 0;
// Creates an instance of this object. Implementers of this interface should
// implement this method to create an object of their implementation.
static std::unique_ptr<PrintingContext> Create(Delegate* delegate);
void set_margin_type(MarginType type);
void set_is_modifiable(bool is_modifiable);
const PrintSettings& settings() const {
return settings_;
}
protected:
explicit PrintingContext(Delegate* delegate);
// Reinitializes the settings for object reuse.
void ResetSettings();
// Does bookkeeping when an error occurs.
PrintingContext::Result OnError();
// Complete print context settings.
PrintSettings settings_;
// Printing context delegate.
Delegate* delegate_;
// Is a print job being done.
volatile bool in_print_job_;
// Did the user cancel the print job.
volatile bool abort_printing_;
private:
DISALLOW_COPY_AND_ASSIGN(PrintingContext);
};
} // namespace printing
#endif // PRINTING_PRINTING_CONTEXT_H_
|