[Libreoffice-commits] core.git: Branch 'feature/print_revamp' - sw/source vcl/inc vcl/source vcl/uiconfig
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Sat Aug 11 13:51:07 UTC 2018
sw/source/uibase/uno/unotxdoc.cxx | 57 +++++++++++++++++----
vcl/inc/printdlg.hxx | 9 ++-
vcl/source/gdi/print3.cxx | 2
vcl/source/window/printdlg.cxx | 99 +++++++++++++++++++++++++++++++-------
vcl/uiconfig/ui/printdialog.ui | 20 +++++++
5 files changed, 155 insertions(+), 32 deletions(-)
New commits:
commit 484843082084060ffd8b5c079da721093820bf21
Author: Daniel Silva <danielfaleirosilva at gmail.com>
AuthorDate: Sat Jul 7 09:42:07 2018 -0300
Commit: Daniel Silva <danielfaleirosilva at gmail.com>
CommitDate: Sat Aug 11 15:50:45 2018 +0200
Sets page orientation box in print dialog
Change-Id: If12b833db5db372738ce02d1ed0d77145f3ffa0f
Reviewed-on: https://gerrit.libreoffice.org/57131
Tested-by: Jenkins
Reviewed-by: Daniel Silva <danielfaleirosilva at gmail.com>
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index 0a22921c96e6..ac47ce2e78d0 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -2367,6 +2367,43 @@ static bool lcl_SeqHasProperty(
return bRes;
}
+static bool lcl_GetBoolProperty(
+ const uno::Sequence< beans::PropertyValue >& rOptions,
+ const sal_Char *pPropName )
+{
+ bool bRes = false;
+ const sal_Int32 nLen = rOptions.getLength();
+ const beans::PropertyValue *pProps = rOptions.getConstArray();
+ for ( sal_Int32 i = 0; i < nLen; ++i )
+ {
+ if ( pProps[i].Name.equalsAscii( pPropName ) )
+ {
+ pProps[i].Value >>= bRes;
+ break;
+ }
+ }
+ return bRes;
+}
+
+static sal_Int32 lcl_GetIntProperty(
+ const uno::Sequence< beans::PropertyValue >& rOptions,
+ const sal_Char *pPropName,
+ sal_Int32 nDefault )
+{
+ sal_Int32 nRes = nDefault;
+ const sal_Int32 nLen = rOptions.getLength();
+ const beans::PropertyValue *pProps = rOptions.getConstArray();
+ for ( sal_Int32 i = 0; i < nLen; ++i )
+ {
+ if ( pProps[i].Name.equalsAscii( pPropName ) )
+ {
+ pProps[i].Value >>= nRes;
+ break;
+ }
+ }
+ return nRes;
+}
+
SfxViewShell * SwXTextDocument::GetRenderView(
bool &rbIsSwSrcView,
const uno::Sequence< beans::PropertyValue >& rOptions,
@@ -2561,6 +2598,13 @@ sal_Int32 SAL_CALL SwXTextDocument::getRendererCount(
if (!pViewShell || !pViewShell->GetLayout())
return 0;
+ // make sure document orientation matches printer paper orientation
+ sal_Int32 nLandscape = lcl_GetIntProperty( rxOptions, "IsLandscape", -1 );
+ if ( nLandscape == 1 )
+ pViewShell->ChgAllPageOrientation( Orientation::Landscape );
+ else if ( nLandscape == 0 )
+ pViewShell->ChgAllPageOrientation( Orientation::Portrait );
+
if (bFormat)
{
// #i38289
@@ -2603,18 +2647,7 @@ sal_Int32 SAL_CALL SwXTextDocument::getRendererCount(
? nullptr : m_pRenderData->GetSwPrtOptions();
bool setShowPlaceHoldersInPDF = false;
if(bIsPDFExport)
- {
- const sal_Int32 nLen = rxOptions.getLength();
- const beans::PropertyValue *pProps = rxOptions.getConstArray();
- for (sal_Int32 i = 0; i < nLen; ++i)
- {
- if (pProps[i].Name == "ExportPlaceholders")
- {
- pProps[i].Value >>= setShowPlaceHoldersInPDF;
- break;
- }
- }
- }
+ setShowPlaceHoldersInPDF = lcl_GetBoolProperty( rxOptions, "ExportPlaceholders" );
m_pRenderData->ViewOptionAdjust( pPrtOptions, setShowPlaceHoldersInPDF );
}
diff --git a/vcl/inc/printdlg.hxx b/vcl/inc/printdlg.hxx
index 3edc2ceb3c69..3b6ad1827fa3 100644
--- a/vcl/inc/printdlg.hxx
+++ b/vcl/inc/printdlg.hxx
@@ -186,7 +186,7 @@ namespace vcl
VclPtr<MetricField> mpSheetMarginEdt;
VclPtr<FixedText> mpSheetMarginTxt2;
VclPtr<ListBox> mpPaperSizeBox;
- VclPtr<ListBox> mpNupOrientationBox;
+ VclPtr<ListBox> mpOrientationBox;
// page order ("left to right, then down")
VclPtr<FixedText> mpNupOrderTxt;
@@ -230,6 +230,9 @@ namespace vcl
void setupPaperSidesBox();
void storeToSettings();
void readFromSettings();
+ void setPaperOrientation( Orientation eOrientation );
+ void updateOrientationBox( bool bAutomatic = true );
+ bool hasOrientationChanged() const;
void setPreviewText();
void updatePrinterText();
void checkControlDependencies();
@@ -238,8 +241,8 @@ namespace vcl
void updateWindowFromProperty( const OUString& );
void initFromMultiPageSetup( const vcl::PrinterController::MultiPageSetup& );
void showAdvancedControls( bool );
- void updateNup();
- void updateNupFromPages();
+ void updateNup( bool i_bMayUseCache = true );
+ void updateNupFromPages( bool i_bMayUseCache = true );
void enableNupControls( bool bEnable );
void setupOptionalUI();
Size const & getJobPageSize();
diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx
index 0405aeecabfb..b56a5740a5fd 100644
--- a/vcl/source/gdi/print3.cxx
+++ b/vcl/source/gdi/print3.cxx
@@ -817,6 +817,7 @@ void PrinterController::setupPrinter( weld::Window* i_pParent )
// get current data
Size aPaperSize(xPrinter->GetPaperSize());
+ Orientation eOrientation = xPrinter->GetOrientation();
sal_uInt16 nPaperBin = xPrinter->GetPaperBin();
// reset paper size back to last configured size, not
@@ -864,6 +865,7 @@ void PrinterController::setupPrinter( weld::Window* i_pParent )
else
{
//restore to whatever it was before we entered this method
+ xPrinter->SetOrientation( eOrientation );
if (aPaperSize != aNewPaperSize)
xPrinter->SetPaperSizeUser(aPaperSize, !mpImplData->isFixedPageSize());
}
diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx
index 4546a8ff000f..8308f11f7272 100644
--- a/vcl/source/window/printdlg.cxx
+++ b/vcl/source/window/printdlg.cxx
@@ -56,8 +56,9 @@ using namespace com::sun::star::beans;
enum
{
- SV_PRINT_PRT_NUP_ORIENTATION_PORTRAIT,
- SV_PRINT_PRT_NUP_ORIENTATION_LANDSCAPE
+ ORIENTATION_AUTOMATIC,
+ ORIENTATION_PORTRAIT,
+ ORIENTATION_LANDSCAPE
};
extern "C" SAL_DLLPUBLIC_EXPORT void makePrintPreviewWindow(VclPtr<vcl::Window> & rRet, VclPtr<vcl::Window> & pParent, VclBuilder::stringmap &)
@@ -561,7 +562,7 @@ PrintDialog::PrintDialog(vcl::Window* i_pWindow, const std::shared_ptr<PrinterCo
get(mpCopyCountField, "copycount");
get(mpNupOrderWin, "orderpreview");
get(mpNupPagesBox, "pagespersheetbox");
- get(mpNupOrientationBox, "pageorientationbox");
+ get(mpOrientationBox, "pageorientationbox");
get(mpNupOrderTxt, "labelorder");
get(mpPaperSizeBox, "papersizebox");
get(mpNupOrderBox, "orderbox");
@@ -688,7 +689,7 @@ PrintDialog::PrintDialog(vcl::Window* i_pWindow, const std::shared_ptr<PrinterCo
mpPrinters->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
mpPaperSidesBox->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
mpNupPagesBox->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
- mpNupOrientationBox->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
+ mpOrientationBox->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
mpNupOrderBox->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
mpPaperSizeBox->SetSelectHdl( LINK( this, PrintDialog, SelectHdl ) );
@@ -700,7 +701,7 @@ PrintDialog::PrintDialog(vcl::Window* i_pWindow, const std::shared_ptr<PrinterCo
mpPageMarginEdt->SetModifyHdl( LINK( this, PrintDialog, ModifyHdl ) );
mpSheetMarginEdt->SetModifyHdl( LINK( this, PrintDialog, ModifyHdl ) );
- preparePreview( true, true );
+ updateNupFromPages();
}
@@ -750,7 +751,7 @@ void PrintDialog::dispose()
mpSheetMarginEdt.clear();
mpSheetMarginTxt2.clear();
mpPaperSizeBox.clear();
- mpNupOrientationBox.clear();
+ mpOrientationBox.clear();
mpNupOrderBox.clear();
mpNupOrderWin.clear();
mpNupOrderTxt.clear();
@@ -1007,6 +1008,44 @@ void PrintDialog::preparePreview( bool i_bNewPage, bool i_bMayUseCache )
}
}
+void PrintDialog::updateOrientationBox( const bool bAutomatic )
+{
+ Orientation eOrientation = maPController->getPrinter()->GetOrientation();
+ if ( !bAutomatic )
+ {
+ mpOrientationBox->SelectEntryPos( static_cast<sal_Int32>(eOrientation) + 1 );
+
+ maPController->setValue( "IsLandscape",
+ makeAny( static_cast<sal_Int32>(eOrientation) ) );
+ }
+ else if ( hasOrientationChanged() )
+ {
+ mpOrientationBox->SelectEntryPos( ORIENTATION_AUTOMATIC );
+
+ // used to make sure document orientation matches printer paper orientation
+ maPController->setValue( "IsLandscape",
+ makeAny( static_cast<sal_Int32>(eOrientation) ) );
+ }
+}
+
+bool PrintDialog::hasOrientationChanged() const
+{
+ const int nOrientation = mpOrientationBox->GetSelectedEntryPos();
+ const Orientation eOrientation = maPController->getPrinter()->GetOrientation();
+
+ return (nOrientation == ORIENTATION_LANDSCAPE && eOrientation == Orientation::Portrait)
+ || (nOrientation == ORIENTATION_PORTRAIT && eOrientation == Orientation::Landscape);
+}
+
+// Always use this function to set paper orientation in
+// order to update document orientation as well
+void PrintDialog::setPaperOrientation( Orientation eOrientation )
+{
+ maPController->getPrinter()->SetOrientation( eOrientation );
+ maPController->setValue( "IsLandscape",
+ makeAny( static_cast<sal_Int32>(eOrientation) ) );
+}
+
void PrintDialog::checkControlDependencies()
{
@@ -1105,7 +1144,7 @@ void PrintDialog::initFromMultiPageSetup( const vcl::PrinterController::MultiPag
}
}
-void PrintDialog::updateNup()
+void PrintDialog::updateNup( bool i_bMayUseCache )
{
int nRows = int(mpNupRowsEdt->GetValue());
int nCols = int(mpNupColEdt->GetValue());
@@ -1127,10 +1166,10 @@ void PrintDialog::updateNup()
aMPS.nOrder = static_cast<NupOrderType>(mpNupOrderBox->GetSelectedEntryPos());
- int nOrientationMode = mpNupOrientationBox->GetSelectedEntryPos();
- if( nOrientationMode == SV_PRINT_PRT_NUP_ORIENTATION_LANDSCAPE )
+ int nOrientationMode = mpOrientationBox->GetSelectedEntryPos();
+ if( nOrientationMode == ORIENTATION_LANDSCAPE )
aMPS.aPaperSize = maNupLandscapeSize;
- else if( nOrientationMode == SV_PRINT_PRT_NUP_ORIENTATION_PORTRAIT )
+ else if( nOrientationMode == ORIENTATION_PORTRAIT )
aMPS.aPaperSize = maNupPortraitSize;
else // automatic mode
{
@@ -1140,19 +1179,25 @@ void PrintDialog::updateNup()
Size aMultiSize( aPageSize.Width() * nCols, aPageSize.Height() * nRows );
if( aMultiSize.Width() > aMultiSize.Height() ) // fits better on landscape
+ {
aMPS.aPaperSize = maNupLandscapeSize;
+ setPaperOrientation( Orientation::Landscape );
+ }
else
+ {
aMPS.aPaperSize = maNupPortraitSize;
+ setPaperOrientation( Orientation::Portrait );
+ }
}
maPController->setMultipage( aMPS );
mpNupOrderWin->setValues( aMPS.nOrder, nCols, nRows );
- preparePreview( true, true );
+ preparePreview( true, i_bMayUseCache );
}
-void PrintDialog::updateNupFromPages()
+void PrintDialog::updateNupFromPages( bool i_bMayUseCache )
{
sal_IntPtr nPages = sal_IntPtr(mpNupPagesBox->GetSelectedEntryData());
int nRows = int(mpNupRowsEdt->GetValue());
@@ -1250,7 +1295,7 @@ void PrintDialog::updateNupFromPages()
mpSheetMarginEdt->SetValue( mpSheetMarginEdt->Normalize( nSheetMargin ), FUNIT_100TH_MM );
showAdvancedControls( bCustom );
- updateNup();
+ updateNup( i_bMayUseCache );
}
void PrintDialog::enableNupControls( bool bEnable )
@@ -1822,6 +1867,8 @@ IMPL_LINK ( PrintDialog, ClickHdl, Button*, pButton, void )
}
if( mpBrochureBtn->IsChecked() )
{
+ mpOrientationBox->Enable( false );
+ mpOrientationBox->SelectEntryPos( ORIENTATION_LANDSCAPE );
mpNupPagesBox->SelectEntryPos( 0 );
updateNupFromPages();
showAdvancedControls( false );
@@ -1830,6 +1877,8 @@ IMPL_LINK ( PrintDialog, ClickHdl, Button*, pButton, void )
}
else if( pButton == mpPagesBtn )
{
+ mpOrientationBox->Enable( true );
+ mpOrientationBox->SelectEntryPos( ORIENTATION_AUTOMATIC );
enableNupControls( true );
updateNupFromPages();
}
@@ -1880,6 +1929,9 @@ IMPL_LINK ( PrintDialog, ClickHdl, Button*, pButton, void )
}
}
}
+
+ updateOrientationBox( false );
+
// tdf#63905 don't use cache: page size may change
preparePreview();
}
@@ -1898,6 +1950,9 @@ IMPL_LINK( PrintDialog, SelectHdl, ListBox&, rBox, void )
// set new printer
maPController->setPrinter( VclPtrInstance<Printer>( aNewPrinter ) );
maPController->resetPrinterOptions( false );
+
+ updateOrientationBox();
+
// update text fields
mpOKButton->SetText( maPrintText );
updatePrinterText();
@@ -1910,7 +1965,9 @@ IMPL_LINK( PrintDialog, SelectHdl, ListBox&, rBox, void )
maPController->setPrinter( VclPtrInstance<Printer>( Printer::GetDefaultPrinterName() ) );
mpOKButton->SetText( maPrintToFileText );
maPController->resetPrinterOptions( true );
+
setPaperSizes();
+ updateOrientationBox();
preparePreview( true, true );
}
@@ -1921,15 +1978,23 @@ IMPL_LINK( PrintDialog, SelectHdl, ListBox&, rBox, void )
DuplexMode eDuplex = static_cast<DuplexMode>(mpPaperSidesBox->GetSelectedEntryPos() + 1);
maPController->getPrinter()->SetDuplexMode( eDuplex );
}
- else if( &rBox == mpNupOrientationBox || &rBox == mpNupOrderBox )
+ else if( &rBox == mpOrientationBox )
{
- updateNup();
+ int nOrientation = mpOrientationBox->GetSelectedEntryPos();
+ if ( nOrientation != ORIENTATION_AUTOMATIC )
+ setPaperOrientation( static_cast<Orientation>( nOrientation - 1 ) );
+
+ updateNup( false );
+ }
+ else if ( &rBox == mpNupOrderBox )
+ {
+ updateNup();
}
else if( &rBox == mpNupPagesBox )
{
if( !mpPagesBtn->IsChecked() )
mpPagesBtn->Check();
- updateNupFromPages();
+ updateNupFromPages( false );
}
else if ( &rBox == mpPaperSizeBox )
{
@@ -2008,6 +2073,8 @@ IMPL_LINK( PrintDialog, UIOption_RadioHdl, RadioButton&, i_rBtn, void )
if (pVal->Name == "PageOptions")
maPController->resetPaperToLastConfigured();
+ updateOrientationBox();
+
checkOptionalControlDependencies();
// update preview and page settings
diff --git a/vcl/uiconfig/ui/printdialog.ui b/vcl/uiconfig/ui/printdialog.ui
index 2e5118c24cd4..f3ec99e83817 100644
--- a/vcl/uiconfig/ui/printdialog.ui
+++ b/vcl/uiconfig/ui/printdialog.ui
@@ -87,13 +87,30 @@
</row>
</data>
</object>
- <object class="GtkListStore" id="liststore4">
+ <object class="GtkListStore" id="liststore3">
<columns>
<!-- column-name gchararray -->
<column type="gchararray"/>
</columns>
<data>
<row>
+ <col id="0" translatable="yes" context="printdialog|liststore3">Automatic</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes" context="printdialog|liststore3">Portrait</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes" context="printdialog|liststore3">Landscape</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkListStore" id="liststore4">
+ <columns>
+ <!-- column-name gchararray -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
<col id="0" translatable="yes" context="printdialog|liststore4">Print only in one side</col>
</row>
<row>
@@ -878,6 +895,7 @@
<object class="GtkComboBox" id="pageorientationbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="model">liststore3</property>
</object>
<packing>
<property name="left_attach">1</property>
More information about the Libreoffice-commits
mailing list