LCOV - code coverage report
Current view: top level - starmath/source - unomodel.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 293 524 55.9 %
Date: 2012-08-25 Functions: 25 30 83.3 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 248 1028 24.1 %

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

Generated by: LCOV version 1.10