Skip to content

Commit

Permalink
PrintPreview: [MAC] Set the selected printer for the current print job.
Browse files Browse the repository at this point in the history
BUG=76123
TEST=Enable print preview on mac. Press ctrl+p to print a page. On print preview tab, select a printer and press print button.

Review URL: http://codereview.chromium.org/6698013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78919 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
kmadhusu@chromium.org committed Mar 21, 2011
1 parent 6f3b9f9 commit 89f5aa8
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 26 deletions.
5 changes: 2 additions & 3 deletions chrome/browser/printing/print_job_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,9 @@ void PrintJobWorker::UpdatePrintSettings(
}
}
}
// We don't update any other print job settings now, so delete |new_settings|.
delete new_settings;
PrintingContext::Result result =
printing_context_->UpdatePrintSettings(new_ranges);
printing_context_->UpdatePrintSettings(new_settings, new_ranges);
delete new_settings;
GetSettingsDone(result);
}

Expand Down
7 changes: 4 additions & 3 deletions chrome/browser/printing/print_job_worker.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ class PrintJobWorker : public base::Thread {
bool has_selection,
bool use_overlays);

// Set the new print settings. This function takes ownership of |new_settings|
// and frees it.
// Set the new print settings. This function takes ownership of
// |new_settings|.
void SetSettings(const DictionaryValue* const new_settings);

