Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef INCLUDED_VCL_INC_PRINTDLG_HXX
21 : #define INCLUDED_VCL_INC_PRINTDLG_HXX
22 :
23 : #include <vcl/dllapi.h>
24 :
25 : #include "print.h"
26 :
27 : #include "vcl/print.hxx"
28 : #include "vcl/dialog.hxx"
29 : #include "vcl/fixed.hxx"
30 : #include "vcl/button.hxx"
31 : #include "vcl/gdimtf.hxx"
32 : #include "vcl/lstbox.hxx"
33 : #include "vcl/prgsbar.hxx"
34 : #include "vcl/field.hxx"
35 : #include "vcl/tabctrl.hxx"
36 : #include "vcl/tabpage.hxx"
37 : #include "vcl/virdev.hxx"
38 :
39 : #include <boost/shared_ptr.hpp>
40 : #include <map>
41 :
42 : namespace vcl
43 : {
44 : class PrintDialog : public ModalDialog
45 : {
46 : public:
47 : class PrintPreviewWindow : public vcl::Window
48 : {
49 : static const sal_Int32 PREVIEW_BITMAP_WIDTH;
50 :
51 : GDIMetaFile maMtf;
52 : Size maOrigSize;
53 : Size maPreviewSize;
54 : VirtualDevice maPageVDev;
55 : Bitmap maPreviewBitmap;
56 : OUString maReplacementString;
57 : OUString maToolTipString;
58 : bool mbGreyscale;
59 : FixedLine maHorzDim;
60 : FixedLine maVertDim;
61 :
62 : void preparePreviewBitmap();
63 :
64 : public:
65 : PrintPreviewWindow( vcl::Window* pParent );
66 : virtual ~PrintPreviewWindow();
67 :
68 : virtual void Paint( const Rectangle& rRect ) SAL_OVERRIDE;
69 : virtual void Command( const CommandEvent& ) SAL_OVERRIDE;
70 : virtual void Resize() SAL_OVERRIDE;
71 : virtual void DataChanged( const DataChangedEvent& ) SAL_OVERRIDE;
72 :
73 : void setPreview( const GDIMetaFile&, const Size& i_rPaperSize,
74 : const OUString& i_rPaperName,
75 : const OUString& i_rNoPageString,
76 : sal_Int32 i_nDPIX, sal_Int32 i_nDPIY,
77 : bool i_bGreyscale
78 : );
79 : };
80 :
81 : class ShowNupOrderWindow : public vcl::Window
82 : {
83 : int mnOrderMode;
84 : int mnRows;
85 : int mnColumns;
86 : void ImplInitSettings();
87 : public:
88 : ShowNupOrderWindow( vcl::Window* pParent );
89 : virtual ~ShowNupOrderWindow();
90 :
91 : virtual Size GetOptimalSize() const SAL_OVERRIDE;
92 :
93 : virtual void Paint( const Rectangle& ) SAL_OVERRIDE;
94 :
95 0 : void setValues( int i_nOrderMode, int i_nColumns, int i_nRows )
96 : {
97 0 : mnOrderMode = i_nOrderMode;
98 0 : mnRows = i_nRows;
99 0 : mnColumns = i_nColumns;
100 0 : Invalidate();
101 0 : }
102 : };
103 :
104 : private:
105 :
106 : class NUpTabPage
107 : {
108 : public:
109 : RadioButton* mpPagesBtn;
110 : RadioButton* mpBrochureBtn;
111 : FixedText* mpPagesBoxTitleTxt;
112 : ListBox* mpNupPagesBox;
113 :
114 : // controls for "Custom" page mode
115 : FixedText* mpNupNumPagesTxt;
116 : NumericField* mpNupColEdt;
117 : FixedText* mpNupTimesTxt;
118 : NumericField* mpNupRowsEdt;
119 : FixedText* mpPageMarginTxt1;
120 : MetricField* mpPageMarginEdt;
121 : FixedText* mpPageMarginTxt2;
122 : FixedText* mpSheetMarginTxt1;
123 : MetricField* mpSheetMarginEdt;
124 : FixedText* mpSheetMarginTxt2;
125 : FixedText* mpNupOrientationTxt;
126 : ListBox* mpNupOrientationBox;
127 :
128 : // page order ("left to right, then down")
129 : FixedText* mpNupOrderTxt;
130 : ListBox* mpNupOrderBox;
131 : ShowNupOrderWindow* mpNupOrderWin;
132 : /// border around each page
133 : CheckBox* mpBorderCB;
134 :
135 : void setupLayout();
136 :
137 : NUpTabPage( VclBuilder* );
138 :
139 : void readFromSettings();
140 : void storeToSettings();
141 : void initFromMultiPageSetup( const vcl::PrinterController::MultiPageSetup& );
142 : void enableNupControls( bool bEnable );
143 :
144 : void showAdvancedControls( bool );
145 : };
146 :
147 0 : class JobTabPage
148 : {
149 : public:
150 : ListBox* mpPrinters;
151 : FixedText* mpStatusTxt;
152 : FixedText* mpLocationTxt;
153 : FixedText* mpCommentTxt;
154 :
155 : PushButton* mpSetupButton;
156 :
157 : FixedLine* mpCopySpacer;
158 : NumericField* mpCopyCountField;
159 : CheckBox* mpCollateBox;
160 : FixedImage* mpCollateImage;
161 : CheckBox* mpReverseOrderBox;
162 :
163 : Image maCollateImg;
164 : Image maNoCollateImg;
165 :
166 : long mnCollateUIMode;
167 :
168 : JobTabPage( VclBuilder* );
169 :
170 : void readFromSettings();
171 : void storeToSettings();
172 : };
173 :
174 : class OutputOptPage
175 : {
176 : public:
177 : CheckBox* mpToFileBox;
178 : CheckBox* mpCollateSingleJobsBox;
179 : CheckBox* mpPapersizeFromSetup;
180 :
181 : OutputOptPage( VclBuilder* );
182 :
183 : void readFromSettings();
184 : void storeToSettings();
185 : };
186 :
187 : VclBuilder* mpCustomOptionsUIBuilder;
188 :
189 : boost::shared_ptr< PrinterController > maPController;
190 : TabControl* mpTabCtrl;
191 : NUpTabPage maNUpPage;
192 : JobTabPage maJobPage;
193 : OutputOptPage maOptionsPage;
194 : PrintPreviewWindow* mpPreviewWindow;
195 : NumericField* mpPageEdit;
196 :
197 : FixedText* mpNumPagesText;
198 : PushButton* mpBackwardBtn;
199 : PushButton* mpForwardBtn;
200 :
201 : OKButton* mpOKButton;
202 : CancelButton* mpCancelButton;
203 : HelpButton* mpHelpButton;
204 :
205 : OUString maPageStr;
206 : OUString maNoPageStr;
207 : sal_Int32 mnCurPage;
208 : sal_Int32 mnCachedPages;
209 :
210 : std::map< vcl::Window*, OUString > maControlToPropertyMap;
211 : std::map< OUString, std::vector< vcl::Window* > >
212 : maPropertyToWindowMap;
213 : std::map< vcl::Window*, sal_Int32 > maControlToNumValMap;
214 : std::set< OUString > maReverseDependencySet;
215 :
216 : Size maNupPortraitSize;
217 : Size maNupLandscapeSize;
218 :
219 : /// internal, used for automatic Nup-Portrait/landscape
220 : Size maFirstPageSize;
221 :
222 : OUString maPrintToFileText;
223 : OUString maPrintText;
224 : OUString maDefPrtText;
225 :
226 : Size maDetailsCollapsedSize;
227 : Size maDetailsExpandedSize;
228 :
229 : bool mbShowLayoutPage;
230 :
231 : Size getJobPageSize();
232 : void updateNup();
233 : void updateNupFromPages();
234 : void preparePreview( bool i_bPrintChanged = true, bool i_bMayUseCache = false );
235 : void setPreviewText( sal_Int32 );
236 : void updatePrinterText();
237 : void checkControlDependencies();
238 : void checkOptionalControlDependencies();
239 : void makeEnabled( vcl::Window* );
240 : void updateWindowFromProperty( const OUString& );
241 : void setupOptionalUI();
242 : void readFromSettings();
243 : void storeToSettings();
244 : com::sun::star::beans::PropertyValue* getValueForWindow( vcl::Window* ) const;
245 :
246 : virtual void Resize() SAL_OVERRIDE;
247 : virtual void Command( const CommandEvent& ) SAL_OVERRIDE;
248 : virtual void DataChanged( const DataChangedEvent& ) SAL_OVERRIDE;
249 :
250 : DECL_LINK( SelectHdl, ListBox* );
251 : DECL_LINK( ClickHdl, Button* );
252 : DECL_LINK( ModifyHdl, Edit* );
253 : DECL_LINK( UIOptionsChanged, void* );
254 :
255 : DECL_LINK( UIOption_CheckHdl, CheckBox* );
256 : DECL_LINK( UIOption_RadioHdl, RadioButton* );
257 : DECL_LINK( UIOption_SelectHdl, ListBox* );
258 : DECL_LINK( UIOption_ModifyHdl, Edit* );
259 :
260 : public:
261 : PrintDialog( vcl::Window*, const boost::shared_ptr< PrinterController >& );
262 : virtual ~PrintDialog();
263 :
264 : bool isPrintToFile();
265 : bool isCollate();
266 : bool isSingleJobs();
267 :
268 : void previewForward();
269 : void previewBackward();
270 : };
271 :
272 0 : class PrintProgressDialog : public ModelessDialog
273 : {
274 : OUString maStr;
275 : FixedText* mpText;
276 : ProgressBar* mpProgress;
277 : CancelButton* mpButton;
278 :
279 : bool mbCanceled;
280 : sal_Int32 mnCur;
281 : sal_Int32 mnMax;
282 :
283 : DECL_LINK( ClickHdl, Button* );
284 :
285 : public:
286 : PrintProgressDialog(vcl::Window* i_pParent, int i_nMax);
287 :
288 0 : bool isCanceled() const { return mbCanceled; }
289 : void setProgress( int i_nCurrent, int i_nMax = -1 );
290 : void tick();
291 : void reset();
292 : };
293 : }
294 :
295 : #endif // INCLUDED_VCL_INC_PRINTDLG_HXX
296 :
297 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|