summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Lohmann <pl@openoffice.org>2009-05-27 18:54:18 +0000
committerPhilipp Lohmann <pl@openoffice.org>2009-05-27 18:54:18 +0000
commitc191158982fd2990ff43a2c6b69a410c1f390f81 (patch)
tree42c15d621e6f14bd22a9cfeae9d995f36611039e
parent889de0ba9ad0847826a1f1006ae687ac6e8e84d1 (diff)
print range changes for basic ide
-rw-r--r--basctl/inc/basidesh.hrc1
-rw-r--r--basctl/source/basicide/basicprint.src43
-rw-r--r--basctl/source/basicide/basicrenderable.cxx105
-rw-r--r--basctl/source/basicide/basicrenderable.hxx15
-rw-r--r--basctl/source/basicide/makefile.mk2
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