office-gobmx/vcl/inc/printdlg.hxx
Noel Grandin 6a7a0ac6aa Revert "loplugin:constfields in vcl"
This reverts commit 59887868da.

Change-Id: I0f3f6a7680c78103a559a0f881badc8211b97ace
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90544
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-03-16 09:38:24 +01:00

291 lines
12 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef VCL_INC_NEWPRINTDLG_HXX
#define VCL_INC_NEWPRINTDLG_HXX
#include <vcl/bitmapex.hxx>
#include <vcl/gdimtf.hxx>
#include <vcl/print.hxx>
#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
#include <map>
namespace vcl {
class PrintDialog;
}
namespace vcl
{
class MoreOptionsDialog final : public weld::GenericDialogController
{
PrintDialog* mpParent;
std::unique_ptr<weld::Button> mxOKButton;
std::unique_ptr<weld::Button> mxCancelButton;
std::unique_ptr<weld::CheckButton> mxSingleJobsBox;
DECL_LINK( ClickHdl, weld::Button&, void );
public:
MoreOptionsDialog(PrintDialog* i_pParent);
virtual ~MoreOptionsDialog() override;
};
class PrintDialog : public weld::GenericDialogController
{
friend class MoreOptionsDialog;
public:
class PrintPreviewWindow final : public weld::CustomWidgetController
{
PrintDialog* mpDialog;
GDIMetaFile maMtf;
Size maOrigSize;
Size maPreviewSize;
sal_Int32 mnDPIX;
sal_Int32 mnDPIY;
BitmapEx maPreviewBitmap;
OUString maReplacementString;
bool mbGreyscale;
OUString maHorzText;
OUString maVertText;
void preparePreviewBitmap();
public:
PrintPreviewWindow(PrintDialog* pDialog);
virtual ~PrintPreviewWindow() override;
virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
virtual bool Command( const CommandEvent& ) override;
virtual void Resize() override;
void setPreview( const GDIMetaFile&, const Size& i_rPaperSize,
const OUString& i_rPaperName,
const OUString& i_rNoPageString,
sal_Int32 i_nDPIX, sal_Int32 i_nDPIY,
bool i_bGreyscale
);
};
class ShowNupOrderWindow final : public weld::CustomWidgetController
{
NupOrderType mnOrderMode;
int mnRows;
int mnColumns;
public:
ShowNupOrderWindow();
virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& ) override;
void setValues( NupOrderType i_nOrderMode, int i_nColumns, int i_nRows )
{
mnOrderMode = i_nOrderMode;
mnRows = i_nRows;
mnColumns = i_nColumns;
Invalidate();
}
};
PrintDialog(weld::Window*, const std::shared_ptr<PrinterController>&);
virtual ~PrintDialog() override;
bool isPrintToFile() const;
bool isCollate() const;
bool isSingleJobs() const { return mbSingleJobs; };
bool hasPreview() const;
void setPaperSizes();
void previewForward();
void previewBackward();
void previewFirst();
void previewLast();
private:
std::unique_ptr<weld::Builder> mxCustomOptionsUIBuilder;
std::shared_ptr<PrinterController> maPController;
std::unique_ptr<MoreOptionsDialog> mxMoreOptionsDlg;
std::unique_ptr<weld::Notebook> mxTabCtrl;
std::unique_ptr<weld::Frame> mxPageLayoutFrame;
std::unique_ptr<weld::ComboBox> mxPrinters;
std::unique_ptr<weld::Label> mxStatusTxt;
std::unique_ptr<weld::Button> mxSetupButton;
std::unique_ptr<weld::SpinButton> mxCopyCountField;
std::unique_ptr<weld::CheckButton> mxCollateBox;
std::unique_ptr<weld::Image> mxCollateImage;
std::unique_ptr<weld::Entry> mxPageRangeEdit;
std::unique_ptr<weld::RadioButton> mxPageRangesRadioButton;
std::unique_ptr<weld::ComboBox> mxPaperSidesBox;
std::unique_ptr<weld::CheckButton> mxReverseOrderBox;
std::unique_ptr<weld::Button> mxOKButton;
std::unique_ptr<weld::Button> mxCancelButton;
std::unique_ptr<weld::Button> mxHelpButton;
std::unique_ptr<weld::Button> mxMoreOptionsBtn;
std::unique_ptr<weld::Button> mxBackwardBtn;
std::unique_ptr<weld::Button> mxForwardBtn;
std::unique_ptr<weld::Button> mxFirstBtn;
std::unique_ptr<weld::Button> mxLastBtn;
std::unique_ptr<weld::CheckButton> mxPreviewBox;
std::unique_ptr<weld::Label> mxNumPagesText;
std::unique_ptr<PrintPreviewWindow> mxPreview;
std::unique_ptr<weld::CustomWeld> mxPreviewWindow;
std::unique_ptr<weld::Entry> mxPageEdit;
std::unique_ptr<weld::RadioButton> mxPagesBtn;
std::unique_ptr<weld::RadioButton> mxBrochureBtn;
std::unique_ptr<weld::Label> mxPagesBoxTitleTxt;
std::unique_ptr<weld::ComboBox> mxNupPagesBox;
// controls for "Custom" page mode
std::unique_ptr<weld::Label> mxNupNumPagesTxt;
std::unique_ptr<weld::SpinButton> mxNupColEdt;
std::unique_ptr<weld::Label> mxNupTimesTxt;
std::unique_ptr<weld::SpinButton> mxNupRowsEdt;
std::unique_ptr<weld::Label> mxPageMarginTxt1;
std::unique_ptr<weld::MetricSpinButton> mxPageMarginEdt;
std::unique_ptr<weld::Label> mxPageMarginTxt2;
std::unique_ptr<weld::Label> mxSheetMarginTxt1;
std::unique_ptr<weld::MetricSpinButton> mxSheetMarginEdt;
std::unique_ptr<weld::Label> mxSheetMarginTxt2;
std::unique_ptr<weld::ComboBox> mxPaperSizeBox;
std::unique_ptr<weld::ComboBox> mxOrientationBox;
// page order ("left to right, then down")
std::unique_ptr<weld::Label> mxNupOrderTxt;
std::unique_ptr<weld::ComboBox> mxNupOrderBox;
std::unique_ptr<ShowNupOrderWindow> mxNupOrder;
std::unique_ptr<weld::CustomWeld> mxNupOrderWin;
/// border around each page
std::unique_ptr<weld::CheckButton> mxBorderCB;
std::unique_ptr<weld::Expander> mxRangeExpander;
std::unique_ptr<weld::Expander> mxLayoutExpander;
std::unique_ptr<weld::Widget> mxCustom;
OUString maPrintToFileText;
OUString maPrintText;
OUString maDefPrtText;
OUString maPageStr;
OUString maNoPageStr;
OUString maNoPreviewStr;
sal_Int32 mnCurPage;
sal_Int32 mnCachedPages;
bool mbCollateAlwaysOff;
std::vector<std::unique_ptr<weld::Widget>>
maExtraControls;
std::map<weld::Widget*, OUString>
maControlToPropertyMap;
std::map<OUString, std::vector<weld::Widget*>>
maPropertyToWindowMap;
std::map<weld::Widget*, sal_Int32>
maControlToNumValMap;
Size maNupPortraitSize;
Size maNupLandscapeSize;
/// internal, used for automatic Nup-Portrait/landscape
Size maFirstPageSize;
bool mbShowLayoutFrame;
bool mbSingleJobs;
Paper mePaper;
DECL_LINK( ClickHdl, weld::Button&, void );
DECL_LINK( SelectHdl, weld::ComboBox&, void );
DECL_LINK( ActivateHdl, weld::Entry&, bool );
DECL_LINK( FocusOutHdl, weld::Widget&, void );
DECL_LINK( SpinModifyHdl, weld::SpinButton&, void );
DECL_LINK( MetricSpinModifyHdl, weld::MetricSpinButton&, void );
DECL_LINK( ToggleHdl, weld::ToggleButton&, void );
DECL_LINK( UIOption_CheckHdl, weld::ToggleButton&, void );
DECL_LINK( UIOption_RadioHdl, weld::ToggleButton&, void );
DECL_LINK( UIOption_SelectHdl, weld::ComboBox&, void );
DECL_LINK( UIOption_SpinModifyHdl, weld::SpinButton&, void );
DECL_LINK( UIOption_EntryModifyHdl, weld::Entry&, void );
DECL_LINK( ExpandHdl, weld::Expander&, void );
css::beans::PropertyValue* getValueForWindow(weld::Widget*) const;
void preparePreview( bool i_bMayUseCache );
void setupPaperSidesBox();
void storeToSettings();
void readFromSettings();
void setPaperOrientation( Orientation eOrientation );
void updateOrientationBox( bool bAutomatic = true );
bool hasOrientationChanged() const;
void checkPaperSize( Size& rPaperSize );
void setPreviewText();
void updatePrinterText();
void checkControlDependencies();
void checkOptionalControlDependencies();
void makeEnabled( weld::Widget* );
void updateWindowFromProperty( const OUString& );
void initFromMultiPageSetup( const vcl::PrinterController::MultiPageSetup& );
void showAdvancedControls( bool );
void updateNup( bool i_bMayUseCache = true );
void updateNupFromPages( bool i_bMayUseCache = true );
void enableNupControls( bool bEnable );
void setupOptionalUI();
Size const & getJobPageSize();
};
class PrintProgressDialog final : public weld::GenericDialogController
{
OUString maStr;
bool mbCanceled;
sal_Int32 mnCur;
sal_Int32 mnMax;
std::unique_ptr<weld::Label> mxText;
std::unique_ptr<weld::ProgressBar> mxProgress;
std::unique_ptr<weld::Button> mxButton;
DECL_LINK( ClickHdl, weld::Button&, void );
public:
PrintProgressDialog(weld::Window* i_pParent, int i_nMax);
virtual ~PrintProgressDialog() override;
bool isCanceled() const { return mbCanceled; }
void setProgress( int i_nCurrent );
void tick();
};
}
#endif // VCL_INC_NEWPRINTDLG_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */