1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_VCL_PRINT_HXX
21 #define INCLUDED_VCL_PRINT_HXX
23 #include <sal/config.h>
25 #include <sal/types.h>
26 #include <rtl/ustring.hxx>
27 #include <tools/gen.hxx>
28 #include <tools/long.hxx>
29 #include <i18nutil/paper.hxx>
31 #include <vcl/dllapi.h>
33 #include <vcl/PrinterSupport.hxx>
34 #include <comphelper/errcode.hxx>
35 #include <vcl/outdev.hxx>
36 #include <vcl/prntypes.hxx>
37 #include <vcl/region.hxx>
38 #include <vcl/jobset.hxx>
40 #include <com/sun/star/beans/PropertyValue.hpp>
41 #include <com/sun/star/uno/Sequence.hxx>
42 #include <com/sun/star/view/PrintableState.hpp>
45 #include <unordered_map>
49 struct SalPrinterQueueInfo
;
53 enum class SalPrinterError
;
56 class PrinterController
;
63 namespace weld
{ class Window
; }
65 class VCL_DLLPUBLIC Printer
: public OutputDevice
67 friend class ::OutputDevice
;
70 SalInfoPrinter
* mpInfoPrinter
;
71 std::unique_ptr
<SalPrinter
> mpPrinter
;
72 SalGraphics
* mpJobGraphics
;
73 VclPtr
<Printer
> mpPrev
;
74 VclPtr
<Printer
> mpNext
;
75 VclPtr
<VirtualDevice
> mpDisplayDev
;
76 std::unique_ptr
<vcl::printer::Options
> mpPrinterOptions
;
77 OUString maPrinterName
;
84 sal_uInt16 mnPageQueueSize
;
85 sal_uInt16 mnCopyCount
;
93 bool mbSinglePrintJobs
;
95 VCL_DLLPRIVATE
void ImplInitData();
96 VCL_DLLPRIVATE
void ImplInit( SalPrinterQueueInfo
* pInfo
);
97 VCL_DLLPRIVATE
void ImplInitDisplay();
98 VCL_DLLPRIVATE
static SalPrinterQueueInfo
*
99 ImplGetQueueInfo( const OUString
& rPrinterName
, const OUString
* pDriver
);
100 VCL_DLLPRIVATE
void ImplUpdatePageData();
101 VCL_DLLPRIVATE
void ImplUpdateFontList();
102 VCL_DLLPRIVATE
void ImplFindPaperFormatForUserSize( JobSetup
& );
104 VCL_DLLPRIVATE
bool StartJob( const OUString
& rJobName
, std::shared_ptr
<vcl::PrinterController
> const & );
106 static VCL_DLLPRIVATE ErrCode
107 ImplSalPrinterErrorCodeToVCL( SalPrinterError nError
);
109 SAL_DLLPRIVATE
void ImplPrintTransparent (
111 const Point
& rDestPt
, const Size
& rDestSize
,
112 const Point
& rSrcPtPixel
, const Size
& rSrcSizePixel
);
115 VCL_DLLPRIVATE
void EndJob();
116 Printer( const Printer
& rPrinter
) = delete;
117 Printer
& operator =( const Printer
& rPrinter
) = delete;
120 VCL_DLLPRIVATE
void ImplStartPage();
121 VCL_DLLPRIVATE
void ImplEndPage();
124 virtual bool AcquireGraphics() const override
;
125 virtual void ReleaseGraphics( bool bRelease
= true ) override
;
126 void ImplReleaseGraphics(bool bRelease
= true);
127 virtual void ImplReleaseFonts() override
;
129 virtual tools::Long
GetGradientStepCount( tools::Long nMinRect
) override
;
130 virtual bool UsePolyPolygonForComplexGradient() override
;
131 virtual void ClipAndDrawGradientMetafile ( const Gradient
&rGradient
,
132 const tools::PolyPolygon
&rPolyPoly
) override
;
134 bool CanSubsampleBitmap() const override
{ return false; }
135 vcl::Region
ClipToDeviceBounds(vcl::Region aRegion
) const override
;
138 void SetSystemTextColor(SystemTextColorFlags
, bool) override
;
139 void DrawGradientEx( OutputDevice
* pOut
, const tools::Rectangle
& rRect
,
140 const Gradient
& rGradient
);
141 virtual Bitmap
GetBitmap( const Point
& rSrcPt
, const Size
& rSize
) const override
;
142 virtual Size
GetButtonBorderSize() override
;
143 virtual Color
GetMonochromeButtonColor() override
{ return COL_LIGHTGRAY
; }
145 bool IsScreenComp() const override
{ return false; }
147 void DrawBorder(tools::Rectangle aBorderRect
) override
149 SetLineColor(COL_BLACK
);
150 DrawRect(aBorderRect
);
153 css::awt::DeviceInfo
GetDeviceInfo() const override
;
156 virtual void DrawDeviceMask( const Bitmap
& rMask
, const Color
& rMaskColor
,
157 const Point
& rDestPt
, const Size
& rDestSize
,
158 const Point
& rSrcPtPixel
, const Size
& rSrcSizePixel
) override
;
160 bool DrawTransformBitmapExDirect( const basegfx::B2DHomMatrix
& aFullTransform
,
161 const BitmapEx
& rBitmapEx
, double fAlpha
= 1.0) override
;
163 bool TransformAndReduceBitmapExToTargetRange( const basegfx::B2DHomMatrix
& aFullTransform
,
164 basegfx::B2DRange
&aVisibleRange
, double &fMaximumArea
) override
;
166 void DrawDeviceBitmapEx( const Point
& rDestPt
, const Size
& rDestSize
,
167 const Point
& rSrcPtPixel
, const Size
& rSrcSizePixel
,
168 BitmapEx
& rBitmapEx
) override
;
170 virtual void EmulateDrawTransparent( const tools::PolyPolygon
& rPolyPoly
,
171 sal_uInt16 nTransparencePercent
) override
;
173 virtual void SetFontOrientation( LogicalFontInstance
* const pFontInstance
) const override
;
175 bool shouldDrawWavePixelAsRect(tools::Long
) const override
{ return true; }
176 void SetWaveLineColors(Color
const& rColor
, tools::Long
) override
;
177 Size
GetWaveLineSize(tools::Long nLineWidth
) const override
;
181 Printer( const JobSetup
& rJobSetup
);
182 Printer( const QueueInfo
& rQueueInfo
);
183 Printer( const OUString
& rPrinterName
);
184 virtual ~Printer() override
;
185 virtual void dispose() override
;
187 virtual void SetMetafileMapMode(const MapMode
& rNewMapMode
, bool) override
{ SetMapMode(rNewMapMode
); }
189 static const std::vector
< OUString
>&
191 static const QueueInfo
* GetQueueInfo( const OUString
& rPrinterName
, bool bStatusUpdate
);
192 static OUString
GetDefaultPrinterName();
194 const OUString
& GetName() const { return maPrinterName
; }
195 const OUString
& GetDriverName() const { return maDriver
; }
196 bool IsDefPrinter() const { return mbDefPrinter
; }
197 bool IsDisplayPrinter() const { return mpDisplayDev
!= nullptr; }
198 bool IsValid() const { return !IsDisplayPrinter(); }
200 sal_uInt32
GetCapabilities( PrinterCapType nType
) const;
201 bool HasSupport( PrinterSupport eFeature
) const;
203 bool SetJobSetup( const JobSetup
& rSetup
);
204 const JobSetup
& GetJobSetup() const { return maJobSetup
; }
206 bool Setup(weld::Window
* pWindow
,
207 PrinterSetupMode eMode
= PrinterSetupMode::DocumentGlobal
);
208 bool SetPrinterProps( const Printer
* pPrinter
);
210 Color
GetBackgroundColor() const override
{ return COL_WHITE
; }
211 Color
GetReadableFontColor(const Color
&, const Color
&) const override
{ return COL_BLACK
; }
213 /** SetPrinterOptions is used internally only now
215 in earlier times it was used only to set the options loaded directly from the configuration
216 in SfxPrinter::InitJob, this is now handled internally
217 should the need arise to set the printer options outside vcl, also a method would have to be devised
218 to not override these again internally
220 VCL_DLLPRIVATE
void SetPrinterOptions( const vcl::printer::Options
& rOptions
);
221 const vcl::printer::Options
& GetPrinterOptions() const { return( *mpPrinterOptions
); }
223 bool SetOrientation( Orientation eOrient
);
224 Orientation
GetOrientation() const;
225 void SetDuplexMode( DuplexMode
);
226 DuplexMode
GetDuplexMode() const;
228 bool SetPaperBin( sal_uInt16 nPaperBin
);
229 sal_uInt16
GetPaperBin() const;
230 void SetPaper( Paper ePaper
);
231 bool SetPaperSizeUser( const Size
& rSize
);
232 /** @return The paper format of the printer's current "jobsetup". Note that if PAPER_USER the actual size can be anything. */
233 Paper
GetPaper() const;
234 /** @return Size of the paper of the printer's current "jobsetup". */
235 Size
GetSizeOfPaper() const;
236 static OUString
GetPaperName( Paper ePaper
);
238 /** @return Number of available paper formats */
239 int GetPaperInfoCount() const;
241 /** @return Info about paper format nPaper */
242 const PaperInfo
& GetPaperInfo( int nPaper
) const;
243 sal_uInt16
GetPaperBinCount() const;
244 OUString
GetPaperBinName( sal_uInt16 nPaperBin
) const;
246 bool GetPrinterSettingsPreferred() const;
247 void SetPrinterSettingsPreferred( bool bPaperSizeFromSetup
);
249 const Size
& GetPaperSizePixel() const { return maPaperSize
; }
250 Size
GetPaperSize() const { return PixelToLogic( maPaperSize
); }
251 Size
GetPaperSize( int nPaper
) const;
252 const Point
& GetPageOffsetPixel() const { return maPageOffset
; }
253 Point
GetPageOffset() const { return PixelToLogic( maPageOffset
); }
255 void SetCopyCount( sal_uInt16 nCopy
, bool bCollate
);
256 sal_uInt16
GetCopyCount() const { return mnCopyCount
; }
257 bool IsCollateCopy() const { return mbCollateCopy
; }
258 void SetSinglePrintJobs(bool bSinglePrintJobs
) { mbSinglePrintJobs
= bSinglePrintJobs
; }
259 bool IsSinglePrintJobs() const { return mbSinglePrintJobs
; }
261 bool IsPrinting() const { return mbPrinting
; }
263 bool IsJobActive() const { return mbJobActive
; }
265 /** Checks the printer list and updates it necessary
267 sends a DataChanged event of type DataChangedEventType::PRINTER if the printer list changed
269 static void updatePrinters();
271 /** Execute a print job
273 starts a print job asynchronously that is will return
275 static void PrintJob( const std::shared_ptr
<vcl::PrinterController
>& i_pController
,
276 const JobSetup
& i_rInitSetup
);
278 virtual bool HasMirroredGraphics() const override
;
280 virtual void DrawOutDev( const Point
& rDestPt
, const Size
& rDestSize
,
281 const Point
& rSrcPt
, const Size
& rSrcSize
) override
;
283 virtual void DrawOutDev( const Point
& rDestPt
, const Size
& rDestSize
,
284 const Point
& rSrcPt
, const Size
& rSrcSize
,
285 const OutputDevice
& rOutDev
) override
;
287 virtual void CopyArea( const Point
& rDestPt
, const Point
& rSrcPt
,
288 const Size
& rSrcSize
, bool bWindowInvalidate
= false ) override
;
290 virtual tools::Rectangle
GetBackgroundComponentBounds() const override
;
292 // These 3 together are more modular PrintJob(), allowing printing more documents as one print job
293 // by repeated calls to ExecutePrintJob(). Used by mailmerge.
294 static bool PreparePrintJob( std::shared_ptr
<vcl::PrinterController
> i_pController
,
295 const JobSetup
& i_rInitSetup
);
296 static bool ExecutePrintJob(const std::shared_ptr
<vcl::PrinterController
>& i_pController
);
297 static void FinishPrintJob( const std::shared_ptr
<vcl::PrinterController
>& i_pController
);
299 /** Implementation detail of PrintJob being asynchronous
301 not exported, not usable outside vcl
303 static void VCL_DLLPRIVATE
ImplPrintJob( const std::shared_ptr
<vcl::PrinterController
>& i_pController
,
304 const JobSetup
& i_rInitSetup
);
309 class ImplPrinterControllerData
;
311 enum class NupOrderType
313 LRTB
, TBLR
, TBRL
, RLTB
316 class VCL_DLLPUBLIC PrinterController
318 std::unique_ptr
<ImplPrinterControllerData
>
321 PrinterController(const VclPtr
<Printer
>&, weld::Window
* pDialogParent
);
323 struct MultiPageSetup
325 // all metrics in 100th mm
329 tools::Long nLeftMargin
;
330 tools::Long nTopMargin
;
331 tools::Long nRightMargin
;
332 tools::Long nBottomMargin
;
333 tools::Long nHorizontalSpacing
;
334 tools::Long nVerticalSpacing
;
339 : nRows( 1 ), nColumns( 1 ), aPaperSize( 21000, 29700 )
340 , nLeftMargin( 0 ), nTopMargin( 0 )
341 , nRightMargin( 0 ), nBottomMargin( 0 )
342 , nHorizontalSpacing( 0 ), nVerticalSpacing( 0 )
343 , bDrawBorder( false )
344 , nOrder( NupOrderType::LRTB
) {}
352 /// Full paper, not only imageable area is printed
355 PageSize( const Size
& i_rSize
= Size( 21000, 29700 ),
356 bool i_bFullPaper
= false)
357 : aSize( i_rSize
), bFullPaper( i_bFullPaper
) {}
360 virtual ~PrinterController();
362 const VclPtr
<Printer
>& getPrinter() const;
363 weld::Window
* getWindow() const;
365 /** For implementations: get current job properties as changed by e.g. print dialog
367 this gets the current set of properties initially told to Printer::PrintJob
369 For convenience a second sequence will be merged in to get a combined sequence.
370 In case of duplicate property names, the value of i_MergeList wins.
372 css::uno::Sequence
< css::beans::PropertyValue
>
373 getJobProperties(const css::uno::Sequence
< css::beans::PropertyValue
>& i_rMergeList
) const;
375 /// Get the PropertyValue of a Property
376 css::beans::PropertyValue
* getValue( const OUString
& i_rPropertyName
);
377 const css::beans::PropertyValue
* getValue( const OUString
& i_rPropertyName
) const;
379 /** Get a bool property
381 in case the property is unknown or not convertible to bool, i_bFallback is returned
383 bool getBoolProperty( const OUString
& i_rPropertyName
, bool i_bFallback
) const;
385 /** Get an int property
387 in case the property is unknown or not convertible to bool, i_nFallback is returned
389 sal_Int32
getIntProperty( const OUString
& i_rPropertyName
, sal_Int32 i_nFallback
) const;
391 /// Set a property value - can also be used to add another UI property
392 void setValue( const OUString
& i_rPropertyName
, const css::uno::Any
& i_rValue
);
393 void setValue( const css::beans::PropertyValue
& i_rValue
);
395 /** @return The currently active UI options. These are the same that were passed to setUIOptions. */
396 const css::uno::Sequence
< css::beans::PropertyValue
>&
397 getUIOptions() const;
399 /** Set possible UI options.
401 should only be done once before passing the PrinterListener to Printer::PrintJob
403 void setUIOptions( const css::uno::Sequence
< css::beans::PropertyValue
>& );
405 /// Enable/disable an option; this can be used to implement dialog logic.
406 bool isUIOptionEnabled( const OUString
& rPropName
) const;
407 bool isUIChoiceEnabled( const OUString
& rPropName
, sal_Int32 nChoice
) const;
409 /** MakeEnabled will change the property rPropName depends on to the value
411 that makes rPropName enabled. If the dependency itself is also disabled,
412 no action will be performed.
414 @return The property name rPropName depends on or an empty string if no change was made.
416 OUString
makeEnabled( const OUString
& rPropName
);
418 /// App must override this
419 virtual int getPageCount() const = 0;
421 /** Get the page parameters
423 namely the jobsetup that should be active for the page
424 (describing among others the physical page size) and the "page size". In writer
425 case this would probably be the same as the JobSetup since writer sets the page size
426 draw/impress for example print their page on the paper set on the printer,
427 possibly adjusting the page size to fit. That means the page size can be different from
430 App must override this
432 @return Page size in 1/100th mm
434 virtual css::uno::Sequence
< css::beans::PropertyValue
>
435 getPageParameters( int i_nPage
) const = 0;
436 /// App must override this
437 virtual void printPage(int i_nPage
) const = 0;
439 /// Will be called after a possible dialog has been shown and the real printjob starts
440 virtual void jobStarted();
441 virtual void jobFinished( css::view::PrintableState
);
443 css::view::PrintableState
getJobState() const;
447 bool isShowDialogs() const;
448 bool isDirectPrint() const;
450 void dialogsParentClosing();
452 // implementation details, not usable outside vcl
453 // don't use outside vcl. Some of these are exported for
454 // the benefit of vcl's plugins.
455 // Still: DO NOT USE OUTSIDE VCL
456 int getFilteredPageCount() const;
457 VCL_DLLPRIVATE PageSize
getPageFile( int i_inUnfilteredPage
, GDIMetaFile
& rMtf
,
458 bool i_bMayUseCache
= false );
459 PageSize
getFilteredPageFile( int i_nFilteredPage
, GDIMetaFile
& o_rMtf
,
460 bool i_bMayUseCache
= false );
461 void printFilteredPage( int i_nPage
);
462 VCL_DLLPRIVATE
void setPrinter( const VclPtr
<Printer
>& );
463 void createProgressDialog();
464 bool isProgressCanceled() const;
465 VCL_DLLPRIVATE
void setMultipage( const MultiPageSetup
& );
466 VCL_DLLPRIVATE
const MultiPageSetup
&
467 getMultipage() const;
468 void setLastPage( bool i_bLastPage
);
469 VCL_DLLPRIVATE
void setReversePrint( bool i_bReverse
);
470 VCL_DLLPRIVATE
void setPapersizeFromSetup( bool i_bPapersizeFromSetup
);
471 VCL_DLLPRIVATE
bool getPapersizeFromSetup() const;
472 VCL_DLLPRIVATE
void setPaperSizeFromUser( Size i_aUserSize
);
473 VCL_DLLPRIVATE
void setOrientationFromUser( Orientation eOrientation
, bool set
);
474 void setPrinterModified( bool i_bPapersizeFromSetup
);
475 bool getPrinterModified() const;
476 VCL_DLLPRIVATE
void pushPropertiesToPrinter();
477 VCL_DLLPRIVATE
void resetPaperToLastConfigured();
478 void setJobState( css::view::PrintableState
);
479 VCL_DLLPRIVATE
void setupPrinter( weld::Window
* i_pDlgParent
);
481 VCL_DLLPRIVATE
int getPageCountProtected() const;
482 VCL_DLLPRIVATE
css::uno::Sequence
< css::beans::PropertyValue
>
483 getPageParametersProtected( int i_nPage
) const;
485 VCL_DLLPRIVATE DrawModeFlags
removeTransparencies( GDIMetaFile
const & i_rIn
, GDIMetaFile
& o_rOut
);
486 VCL_DLLPRIVATE
void resetPrinterOptions( bool i_bFileOutput
);
489 class VCL_DLLPUBLIC PrinterOptionsHelper
492 std::unordered_map
< OUString
, css::uno::Any
>
494 std::vector
< css::beans::PropertyValue
>
499 /// Create without ui properties
500 PrinterOptionsHelper() {}
502 /** Process a new set of properties
504 merges changed properties and returns "true" if any occurred
506 bool processProperties( const css::uno::Sequence
< css::beans::PropertyValue
>& i_rNewProp
);
508 /** Append to a sequence of property values the ui property sequence passed at creation
510 as the "ExtraPrintUIOptions" property. if that sequence was empty, no "ExtraPrintUIOptions" property
513 void appendPrintUIOptions( css::uno::Sequence
< css::beans::PropertyValue
>& io_rProps
) const;
515 /** @return An empty Any for not existing properties */
516 css::uno::Any
getValue( const OUString
& i_rPropertyName
) const;
518 bool getBoolValue( const OUString
& i_rPropertyName
, bool i_bDefault
) const;
519 // convenience for fixed strings
520 bool getBoolValue( const char* i_pPropName
, bool i_bDefault
= false ) const
521 { return getBoolValue( OUString::createFromAscii( i_pPropName
), i_bDefault
); }
523 sal_Int64
getIntValue( const OUString
& i_rPropertyName
, sal_Int64 i_nDefault
) const;
524 // convenience for fixed strings
525 sal_Int64
getIntValue( const char* i_pPropName
, sal_Int64 i_nDefault
) const
526 { return getIntValue( OUString::createFromAscii( i_pPropName
), i_nDefault
); }
528 OUString
getStringValue( const OUString
& i_rPropertyName
) const;
529 // convenience for fixed strings
530 OUString
getStringValue( const char* i_pPropName
) const
531 { return getStringValue( OUString::createFromAscii( i_pPropName
) ); }
533 // helper functions for user to create a single control
534 struct UIControlOptions
536 OUString maDependsOnName
;
537 OUString maGroupHint
;
538 std::vector
< css::beans::PropertyValue
>
540 sal_Int32 mnDependsOnEntry
;
541 bool mbAttachToDependency
;
545 UIControlOptions( OUString i_DependsOnName
= OUString(),
546 sal_Int32 i_nDependsOnEntry
= -1, bool i_bAttachToDependency
= false)
547 : maDependsOnName(std::move( i_DependsOnName
))
548 , mnDependsOnEntry( i_nDependsOnEntry
)
549 , mbAttachToDependency( i_bAttachToDependency
)
550 , mbInternalOnly( false )
551 , mbEnabled( true ) {}
554 // note: in the following helper functions HelpIds are expected as an OUString
555 // the normal HelpId form is OString (byte string instead of UTF16 string)
556 // this is because the whole interface is base on UNO properties; in fact the structures
557 // are passed over UNO interfaces. UNO does not know a byte string, hence the string is
558 // transported via UTF16 strings.
560 /// Show general control
561 static css::uno::Any
setUIControlOpt( const css::uno::Sequence
< OUString
>& i_rIDs
, const OUString
& i_rTitle
,
562 const css::uno::Sequence
< OUString
>& i_rHelpId
, const OUString
& i_rType
,
563 const css::beans::PropertyValue
* i_pValue
= nullptr,
564 const UIControlOptions
& i_rControlOptions
= UIControlOptions());
566 /// Show and set the title of a TagPage of id i_rID
567 static css::uno::Any
setGroupControlOpt( const OUString
& i_rID
, const OUString
& i_rTitle
,
568 const OUString
& i_rHelpId
);
570 /// Show and set the label of a VclFrame of id i_rID
571 static css::uno::Any
setSubgroupControlOpt( const OUString
& i_rID
, const OUString
& i_rTitle
, const OUString
& i_rHelpId
,
572 const UIControlOptions
& i_rControlOptions
= UIControlOptions());
574 /// Show a bool option as a checkbox
575 static css::uno::Any
setBoolControlOpt( const OUString
& i_rID
, const OUString
& i_rTitle
, const OUString
& i_rHelpId
,
576 const OUString
& i_rProperty
, bool i_bValue
,
577 const UIControlOptions
& i_rControlOptions
= UIControlOptions());
579 /// Show a set of choices in a list box
580 static css::uno::Any
setChoiceListControlOpt( const OUString
& i_rID
, const OUString
& i_rTitle
,
581 const css::uno::Sequence
< OUString
>& i_rHelpId
, const OUString
& i_rProperty
,
582 const css::uno::Sequence
< OUString
>& i_rChoices
, sal_Int32 i_nValue
,
583 const css::uno::Sequence
< sal_Bool
>& i_rDisabledChoices
= css::uno::Sequence
< sal_Bool
>(),
584 const UIControlOptions
& i_rControlOptions
= UIControlOptions());
586 /// Show a set of choices as radio buttons
587 static css::uno::Any
setChoiceRadiosControlOpt( const css::uno::Sequence
< OUString
>& i_rIDs
,
588 const OUString
& i_rTitle
, const css::uno::Sequence
< OUString
>& i_rHelpId
,
589 const OUString
& i_rProperty
, const css::uno::Sequence
< OUString
>& i_rChoices
,
591 const css::uno::Sequence
< sal_Bool
>& i_rDisabledChoices
= css::uno::Sequence
< sal_Bool
>(),
592 const UIControlOptions
& i_rControlOptions
= UIControlOptions());
594 /** Show an integer range (e.g. a spin field)
596 note: max value < min value means do not apply min/max values
598 static css::uno::Any
setRangeControlOpt( const OUString
& i_rID
, const OUString
& i_rTitle
, const OUString
& i_rHelpId
,
599 const OUString
& i_rProperty
, sal_Int32 i_nValue
, sal_Int32 i_nMinValue
,
600 sal_Int32 i_nMaxValue
, const UIControlOptions
& i_rControlOptions
);
602 /** Show a string field
604 note: max value < min value means do not apply min/max values
606 static css::uno::Any
setEditControlOpt( const OUString
& i_rID
, const OUString
& i_rTitle
, const OUString
& i_rHelpId
,
607 const OUString
& i_rProperty
, const OUString
& i_rValue
,
608 const UIControlOptions
& i_rControlOptions
);
609 }; // class PrinterOptionsHelper
614 #endif // INCLUDED_VCL_PRINT_HXX
616 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */