diff options
author | Philipp Lohmann <pl@openoffice.org> | 2009-05-27 18:54:18 +0000 |
---|---|---|
committer | Philipp Lohmann <pl@openoffice.org> | 2009-05-27 18:54:18 +0000 |
commit | c191158982fd2990ff43a2c6b69a410c1f390f81 (patch) | |
tree | 42c15d621e6f14bd22a9cfeae9d995f36611039e | |
parent | 889de0ba9ad0847826a1f1006ae687ac6e8e84d1 (diff) |
print range changes for basic ide
-rw-r--r-- | basctl/inc/basidesh.hrc | 1 | ||||
-rw-r--r-- | basctl/source/basicide/basicprint.src | 43 | ||||
-rw-r--r-- | basctl/source/basicide/basicrenderable.cxx | 105 | ||||
-rw-r--r-- | basctl/source/basicide/basicrenderable.hxx | 15 | ||||
-rw-r--r-- | basctl/source/basicide/makefile.mk | 2 |
5 files changed, 136 insertions, 30 deletions
diff --git a/basctl/inc/basidesh.hrc b/basctl/inc/basidesh.hrc index 3049e80968c7..af2e4371484a 100644 --- a/basctl/inc/basidesh.hrc +++ b/basctl/inc/basidesh.hrc @@ -58,6 +58,7 @@ #define RID_DLG_NEWLIB ( RID_BASICIDE_START + 42 ) #define RID_DLG_EXPORT ( RID_BASICIDE_START + 43 ) #define RID_POPUP_DLGED ( RID_BASICIDE_START + 62 ) +#define RID_PRINTDLG_STRLIST ( RID_BASICIDE_START + 78 ) #define RID_IMG_LOCKED_HC ( RID_BASICIDE_START + 6 ) #define RID_IMGBTN_REMOVEWATCH ( RID_BASICIDE_START + 8 ) diff --git a/basctl/source/basicide/basicprint.src b/basctl/source/basicide/basicprint.src new file mode 100644 index 000000000000..be5e7d2e1de3 --- /dev/null +++ b/basctl/source/basicide/basicprint.src @@ -0,0 +1,43 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: basidesh.src,v $ + * $Revision: 1.107 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <basidesh.hrc> + +StringArray RID_PRINTDLG_STRLIST +{ + ItemList [en-US] = + { + < "Print range"; >; + < "All ~Pages"; >; + < "Print all pages of the printable content."; >; + < "Pa~ges"; >; + < "Print only some pages of the printable content."; >; + }; +}; diff --git a/basctl/source/basicide/basicrenderable.cxx b/basctl/source/basicide/basicrenderable.cxx index fc31df2be76a..95ddbbc19a25 100644 --- a/basctl/source/basicide/basicrenderable.cxx +++ b/basctl/source/basicide/basicrenderable.cxx @@ -31,38 +31,70 @@ #include "basicrenderable.hxx" #include "bastypes.hxx" +#include "basidesh.hrc" #include "com/sun/star/awt/XDevice.hpp" #include "toolkit/awt/vclxdevice.hxx" #include "vcl/print.hxx" +#include "tools/multisel.hxx" +#include "tools/resary.hxx" using namespace com::sun::star; using namespace com::sun::star::uno; using namespace basicide; +BasicRenderable::BasicRenderable( IDEBaseWindow* pWin ) +: cppu::WeakComponentImplHelper1< com::sun::star::view::XRenderable >( maMutex ) +, mpWindow( pWin ) +{ + ResStringArray aStrings( IDEResId( RID_PRINTDLG_STRLIST ) ); + DBG_ASSERT( aStrings.Count() >= 5, "resource incomplete" ); + if( aStrings.Count() < 5 ) // bad resource ? + return; + + m_aUIProperties.realloc( 3 ); + + // create Subgroup for print range + m_aUIProperties[0].Value = getSubgroupControlOpt( rtl::OUString( aStrings.GetString( 0 ) ), rtl::OUString(), true , true); + + // create a choice for the range to print + rtl::OUString aPrintContentName( RTL_CONSTASCII_USTRINGPARAM( "PrintContent" ) ); + Sequence< rtl::OUString > aChoices( 2 ); + Sequence< rtl::OUString > aHelpTexts( 2 ); + aChoices[0] = aStrings.GetString( 1 ); + aHelpTexts[0] = aStrings.GetString( 2 ); + aChoices[1] = aStrings.GetString( 3 ); + aHelpTexts[1] = aStrings.GetString( 4 ); + m_aUIProperties[1].Value = getChoiceControlOpt( rtl::OUString(), + aHelpTexts, + aPrintContentName, + aChoices, + 0 ); + + // create a an Edit dependent on "Pages" selected + m_aUIProperties[2].Value = getEditControlOpt( rtl::OUString(), + rtl::OUString(), + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PageRange" ) ), + rtl::OUString(), + &aPrintContentName, 1, sal_True + ); +} + BasicRenderable::~BasicRenderable() { } -Printer* BasicRenderable::getPrinter ( const Sequence<beans::PropertyValue >& i_xOptions ) +Printer* BasicRenderable::getPrinter() { Printer* pPrinter = NULL; - sal_Int32 nProps = i_xOptions.getLength(); - const beans::PropertyValue* pProps = i_xOptions.getConstArray(); - for( sal_Int32 i = 0; i < nProps; i++ ) - { - if( pProps[i].Name.equalsAscii( "RenderDevice" ) ) - { - Reference<awt::XDevice> xRenderDevice; + Any aValue( getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RenderDevice" ) ) ) ); + Reference<awt::XDevice> xRenderDevice; - if( pProps[i].Value >>= xRenderDevice ) - { - VCLXDevice* pDevice = VCLXDevice::GetImplementation(xRenderDevice); - OutputDevice* pOut = pDevice ? pDevice->GetOutputDevice() : NULL; - pPrinter = dynamic_cast<Printer*>(pOut); - break; - } - } + if( aValue >>= xRenderDevice ) + { + VCLXDevice* pDevice = VCLXDevice::GetImplementation(xRenderDevice); + OutputDevice* pOut = pDevice ? pDevice->GetOutputDevice() : NULL; + pPrinter = dynamic_cast<Printer*>(pOut); } return pPrinter; } @@ -71,12 +103,25 @@ sal_Int32 SAL_CALL BasicRenderable::getRendererCount ( const Any&, const Sequence<beans::PropertyValue >& i_xOptions ) throw (lang::IllegalArgumentException, RuntimeException) { + processProperties( i_xOptions ); + sal_Int32 nCount = 0; if( mpWindow ) { - Printer* pPrinter = getPrinter( i_xOptions ); + Printer* pPrinter = getPrinter(); if( pPrinter ) + { nCount = mpWindow->countPages( pPrinter ); + sal_Int64 nContent = getIntValue( "PrintContent", -1 ); + if( nContent == 1 ) + { + rtl::OUString aPageRange( getStringValue( "PageRange" ) ); + MultiSelection aSel( aPageRange ); + long nSelCount = aSel.GetSelectCount(); + if( nSelCount >= 0 && nSelCount < nCount ) + nCount = nSelCount; + } + } else throw lang::IllegalArgumentException(); } @@ -88,9 +133,11 @@ Sequence<beans::PropertyValue> SAL_CALL BasicRenderable::getRenderer ( sal_Int32, const Any&, const Sequence<beans::PropertyValue>& i_xOptions ) throw (lang::IllegalArgumentException, RuntimeException) { + processProperties( i_xOptions ); + Sequence< beans::PropertyValue > aVals; // insert page size here - Printer* pPrinter = getPrinter( i_xOptions ); + Printer* pPrinter = getPrinter(); // no renderdevice is legal; the first call is to get our print ui options if( pPrinter ) { @@ -104,6 +151,8 @@ Sequence<beans::PropertyValue> SAL_CALL BasicRenderable::getRenderer ( aVals[0].Value <<= aSize; } + appendPrintUIOptions( aVals ); + return aVals; } @@ -112,11 +161,27 @@ void SAL_CALL BasicRenderable::render ( const Sequence<beans::PropertyValue>& i_xOptions ) throw (lang::IllegalArgumentException, RuntimeException) { + processProperties( i_xOptions ); + if( mpWindow ) { - Printer* pPrinter = getPrinter( i_xOptions ); + Printer* pPrinter = getPrinter(); if( pPrinter ) - mpWindow->printPage( nRenderer, pPrinter ); + { + sal_Int64 nContent = getIntValue( "PrintContent", -1 ); + if( nContent == 1 ) + { + rtl::OUString aPageRange( getStringValue( "PageRange" ) ); + MultiSelection aSel( aPageRange ); + long nSelect = aSel.FirstSelected(); + while( nSelect != long(SFX_ENDOFSELECTION) && nRenderer-- ) + nSelect = aSel.NextSelected(); + if( nSelect != long(SFX_ENDOFSELECTION) ) + mpWindow->printPage( sal_Int32(nSelect-1), pPrinter ); + } + else + mpWindow->printPage( nRenderer, pPrinter ); + } else throw lang::IllegalArgumentException(); } diff --git a/basctl/source/basicide/basicrenderable.hxx b/basctl/source/basicide/basicrenderable.hxx index 1275f0071782..7cad19c784be 100644 --- a/basctl/source/basicide/basicrenderable.hxx +++ b/basctl/source/basicide/basicrenderable.hxx @@ -33,25 +33,22 @@ #include "com/sun/star/view/XRenderable.hpp" #include "cppuhelper/compbase1.hxx" +#include "vcl/print.hxx" + class IDEBaseWindow; -class Printer; namespace basicide { class BasicRenderable : - public cppu::WeakComponentImplHelper1< com::sun::star::view::XRenderable > + public cppu::WeakComponentImplHelper1< com::sun::star::view::XRenderable >, + public vcl::PrinterOptionsHelper { IDEBaseWindow* mpWindow; osl::Mutex maMutex; - Printer* getPrinter( const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue >& xOptions ); + Printer* getPrinter(); public: - BasicRenderable( IDEBaseWindow* pWin ) - : cppu::WeakComponentImplHelper1< com::sun::star::view::XRenderable >( maMutex ) - , mpWindow( pWin ) - { - } - + BasicRenderable( IDEBaseWindow* pWin ); virtual ~BasicRenderable(); // XRenderable diff --git a/basctl/source/basicide/makefile.mk b/basctl/source/basicide/makefile.mk index afd8a3cc366f..c5222951da6c 100644 --- a/basctl/source/basicide/makefile.mk +++ b/basctl/source/basicide/makefile.mk @@ -85,7 +85,7 @@ SLOFILES = $(EXCEPTIONSFILES) \ $(SLO)$/objdlg.obj \ SRS1NAME=$(TARGET) -SRC1FILES= basidesh.src macrodlg.src moptions.src moduldlg.src objdlg.src brkdlg.src tbxctl.src +SRC1FILES= basidesh.src macrodlg.src moptions.src moduldlg.src objdlg.src brkdlg.src tbxctl.src basicprint.src .INCLUDE : target.mk |