1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_starmath.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include <vos/mutex.hxx> 33*cdf0e10cSrcweir #include <osl/mutex.hxx> 34*cdf0e10cSrcweir #include <sfx2/printer.hxx> 35*cdf0e10cSrcweir #include <vcl/svapp.hxx> 36*cdf0e10cSrcweir #include <svtools/ctrltool.hxx> 37*cdf0e10cSrcweir #include <svl/itemprop.hxx> 38*cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx> 39*cdf0e10cSrcweir #include <unotools/processfactory.hxx> 40*cdf0e10cSrcweir #include <editeng/paperinf.hxx> 41*cdf0e10cSrcweir #include <vcl/settings.hxx> 42*cdf0e10cSrcweir #include <vcl/print.hxx> 43*cdf0e10cSrcweir #include <toolkit/awt/vclxdevice.hxx> 44*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyState.hpp> 45*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 46*cdf0e10cSrcweir #include <com/sun/star/formula/SymbolDescriptor.hpp> 47*cdf0e10cSrcweir #include <com/sun/star/awt/Size.hpp> 48*cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer.hpp> 49*cdf0e10cSrcweir #include <xmloff/xmluconv.hxx> 50*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 51*cdf0e10cSrcweir #include <comphelper/propertysetinfo.hxx> 52*cdf0e10cSrcweir #include <unotools/moduleoptions.hxx> 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir #include <unomodel.hxx> 55*cdf0e10cSrcweir #include <document.hxx> 56*cdf0e10cSrcweir #include <view.hxx> 57*cdf0e10cSrcweir #include <symbol.hxx> 58*cdf0e10cSrcweir #include <starmath.hrc> 59*cdf0e10cSrcweir #include <config.hxx> 60*cdf0e10cSrcweir #include <smdll.hxx> 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir using namespace ::vos; 63*cdf0e10cSrcweir using namespace ::rtl; 64*cdf0e10cSrcweir using namespace ::cppu; 65*cdf0e10cSrcweir using namespace ::std; 66*cdf0e10cSrcweir using namespace ::comphelper; 67*cdf0e10cSrcweir using namespace ::com::sun::star; 68*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 69*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 70*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 71*cdf0e10cSrcweir using namespace ::com::sun::star::formula; 72*cdf0e10cSrcweir using namespace ::com::sun::star::view; 73*cdf0e10cSrcweir using namespace ::com::sun::star::script; 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir #define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L)) 77*cdf0e10cSrcweir #define MM100_TO_TWIP(MM100) ((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L)) 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir //////////////////////////////////////////////////////////// 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir SmPrintUIOptions::SmPrintUIOptions() 82*cdf0e10cSrcweir { 83*cdf0e10cSrcweir ResStringArray aLocalizedStrings( SmResId( RID_PRINTUIOPTIONS ) ); 84*cdf0e10cSrcweir DBG_ASSERT( aLocalizedStrings.Count() >= 9, "resource incomplete" ); 85*cdf0e10cSrcweir if( aLocalizedStrings.Count() < 9 ) // bad resource ? 86*cdf0e10cSrcweir return; 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir SmModule *pp = SM_MOD(); 89*cdf0e10cSrcweir SmConfig *pConfig = pp->GetConfig(); 90*cdf0e10cSrcweir DBG_ASSERT( pConfig, "SmConfig not found" ); 91*cdf0e10cSrcweir if (!pConfig) 92*cdf0e10cSrcweir return; 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir // create sequence of print UI options 95*cdf0e10cSrcweir // (Actually IsIgnoreSpacesRight is a parser option. Without it we need only 8 properties here.) 96*cdf0e10cSrcweir m_aUIProperties.realloc( 9 ); 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir // create Section for formula (results in an extra tab page in dialog) 99*cdf0e10cSrcweir SvtModuleOptions aOpt; 100*cdf0e10cSrcweir String aAppGroupname( aLocalizedStrings.GetString( 0 ) ); 101*cdf0e10cSrcweir aAppGroupname.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), 102*cdf0e10cSrcweir aOpt.GetModuleName( SvtModuleOptions::E_SMATH ) ); 103*cdf0e10cSrcweir m_aUIProperties[0].Value = getGroupControlOpt( aAppGroupname, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:TabPage:AppPage" ) ) ); 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir // create subgroup for print options 106*cdf0e10cSrcweir m_aUIProperties[1].Value = getSubgroupControlOpt( aLocalizedStrings.GetString( 1 ), rtl::OUString() ); 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir // create a bool option for title row (matches to SID_PRINTTITLE) 109*cdf0e10cSrcweir m_aUIProperties[2].Value = getBoolControlOpt( aLocalizedStrings.GetString( 2 ), 110*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:TitleRow:CheckBox" ) ), 111*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( PRTUIOPT_TITLE_ROW ) ), 112*cdf0e10cSrcweir pConfig->IsPrintTitle() ); 113*cdf0e10cSrcweir // create a bool option for formula text (matches to SID_PRINTTEXT) 114*cdf0e10cSrcweir m_aUIProperties[3].Value = getBoolControlOpt( aLocalizedStrings.GetString( 3 ), 115*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:FormulaText:CheckBox" ) ), 116*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( PRTUIOPT_FORMULA_TEXT ) ), 117*cdf0e10cSrcweir pConfig->IsPrintFormulaText() ); 118*cdf0e10cSrcweir // create a bool option for border (matches to SID_PRINTFRAME) 119*cdf0e10cSrcweir m_aUIProperties[4].Value = getBoolControlOpt( aLocalizedStrings.GetString( 4 ), 120*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:Border:CheckBox" ) ), 121*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( PRTUIOPT_BORDER ) ), 122*cdf0e10cSrcweir pConfig->IsPrintFrame() ); 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir // create subgroup for print format 125*cdf0e10cSrcweir m_aUIProperties[5].Value = getSubgroupControlOpt( aLocalizedStrings.GetString( 5 ), rtl::OUString() ); 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir // create a radio button group for print format (matches to SID_PRINTSIZE) 128*cdf0e10cSrcweir Sequence< rtl::OUString > aChoices( 3 ); 129*cdf0e10cSrcweir aChoices[0] = aLocalizedStrings.GetString( 6 ); 130*cdf0e10cSrcweir aChoices[1] = aLocalizedStrings.GetString( 7 ); 131*cdf0e10cSrcweir aChoices[2] = aLocalizedStrings.GetString( 8 ); 132*cdf0e10cSrcweir Sequence< rtl::OUString > aHelpIds( 3 ); 133*cdf0e10cSrcweir aHelpIds[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:PrintFormat:RadioButton:0" ) ); 134*cdf0e10cSrcweir aHelpIds[1] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:PrintFormat:RadioButton:1" ) ); 135*cdf0e10cSrcweir aHelpIds[2] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:PrintFormat:RadioButton:2" ) ); 136*cdf0e10cSrcweir OUString aPrintFormatProp( RTL_CONSTASCII_USTRINGPARAM( PRTUIOPT_PRINT_FORMAT ) ); 137*cdf0e10cSrcweir m_aUIProperties[6].Value = getChoiceControlOpt( rtl::OUString(), 138*cdf0e10cSrcweir aHelpIds, 139*cdf0e10cSrcweir aPrintFormatProp, 140*cdf0e10cSrcweir aChoices, static_cast< sal_Int32 >(pConfig->GetPrintSize()) 141*cdf0e10cSrcweir ); 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir // create a numeric box for scale dependent on PrintFormat = "Scaling" (matches to SID_PRINTZOOM) 144*cdf0e10cSrcweir vcl::PrinterOptionsHelper::UIControlOptions aRangeOpt( aPrintFormatProp, 2, sal_True ); 145*cdf0e10cSrcweir m_aUIProperties[ 7 ].Value = getRangeControlOpt( rtl::OUString(), 146*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".HelpID:vcl:PrintDialog:PrintScale:NumericField" ) ), 147*cdf0e10cSrcweir rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( PRTUIOPT_PRINT_SCALE ) ), 148*cdf0e10cSrcweir pConfig->GetPrintZoomFactor(), // initial value 149*cdf0e10cSrcweir 10, // min value 150*cdf0e10cSrcweir 1000, // max value 151*cdf0e10cSrcweir aRangeOpt ); 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir Sequence< PropertyValue > aHintNoLayoutPage( 1 ); 154*cdf0e10cSrcweir aHintNoLayoutPage[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HintNoLayoutPage" ) ); 155*cdf0e10cSrcweir aHintNoLayoutPage[0].Value = makeAny( sal_True ); 156*cdf0e10cSrcweir m_aUIProperties[8].Value <<= aHintNoLayoutPage; 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir // IsIgnoreSpacesRight is a parser option! Thus we don't add it to the printer UI. 159*cdf0e10cSrcweir // 160*cdf0e10cSrcweir // // create subgroup for misc options 161*cdf0e10cSrcweir // m_aUIProperties[8].Value = getSubgroupControlOpt( aLocalizedStrings.GetString( 9 ) ); 162*cdf0e10cSrcweir // 163*cdf0e10cSrcweir // // create a bool option for ignore spacing (matches to SID_NO_RIGHT_SPACES) 164*cdf0e10cSrcweir // m_aUIProperties[9].Value = getBoolControlOpt( aLocalizedStrings.GetString( 10 ), 165*cdf0e10cSrcweir // rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( PRTUIOPT_NO_RIGHT_SPACE ) ), 166*cdf0e10cSrcweir // pConfig->IsIgnoreSpacesRight() ); 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir //////////////////////////////////////////////////////////// 171*cdf0e10cSrcweir // 172*cdf0e10cSrcweir // class SmModel 173*cdf0e10cSrcweir // 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir // values from com/sun/star/beans/PropertyAttribute 176*cdf0e10cSrcweir #define PROPERTY_NONE 0 177*cdf0e10cSrcweir #define PROPERTY_READONLY 16 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir enum SmModelPropertyHandles 180*cdf0e10cSrcweir { 181*cdf0e10cSrcweir HANDLE_FORMULA, 182*cdf0e10cSrcweir HANDLE_FONT_NAME_VARIABLES, 183*cdf0e10cSrcweir HANDLE_FONT_NAME_FUNCTIONS, 184*cdf0e10cSrcweir HANDLE_FONT_NAME_NUMBERS, 185*cdf0e10cSrcweir HANDLE_FONT_NAME_TEXT, 186*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_NAME_SERIF, 187*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_NAME_SANS, 188*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_NAME_FIXED, 189*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_FIXED_POSTURE, 190*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_FIXED_WEIGHT, 191*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_SANS_POSTURE, 192*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_SANS_WEIGHT, 193*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_SERIF_POSTURE, 194*cdf0e10cSrcweir HANDLE_CUSTOM_FONT_SERIF_WEIGHT, 195*cdf0e10cSrcweir HANDLE_FONT_VARIABLES_POSTURE, 196*cdf0e10cSrcweir HANDLE_FONT_VARIABLES_WEIGHT, 197*cdf0e10cSrcweir HANDLE_FONT_FUNCTIONS_POSTURE, 198*cdf0e10cSrcweir HANDLE_FONT_FUNCTIONS_WEIGHT, 199*cdf0e10cSrcweir HANDLE_FONT_NUMBERS_POSTURE, 200*cdf0e10cSrcweir HANDLE_FONT_NUMBERS_WEIGHT, 201*cdf0e10cSrcweir HANDLE_FONT_TEXT_POSTURE, 202*cdf0e10cSrcweir HANDLE_FONT_TEXT_WEIGHT, 203*cdf0e10cSrcweir HANDLE_BASE_FONT_HEIGHT, 204*cdf0e10cSrcweir HANDLE_RELATIVE_FONT_HEIGHT_TEXT, 205*cdf0e10cSrcweir HANDLE_RELATIVE_FONT_HEIGHT_INDICES, 206*cdf0e10cSrcweir HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS, 207*cdf0e10cSrcweir HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS, 208*cdf0e10cSrcweir HANDLE_RELATIVE_FONT_HEIGHT_LIMITS, 209*cdf0e10cSrcweir HANDLE_IS_TEXT_MODE, 210*cdf0e10cSrcweir HANDLE_GREEK_CHAR_STYLE, 211*cdf0e10cSrcweir HANDLE_ALIGNMENT, 212*cdf0e10cSrcweir HANDLE_RELATIVE_SPACING, 213*cdf0e10cSrcweir HANDLE_RELATIVE_LINE_SPACING, 214*cdf0e10cSrcweir HANDLE_RELATIVE_ROOT_SPACING, 215*cdf0e10cSrcweir HANDLE_RELATIVE_INDEX_SUPERSCRIPT, 216*cdf0e10cSrcweir HANDLE_RELATIVE_INDEX_SUBSCRIPT, 217*cdf0e10cSrcweir HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT, 218*cdf0e10cSrcweir HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH, 219*cdf0e10cSrcweir HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH, 220*cdf0e10cSrcweir HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT, 221*cdf0e10cSrcweir HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE, 222*cdf0e10cSrcweir HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE, 223*cdf0e10cSrcweir HANDLE_RELATIVE_BRACKET_EXCESS_SIZE, 224*cdf0e10cSrcweir HANDLE_RELATIVE_BRACKET_DISTANCE, 225*cdf0e10cSrcweir HANDLE_IS_SCALE_ALL_BRACKETS, 226*cdf0e10cSrcweir HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE, 227*cdf0e10cSrcweir HANDLE_RELATIVE_MATRIX_LINE_SPACING, 228*cdf0e10cSrcweir HANDLE_RELATIVE_MATRIX_COLUMN_SPACING, 229*cdf0e10cSrcweir HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT, 230*cdf0e10cSrcweir HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT, 231*cdf0e10cSrcweir HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE, 232*cdf0e10cSrcweir HANDLE_RELATIVE_OPERATOR_SPACING, 233*cdf0e10cSrcweir HANDLE_LEFT_MARGIN, 234*cdf0e10cSrcweir HANDLE_RIGHT_MARGIN, 235*cdf0e10cSrcweir HANDLE_TOP_MARGIN, 236*cdf0e10cSrcweir HANDLE_BOTTOM_MARGIN, 237*cdf0e10cSrcweir HANDLE_PRINTER_NAME, 238*cdf0e10cSrcweir HANDLE_PRINTER_SETUP, 239*cdf0e10cSrcweir HANDLE_SYMBOLS, 240*cdf0e10cSrcweir HANDLE_USED_SYMBOLS, 241*cdf0e10cSrcweir HANDLE_BASIC_LIBRARIES, /* #93295# */ 242*cdf0e10cSrcweir HANDLE_RUNTIME_UID, 243*cdf0e10cSrcweir // --> PB 2004-08-25 #i33095# Security Options 244*cdf0e10cSrcweir HANDLE_LOAD_READONLY, 245*cdf0e10cSrcweir // <-- 246*cdf0e10cSrcweir HANDLE_DIALOG_LIBRARIES, // #i73329# 247*cdf0e10cSrcweir HANDLE_BASELINE // 3.7.2010 #i972# 248*cdf0e10cSrcweir }; 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir PropertySetInfo * lcl_createModelPropertyInfo () 251*cdf0e10cSrcweir { 252*cdf0e10cSrcweir static PropertyMapEntry aModelPropertyInfoMap[] = 253*cdf0e10cSrcweir { 254*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "Alignment" ), HANDLE_ALIGNMENT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0}, 255*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "BaseFontHeight" ), HANDLE_BASE_FONT_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0}, 256*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "BasicLibraries" ), HANDLE_BASIC_LIBRARIES , &::getCppuType((const uno::Reference< script::XLibraryContainer > *)0), PropertyAttribute::READONLY, 0}, 257*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "BottomMargin" ), HANDLE_BOTTOM_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BOTTOMSPACE }, 258*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "CustomFontNameFixed" ), HANDLE_CUSTOM_FONT_NAME_FIXED , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_FIXED }, 259*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "CustomFontNameSans" ), HANDLE_CUSTOM_FONT_NAME_SANS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_SANS }, 260*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "CustomFontNameSerif" ), HANDLE_CUSTOM_FONT_NAME_SERIF , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_SERIF }, 261*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "DialogLibraries" ), HANDLE_DIALOG_LIBRARIES , &::getCppuType((const uno::Reference< script::XLibraryContainer > *)0), PropertyAttribute::READONLY, 0}, 262*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontFixedIsBold"), HANDLE_CUSTOM_FONT_FIXED_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FIXED}, 263*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontFixedIsItalic"), HANDLE_CUSTOM_FONT_FIXED_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FIXED}, 264*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontFunctionsIsBold"), HANDLE_FONT_FUNCTIONS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FUNCTION}, 265*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontFunctionsIsItalic"), HANDLE_FONT_FUNCTIONS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FUNCTION}, 266*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontNameFunctions" ), HANDLE_FONT_NAME_FUNCTIONS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_FUNCTION }, 267*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontNameNumbers" ), HANDLE_FONT_NAME_NUMBERS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_NUMBER }, 268*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontNameText" ), HANDLE_FONT_NAME_TEXT , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_TEXT }, 269*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontNameVariables" ), HANDLE_FONT_NAME_VARIABLES , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_VARIABLE }, 270*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontNumbersIsBold"), HANDLE_FONT_NUMBERS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_NUMBER}, 271*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontNumbersIsItalic"), HANDLE_FONT_NUMBERS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_NUMBER}, 272*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontSansIsBold"), HANDLE_CUSTOM_FONT_SANS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SANS}, 273*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontSansIsItalic"), HANDLE_CUSTOM_FONT_SANS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SANS}, 274*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontSerifIsBold"), HANDLE_CUSTOM_FONT_SERIF_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SERIF}, 275*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontSerifIsItalic"), HANDLE_CUSTOM_FONT_SERIF_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SERIF}, 276*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontTextIsBold"), HANDLE_FONT_TEXT_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_TEXT}, 277*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontTextIsItalic"), HANDLE_FONT_TEXT_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_TEXT}, 278*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontVariablesIsBold"), HANDLE_FONT_VARIABLES_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_VARIABLE}, 279*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "FontVariablesIsItalic"), HANDLE_FONT_VARIABLES_POSTURE, &::getBooleanCppuType(), PROPERTY_NONE, FNT_VARIABLE}, 280*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "Formula" ), HANDLE_FORMULA , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0}, 281*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "IsScaleAllBrackets" ), HANDLE_IS_SCALE_ALL_BRACKETS , &::getBooleanCppuType(), PROPERTY_NONE, 0}, 282*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "IsTextMode" ), HANDLE_IS_TEXT_MODE , &::getBooleanCppuType(), PROPERTY_NONE, 0}, 283*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "GreekCharStyle" ), HANDLE_GREEK_CHAR_STYLE, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0}, 284*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "LeftMargin" ), HANDLE_LEFT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LEFTSPACE }, 285*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "PrinterName" ), HANDLE_PRINTER_NAME , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0 }, 286*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "PrinterSetup" ), HANDLE_PRINTER_SETUP , &::getCppuType((const Sequence < sal_Int8 >*)0), PROPERTY_NONE, 0 }, 287*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeBracketDistance" ), HANDLE_RELATIVE_BRACKET_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BRACKETSPACE }, 288*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeBracketExcessSize" ), HANDLE_RELATIVE_BRACKET_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BRACKETSIZE }, 289*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightFunctions" ), HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_FUNCTION}, 290*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightIndices" ), HANDLE_RELATIVE_FONT_HEIGHT_INDICES , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_INDEX }, 291*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightLimits" ), HANDLE_RELATIVE_FONT_HEIGHT_LIMITS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_LIMITS }, 292*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightOperators" ), HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_OPERATOR}, 293*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightText" ), HANDLE_RELATIVE_FONT_HEIGHT_TEXT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_TEXT }, 294*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionBarExcessLength"), HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_FRACTION }, 295*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionBarLineWeight" ), HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_STROKEWIDTH }, 296*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionDenominatorDepth"), HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_DENOMINATOR }, 297*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionNumeratorHeight" ), HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_NUMERATOR }, 298*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeIndexSubscript" ), HANDLE_RELATIVE_INDEX_SUBSCRIPT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_SUBSCRIPT }, 299*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeIndexSuperscript" ), HANDLE_RELATIVE_INDEX_SUPERSCRIPT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_SUPERSCRIPT }, 300*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeLineSpacing" ), HANDLE_RELATIVE_LINE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_VERTICAL }, 301*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeLowerLimitDistance" ), HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LOWERLIMIT }, 302*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeMatrixColumnSpacing" ), HANDLE_RELATIVE_MATRIX_COLUMN_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_MATRIXCOL}, 303*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeMatrixLineSpacing" ), HANDLE_RELATIVE_MATRIX_LINE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_MATRIXROW}, 304*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeOperatorExcessSize" ), HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_OPERATORSIZE }, 305*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeOperatorSpacing" ), HANDLE_RELATIVE_OPERATOR_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_OPERATORSPACE}, 306*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeRootSpacing" ), HANDLE_RELATIVE_ROOT_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ROOT }, 307*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeScaleBracketExcessSize" ), HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_NORMALBRACKETSIZE}, 308*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeSpacing" ), HANDLE_RELATIVE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_HORIZONTAL }, 309*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeSymbolMinimumHeight" ), HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ORNAMENTSPACE }, 310*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeSymbolPrimaryHeight" ), HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ORNAMENTSIZE }, 311*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RelativeUpperLimitDistance" ), HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_UPPERLIMIT }, 312*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RightMargin" ), HANDLE_RIGHT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_RIGHTSPACE }, 313*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "RuntimeUID" ), HANDLE_RUNTIME_UID , &::getCppuType(static_cast< const rtl::OUString * >(0)), PropertyAttribute::READONLY, 0 }, 314*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "Symbols" ), HANDLE_SYMBOLS , &::getCppuType((const Sequence < SymbolDescriptor > *)0), PROPERTY_NONE, 0 }, 315*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "UserDefinedSymbolsInUse" ), HANDLE_USED_SYMBOLS , &::getCppuType((const Sequence < SymbolDescriptor > *)0), PropertyAttribute::READONLY, 0 }, 316*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "TopMargin" ), HANDLE_TOP_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_TOPSPACE }, 317*cdf0e10cSrcweir // --> PB 2004-08-25 #i33095# Security Options 318*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "LoadReadonly" ), HANDLE_LOAD_READONLY, &::getBooleanCppuType(), PROPERTY_NONE, 0 }, 319*cdf0e10cSrcweir // <-- 320*cdf0e10cSrcweir // --> 3.7.2010 #i972# 321*cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM( "BaseLine"), HANDLE_BASELINE, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0}, 322*cdf0e10cSrcweir // <-- 323*cdf0e10cSrcweir { NULL, 0, 0, NULL, 0, 0 } 324*cdf0e10cSrcweir }; 325*cdf0e10cSrcweir PropertySetInfo *pInfo = new PropertySetInfo ( aModelPropertyInfoMap ); 326*cdf0e10cSrcweir return pInfo; 327*cdf0e10cSrcweir } 328*cdf0e10cSrcweir //----------------------------------------------------------------------- 329*cdf0e10cSrcweir SmModel::SmModel( SfxObjectShell *pObjSh ) 330*cdf0e10cSrcweir : SfxBaseModel(pObjSh) 331*cdf0e10cSrcweir , PropertySetHelper ( lcl_createModelPropertyInfo () ) 332*cdf0e10cSrcweir , m_pPrintUIOptions( NULL ) 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir { 335*cdf0e10cSrcweir } 336*cdf0e10cSrcweir //----------------------------------------------------------------------- 337*cdf0e10cSrcweir SmModel::~SmModel() throw () 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir delete m_pPrintUIOptions; 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir /*-- 28.03.00 14:18:17--------------------------------------------------- 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 344*cdf0e10cSrcweir uno::Any SAL_CALL SmModel::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir uno::Any aRet = ::cppu::queryInterface ( rType, 347*cdf0e10cSrcweir // OWeakObject interfaces 348*cdf0e10cSrcweir dynamic_cast< XInterface* > ( static_cast< XUnoTunnel* > ( this )), 349*cdf0e10cSrcweir static_cast< XWeak* > ( this ), 350*cdf0e10cSrcweir // PropertySetHelper interfaces 351*cdf0e10cSrcweir static_cast< XPropertySet* > ( this ), 352*cdf0e10cSrcweir static_cast< XMultiPropertySet* > ( this ), 353*cdf0e10cSrcweir //static_cast< XPropertyState* > ( this ), 354*cdf0e10cSrcweir // my own interfaces 355*cdf0e10cSrcweir static_cast< XServiceInfo* > ( this ), 356*cdf0e10cSrcweir static_cast< XRenderable* > ( this ) ); 357*cdf0e10cSrcweir if (!aRet.hasValue()) 358*cdf0e10cSrcweir aRet = SfxBaseModel::queryInterface ( rType ); 359*cdf0e10cSrcweir return aRet; 360*cdf0e10cSrcweir } 361*cdf0e10cSrcweir /*-- 28.03.00 14:18:18--------------------------------------------------- 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 364*cdf0e10cSrcweir void SAL_CALL SmModel::acquire() throw() 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir OWeakObject::acquire(); 367*cdf0e10cSrcweir } 368*cdf0e10cSrcweir /*-- 28.03.00 14:18:18--------------------------------------------------- 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 371*cdf0e10cSrcweir void SAL_CALL SmModel::release() throw() 372*cdf0e10cSrcweir { 373*cdf0e10cSrcweir OWeakObject::release(); 374*cdf0e10cSrcweir } 375*cdf0e10cSrcweir /*-- 28.03.00 14:18:19--------------------------------------------------- 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 378*cdf0e10cSrcweir uno::Sequence< uno::Type > SAL_CALL SmModel::getTypes( ) throw(uno::RuntimeException) 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 381*cdf0e10cSrcweir uno::Sequence< uno::Type > aTypes = SfxBaseModel::getTypes(); 382*cdf0e10cSrcweir sal_Int32 nLen = aTypes.getLength(); 383*cdf0e10cSrcweir aTypes.realloc(nLen + 4); 384*cdf0e10cSrcweir uno::Type* pTypes = aTypes.getArray(); 385*cdf0e10cSrcweir pTypes[nLen++] = ::getCppuType((Reference<XServiceInfo>*)0); 386*cdf0e10cSrcweir pTypes[nLen++] = ::getCppuType((Reference<XPropertySet>*)0); 387*cdf0e10cSrcweir pTypes[nLen++] = ::getCppuType((Reference<XMultiPropertySet>*)0); 388*cdf0e10cSrcweir pTypes[nLen++] = ::getCppuType((Reference<XRenderable>*)0); 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir // XPropertyState not supported?? (respective virtual functions from 391*cdf0e10cSrcweir // PropertySetHelper not overloaded) 392*cdf0e10cSrcweir //pTypes[nLen++] = ::getCppuType((Reference<XPropertyState>*)0); 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir return aTypes; 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir /* -----------------------------28.03.00 14:23-------------------------------- 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 399*cdf0e10cSrcweir const uno::Sequence< sal_Int8 > & SmModel::getUnoTunnelId() 400*cdf0e10cSrcweir { 401*cdf0e10cSrcweir static osl::Mutex aCreateMutex; 402*cdf0e10cSrcweir osl::Guard<osl::Mutex> aGuard( aCreateMutex ); 403*cdf0e10cSrcweir 404*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aSeq; 405*cdf0e10cSrcweir if(!aSeq.getLength()) 406*cdf0e10cSrcweir { 407*cdf0e10cSrcweir aSeq.realloc( 16 ); 408*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); 409*cdf0e10cSrcweir } 410*cdf0e10cSrcweir return aSeq; 411*cdf0e10cSrcweir } /* -----------------------------28.03.00 14:23-------------------------------- 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 414*cdf0e10cSrcweir sal_Int64 SAL_CALL SmModel::getSomething( const uno::Sequence< sal_Int8 >& rId ) 415*cdf0e10cSrcweir throw(uno::RuntimeException) 416*cdf0e10cSrcweir { 417*cdf0e10cSrcweir if( rId.getLength() == 16 418*cdf0e10cSrcweir && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), 419*cdf0e10cSrcweir rId.getConstArray(), 16 ) ) 420*cdf0e10cSrcweir { 421*cdf0e10cSrcweir return sal::static_int_cast< sal_Int64 >(reinterpret_cast< sal_uIntPtr >(this)); 422*cdf0e10cSrcweir } 423*cdf0e10cSrcweir 424*cdf0e10cSrcweir return SfxBaseModel::getSomething( rId ); 425*cdf0e10cSrcweir } 426*cdf0e10cSrcweir /*-- 07.01.00 16:32:59--------------------------------------------------- 427*cdf0e10cSrcweir 428*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 429*cdf0e10cSrcweir /*-- 07.01.00 16:33:00--------------------------------------------------- 430*cdf0e10cSrcweir 431*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 432*cdf0e10cSrcweir sal_Int16 lcl_AnyToINT16(const uno::Any& rAny) 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir uno::TypeClass eType = rAny.getValueType().getTypeClass(); 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir sal_Int16 nRet = 0; 437*cdf0e10cSrcweir if( eType == uno::TypeClass_DOUBLE ) 438*cdf0e10cSrcweir nRet = (sal_Int16)*(double*)rAny.getValue(); 439*cdf0e10cSrcweir else if( eType == uno::TypeClass_FLOAT ) 440*cdf0e10cSrcweir nRet = (sal_Int16)*(float*)rAny.getValue(); 441*cdf0e10cSrcweir else 442*cdf0e10cSrcweir rAny >>= nRet; 443*cdf0e10cSrcweir return nRet; 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir //----------------------------------------------------------------------------- 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir OUString SmModel::getImplementationName(void) throw( uno::RuntimeException ) 448*cdf0e10cSrcweir { 449*cdf0e10cSrcweir return getImplementationName_Static(); 450*cdf0e10cSrcweir } 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir ::rtl::OUString SmModel::getImplementationName_Static() 454*cdf0e10cSrcweir { 455*cdf0e10cSrcweir return rtl::OUString::createFromAscii("com.sun.star.comp.math.FormulaDocument"); 456*cdf0e10cSrcweir } 457*cdf0e10cSrcweir 458*cdf0e10cSrcweir /*-- 20.01.04 11:21:00--------------------------------------------------- 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 461*cdf0e10cSrcweir sal_Bool SmModel::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) 462*cdf0e10cSrcweir { 463*cdf0e10cSrcweir return ( 464*cdf0e10cSrcweir rServiceName == A2OU("com.sun.star.document.OfficeDocument" ) || 465*cdf0e10cSrcweir rServiceName == A2OU("com.sun.star.formula.FormulaProperties") 466*cdf0e10cSrcweir ); 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir /*-- 20.01.04 11:21:00--------------------------------------------------- 469*cdf0e10cSrcweir 470*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 471*cdf0e10cSrcweir uno::Sequence< OUString > SmModel::getSupportedServiceNames(void) throw( uno::RuntimeException ) 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir return getSupportedServiceNames_Static(); 474*cdf0e10cSrcweir } 475*cdf0e10cSrcweir 476*cdf0e10cSrcweir uno::Sequence< OUString > SmModel::getSupportedServiceNames_Static(void) 477*cdf0e10cSrcweir { 478*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 479*cdf0e10cSrcweir 480*cdf0e10cSrcweir uno::Sequence< OUString > aRet(2); 481*cdf0e10cSrcweir OUString* pArray = aRet.getArray(); 482*cdf0e10cSrcweir pArray[0] = A2OU("com.sun.star.document.OfficeDocument"); 483*cdf0e10cSrcweir pArray[1] = A2OU("com.sun.star.formula.FormulaProperties"); 484*cdf0e10cSrcweir return aRet; 485*cdf0e10cSrcweir } 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir void SmModel::_setPropertyValues(const PropertyMapEntry** ppEntries, const Any* pValues) 488*cdf0e10cSrcweir throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException) 489*cdf0e10cSrcweir { 490*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir SmDocShell *pDocSh = static_cast < SmDocShell * > (GetObjectShell()); 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir if ( NULL == pDocSh ) 495*cdf0e10cSrcweir throw UnknownPropertyException(); 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir SmFormat aFormat = pDocSh->GetFormat(); 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir for (; *ppEntries; ppEntries++, pValues++ ) 500*cdf0e10cSrcweir { 501*cdf0e10cSrcweir if ((*ppEntries)->mnAttributes & PropertyAttribute::READONLY) 502*cdf0e10cSrcweir throw PropertyVetoException(); 503*cdf0e10cSrcweir 504*cdf0e10cSrcweir switch ( (*ppEntries)->mnHandle ) 505*cdf0e10cSrcweir { 506*cdf0e10cSrcweir case HANDLE_FORMULA: 507*cdf0e10cSrcweir { 508*cdf0e10cSrcweir OUString aText; 509*cdf0e10cSrcweir *pValues >>= aText; 510*cdf0e10cSrcweir pDocSh->SetText(aText); 511*cdf0e10cSrcweir } 512*cdf0e10cSrcweir break; 513*cdf0e10cSrcweir case HANDLE_FONT_NAME_VARIABLES : 514*cdf0e10cSrcweir case HANDLE_FONT_NAME_FUNCTIONS : 515*cdf0e10cSrcweir case HANDLE_FONT_NAME_NUMBERS : 516*cdf0e10cSrcweir case HANDLE_FONT_NAME_TEXT : 517*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_NAME_SERIF : 518*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_NAME_SANS : 519*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_NAME_FIXED : 520*cdf0e10cSrcweir { 521*cdf0e10cSrcweir OUString aText; 522*cdf0e10cSrcweir *pValues >>= aText; 523*cdf0e10cSrcweir String sFontName = aText; 524*cdf0e10cSrcweir if(!sFontName.Len()) 525*cdf0e10cSrcweir throw IllegalArgumentException(); 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir if(aFormat.GetFont((*ppEntries)->mnMemberId).GetName() != sFontName) 528*cdf0e10cSrcweir { 529*cdf0e10cSrcweir const SmFace rOld = aFormat.GetFont((*ppEntries)->mnMemberId); 530*cdf0e10cSrcweir 531*cdf0e10cSrcweir SmFace aSet( sFontName, rOld.GetSize() ); 532*cdf0e10cSrcweir aSet.SetBorderWidth( rOld.GetBorderWidth() ); 533*cdf0e10cSrcweir aSet.SetAlign( ALIGN_BASELINE ); 534*cdf0e10cSrcweir aFormat.SetFont( (*ppEntries)->mnMemberId, aSet ); 535*cdf0e10cSrcweir } 536*cdf0e10cSrcweir } 537*cdf0e10cSrcweir break; 538*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_FIXED_POSTURE: 539*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SANS_POSTURE : 540*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SERIF_POSTURE: 541*cdf0e10cSrcweir case HANDLE_FONT_VARIABLES_POSTURE : 542*cdf0e10cSrcweir case HANDLE_FONT_FUNCTIONS_POSTURE : 543*cdf0e10cSrcweir case HANDLE_FONT_NUMBERS_POSTURE : 544*cdf0e10cSrcweir case HANDLE_FONT_TEXT_POSTURE : 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir if((*pValues).getValueType() != ::getBooleanCppuType()) 547*cdf0e10cSrcweir throw IllegalArgumentException(); 548*cdf0e10cSrcweir sal_Bool bVal = *(sal_Bool*)(*pValues).getValue(); 549*cdf0e10cSrcweir Font aNewFont(aFormat.GetFont((*ppEntries)->mnMemberId)); 550*cdf0e10cSrcweir aNewFont.SetItalic((bVal) ? ITALIC_NORMAL : ITALIC_NONE); 551*cdf0e10cSrcweir aFormat.SetFont((*ppEntries)->mnMemberId, aNewFont); 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir break; 554*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_FIXED_WEIGHT : 555*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SANS_WEIGHT : 556*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SERIF_WEIGHT : 557*cdf0e10cSrcweir case HANDLE_FONT_VARIABLES_WEIGHT : 558*cdf0e10cSrcweir case HANDLE_FONT_FUNCTIONS_WEIGHT : 559*cdf0e10cSrcweir case HANDLE_FONT_NUMBERS_WEIGHT : 560*cdf0e10cSrcweir case HANDLE_FONT_TEXT_WEIGHT : 561*cdf0e10cSrcweir { 562*cdf0e10cSrcweir if((*pValues).getValueType() != ::getBooleanCppuType()) 563*cdf0e10cSrcweir throw IllegalArgumentException(); 564*cdf0e10cSrcweir sal_Bool bVal = *(sal_Bool*)(*pValues).getValue(); 565*cdf0e10cSrcweir Font aNewFont(aFormat.GetFont((*ppEntries)->mnMemberId)); 566*cdf0e10cSrcweir aNewFont.SetWeight((bVal) ? WEIGHT_BOLD : WEIGHT_NORMAL); 567*cdf0e10cSrcweir aFormat.SetFont((*ppEntries)->mnMemberId, aNewFont); 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir break; 570*cdf0e10cSrcweir case HANDLE_BASE_FONT_HEIGHT : 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir // Point! 573*cdf0e10cSrcweir sal_Int16 nVal = lcl_AnyToINT16(*pValues); 574*cdf0e10cSrcweir if(nVal < 1) 575*cdf0e10cSrcweir throw IllegalArgumentException(); 576*cdf0e10cSrcweir Size aSize = aFormat.GetBaseSize(); 577*cdf0e10cSrcweir nVal *= 20; 578*cdf0e10cSrcweir nVal = static_cast < sal_Int16 > ( TWIP_TO_MM100(nVal) ); 579*cdf0e10cSrcweir aSize.Height() = nVal; 580*cdf0e10cSrcweir aFormat.SetBaseSize(aSize); 581*cdf0e10cSrcweir 582*cdf0e10cSrcweir // apply base size to fonts 583*cdf0e10cSrcweir const Size aTmp( aFormat.GetBaseSize() ); 584*cdf0e10cSrcweir for (sal_uInt16 i = FNT_BEGIN; i <= FNT_END; i++) 585*cdf0e10cSrcweir aFormat.SetFontSize(i, aTmp); 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir break; 588*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_TEXT : 589*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_INDICES : 590*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS : 591*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS : 592*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_LIMITS : 593*cdf0e10cSrcweir { 594*cdf0e10cSrcweir sal_Int16 nVal = 0; 595*cdf0e10cSrcweir *pValues >>= nVal; 596*cdf0e10cSrcweir if(nVal < 1) 597*cdf0e10cSrcweir throw IllegalArgumentException(); 598*cdf0e10cSrcweir aFormat.SetRelSize((*ppEntries)->mnMemberId, nVal); 599*cdf0e10cSrcweir } 600*cdf0e10cSrcweir break; 601*cdf0e10cSrcweir 602*cdf0e10cSrcweir case HANDLE_IS_TEXT_MODE : 603*cdf0e10cSrcweir { 604*cdf0e10cSrcweir aFormat.SetTextmode(*(sal_Bool*)(*pValues).getValue()); 605*cdf0e10cSrcweir } 606*cdf0e10cSrcweir break; 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir case HANDLE_GREEK_CHAR_STYLE : 609*cdf0e10cSrcweir { 610*cdf0e10cSrcweir sal_Int16 nVal = 0; 611*cdf0e10cSrcweir *pValues >>= nVal; 612*cdf0e10cSrcweir if (nVal < 0 || nVal > 2) 613*cdf0e10cSrcweir throw IllegalArgumentException(); 614*cdf0e10cSrcweir aFormat.SetGreekCharStyle( nVal ); 615*cdf0e10cSrcweir } 616*cdf0e10cSrcweir break; 617*cdf0e10cSrcweir 618*cdf0e10cSrcweir case HANDLE_ALIGNMENT : 619*cdf0e10cSrcweir { 620*cdf0e10cSrcweir // SmHorAlign uses the same values as HorizontalAlignment 621*cdf0e10cSrcweir sal_Int16 nVal = 0; 622*cdf0e10cSrcweir *pValues >>= nVal; 623*cdf0e10cSrcweir if(nVal < 0 || nVal > 2) 624*cdf0e10cSrcweir throw IllegalArgumentException(); 625*cdf0e10cSrcweir aFormat.SetHorAlign((SmHorAlign)nVal); 626*cdf0e10cSrcweir } 627*cdf0e10cSrcweir break; 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir case HANDLE_RELATIVE_SPACING : 630*cdf0e10cSrcweir case HANDLE_RELATIVE_LINE_SPACING : 631*cdf0e10cSrcweir case HANDLE_RELATIVE_ROOT_SPACING : 632*cdf0e10cSrcweir case HANDLE_RELATIVE_INDEX_SUPERSCRIPT : 633*cdf0e10cSrcweir case HANDLE_RELATIVE_INDEX_SUBSCRIPT : 634*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT : 635*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH: 636*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH: 637*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT : 638*cdf0e10cSrcweir case HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE : 639*cdf0e10cSrcweir case HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE : 640*cdf0e10cSrcweir case HANDLE_RELATIVE_BRACKET_EXCESS_SIZE : 641*cdf0e10cSrcweir case HANDLE_RELATIVE_BRACKET_DISTANCE : 642*cdf0e10cSrcweir case HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE : 643*cdf0e10cSrcweir case HANDLE_RELATIVE_MATRIX_LINE_SPACING : 644*cdf0e10cSrcweir case HANDLE_RELATIVE_MATRIX_COLUMN_SPACING : 645*cdf0e10cSrcweir case HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT : 646*cdf0e10cSrcweir case HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT : 647*cdf0e10cSrcweir case HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE : 648*cdf0e10cSrcweir case HANDLE_RELATIVE_OPERATOR_SPACING : 649*cdf0e10cSrcweir case HANDLE_LEFT_MARGIN : 650*cdf0e10cSrcweir case HANDLE_RIGHT_MARGIN : 651*cdf0e10cSrcweir case HANDLE_TOP_MARGIN : 652*cdf0e10cSrcweir case HANDLE_BOTTOM_MARGIN : 653*cdf0e10cSrcweir { 654*cdf0e10cSrcweir sal_Int16 nVal = 0; 655*cdf0e10cSrcweir *pValues >>= nVal; 656*cdf0e10cSrcweir if(nVal < 0) 657*cdf0e10cSrcweir throw IllegalArgumentException(); 658*cdf0e10cSrcweir aFormat.SetDistance((*ppEntries)->mnMemberId, nVal); 659*cdf0e10cSrcweir } 660*cdf0e10cSrcweir break; 661*cdf0e10cSrcweir case HANDLE_IS_SCALE_ALL_BRACKETS : 662*cdf0e10cSrcweir aFormat.SetScaleNormalBrackets(*(sal_Bool*)(*pValues).getValue()); 663*cdf0e10cSrcweir break; 664*cdf0e10cSrcweir case HANDLE_PRINTER_NAME: 665*cdf0e10cSrcweir { 666*cdf0e10cSrcweir // embedded documents just ignore this property for now 667*cdf0e10cSrcweir if ( pDocSh->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir SfxPrinter *pPrinter = pDocSh->GetPrinter ( ); 670*cdf0e10cSrcweir if (pPrinter) 671*cdf0e10cSrcweir { 672*cdf0e10cSrcweir OUString sPrinterName; 673*cdf0e10cSrcweir if (*pValues >>= sPrinterName ) 674*cdf0e10cSrcweir { 675*cdf0e10cSrcweir if ( sPrinterName.getLength() ) 676*cdf0e10cSrcweir { 677*cdf0e10cSrcweir SfxPrinter *pNewPrinter = new SfxPrinter ( pPrinter->GetOptions().Clone(), sPrinterName ); 678*cdf0e10cSrcweir if (pNewPrinter->IsKnown()) 679*cdf0e10cSrcweir pDocSh->SetPrinter ( pNewPrinter ); 680*cdf0e10cSrcweir else 681*cdf0e10cSrcweir delete pNewPrinter; 682*cdf0e10cSrcweir } 683*cdf0e10cSrcweir } 684*cdf0e10cSrcweir else 685*cdf0e10cSrcweir throw IllegalArgumentException(); 686*cdf0e10cSrcweir } 687*cdf0e10cSrcweir } 688*cdf0e10cSrcweir } 689*cdf0e10cSrcweir break; 690*cdf0e10cSrcweir case HANDLE_PRINTER_SETUP: 691*cdf0e10cSrcweir { 692*cdf0e10cSrcweir Sequence < sal_Int8 > aSequence; 693*cdf0e10cSrcweir if ( *pValues >>= aSequence ) 694*cdf0e10cSrcweir { 695*cdf0e10cSrcweir sal_uInt32 nSize = aSequence.getLength(); 696*cdf0e10cSrcweir SvMemoryStream aStream ( aSequence.getArray(), nSize, STREAM_READ ); 697*cdf0e10cSrcweir aStream.Seek ( STREAM_SEEK_TO_BEGIN ); 698*cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA nRange[] = 699*cdf0e10cSrcweir { 700*cdf0e10cSrcweir SID_PRINTSIZE, SID_PRINTSIZE, 701*cdf0e10cSrcweir SID_PRINTZOOM, SID_PRINTZOOM, 702*cdf0e10cSrcweir SID_PRINTTITLE, SID_PRINTTITLE, 703*cdf0e10cSrcweir SID_PRINTTEXT, SID_PRINTTEXT, 704*cdf0e10cSrcweir SID_PRINTFRAME, SID_PRINTFRAME, 705*cdf0e10cSrcweir SID_NO_RIGHT_SPACES, SID_NO_RIGHT_SPACES, 706*cdf0e10cSrcweir 0 707*cdf0e10cSrcweir }; 708*cdf0e10cSrcweir SfxItemSet *pItemSet = new SfxItemSet( pDocSh->GetPool(), nRange ); 709*cdf0e10cSrcweir SmModule *pp = SM_MOD(); 710*cdf0e10cSrcweir pp->GetConfig()->ConfigToItemSet(*pItemSet); 711*cdf0e10cSrcweir SfxPrinter *pPrinter = SfxPrinter::Create ( aStream, pItemSet ); 712*cdf0e10cSrcweir 713*cdf0e10cSrcweir pDocSh->SetPrinter( pPrinter ); 714*cdf0e10cSrcweir } 715*cdf0e10cSrcweir else 716*cdf0e10cSrcweir throw IllegalArgumentException(); 717*cdf0e10cSrcweir } 718*cdf0e10cSrcweir break; 719*cdf0e10cSrcweir case HANDLE_SYMBOLS: 720*cdf0e10cSrcweir { 721*cdf0e10cSrcweir // this is set 722*cdf0e10cSrcweir Sequence < SymbolDescriptor > aSequence; 723*cdf0e10cSrcweir if ( *pValues >>= aSequence ) 724*cdf0e10cSrcweir { 725*cdf0e10cSrcweir sal_uInt32 nSize = aSequence.getLength(); 726*cdf0e10cSrcweir SmModule *pp = SM_MOD(); 727*cdf0e10cSrcweir SmSymbolManager &rManager = pp->GetSymbolManager(); 728*cdf0e10cSrcweir SymbolDescriptor *pDescriptor = aSequence.getArray(); 729*cdf0e10cSrcweir for (sal_uInt32 i = 0; i < nSize ; i++, pDescriptor++) 730*cdf0e10cSrcweir { 731*cdf0e10cSrcweir Font aFont; 732*cdf0e10cSrcweir aFont.SetName ( pDescriptor->sFontName ); 733*cdf0e10cSrcweir aFont.SetCharSet ( static_cast < rtl_TextEncoding > (pDescriptor->nCharSet) ); 734*cdf0e10cSrcweir aFont.SetFamily ( static_cast < FontFamily > (pDescriptor->nFamily ) ); 735*cdf0e10cSrcweir aFont.SetPitch ( static_cast < FontPitch > (pDescriptor->nPitch ) ); 736*cdf0e10cSrcweir aFont.SetWeight ( static_cast < FontWeight > (pDescriptor->nWeight ) ); 737*cdf0e10cSrcweir aFont.SetItalic ( static_cast < FontItalic > (pDescriptor->nItalic ) ); 738*cdf0e10cSrcweir SmSym aSymbol ( pDescriptor->sName, aFont, static_cast < sal_Unicode > (pDescriptor->nCharacter), 739*cdf0e10cSrcweir pDescriptor->sSymbolSet ); 740*cdf0e10cSrcweir aSymbol.SetExportName ( pDescriptor->sExportName ); 741*cdf0e10cSrcweir aSymbol.SetDocSymbol( sal_True ); 742*cdf0e10cSrcweir rManager.AddOrReplaceSymbol ( aSymbol ); 743*cdf0e10cSrcweir } 744*cdf0e10cSrcweir } 745*cdf0e10cSrcweir else 746*cdf0e10cSrcweir throw IllegalArgumentException(); 747*cdf0e10cSrcweir } 748*cdf0e10cSrcweir break; 749*cdf0e10cSrcweir // --> PB 2004-08-25 #i33095# Security Options 750*cdf0e10cSrcweir case HANDLE_LOAD_READONLY : 751*cdf0e10cSrcweir { 752*cdf0e10cSrcweir if ( (*pValues).getValueType() != ::getBooleanCppuType() ) 753*cdf0e10cSrcweir throw IllegalArgumentException(); 754*cdf0e10cSrcweir sal_Bool bReadonly = sal_False; 755*cdf0e10cSrcweir if ( *pValues >>= bReadonly ) 756*cdf0e10cSrcweir pDocSh->SetLoadReadonly( bReadonly ); 757*cdf0e10cSrcweir break; 758*cdf0e10cSrcweir } 759*cdf0e10cSrcweir // <-- 760*cdf0e10cSrcweir } 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir 763*cdf0e10cSrcweir pDocSh->SetFormat( aFormat ); 764*cdf0e10cSrcweir 765*cdf0e10cSrcweir // #i67283# since about all of the above changes are likely to change 766*cdf0e10cSrcweir // the formula size we have to recalculate the vis-area now 767*cdf0e10cSrcweir pDocSh->SetVisArea( Rectangle( Point(0, 0), pDocSh->GetSize() ) ); 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir 770*cdf0e10cSrcweir void SmModel::_getPropertyValues( const PropertyMapEntry **ppEntries, Any *pValue ) 771*cdf0e10cSrcweir throw( UnknownPropertyException, WrappedTargetException ) 772*cdf0e10cSrcweir { 773*cdf0e10cSrcweir SmDocShell *pDocSh = static_cast < SmDocShell * > (GetObjectShell()); 774*cdf0e10cSrcweir 775*cdf0e10cSrcweir if ( NULL == pDocSh ) 776*cdf0e10cSrcweir throw UnknownPropertyException(); 777*cdf0e10cSrcweir 778*cdf0e10cSrcweir const SmFormat & aFormat = pDocSh->GetFormat(); 779*cdf0e10cSrcweir 780*cdf0e10cSrcweir for (; *ppEntries; ppEntries++, pValue++ ) 781*cdf0e10cSrcweir { 782*cdf0e10cSrcweir switch ( (*ppEntries)->mnHandle ) 783*cdf0e10cSrcweir { 784*cdf0e10cSrcweir case HANDLE_FORMULA: 785*cdf0e10cSrcweir *pValue <<= OUString(pDocSh->GetText()); 786*cdf0e10cSrcweir break; 787*cdf0e10cSrcweir case HANDLE_FONT_NAME_VARIABLES : 788*cdf0e10cSrcweir case HANDLE_FONT_NAME_FUNCTIONS : 789*cdf0e10cSrcweir case HANDLE_FONT_NAME_NUMBERS : 790*cdf0e10cSrcweir case HANDLE_FONT_NAME_TEXT : 791*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_NAME_SERIF : 792*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_NAME_SANS : 793*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_NAME_FIXED : 794*cdf0e10cSrcweir { 795*cdf0e10cSrcweir const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId); 796*cdf0e10cSrcweir *pValue <<= OUString(rFace.GetName()); 797*cdf0e10cSrcweir } 798*cdf0e10cSrcweir break; 799*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_FIXED_POSTURE: 800*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SANS_POSTURE : 801*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SERIF_POSTURE: 802*cdf0e10cSrcweir case HANDLE_FONT_VARIABLES_POSTURE : 803*cdf0e10cSrcweir case HANDLE_FONT_FUNCTIONS_POSTURE : 804*cdf0e10cSrcweir case HANDLE_FONT_NUMBERS_POSTURE : 805*cdf0e10cSrcweir case HANDLE_FONT_TEXT_POSTURE : 806*cdf0e10cSrcweir { 807*cdf0e10cSrcweir const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId); 808*cdf0e10cSrcweir sal_Bool bVal = IsItalic( rFace ); 809*cdf0e10cSrcweir (*pValue).setValue(&bVal, *(*ppEntries)->mpType); 810*cdf0e10cSrcweir } 811*cdf0e10cSrcweir break; 812*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_FIXED_WEIGHT : 813*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SANS_WEIGHT : 814*cdf0e10cSrcweir case HANDLE_CUSTOM_FONT_SERIF_WEIGHT : 815*cdf0e10cSrcweir case HANDLE_FONT_VARIABLES_WEIGHT : 816*cdf0e10cSrcweir case HANDLE_FONT_FUNCTIONS_WEIGHT : 817*cdf0e10cSrcweir case HANDLE_FONT_NUMBERS_WEIGHT : 818*cdf0e10cSrcweir case HANDLE_FONT_TEXT_WEIGHT : 819*cdf0e10cSrcweir { 820*cdf0e10cSrcweir const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId); 821*cdf0e10cSrcweir sal_Bool bVal = IsBold( rFace ); // bold? 822*cdf0e10cSrcweir (*pValue).setValue(&bVal, *(*ppEntries)->mpType); 823*cdf0e10cSrcweir } 824*cdf0e10cSrcweir break; 825*cdf0e10cSrcweir case HANDLE_BASE_FONT_HEIGHT : 826*cdf0e10cSrcweir { 827*cdf0e10cSrcweir // Point! 828*cdf0e10cSrcweir sal_Int16 nVal = static_cast < sal_Int16 > (aFormat.GetBaseSize().Height()); 829*cdf0e10cSrcweir nVal = static_cast < sal_Int16 > (MM100_TO_TWIP(nVal)); 830*cdf0e10cSrcweir nVal = (nVal + 10) / 20; 831*cdf0e10cSrcweir *pValue <<= nVal; 832*cdf0e10cSrcweir } 833*cdf0e10cSrcweir break; 834*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_TEXT : 835*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_INDICES : 836*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS : 837*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS : 838*cdf0e10cSrcweir case HANDLE_RELATIVE_FONT_HEIGHT_LIMITS : 839*cdf0e10cSrcweir *pValue <<= (sal_Int16) aFormat.GetRelSize((*ppEntries)->mnMemberId); 840*cdf0e10cSrcweir break; 841*cdf0e10cSrcweir 842*cdf0e10cSrcweir case HANDLE_IS_TEXT_MODE : 843*cdf0e10cSrcweir { 844*cdf0e10cSrcweir sal_Bool bVal = aFormat.IsTextmode(); 845*cdf0e10cSrcweir (*pValue).setValue(&bVal, ::getBooleanCppuType()); 846*cdf0e10cSrcweir } 847*cdf0e10cSrcweir break; 848*cdf0e10cSrcweir 849*cdf0e10cSrcweir case HANDLE_GREEK_CHAR_STYLE : 850*cdf0e10cSrcweir *pValue <<= (sal_Int16)aFormat.GetGreekCharStyle(); 851*cdf0e10cSrcweir break; 852*cdf0e10cSrcweir 853*cdf0e10cSrcweir case HANDLE_ALIGNMENT : 854*cdf0e10cSrcweir // SmHorAlign uses the same values as HorizontalAlignment 855*cdf0e10cSrcweir *pValue <<= (sal_Int16)aFormat.GetHorAlign(); 856*cdf0e10cSrcweir break; 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir case HANDLE_RELATIVE_SPACING : 859*cdf0e10cSrcweir case HANDLE_RELATIVE_LINE_SPACING : 860*cdf0e10cSrcweir case HANDLE_RELATIVE_ROOT_SPACING : 861*cdf0e10cSrcweir case HANDLE_RELATIVE_INDEX_SUPERSCRIPT : 862*cdf0e10cSrcweir case HANDLE_RELATIVE_INDEX_SUBSCRIPT : 863*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT : 864*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH: 865*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH: 866*cdf0e10cSrcweir case HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT : 867*cdf0e10cSrcweir case HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE : 868*cdf0e10cSrcweir case HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE : 869*cdf0e10cSrcweir case HANDLE_RELATIVE_BRACKET_EXCESS_SIZE : 870*cdf0e10cSrcweir case HANDLE_RELATIVE_BRACKET_DISTANCE : 871*cdf0e10cSrcweir case HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE : 872*cdf0e10cSrcweir case HANDLE_RELATIVE_MATRIX_LINE_SPACING : 873*cdf0e10cSrcweir case HANDLE_RELATIVE_MATRIX_COLUMN_SPACING : 874*cdf0e10cSrcweir case HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT : 875*cdf0e10cSrcweir case HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT : 876*cdf0e10cSrcweir case HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE : 877*cdf0e10cSrcweir case HANDLE_RELATIVE_OPERATOR_SPACING : 878*cdf0e10cSrcweir case HANDLE_LEFT_MARGIN : 879*cdf0e10cSrcweir case HANDLE_RIGHT_MARGIN : 880*cdf0e10cSrcweir case HANDLE_TOP_MARGIN : 881*cdf0e10cSrcweir case HANDLE_BOTTOM_MARGIN : 882*cdf0e10cSrcweir *pValue <<= (sal_Int16)aFormat.GetDistance((*ppEntries)->mnMemberId); 883*cdf0e10cSrcweir break; 884*cdf0e10cSrcweir case HANDLE_IS_SCALE_ALL_BRACKETS : 885*cdf0e10cSrcweir { 886*cdf0e10cSrcweir sal_Bool bVal = aFormat.IsScaleNormalBrackets(); 887*cdf0e10cSrcweir (*pValue).setValue(&bVal, ::getBooleanCppuType()); 888*cdf0e10cSrcweir } 889*cdf0e10cSrcweir break; 890*cdf0e10cSrcweir case HANDLE_PRINTER_NAME: 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir SfxPrinter *pPrinter = pDocSh->GetPrinter ( ); 893*cdf0e10cSrcweir *pValue <<= pPrinter ? OUString ( pPrinter->GetName()) : OUString(); 894*cdf0e10cSrcweir } 895*cdf0e10cSrcweir break; 896*cdf0e10cSrcweir case HANDLE_PRINTER_SETUP: 897*cdf0e10cSrcweir { 898*cdf0e10cSrcweir SfxPrinter *pPrinter = pDocSh->GetPrinter (); 899*cdf0e10cSrcweir if (pPrinter) 900*cdf0e10cSrcweir { 901*cdf0e10cSrcweir SvMemoryStream aStream; 902*cdf0e10cSrcweir pPrinter->Store( aStream ); 903*cdf0e10cSrcweir aStream.Seek ( STREAM_SEEK_TO_END ); 904*cdf0e10cSrcweir sal_uInt32 nSize = aStream.Tell(); 905*cdf0e10cSrcweir aStream.Seek ( STREAM_SEEK_TO_BEGIN ); 906*cdf0e10cSrcweir Sequence < sal_Int8 > aSequence ( nSize ); 907*cdf0e10cSrcweir aStream.Read ( aSequence.getArray(), nSize ); 908*cdf0e10cSrcweir *pValue <<= aSequence; 909*cdf0e10cSrcweir } 910*cdf0e10cSrcweir } 911*cdf0e10cSrcweir break; 912*cdf0e10cSrcweir case HANDLE_SYMBOLS: 913*cdf0e10cSrcweir case HANDLE_USED_SYMBOLS: 914*cdf0e10cSrcweir { 915*cdf0e10cSrcweir const bool bUsedSymbolsOnly = (*ppEntries)->mnHandle == HANDLE_USED_SYMBOLS; 916*cdf0e10cSrcweir const std::set< rtl::OUString > &rUsedSymbols = pDocSh->GetUsedSymbols(); 917*cdf0e10cSrcweir 918*cdf0e10cSrcweir // this is get 919*cdf0e10cSrcweir SmModule *pp = SM_MOD(); 920*cdf0e10cSrcweir const SmSymbolManager &rManager = pp->GetSymbolManager(); 921*cdf0e10cSrcweir vector < const SmSym * > aVector; 922*cdf0e10cSrcweir 923*cdf0e10cSrcweir const SymbolPtrVec_t aSymbols( rManager.GetSymbols() ); 924*cdf0e10cSrcweir size_t nCount = 0; 925*cdf0e10cSrcweir for (size_t i = 0; i < aSymbols.size(); ++i) 926*cdf0e10cSrcweir { 927*cdf0e10cSrcweir const SmSym * pSymbol = aSymbols[ i ]; 928*cdf0e10cSrcweir const bool bIsUsedSymbol = rUsedSymbols.find( pSymbol->GetName() ) != rUsedSymbols.end(); 929*cdf0e10cSrcweir if (pSymbol && !pSymbol->IsPredefined() && 930*cdf0e10cSrcweir (!bUsedSymbolsOnly || bIsUsedSymbol)) 931*cdf0e10cSrcweir { 932*cdf0e10cSrcweir aVector.push_back ( pSymbol ); 933*cdf0e10cSrcweir nCount++; 934*cdf0e10cSrcweir } 935*cdf0e10cSrcweir } 936*cdf0e10cSrcweir Sequence < SymbolDescriptor > aSequence ( nCount ); 937*cdf0e10cSrcweir SymbolDescriptor * pDescriptor = aSequence.getArray(); 938*cdf0e10cSrcweir 939*cdf0e10cSrcweir vector < const SmSym * >::const_iterator aIter = aVector.begin(), aEnd = aVector.end(); 940*cdf0e10cSrcweir for(; aIter != aEnd; pDescriptor++, aIter++) 941*cdf0e10cSrcweir { 942*cdf0e10cSrcweir pDescriptor->sName = (*aIter)->GetName(); 943*cdf0e10cSrcweir pDescriptor->sExportName = (*aIter)->GetExportName(); 944*cdf0e10cSrcweir pDescriptor->sSymbolSet = (*aIter)->GetSymbolSetName(); 945*cdf0e10cSrcweir pDescriptor->nCharacter = static_cast < sal_Int32 > ((*aIter)->GetCharacter()); 946*cdf0e10cSrcweir 947*cdf0e10cSrcweir Font rFont = (*aIter)->GetFace(); 948*cdf0e10cSrcweir pDescriptor->sFontName = rFont.GetName(); 949*cdf0e10cSrcweir pDescriptor->nCharSet = sal::static_int_cast< sal_Int16 >(rFont.GetCharSet()); 950*cdf0e10cSrcweir pDescriptor->nFamily = sal::static_int_cast< sal_Int16 >(rFont.GetFamily()); 951*cdf0e10cSrcweir pDescriptor->nPitch = sal::static_int_cast< sal_Int16 >(rFont.GetPitch()); 952*cdf0e10cSrcweir pDescriptor->nWeight = sal::static_int_cast< sal_Int16 >(rFont.GetWeight()); 953*cdf0e10cSrcweir pDescriptor->nItalic = sal::static_int_cast< sal_Int16 >(rFont.GetItalic()); 954*cdf0e10cSrcweir } 955*cdf0e10cSrcweir *pValue <<= aSequence; 956*cdf0e10cSrcweir } 957*cdf0e10cSrcweir break; 958*cdf0e10cSrcweir case HANDLE_BASIC_LIBRARIES: 959*cdf0e10cSrcweir *pValue <<= pDocSh->GetBasicContainer(); 960*cdf0e10cSrcweir break; 961*cdf0e10cSrcweir case HANDLE_DIALOG_LIBRARIES: 962*cdf0e10cSrcweir *pValue <<= pDocSh->GetDialogContainer(); 963*cdf0e10cSrcweir break; 964*cdf0e10cSrcweir case HANDLE_RUNTIME_UID: 965*cdf0e10cSrcweir *pValue <<= getRuntimeUID(); 966*cdf0e10cSrcweir break; 967*cdf0e10cSrcweir // --> PB 2004-08-25 #i33095# Security Options 968*cdf0e10cSrcweir case HANDLE_LOAD_READONLY : 969*cdf0e10cSrcweir { 970*cdf0e10cSrcweir *pValue <<= pDocSh->IsLoadReadonly(); 971*cdf0e10cSrcweir break; 972*cdf0e10cSrcweir } 973*cdf0e10cSrcweir // <-- 974*cdf0e10cSrcweir // --> 3.7.2010 #i972# 975*cdf0e10cSrcweir case HANDLE_BASELINE: 976*cdf0e10cSrcweir { 977*cdf0e10cSrcweir if ( !pDocSh->pTree ) 978*cdf0e10cSrcweir pDocSh->Parse(); 979*cdf0e10cSrcweir if ( pDocSh->pTree ) 980*cdf0e10cSrcweir { 981*cdf0e10cSrcweir if ( !pDocSh->IsFormulaArranged() ) 982*cdf0e10cSrcweir pDocSh->ArrangeFormula(); 983*cdf0e10cSrcweir 984*cdf0e10cSrcweir *pValue <<= static_cast<sal_Int32>( pDocSh->pTree->GetFormulaBaseline() ); 985*cdf0e10cSrcweir } 986*cdf0e10cSrcweir } 987*cdf0e10cSrcweir break; 988*cdf0e10cSrcweir // <-- 989*cdf0e10cSrcweir } 990*cdf0e10cSrcweir } 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir 993*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 994*cdf0e10cSrcweir 995*cdf0e10cSrcweir sal_Int32 SAL_CALL SmModel::getRendererCount( 996*cdf0e10cSrcweir const uno::Any& /*rSelection*/, 997*cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /*xOptions*/ ) 998*cdf0e10cSrcweir throw (IllegalArgumentException, RuntimeException) 999*cdf0e10cSrcweir { 1000*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 1001*cdf0e10cSrcweir return 1; 1002*cdf0e10cSrcweir } 1003*cdf0e10cSrcweir 1004*cdf0e10cSrcweir 1005*cdf0e10cSrcweir static Size lcl_GuessPaperSize() 1006*cdf0e10cSrcweir { 1007*cdf0e10cSrcweir Size aRes; 1008*cdf0e10cSrcweir Reference< XMultiServiceFactory > xMgr( getProcessServiceFactory() ); 1009*cdf0e10cSrcweir LocaleDataWrapper aLocWrp( xMgr, AllSettings().GetLocale() ); 1010*cdf0e10cSrcweir if( MEASURE_METRIC == aLocWrp.getMeasurementSystemEnum() ) 1011*cdf0e10cSrcweir { 1012*cdf0e10cSrcweir // in 100th mm 1013*cdf0e10cSrcweir PaperInfo aInfo( PAPER_A4 ); 1014*cdf0e10cSrcweir aRes.Width() = aInfo.getWidth(); 1015*cdf0e10cSrcweir aRes.Height() = aInfo.getHeight(); 1016*cdf0e10cSrcweir } 1017*cdf0e10cSrcweir else 1018*cdf0e10cSrcweir { 1019*cdf0e10cSrcweir // in 100th mm 1020*cdf0e10cSrcweir PaperInfo aInfo( PAPER_LETTER ); 1021*cdf0e10cSrcweir aRes.Width() = aInfo.getWidth(); 1022*cdf0e10cSrcweir aRes.Height() = aInfo.getHeight(); 1023*cdf0e10cSrcweir } 1024*cdf0e10cSrcweir return aRes; 1025*cdf0e10cSrcweir } 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir uno::Sequence< beans::PropertyValue > SAL_CALL SmModel::getRenderer( 1028*cdf0e10cSrcweir sal_Int32 nRenderer, 1029*cdf0e10cSrcweir const uno::Any& /*rSelection*/, 1030*cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /*rxOptions*/ ) 1031*cdf0e10cSrcweir throw (IllegalArgumentException, RuntimeException) 1032*cdf0e10cSrcweir { 1033*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir if (0 != nRenderer) 1036*cdf0e10cSrcweir throw IllegalArgumentException(); 1037*cdf0e10cSrcweir 1038*cdf0e10cSrcweir SmDocShell *pDocSh = static_cast < SmDocShell * >( GetObjectShell() ); 1039*cdf0e10cSrcweir if (!pDocSh) 1040*cdf0e10cSrcweir throw RuntimeException(); 1041*cdf0e10cSrcweir 1042*cdf0e10cSrcweir SmPrinterAccess aPrinterAccess( *pDocSh ); 1043*cdf0e10cSrcweir Printer *pPrinter = aPrinterAccess.GetPrinter(); 1044*cdf0e10cSrcweir //Point aPrtPageOffset( pPrinter->GetPageOffset() ); 1045*cdf0e10cSrcweir Size aPrtPaperSize ( pPrinter->GetPaperSize() ); 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir // if paper size is 0 (usually if no 'real' printer is found), 1048*cdf0e10cSrcweir // guess the paper size 1049*cdf0e10cSrcweir if (aPrtPaperSize.Height() == 0 || aPrtPaperSize.Width() == 0) 1050*cdf0e10cSrcweir aPrtPaperSize = lcl_GuessPaperSize(); 1051*cdf0e10cSrcweir awt::Size aPageSize( aPrtPaperSize.Width(), aPrtPaperSize.Height() ); 1052*cdf0e10cSrcweir 1053*cdf0e10cSrcweir uno::Sequence< beans::PropertyValue > aRenderer(1); 1054*cdf0e10cSrcweir PropertyValue &rValue = aRenderer.getArray()[0]; 1055*cdf0e10cSrcweir rValue.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) ); 1056*cdf0e10cSrcweir rValue.Value <<= aPageSize; 1057*cdf0e10cSrcweir 1058*cdf0e10cSrcweir if (!m_pPrintUIOptions) 1059*cdf0e10cSrcweir m_pPrintUIOptions = new SmPrintUIOptions(); 1060*cdf0e10cSrcweir m_pPrintUIOptions->appendPrintUIOptions( aRenderer ); 1061*cdf0e10cSrcweir 1062*cdf0e10cSrcweir return aRenderer; 1063*cdf0e10cSrcweir } 1064*cdf0e10cSrcweir 1065*cdf0e10cSrcweir void SAL_CALL SmModel::render( 1066*cdf0e10cSrcweir sal_Int32 nRenderer, 1067*cdf0e10cSrcweir const uno::Any& rSelection, 1068*cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& rxOptions ) 1069*cdf0e10cSrcweir throw (IllegalArgumentException, RuntimeException) 1070*cdf0e10cSrcweir { 1071*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 1072*cdf0e10cSrcweir 1073*cdf0e10cSrcweir if (0 != nRenderer) 1074*cdf0e10cSrcweir throw IllegalArgumentException(); 1075*cdf0e10cSrcweir 1076*cdf0e10cSrcweir SmDocShell *pDocSh = static_cast < SmDocShell * >( GetObjectShell() ); 1077*cdf0e10cSrcweir if (!pDocSh) 1078*cdf0e10cSrcweir throw RuntimeException(); 1079*cdf0e10cSrcweir 1080*cdf0e10cSrcweir // get device to be rendered in 1081*cdf0e10cSrcweir uno::Reference< awt::XDevice > xRenderDevice; 1082*cdf0e10cSrcweir for (sal_Int32 i = 0, nCount = rxOptions.getLength(); i < nCount; ++i) 1083*cdf0e10cSrcweir { 1084*cdf0e10cSrcweir if( rxOptions[i].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "RenderDevice" ) ) ) 1085*cdf0e10cSrcweir rxOptions[i].Value >>= xRenderDevice; 1086*cdf0e10cSrcweir } 1087*cdf0e10cSrcweir 1088*cdf0e10cSrcweir if (xRenderDevice.is()) 1089*cdf0e10cSrcweir { 1090*cdf0e10cSrcweir VCLXDevice* pDevice = VCLXDevice::GetImplementation( xRenderDevice ); 1091*cdf0e10cSrcweir OutputDevice* pOut = pDevice ? pDevice->GetOutputDevice() : NULL; 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir if (!pOut) 1094*cdf0e10cSrcweir throw RuntimeException(); 1095*cdf0e10cSrcweir 1096*cdf0e10cSrcweir pOut->SetMapMode( MAP_100TH_MM ); 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir uno::Reference< frame::XModel > xModel; 1099*cdf0e10cSrcweir rSelection >>= xModel; 1100*cdf0e10cSrcweir if (xModel == pDocSh->GetModel()) 1101*cdf0e10cSrcweir { 1102*cdf0e10cSrcweir //!! when called via API we may not have an active view 1103*cdf0e10cSrcweir //!! thus we go and look for a view that can be used. 1104*cdf0e10cSrcweir const TypeId aTypeId = TYPE( SmViewShell ); 1105*cdf0e10cSrcweir SfxViewShell* pViewSh = SfxViewShell::GetFirst( &aTypeId, sal_False /* search non-visible views as well*/ ); 1106*cdf0e10cSrcweir while (pViewSh && pViewSh->GetObjectShell() != pDocSh) 1107*cdf0e10cSrcweir pViewSh = SfxViewShell::GetNext( *pViewSh, &aTypeId, sal_False /* search non-visible views as well*/ ); 1108*cdf0e10cSrcweir SmViewShell *pView = PTR_CAST( SmViewShell, pViewSh ); 1109*cdf0e10cSrcweir DBG_ASSERT( pView, "SmModel::render : no SmViewShell found" ); 1110*cdf0e10cSrcweir 1111*cdf0e10cSrcweir if (pView) 1112*cdf0e10cSrcweir { 1113*cdf0e10cSrcweir SmPrinterAccess aPrinterAccess( *pDocSh ); 1114*cdf0e10cSrcweir Printer *pPrinter = aPrinterAccess.GetPrinter(); 1115*cdf0e10cSrcweir 1116*cdf0e10cSrcweir Size aPrtPaperSize ( pPrinter->GetPaperSize() ); 1117*cdf0e10cSrcweir Size aOutputSize ( pPrinter->GetOutputSize() ); 1118*cdf0e10cSrcweir Point aPrtPageOffset( pPrinter->GetPageOffset() ); 1119*cdf0e10cSrcweir 1120*cdf0e10cSrcweir // no real printer ?? 1121*cdf0e10cSrcweir if (aPrtPaperSize.Height() == 0 || aPrtPaperSize.Width() == 0) 1122*cdf0e10cSrcweir { 1123*cdf0e10cSrcweir aPrtPaperSize = lcl_GuessPaperSize(); 1124*cdf0e10cSrcweir // factors from Windows DIN A4 1125*cdf0e10cSrcweir aOutputSize = Size( (long)(aPrtPaperSize.Width() * 0.941), 1126*cdf0e10cSrcweir (long)(aPrtPaperSize.Height() * 0.961)); 1127*cdf0e10cSrcweir aPrtPageOffset = Point( (long)(aPrtPaperSize.Width() * 0.0250), 1128*cdf0e10cSrcweir (long)(aPrtPaperSize.Height() * 0.0214)); 1129*cdf0e10cSrcweir } 1130*cdf0e10cSrcweir Point aZeroPoint; 1131*cdf0e10cSrcweir Rectangle OutputRect( aZeroPoint, aOutputSize ); 1132*cdf0e10cSrcweir 1133*cdf0e10cSrcweir 1134*cdf0e10cSrcweir // set minimum top and bottom border 1135*cdf0e10cSrcweir if (aPrtPageOffset.Y() < 2000) 1136*cdf0e10cSrcweir OutputRect.Top() += 2000 - aPrtPageOffset.Y(); 1137*cdf0e10cSrcweir if ((aPrtPaperSize.Height() - (aPrtPageOffset.Y() + OutputRect.Bottom())) < 2000) 1138*cdf0e10cSrcweir OutputRect.Bottom() -= 2000 - (aPrtPaperSize.Height() - 1139*cdf0e10cSrcweir (aPrtPageOffset.Y() + OutputRect.Bottom())); 1140*cdf0e10cSrcweir 1141*cdf0e10cSrcweir // set minimum left and right border 1142*cdf0e10cSrcweir if (aPrtPageOffset.X() < 2500) 1143*cdf0e10cSrcweir OutputRect.Left() += 2500 - aPrtPageOffset.X(); 1144*cdf0e10cSrcweir if ((aPrtPaperSize.Width() - (aPrtPageOffset.X() + OutputRect.Right())) < 1500) 1145*cdf0e10cSrcweir OutputRect.Right() -= 1500 - (aPrtPaperSize.Width() - 1146*cdf0e10cSrcweir (aPrtPageOffset.X() + OutputRect.Right())); 1147*cdf0e10cSrcweir 1148*cdf0e10cSrcweir if (!m_pPrintUIOptions) 1149*cdf0e10cSrcweir m_pPrintUIOptions = new SmPrintUIOptions(); 1150*cdf0e10cSrcweir m_pPrintUIOptions->processProperties( rxOptions ); 1151*cdf0e10cSrcweir 1152*cdf0e10cSrcweir pView->Impl_Print( *pOut, *m_pPrintUIOptions, Rectangle( OutputRect ), Point() ); 1153*cdf0e10cSrcweir 1154*cdf0e10cSrcweir // release SmPrintUIOptions when everything is done. 1155*cdf0e10cSrcweir // That way, when SmPrintUIOptions is needed again it will read the latest configuration settings in its c-tor. 1156*cdf0e10cSrcweir if (m_pPrintUIOptions->getBoolValue( "IsLastPage", sal_False )) 1157*cdf0e10cSrcweir { 1158*cdf0e10cSrcweir delete m_pPrintUIOptions; m_pPrintUIOptions = 0; 1159*cdf0e10cSrcweir } 1160*cdf0e10cSrcweir } 1161*cdf0e10cSrcweir } 1162*cdf0e10cSrcweir } 1163*cdf0e10cSrcweir } 1164*cdf0e10cSrcweir 1165*cdf0e10cSrcweir void SAL_CALL SmModel::setParent( const uno::Reference< uno::XInterface >& xParent) 1166*cdf0e10cSrcweir throw( lang::NoSupportException, uno::RuntimeException ) 1167*cdf0e10cSrcweir { 1168*cdf0e10cSrcweir ::vos::OGuard aGuard( Application::GetSolarMutex() ); 1169*cdf0e10cSrcweir SfxBaseModel::setParent( xParent ); 1170*cdf0e10cSrcweir uno::Reference< lang::XUnoTunnel > xParentTunnel( xParent, uno::UNO_QUERY ); 1171*cdf0e10cSrcweir if ( xParentTunnel.is() ) 1172*cdf0e10cSrcweir { 1173*cdf0e10cSrcweir SvGlobalName aSfxIdent( SFX_GLOBAL_CLASSID ); 1174*cdf0e10cSrcweir SfxObjectShell* pDoc = reinterpret_cast<SfxObjectShell *>(xParentTunnel->getSomething( 1175*cdf0e10cSrcweir uno::Sequence< sal_Int8 >( aSfxIdent.GetByteSequence() ) ) ); 1176*cdf0e10cSrcweir if ( pDoc ) 1177*cdf0e10cSrcweir GetObjectShell()->OnDocumentPrinterChanged( pDoc->GetDocumentPrinter() ); 1178*cdf0e10cSrcweir } 1179*cdf0e10cSrcweir } 1180*cdf0e10cSrcweir 1181