diff options
Diffstat (limited to 'sc/source/ui/vba/vbapagesetup.cxx')
-rw-r--r-- | sc/source/ui/vba/vbapagesetup.cxx | 131 |
1 files changed, 118 insertions, 13 deletions
diff --git a/sc/source/ui/vba/vbapagesetup.cxx b/sc/source/ui/vba/vbapagesetup.cxx index eeba5be38..f72b32477 100644 --- a/sc/source/ui/vba/vbapagesetup.cxx +++ b/sc/source/ui/vba/vbapagesetup.cxx @@ -1,7 +1,7 @@ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * + * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite @@ -37,6 +37,9 @@ #include <ooo/vba/excel/XlPageOrientation.hpp> #include <ooo/vba/excel/XlOrder.hpp> #include <ooo/vba/excel/Constants.hpp> +#include <i18npool/paper.hxx> +#include <editeng/paperinf.hxx> +#include <ooo/vba/excel/XlPaperSize.hpp> using namespace ::com::sun::star; using namespace ::ooo::vba; @@ -46,7 +49,7 @@ using namespace ::ooo::vba; bool getScRangeListForAddress( const rtl::OUString& sName, ScDocShell* pDocSh, ScRange& refRange, ScRangeList& aCellRanges, formula::FormulaGrammar::AddressConvention aConv = formula::FormulaGrammar::CONV_XL_A1 ) throw ( uno::RuntimeException ); -ScVbaPageSetup::ScVbaPageSetup(const uno::Reference< XHelperInterface >& xParent, +ScVbaPageSetup::ScVbaPageSetup(const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< sheet::XSpreadsheet >& xSheet, const uno::Reference< frame::XModel >& xModel) throw (uno::RuntimeException): @@ -65,7 +68,7 @@ ScVbaPageSetup::ScVbaPageSetup(const uno::Reference< XHelperInterface >& xParent mxPageProps.set( xPageStyle->getByName(aStyleName), uno::UNO_QUERY_THROW ); mnOrientLandscape = excel::XlPageOrientation::xlLandscape; mnOrientPortrait = excel::XlPageOrientation::xlPortrait; -} +} rtl::OUString SAL_CALL ScVbaPageSetup::getPrintArea() throw (css::uno::RuntimeException) { @@ -88,7 +91,7 @@ rtl::OUString SAL_CALL ScVbaPageSetup::getPrintArea() throw (css::uno::RuntimeEx ScDocument* pDoc = excel::getDocShell( mxModel )->GetDocument(); aRangeList.Format( aPrintArea, nFlags, pDoc, formula::FormulaGrammar::CONV_XL_A1, ',' ); } - + return aPrintArea; } @@ -106,7 +109,7 @@ void SAL_CALL ScVbaPageSetup::setPrintArea( const rtl::OUString& rAreas ) throw { ScRangeList aCellRanges; ScRange aRange; - if( getScRangeListForAddress( rAreas, excel::getDocShell( mxModel ) , aRange, aCellRanges ) ) + if( getScRangeListForAddress( rAreas, excel::getDocShell( mxModel ) , aRange, aCellRanges ) ) { uno::Sequence< table::CellRangeAddress > aSeq( aCellRanges.Count() ); USHORT i=0; @@ -263,7 +266,7 @@ void SAL_CALL ScVbaPageSetup::setLeftHeader( const rtl::OUString& leftHeader) th { uno::Reference< text::XText > xText = xHeaderContent->getLeftText(); xText->setString( leftHeader ); - mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageHeaderContent")), uno::makeAny(xHeaderContent) ); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageHeaderContent")), uno::makeAny(xHeaderContent) ); } } catch( uno::Exception& ) @@ -299,7 +302,7 @@ void SAL_CALL ScVbaPageSetup::setCenterHeader( const rtl::OUString& centerHeader { uno::Reference< text::XText > xText = xHeaderContent->getCenterText(); xText->setString( centerHeader ); - mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageHeaderContent")), uno::makeAny(xHeaderContent) ); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageHeaderContent")), uno::makeAny(xHeaderContent) ); } } catch( uno::Exception& ) @@ -335,7 +338,7 @@ void SAL_CALL ScVbaPageSetup::setRightHeader( const rtl::OUString& rightHeader) { uno::Reference< text::XText > xText = xHeaderContent->getRightText(); xText->setString( rightHeader ); - mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageHeaderContent")), uno::makeAny(xHeaderContent) ); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageHeaderContent")), uno::makeAny(xHeaderContent) ); } } catch( uno::Exception& ) @@ -371,7 +374,7 @@ void SAL_CALL ScVbaPageSetup::setLeftFooter( const rtl::OUString& leftFooter) th { uno::Reference< text::XText > xText = xFooterContent->getLeftText(); xText->setString( leftFooter ); - mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageFooterContent")), uno::makeAny(xFooterContent) ); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageFooterContent")), uno::makeAny(xFooterContent) ); } } catch( uno::Exception& ) @@ -407,7 +410,7 @@ void SAL_CALL ScVbaPageSetup::setCenterFooter( const rtl::OUString& centerFooter { uno::Reference< text::XText > xText = xFooterContent->getCenterText(); xText->setString( centerFooter ); - mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageFooterContent")), uno::makeAny(xFooterContent) ); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageFooterContent")), uno::makeAny(xFooterContent) ); } } catch( uno::Exception& ) @@ -444,7 +447,7 @@ void SAL_CALL ScVbaPageSetup::setRightFooter( const rtl::OUString& rightFooter) { uno::Reference< text::XText > xText = xFooterContent->getRightText(); xText->setString( rightFooter ); - mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageFooterContent")), uno::makeAny(xFooterContent) ); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("RightPageFooterContent")), uno::makeAny(xFooterContent) ); } } catch( uno::Exception& ) @@ -606,14 +609,14 @@ void SAL_CALL ScVbaPageSetup::setPrintHeadings( sal_Bool printHeadings) throw (c } } -rtl::OUString& +rtl::OUString& ScVbaPageSetup::getServiceImplName() { static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaPageSetup") ); return sImplName; } -uno::Sequence< rtl::OUString > +uno::Sequence< rtl::OUString > ScVbaPageSetup::getServiceNames() { static uno::Sequence< rtl::OUString > aServiceNames; @@ -624,3 +627,105 @@ ScVbaPageSetup::getServiceNames() } return aServiceNames; } + +//liuchen 2009-12-11 + +struct PaperSizeMap +{ + Paper ePaper; + sal_Int32 xlPaper; +}; + +static PaperSizeMap paperSizeMappings[] = +{ + { PAPER_A3, ooo::vba::excel::XlPaperSize::xlPaperA3 }, + { PAPER_A4, ooo::vba::excel::XlPaperSize::xlPaperA4 }, + { PAPER_A5, ooo::vba::excel::XlPaperSize::xlPaperA5 }, + { PAPER_B4_ISO, ooo::vba::excel::XlPaperSize::xlPaperB4 }, + { PAPER_B5_ISO, ooo::vba::excel::XlPaperSize::xlPaperB5 }, + { PAPER_LETTER, ooo::vba::excel::XlPaperSize::xlPaperLetter }, + { PAPER_LEGAL, ooo::vba::excel::XlPaperSize::xlPaperLegal }, + { PAPER_TABLOID, ooo::vba::excel::XlPaperSize::xlPaperTabloid }, + { PAPER_USER, ooo::vba::excel::XlPaperSize::xlPaperUser }, + { PAPER_B6_ISO, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeB6 }, + { PAPER_ENV_C4, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeC4 }, + { PAPER_ENV_C5, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeC5 }, + { PAPER_ENV_C6, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeC6 }, + { PAPER_ENV_C65, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeC65 }, + { PAPER_ENV_DL, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeDL }, + { PAPER_C, ooo::vba::excel::XlPaperSize::xlPaperCsheet }, + { PAPER_D, ooo::vba::excel::XlPaperSize::xlPaperDsheet }, + { PAPER_E, ooo::vba::excel::XlPaperSize::xlPaperEsheet }, + { PAPER_ENV_MONARCH, ooo::vba::excel::XlPaperSize::xlPaperEnvelopeMonarch }, + { PAPER_ENV_PERSONAL, ooo::vba::excel::XlPaperSize::xlPaperEnvelopePersonal }, + { PAPER_ENV_9, ooo::vba::excel::XlPaperSize::xlPaperEnvelope9 }, + { PAPER_ENV_10, ooo::vba::excel::XlPaperSize::xlPaperEnvelope10 }, + { PAPER_ENV_11, ooo::vba::excel::XlPaperSize::xlPaperEnvelope11 }, + { PAPER_ENV_12, ooo::vba::excel::XlPaperSize::xlPaperEnvelope12 } +}; + +static const int nMapSize = sizeof(paperSizeMappings) / sizeof(paperSizeMappings[0]); + +sal_Int32 PaperSizeOOoToExcel(Paper ePaper) +{ + sal_Int32 nPaperSize = ooo::vba::excel::XlPaperSize::xlPaperUser; + + for (int i = 0; i < nMapSize; i++) + { + if (ePaper == paperSizeMappings[i].ePaper) + { + nPaperSize = paperSizeMappings[i].xlPaper; + break; + } + } + + return nPaperSize; +} + +sal_Int32 SAL_CALL ScVbaPageSetup::getPaperSize() throw (css::uno::RuntimeException) +{ + com::sun::star::awt::Size size; + Paper ePaper = PAPER_USER; + + try + { + uno::Any aValue = mxPageProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Size"))); + aValue >>= size; + ePaper = SvxPaperInfo::GetSvxPaper( Size(size.Width, size.Height), MAP_100TH_MM, TRUE); + } + catch( uno::Exception& ) + { + } + + return PaperSizeOOoToExcel(ePaper); +} + +Paper PaperSizeExcelToOOo( sal_Int32 xlPaper) +{ + Paper ePaper = PAPER_USER; + + for (int i = 0; i < nMapSize; i++) + { + if (xlPaper == paperSizeMappings[i].xlPaper) + { + ePaper = paperSizeMappings[i].ePaper; + break; + } + } + + return ePaper; +} +void SAL_CALL ScVbaPageSetup::setPaperSize( sal_Int32 paperSize) throw (css::uno::RuntimeException) +{ + Paper ePaper = PaperSizeExcelToOOo( paperSize ); + + try + { + Size size1 = SvxPaperInfo::GetPaperSize( ePaper, MAP_100TH_MM ); + com::sun::star::awt::Size size(size1.Width(), size1.Height()); + mxPageProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Size")), uno::makeAny( size )); + } + catch( uno::Exception& ) + { + } +} |