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: */
|