print range changes for basic ide

This commit is contained in:
Philipp Lohmann 2009-05-27 18:54:18 +00:00
parent 889de0ba9a
commit c191158982
5 changed files with 136 additions and 30 deletions

View file

@ -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 )

View file

@ -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."; >;
};
};

View file

@ -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();
}

View file

@ -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

View file

@ -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