annotate dwt/printing/PrintDialog.d @ 240:ce446666f5a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Mon, 12 May 2008 19:13:01 +0200
parents 380bad9f6852
children 5a30aa9820f3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
115
52b32f5cb1e0 many file checked for switch default
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
1 /*******************************************************************************
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
108
0f12f6bb9739 author notice
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
10 * Port to the D programming language:
0f12f6bb9739 author notice
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
11 * Frank Benoit <benoit@tionex.de>
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.printing.PrintDialog;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.DWT;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.DWTException;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
19 import dwt.internal.LONG;
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.internal.gtk.OS;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.widgets.Dialog;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.widgets.Display;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.widgets.Shell;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.widgets.Widget;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.printing.Printer;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.printing.PrinterData;
200
08789b28bdf3 import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents: 195
diff changeset
27 import dwt.dwthelper.utils;
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import tango.util.Convert;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import Math = tango.math.Math;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 static import tango.stdc.stringz;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 * Instances of this class allow the user to select
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * a printer and various print-related parameters
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * prior to starting a print job.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * <p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * IMPORTANT: This class is intended to be subclassed <em>only</em>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * within the DWT implementation.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * </p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 public class PrintDialog : Dialog {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
43 PrinterData printerData;
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 int scope_ = PrinterData.ALL_PAGES;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 int startPage = 1, endPage = 1;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 bool printToFile = false;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 GtkPrintUnixDialog* handle;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 int index;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 char [] settingsData;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
52 static const String GET_MODAL_DIALOG = "dwt.internal.gtk.getModalDialog";
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
53 static const String SET_MODAL_DIALOG = "dwt.internal.gtk.setModalDialog";
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
54 static const String ADD_IDLE_PROC_KEY = "dwt.internal.gtk.addIdleProc";
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
55 static const String REMOVE_IDLE_PROC_KEY = "dwt.internal.gtk.removeIdleProc";
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
56 static const String GET_EMISSION_PROC_KEY = "dwt.internal.gtk.getEmissionProc";
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * Constructs a new instance of this class given only its parent.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * @param parent a composite control which will be the parent of the new instance (cannot be null)
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * @exception IllegalArgumentException <ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * </ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * @exception DWTException <ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * </ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * @see DWT
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * @see Widget#checkSubclass
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * @see Widget#getStyle
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 public this (Shell parent) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 this (parent, DWT.PRIMARY_MODAL);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * Constructs a new instance of this class given its parent
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * and a style value describing its behavior and appearance.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * <p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * The style value is either one of the style constants defined in
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * class <code>DWT</code> which is applicable to instances of this
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * class, or must be built by <em>bitwise OR</em>'ing together
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 * (that is, using the <code>int</code> "|" operator) two or more
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * of those <code>DWT</code> style constants. The class description
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * lists the style constants that are applicable to the class.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * Style bits are also inherited from superclasses.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * </p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * @param parent a composite control which will be the parent of the new instance (cannot be null)
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * @param style the style of control to construct
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * @exception IllegalArgumentException <ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * </ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * @exception DWTException <ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * </ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * @see DWT
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * @see Widget#checkSubclass
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * @see Widget#getStyle
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 public this (Shell parent, int style) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
107 super (parent, parent is null? style : checkStyleBit (parent, style));
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 checkSubclass ();
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
111 /**
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
112 * Sets the printer data that will be used when the dialog
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
113 * is opened.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
114 *
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
115 * @param data the data that will be used when the dialog is opened
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
116 *
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
117 * @since 3.4
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
118 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
119 public void setPrinterData(PrinterData data) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
120 this.printerData = data;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
121 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
122
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
123 /**
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
124 * Returns the printer data that will be used when the dialog
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
125 * is opened.
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
126 *
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
127 * @return the data that will be used when the dialog is opened
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
128 *
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
129 * @since 3.4
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
130 */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
131 public PrinterData getPrinterData() {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
132 return printerData;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
133 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
134
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
135 static int checkBits (int style, int int0, int int1, int int2, int int3, int int4, int int5) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
136 int mask = int0 | int1 | int2 | int3 | int4 | int5;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
137 if ((style & mask) is 0) style |= int0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
138 if ((style & int0) !is 0) style = (style & ~mask) | int0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
139 if ((style & int1) !is 0) style = (style & ~mask) | int1;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
140 if ((style & int2) !is 0) style = (style & ~mask) | int2;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
141 if ((style & int3) !is 0) style = (style & ~mask) | int3;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
142 if ((style & int4) !is 0) style = (style & ~mask) | int4;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
143 if ((style & int5) !is 0) style = (style & ~mask) | int5;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
144 return style;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
145 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
146
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
147 static int checkStyleBit (Shell parent, int style) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
148 style &= ~DWT.MIRRORED;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
149 if ((style & (DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT)) is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
150 if (parent !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
151 if ((parent.getStyle () & DWT.LEFT_TO_RIGHT) !is 0) style |= DWT.LEFT_TO_RIGHT;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
152 if ((parent.getStyle () & DWT.RIGHT_TO_LEFT) !is 0) style |= DWT.RIGHT_TO_LEFT;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
153 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
154 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
155 return checkBits (style, DWT.LEFT_TO_RIGHT, DWT.RIGHT_TO_LEFT, 0, 0, 0, 0);
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 * Returns the print job scope that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 * before pressing OK in the dialog. This will be one
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 * of the following values:
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * <dl>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 * <dt><code>ALL_PAGES</code></dt>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 * <dd>Print all pages in the current document</dd>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 * <dt><code>PAGE_RANGE</code></dt>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * <dd>Print the range of pages specified by startPage and endPage</dd>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * <dt><code>SELECTION</code></dt>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * <dd>Print the current selection</dd>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 * </dl>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * @return the scope setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 public int getScope() {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 return scope_;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 * Sets the scope of the print job. The user will see this
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 * setting when the dialog is opened. This can have one of
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * the following values:
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 * <dl>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 * <dt><code>ALL_PAGES</code></dt>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * <dd>Print all pages in the current document</dd>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * <dt><code>PAGE_RANGE</code></dt>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * <dd>Print the range of pages specified by startPage and endPage</dd>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 * <dt><code>SELECTION</code></dt>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * <dd>Print the current selection</dd>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * </dl>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 * @param scope the scope setting when the dialog is opened
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 public void setScope(int scope_) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 this.scope_ = scope_;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * Returns the start page setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 * before pressing OK in the dialog.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 * <p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 * This value can be from 1 to the maximum number of pages for the platform.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 * Note that it is only valid if the scope is <code>PAGE_RANGE</code>.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * </p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 * @return the start page setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 public int getStartPage() {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 return startPage;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * Sets the start page that the user will see when the dialog
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * is opened.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * <p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 * This value can be from 1 to the maximum number of pages for the platform.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * Note that it is only valid if the scope is <code>PAGE_RANGE</code>.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * </p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * @param startPage the startPage setting when the dialog is opened
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 public void setStartPage(int startPage) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 this.startPage = startPage;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * Returns the end page setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * before pressing OK in the dialog.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 * <p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 * This value can be from 1 to the maximum number of pages for the platform.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * Note that it is only valid if the scope is <code>PAGE_RANGE</code>.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 * </p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * @return the end page setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 public int getEndPage() {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 return endPage;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * Sets the end page that the user will see when the dialog
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * is opened.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * <p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * This value can be from 1 to the maximum number of pages for the platform.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 * Note that it is only valid if the scope is <code>PAGE_RANGE</code>.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * </p>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * @param endPage the end page setting when the dialog is opened
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 public void setEndPage(int endPage) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 this.endPage = endPage;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * Returns the 'Print to file' setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 * before pressing OK in the dialog.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * @return the 'Print to file' setting that the user selected
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 public bool getPrintToFile() {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 return printToFile;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 * Sets the 'Print to file' setting that the user will see
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 * when the dialog is opened.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * @param printToFile the 'Print to file' setting when the dialog is opened
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 public void setPrintToFile(bool printToFile) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 this.printToFile = printToFile;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 /**
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * Makes the receiver visible and brings it to the front
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * of the display.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * @return a printer data object describing the desired print job parameters
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 *
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * @exception DWTException <ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * </ul>
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 public PrinterData open() {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 if (OS.GTK_VERSION < OS.buildVERSION (2, 10, 0)) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 return Printer.getDefaultPrinterData();
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 } else {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 char* titleBytes = tango.stdc.stringz.toStringz( getText() );
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 auto topHandle = getParent().handle;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 while (topHandle !is null && !OS.GTK_IS_WINDOW(topHandle)) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 topHandle = OS.gtk_widget_get_parent(topHandle);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 handle = cast(GtkPrintUnixDialog*)OS.gtk_print_unix_dialog_new(titleBytes, cast(GtkWindow*)topHandle);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 //TODO: Not currently implemented. May need new API. For now, disable 'Current' in the dialog. (see gtk bug 344519)
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 OS.gtk_print_unix_dialog_set_current_page(handle, -1);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 OS.gtk_print_unix_dialog_set_manual_capabilities(handle,
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 OS.GTK_PRINT_CAPABILITY_COLLATE | OS.GTK_PRINT_CAPABILITY_COPIES | OS.GTK_PRINT_CAPABILITY_PAGE_SET);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 /* Set state into print dialog settings. */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 auto settings = OS.gtk_print_settings_new();
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 auto page_setup = OS.gtk_page_setup_new();
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
303
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
304 if (printerData !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
305 if (printerData.otherData !is null) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
306 Printer.restore(printerData.otherData, settings, page_setup);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
307 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
308 /* Set values of settings from PrinterData. */
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
309 Printer.setScope(settings, printerData.scope_, printerData.startPage, printerData.endPage);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
310 //TODO: Should we look at printToFile, or driver/name for "Print to File", or both? (see gtk bug 345590)
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
311 if (printerData.printToFile) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
312 char* buffer = tango.stdc.stringz.toStringz(printerData.fileName);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
313 OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI.ptr, buffer);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
314 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
315 if (printerData.driver.equals("GtkPrintBackendFile") && printerData.name.equals("Print to File")) { //$NON-NLS-1$ //$NON-NLS-2$
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
316 char* buffer = tango.stdc.stringz.toStringz(printerData.fileName);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
317 OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI.ptr, buffer);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
318 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
319 OS.gtk_print_settings_set_n_copies(settings, printerData.copyCount);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
320 OS.gtk_print_settings_set_collate(settings, printerData.collate);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
321 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
322
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 Printer.setScope(settings, scope_, startPage, endPage);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
324
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 if (printToFile) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 char* buffer = tango.stdc.stringz.toStringz( "Print to File" ); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 OS.gtk_print_settings_set_printer(settings, buffer);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 OS.gtk_print_unix_dialog_set_settings(handle, settings);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 OS.gtk_print_unix_dialog_set_page_setup(handle, page_setup);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 OS.g_object_unref(settings);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 OS.g_object_unref(page_setup);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 PrinterData data = null;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 //TODO: Handle 'Print Preview' (GTK_RESPONSE_APPLY).
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 Display display = getParent() !is null ? getParent().getDisplay (): Display.getCurrent ();
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
337
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
338 int signalId = 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
339 int /*long*/ hookId = 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
340 if ((getStyle () & DWT.RIGHT_TO_LEFT) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
341 signalId = OS.g_signal_lookup (OS.map.ptr, OS.GTK_TYPE_WIDGET());
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
342 hookId = OS.g_signal_add_emission_hook (signalId, 0, cast(GSignalEmissionHook)cast(void*)(cast(LONG) display.getData (GET_EMISSION_PROC_KEY)).value, handle, null);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
343 }
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 display.setData (ADD_IDLE_PROC_KEY, null);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
345 Object oldModal = null;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
346 if (OS.gtk_window_get_modal (handle)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
347 oldModal = display.getData (GET_MODAL_DIALOG);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
348 display.setData (SET_MODAL_DIALOG, this);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
349 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
350 int response = OS.gtk_dialog_run (handle);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
351 if (OS.gtk_window_get_modal (handle)) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
352 display.setData (SET_MODAL_DIALOG, oldModal);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
353 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
354 if ((getStyle () & DWT.RIGHT_TO_LEFT) !is 0) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
355 OS.g_signal_remove_emission_hook (signalId, hookId);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
356 }
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
357 if (response is OS.GTK_RESPONSE_OK) {
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 auto printer = OS.gtk_print_unix_dialog_get_selected_printer(handle);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 if (printer !is null) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 238
diff changeset
360
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 /* Get state from print dialog. */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 settings = OS.gtk_print_unix_dialog_get_settings(handle); // must unref
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 page_setup = OS.gtk_print_unix_dialog_get_page_setup(handle); // do not unref
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 data = Printer.printerDataFromGtkPrinter(printer);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 int print_pages = OS.gtk_print_settings_get_print_pages(settings);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 switch (print_pages) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 case OS.GTK_PRINT_PAGES_ALL:
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 scope_ = PrinterData.ALL_PAGES;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 break;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 case OS.GTK_PRINT_PAGES_RANGES:
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 scope_ = PrinterData.PAGE_RANGE;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 int num_ranges;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 auto page_ranges = OS.gtk_print_settings_get_page_ranges(settings, &num_ranges);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 int length = num_ranges;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 int min = int.max, max = 0;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 for (int i = 0; i < length; i++) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 min = Math.min(min, page_ranges[i].start + 1);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 max = Math.max(max, page_ranges[i].end + 1);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 OS.g_free(page_ranges);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 startPage = min is int.max ? 1 : min;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 endPage = max is 0 ? 1 : max;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 break;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 case OS.GTK_PRINT_PAGES_CURRENT:
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 //TODO: Disabled in dialog (see above). This code will not run. (see gtk bug 344519)
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 scope_ = PrinterData.SELECTION;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 startPage = endPage = OS.gtk_print_unix_dialog_get_current_page(handle);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 break;
115
52b32f5cb1e0 many file checked for switch default
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
389 default:
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391
195
e0ffca35fe59 Fix: more ==/is
Frank Benoit <benoit@tionex.de>
parents: 158
diff changeset
392 printToFile = ( data.name.equals("Print to File")); //$NON-NLS-1$
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 if (printToFile) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 auto address = OS.gtk_print_settings_get(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI.ptr);
158
de2578a843a7 Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents: 152
diff changeset
395 data.fileName = tango.stdc.stringz.fromStringz( address).dup;
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 data.scope_ = scope_;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 data.startPage = startPage;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 data.endPage = endPage;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 data.printToFile = printToFile;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 data.copyCount = OS.gtk_print_settings_get_n_copies(settings);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 data.collate = cast(bool)OS.gtk_print_settings_get_collate(settings);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 /* Save other print_settings data as key/value pairs in otherData. */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 index = 0;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 settingsData = new char[1024];
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 settingsData[] = '\0';
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 OS.gtk_print_settings_foreach (settings, &GtkPrintSettingsFunc, cast(void*)this );
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 index++; // extra null terminator after print_settings and before page_setup
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 /* Save page_setup data as key/value pairs in otherData.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 * Note that page_setup properties must be stored and restored in the same order.
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 */
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 store("orientation", OS.gtk_page_setup_get_orientation(page_setup)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 store("top_margin", OS.gtk_page_setup_get_top_margin(page_setup, OS.GTK_UNIT_MM)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 store("bottom_margin", OS.gtk_page_setup_get_bottom_margin(page_setup, OS.GTK_UNIT_MM)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 store("left_margin", OS.gtk_page_setup_get_left_margin(page_setup, OS.GTK_UNIT_MM)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 store("right_margin", OS.gtk_page_setup_get_right_margin(page_setup, OS.GTK_UNIT_MM)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 auto paper_size = OS.gtk_page_setup_get_paper_size(page_setup); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 storeBytes("paper_size_name", OS.gtk_paper_size_get_name(paper_size)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 storeBytes("paper_size_display_name", OS.gtk_paper_size_get_display_name(paper_size)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 storeBytes("paper_size_ppd_name", OS.gtk_paper_size_get_ppd_name(paper_size)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 store("paper_size_width", OS.gtk_paper_size_get_width(paper_size, OS.GTK_UNIT_MM)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 store("paper_size_height", OS.gtk_paper_size_get_height(paper_size, OS.GTK_UNIT_MM)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 store("paper_size_is_custom", OS.gtk_paper_size_is_custom(paper_size)); //$NON-NLS-1$
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 data.otherData = settingsData;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 OS.g_object_unref(settings);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 display.setData (REMOVE_IDLE_PROC_KEY, null);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 OS.gtk_widget_destroy (handle);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 return data;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 private static extern(C) void GtkPrintSettingsFunc (char* key, char* value, void* data) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 (cast(PrintDialog)data).GtkPrintSettingsMeth(key, value );
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 void GtkPrintSettingsMeth (char* key, char* value) {
158
de2578a843a7 Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents: 152
diff changeset
442 store( tango.stdc.stringz.fromStringz(key).dup, tango.stdc.stringz.fromStringz(value).dup );
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
445 void store(String key, int value) {
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
446 store(key, to!(String)(value));
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
449 void store(String key, double value) {
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
450 store(key, to!(String)(value));
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
453 void store(String key, bool value) {
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
454 store(key, to!(String)(value));
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
457 void storeBytes(String key, char* value) {
158
de2578a843a7 Tango update to rev 3158, TracedException>Exception, fromUtf8z>fromStringz,Fix Bug in MenuItem Thanx to nascent for the report.
Frank Benoit <benoit@tionex.de>
parents: 152
diff changeset
458 store(key, tango.stdc.stringz.fromStringz(value).dup );
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460
238
380bad9f6852 reverted char[] to String
Frank Benoit <benoit@tionex.de>
parents: 200
diff changeset
461 void store(char [] key, String value) {
91
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 int length = key.length + 1 + value.length + 1;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 if (index + length + 1 > settingsData.length) {
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 char [] newData = new char[settingsData.length + Math.max(length + 1, 1024)];
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 newData[] = '\0';
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 System.arraycopy (settingsData, 0, newData, 0, settingsData.length);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 settingsData = newData;
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 System.arraycopy (key, 0, settingsData, index, key.length);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 index += key.length + 1; // null terminated
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 System.arraycopy (value, 0, settingsData, index, value.length);
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 index += value.length + 1; // null terminated
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 }
b58ec55ce70d package printing
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 }