Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / libgtk2ui / print_dialog_gtk2.h
1 // Copyright 2014 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 CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_
6 #define CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_
7
8 #include <gtk/gtk.h>
9 #include <gtk/gtkunixprint.h>
10
11 #include "base/compiler_specific.h"
12 #include "base/files/file_path.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/sequenced_task_runner_helpers.h"
15 #include "chrome/browser/ui/libgtk2ui/gtk2_signal.h"
16 #include "content/public/browser/browser_thread.h"
17 #include "printing/print_dialog_gtk_interface.h"
18 #include "printing/printing_context_linux.h"
19 #include "ui/aura/window_observer.h"
20
21 namespace printing {
22 class Metafile;
23 class PrintSettings;
24 }
25
26 using printing::PrintingContextLinux;
27
28 // Needs to be freed on the UI thread to clean up its GTK members variables.
29 class PrintDialogGtk2
30     : public printing::PrintDialogGtkInterface,
31       public base::RefCountedThreadSafe<
32           PrintDialogGtk2, content::BrowserThread::DeleteOnUIThread>,
33       public aura::WindowObserver {
34  public:
35   // Creates and returns a print dialog.
36   static printing::PrintDialogGtkInterface* CreatePrintDialog(
37       PrintingContextLinux* context);
38
39   // printing::PrintDialogGtkInterface implementation.
40   virtual void UseDefaultSettings() OVERRIDE;
41   virtual bool UpdateSettings(printing::PrintSettings* settings) OVERRIDE;
42   virtual void ShowDialog(
43       gfx::NativeView parent_view,
44       bool has_selection,
45       const PrintingContextLinux::PrintSettingsCallback& callback) OVERRIDE;
46   virtual void PrintDocument(const printing::Metafile* metafile,
47                              const base::string16& document_name) OVERRIDE;
48   virtual void AddRefToDialog() OVERRIDE;
49   virtual void ReleaseDialog() OVERRIDE;
50
51  private:
52   friend struct content::BrowserThread::DeleteOnThread<
53       content::BrowserThread::UI>;
54   friend class base::DeleteHelper<PrintDialogGtk2>;
55
56   explicit PrintDialogGtk2(PrintingContextLinux* context);
57   virtual ~PrintDialogGtk2();
58
59   // Handles dialog response.
60   CHROMEGTK_CALLBACK_1(PrintDialogGtk2, void, OnResponse, int);
61
62   // Prints document named |document_name|.
63   void SendDocumentToPrinter(const base::string16& document_name);
64
65   // Handles print job response.
66   static void OnJobCompletedThunk(GtkPrintJob* print_job,
67                                   gpointer user_data,
68                                   GError* error);
69   void OnJobCompleted(GtkPrintJob* print_job, GError* error);
70
71   // Helper function for initializing |context_|'s PrintSettings with a given
72   // |settings|.
73   void InitPrintSettings(printing::PrintSettings* settings);
74
75   // aura::WindowObserver implementation.
76   virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
77
78   // Printing dialog callback.
79   PrintingContextLinux::PrintSettingsCallback callback_;
80   PrintingContextLinux* context_;
81
82   // Print dialog settings. PrintDialogGtk2 owns |dialog_| and holds references
83   // to the other objects.
84   GtkWidget* dialog_;
85   GtkPrintSettings* gtk_settings_;
86   GtkPageSetup* page_setup_;
87   GtkPrinter* printer_;
88
89   base::FilePath path_to_pdf_;
90
91   DISALLOW_COPY_AND_ASSIGN(PrintDialogGtk2);
92 };
93
94 #endif  // CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_