blob: 62f1322e677823a2edf5b69ba6f0c3a0cfbed040 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SV_PRNDLG_HXX
#define _SV_PRNDLG_HXX
#include <vcl/dllapi.h>
#include "print.h"
#include "vcl/print.hxx"
#include "vcl/dialog.hxx"
#include "vcl/fixed.hxx"
#include "vcl/button.hxx"
#include "vcl/gdimtf.hxx"
#include "vcl/lstbox.hxx"
#include "vcl/field.hxx"
#include "vcl/tabctrl.hxx"
#include "vcl/tabpage.hxx"
#include "vcl/arrange.hxx"
#include "vcl/virdev.hxx"
#include <boost/shared_ptr.hpp>
#include <map>
namespace vcl
{
class PrintDialog : public ModalDialog
{
class PrintPreviewWindow : public Window
{
GDIMetaFile maMtf;
Size maOrigSize;
Size maPreviewSize;
VirtualDevice maPageVDev;
rtl::OUString maReplacementString;
rtl::OUString maToolTipString;
bool mbGreyscale;
FixedLine maHorzDim;
FixedLine maVertDim;
bool useHCColorReplacement() const;
public:
PrintPreviewWindow( Window* pParent, const ResId& );
virtual ~PrintPreviewWindow();
virtual void Paint( const Rectangle& rRect );
virtual void Command( const CommandEvent& );
virtual void Resize();
virtual void DataChanged( const DataChangedEvent& );
void setPreview( const GDIMetaFile&, const Size& i_rPaperSize,
const rtl::OUString& i_rPaperName,
const rtl::OUString& i_rNoPageString,
sal_Int32 i_nDPIX, sal_Int32 i_nDPIY,
bool i_bGreyscale
);
};
class ShowNupOrderWindow : public Window
{
int mnOrderMode;
int mnRows;
int mnColumns;
void ImplInitSettings();
public:
ShowNupOrderWindow( Window* pParent );
virtual ~ShowNupOrderWindow();
virtual void Paint( const Rectangle& );
void setValues( int i_nOrderMode, int i_nColumns, int i_nRows )
{
mnOrderMode = i_nOrderMode;
mnRows = i_nRows;
mnColumns = i_nColumns;
Invalidate();
}
};
class NUpTabPage : public TabPage
{
public:
FixedLine maNupLine;
RadioButton maPagesBtn;
RadioButton maBrochureBtn;
FixedText maPagesBoxTitleTxt;
ListBox maNupPagesBox;
// controls for "Custom" page mode
FixedText maNupNumPagesTxt;
NumericField maNupColEdt;
FixedText maNupTimesTxt;
NumericField maNupRowsEdt;
FixedText maPageMarginTxt1;
MetricField maPageMarginEdt;
FixedText maPageMarginTxt2;
FixedText maSheetMarginTxt1;
MetricField maSheetMarginEdt;
FixedText maSheetMarginTxt2;
FixedText maNupOrientationTxt;
ListBox maNupOrientationBox;
// page order ("left to right, then down")
FixedText maNupOrderTxt;
ListBox maNupOrderBox;
ShowNupOrderWindow maNupOrderWin;
// border around each page
CheckBox maBorderCB;
boost::shared_ptr< vcl::RowOrColumn > mxBrochureDep;
boost::shared_ptr< vcl::LabeledElement >mxPagesBtnLabel;
void setupLayout();
NUpTabPage( Window*, const ResId& );
virtual ~NUpTabPage();
void readFromSettings();
void storeToSettings();
void initFromMultiPageSetup( const vcl::PrinterController::MultiPageSetup& );
void enableNupControls( bool bEnable );
void showAdvancedControls( bool );
// virtual void Resize();
};
class JobTabPage : public TabPage
{
public:
FixedLine maPrinterFL;
ListBox maPrinters;
DisclosureButton maDetailsBtn;
FixedText maStatusLabel;
FixedText maStatusTxt;
FixedText maLocationLabel;
FixedText maLocationTxt;
FixedText maCommentLabel;
FixedText maCommentTxt;
PushButton maSetupButton;
FixedLine maCopies;
FixedLine maCopySpacer;
FixedText maCopyCount;
NumericField maCopyCountField;
CheckBox maCollateBox;
FixedImage maCollateImage;
CheckBox maReverseOrderBox;
Image maCollateImg;
Image maCollateHCImg;
Image maNoCollateImg;
Image maNoCollateHCImg;
long mnCollateUIMode;
boost::shared_ptr<vcl::RowOrColumn> mxPrintRange;
boost::shared_ptr<vcl::WindowArranger> mxDetails;
JobTabPage( Window*, const ResId& );
virtual ~JobTabPage();
void readFromSettings();
void storeToSettings();
// virtual void Resize();
void setupLayout();
};
class OutputOptPage : public TabPage
{
public:
FixedLine maOptionsLine;
CheckBox maToFileBox;
CheckBox maCollateSingleJobsBox;
boost::shared_ptr<vcl::RowOrColumn> mxOptGroup;
OutputOptPage( Window*, const ResId& );
virtual ~OutputOptPage();
void readFromSettings();
void storeToSettings();
// virtual void Resize();
void setupLayout();
};
OKButton maOKButton;
CancelButton maCancelButton;
HelpButton maHelpButton;
PrintPreviewWindow maPreviewWindow;
NumericField maPageEdit;
FixedText maNumPagesText;
PushButton maBackwardBtn;
PushButton maForwardBtn;
TabControl maTabCtrl;
NUpTabPage maNUpPage;
JobTabPage maJobPage;
OutputOptPage maOptionsPage;
FixedLine maButtonLine;
boost::shared_ptr< PrinterController > maPController;
rtl::OUString maPageStr;
rtl::OUString maNoPageStr;
sal_Int32 mnCurPage;
sal_Int32 mnCachedPages;
std::list< Window* > maControls;
std::map< Window*, rtl::OUString > maControlToPropertyMap;
std::map< rtl::OUString, std::vector< Window* > >
maPropertyToWindowMap;
std::map< Window*, sal_Int32 > maControlToNumValMap;
std::set< rtl::OUString > maReverseDependencySet;
Size maNupPortraitSize;
Size maNupLandscapeSize;
// internal, used for automatic Nup-Portrait/landscape
Size maFirstPageSize;
rtl::OUString maPrintToFileText;
rtl::OUString maPrintText;
rtl::OUString maDefPrtText;
boost::shared_ptr<vcl::RowOrColumn> mxPreviewCtrls;
Size maDetailsCollapsedSize;
Size maDetailsExpandedSize;
sal_Bool mbShowLayoutPage;
Size getJobPageSize();
void updateNup();
void updateNupFromPages();
void preparePreview( bool i_bPrintChanged = true, bool i_bMayUseCache = false );
void setPreviewText( sal_Int32 );
void updatePrinterText();
void checkControlDependencies();
void checkOptionalControlDependencies();
void makeEnabled( Window* );
void updateWindowFromProperty( const rtl::OUString& );
void setupOptionalUI();
void readFromSettings();
void storeToSettings();
com::sun::star::beans::PropertyValue* getValueForWindow( Window* ) const;
virtual void Resize();
virtual void Command( const CommandEvent& );
virtual void DataChanged( const DataChangedEvent& );
DECL_LINK( SelectHdl, ListBox* );
DECL_LINK( ClickHdl, Button* );
DECL_LINK( ModifyHdl, Edit* );
DECL_LINK( UIOptionsChanged, void* );
DECL_LINK( UIOption_CheckHdl, CheckBox* );
DECL_LINK( UIOption_RadioHdl, RadioButton* );
DECL_LINK( UIOption_SelectHdl, ListBox* );
DECL_LINK( UIOption_ModifyHdl, Edit* );
void setupLayout();
public:
PrintDialog( Window*, const boost::shared_ptr< PrinterController >& );
virtual ~PrintDialog();
bool isPrintToFile();
int getCopyCount();
bool isCollate();
bool isSingleJobs();
void previewForward();
void previewBackward();
};
class PrintProgressDialog : public ModelessDialog
{
String maStr;
FixedText maText;
CancelButton maButton;
bool mbCanceled;
sal_Int32 mnCur;
sal_Int32 mnMax;
long mnProgressHeight;
Rectangle maProgressRect;
bool mbNativeProgress;
DECL_LINK( ClickHdl, Button* );
void implCalcProgressRect();
public:
PrintProgressDialog( Window* i_pParent, int i_nMax );
~PrintProgressDialog();
bool isCanceled() const { return mbCanceled; }
void setProgress( int i_nCurrent, int i_nMax = -1 );
void tick();
void reset();
virtual void Paint( const Rectangle& );
};
}
#endif // _SV_PRNDLG_HXX