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