// Starts the printing loop. Every pages are printed as soon as the data is
Expand Down Expand Up @@ -98,7 +98,8 @@ class PrintJobWorker : public base::Thread {
// back into the IO thread for GetSettingsDone().
void GetSettingsWithUIDone(PrintingContext::Result result);

// Called on the UI thread to update the print settings.
// Called on the UI thread to update the print settings. This function takes
// the ownership of |new_settings|.
void UpdatePrintSettings(const DictionaryValue* const new_settings);

// Reports settings back to owner_.
Expand Down
9 changes: 6 additions & 3 deletions printing/printing_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
#include "printing/print_settings.h"
#include "ui/gfx/native_widget_types.h"

class DictionaryValue;

namespace printing {

// An abstraction of a printer context, implemented by objects that describe the
Expand Down Expand Up @@ -47,9 +49,10 @@ class PrintingContext {
// default device settings.
virtual Result UseDefaultSettings() = 0;

// Update print settings. As of now we are updating the page range settings.
// In the future, update other print job settings.
virtual Result UpdatePrintSettings(const PageRanges& ranges) = 0;
// Updates print settings. |job_settings| contains all print job settings
// information. |ranges| has the new page range settings.
virtual Result UpdatePrintSettings(const DictionaryValue* const job_settings,
const PageRanges& ranges) = 0;

// Initializes with predefined settings.
virtual Result InitWithSettings(const PrintSettings& settings) = 0;
Expand Down
3 changes: 2 additions & 1 deletion printing/printing_context_cairo.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "printing/printing_context_cairo.h"

#include "base/logging.h"
#include "base/values.h"
#include "printing/units.h"
#include "printing/print_settings_initializer_gtk.h"

Expand Down Expand Up @@ -148,7 +149,7 @@ PrintingContext::Result PrintingContextCairo::UseDefaultSettings() {
}

PrintingContext::Result PrintingContextCairo::UpdatePrintSettings(
const PageRanges& ranges) {
const DictionaryValue* const job_settings, const PageRanges& ranges) {
DCHECK(!in_print_job_);

settings_.ranges = ranges;
Expand Down
3 changes: 2 additions & 1 deletion printing/printing_context_cairo.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ class PrintingContextCairo : public PrintingContext {
bool has_selection,
PrintSettingsCallback* callback);
virtual Result UseDefaultSettings();
virtual Result UpdatePrintSettings(const PageRanges& ranges);
virtual Result UpdatePrintSettings(const DictionaryValue* const job_settings,
const PageRanges& ranges);
virtual Result InitWithSettings(const PrintSettings& settings);
virtual Result NewDocument(const string16& document_name);
virtual Result NewPage();
Expand Down
6 changes: 5 additions & 1 deletion printing/printing_context_mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ class PrintingContextMac : public PrintingContext {
bool has_selection,
PrintSettingsCallback* callback);
virtual Result UseDefaultSettings();
virtual Result UpdatePrintSettings(const PageRanges& ranges);
virtual Result UpdatePrintSettings(const DictionaryValue* const job_settings,
const PageRanges& ranges);
virtual Result InitWithSettings(const PrintSettings& settings);
virtual Result NewDocument(const string16& document_name);
virtual Result NewPage();
Expand All @@ -43,6 +44,9 @@ class PrintingContextMac : public PrintingContext {
// Read the settings from the given NSPrintInfo (and cache it for later use).
void ParsePrintInfo(NSPrintInfo* print_info);

// Initializes PrintSettings from native print info object.
void InitPrintSettingsFromPrintInfo(const PageRanges& ranges);

// The native print info object.
scoped_nsobject<NSPrintInfo> print_info_;

Expand Down
47 changes: 35 additions & 12 deletions printing/printing_context_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "base/logging.h"
#include "base/mac/scoped_cftyperef.h"
#include "base/sys_string_conversions.h"
#include "base/values.h"
#include "printing/print_settings_initializer_mac.h"

namespace printing {
Expand Down Expand Up @@ -50,6 +51,7 @@
options |= NSPrintPanelShowsScaling;
[panel setOptions:options];

// Set the print job title text.
if (parent_view) {
NSString* job_title = [[parent_view window] title];
if (job_title) {
Expand Down Expand Up @@ -80,18 +82,47 @@
}

PrintingContext::Result PrintingContextMac::UpdatePrintSettings(
const PageRanges& ranges) {
const DictionaryValue* const job_settings, const PageRanges& ranges) {
DCHECK(!in_print_job_);

// TODO (kmadhusu): Update other print job settings such as number of copies,
// collate, etc.,

// Update the print range information.
settings_.ranges = ranges;
ResetSettings();
print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);

std::string printer_name;
if (!job_settings->GetString("printerName", &printer_name))
return OnError();

NSString* new_printer_name = base::SysUTF8ToNSString(printer_name);
if (!new_printer_name)
return OnError();

if (![[[print_info_.get() printer] name] isEqualToString:new_printer_name]) {
NSPrinter* new_printer = [NSPrinter printerWithName:new_printer_name];
if (new_printer == nil)
return OnError();

[print_info_.get() setPrinter:new_printer];
}

InitPrintSettingsFromPrintInfo(ranges);
return OK;
}

void PrintingContextMac::InitPrintSettingsFromPrintInfo(
const PageRanges& ranges) {
PMPrintSession print_session =
static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
PMPageFormat page_format =
static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
PMPrinter printer;
PMSessionGetCurrentPrinter(print_session, &printer);
PrintSettingsInitializerMac::InitPrintSettings(
printer, page_format, ranges, false, &settings_);
}

void PrintingContextMac::ParsePrintInfo(NSPrintInfo* print_info) {
ResetSettings();
print_info_.reset([print_info retain]);
Expand All @@ -103,15 +134,7 @@
range.to = [[print_info_dict objectForKey:NSPrintLastPage] intValue] - 1;
page_ranges.push_back(range);
}
PMPrintSession print_session =
static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
PMPageFormat page_format =
static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
PMPrinter printer;
PMSessionGetCurrentPrinter(print_session, &printer);

PrintSettingsInitializerMac::InitPrintSettings(
printer, page_format, page_ranges, false, &settings_);
InitPrintSettingsFromPrintInfo(page_ranges);
}

PrintingContext::Result PrintingContextMac::InitWithSettings(
Expand Down
3 changes: 2 additions & 1 deletion printing/printing_context_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "base/message_loop.h"
#include "base/time.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "printing/print_settings_initializer_win.h"
#include "printing/printed_document.h"
#include "skia/ext/platform_device_win.h"
Expand Down Expand Up @@ -209,7 +210,7 @@ PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
}

PrintingContext::Result PrintingContextWin::UpdatePrintSettings(
const PageRanges& ranges) {
const DictionaryValue* const job_settings, const PageRanges& ranges) {
DCHECK(!in_print_job_);

settings_.ranges = ranges;
Expand Down
3 changes: 2 additions & 1 deletion printing/printing_context_win.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ class PrintingContextWin : public PrintingContext {
bool has_selection,
PrintSettingsCallback* callback);
virtual Result UseDefaultSettings();
virtual Result UpdatePrintSettings(const PageRanges& ranges);
virtual Result UpdatePrintSettings(const DictionaryValue* const job_settings,
const PageRanges& ranges);
virtual Result InitWithSettings(const PrintSettings& settings);
virtual Result NewDocument(const string16& document_name);
virtual Result NewPage();
Expand Down

0 comments on commit 89f5aa8

Please sign in to comment.