/src/libreoffice/starmath/source/unomodel.cxx
Line | Count | Source |
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 <sal/config.h> |
21 | | #include <sal/log.hxx> |
22 | | |
23 | | #include <utility> |
24 | | |
25 | | #include <o3tl/any.hxx> |
26 | | #include <sfx2/printer.hxx> |
27 | | #include <svl/itemprop.hxx> |
28 | | #include <svl/itemset.hxx> |
29 | | #include <vcl/svapp.hxx> |
30 | | #include <unotools/localedatawrapper.hxx> |
31 | | #include <vcl/settings.hxx> |
32 | | #include <vcl/print.hxx> |
33 | | #include <toolkit/awt/vclxdevice.hxx> |
34 | | #include <com/sun/star/beans/PropertyAttribute.hpp> |
35 | | #include <com/sun/star/formula/SymbolDescriptor.hpp> |
36 | | #include <com/sun/star/awt/Size.hpp> |
37 | | #include <comphelper/propertysetinfo.hxx> |
38 | | #include <comphelper/propertyvalue.hxx> |
39 | | #include <comphelper/sequence.hxx> |
40 | | #include <comphelper/servicehelper.hxx> |
41 | | #include <cppuhelper/queryinterface.hxx> |
42 | | #include <cppuhelper/supportsservice.hxx> |
43 | | #include <editeng/paperinf.hxx> |
44 | | #include <unotools/moduleoptions.hxx> |
45 | | #include <tools/mapunit.hxx> |
46 | | #include <tools/stream.hxx> |
47 | | |
48 | | #include <unomodel.hxx> |
49 | | #include <document.hxx> |
50 | | #include <view.hxx> |
51 | | #include <symbol.hxx> |
52 | | #include <starmath.hrc> |
53 | | #include <strings.hrc> |
54 | | #include <smmod.hxx> |
55 | | #include <cfgitem.hxx> |
56 | | |
57 | | using namespace ::cppu; |
58 | | using namespace ::comphelper; |
59 | | using namespace ::com::sun::star; |
60 | | using namespace ::com::sun::star::uno; |
61 | | using namespace ::com::sun::star::beans; |
62 | | using namespace ::com::sun::star::lang; |
63 | | using namespace ::com::sun::star::formula; |
64 | | using namespace ::com::sun::star::view; |
65 | | using namespace ::com::sun::star::script; |
66 | | |
67 | | SmPrintUIOptions::SmPrintUIOptions() |
68 | 0 | { |
69 | 0 | SmMathConfig* pConfig = SmModule::get()->GetConfig(); |
70 | 0 | SAL_WARN_IF( !pConfig, "starmath", "SmConfig not found" ); |
71 | 0 | if (!pConfig) |
72 | 0 | return; |
73 | | |
74 | 0 | sal_Int32 nNumProps = 10, nIdx=0; |
75 | | |
76 | | // create sequence of print UI options |
77 | | // (Actually IsIgnoreSpacesRight is a parser option. Without it we need only 8 properties here.) |
78 | 0 | m_aUIProperties.resize( nNumProps ); |
79 | | |
80 | | // load the math PrinterOptions into the custom tab |
81 | 0 | m_aUIProperties[nIdx].Name = "OptionsUIFile"; |
82 | 0 | m_aUIProperties[nIdx++].Value <<= u"modules/smath/ui/printeroptions.ui"_ustr; |
83 | | |
84 | | // create Section for formula (results in an extra tab page in dialog) |
85 | 0 | SvtModuleOptions aOpt; |
86 | 0 | OUString aAppGroupname( |
87 | 0 | SmResId( RID_PRINTUIOPT_PRODNAME ). |
88 | 0 | replaceFirst( "%s", aOpt.GetModuleName( SvtModuleOptions::EModule::MATH ) ) ); |
89 | 0 | m_aUIProperties[nIdx++].Value = setGroupControlOpt(u"tabcontrol-page2"_ustr, aAppGroupname, u".HelpID:vcl:PrintDialog:TabPage:AppPage"_ustr); |
90 | | |
91 | | // create subgroup for print options |
92 | 0 | m_aUIProperties[nIdx++].Value = setSubgroupControlOpt(u"contents"_ustr, SmResId( RID_PRINTUIOPT_CONTENTS ), OUString()); |
93 | | |
94 | | // create a bool option for title row (matches to SID_PRINTTITLE) |
95 | 0 | m_aUIProperties[nIdx++].Value = setBoolControlOpt(u"title"_ustr, SmResId( RID_PRINTUIOPT_TITLE ), |
96 | 0 | u".HelpID:vcl:PrintDialog:TitleRow:CheckBox"_ustr, |
97 | 0 | PRTUIOPT_TITLE_ROW, |
98 | 0 | pConfig->IsPrintTitle()); |
99 | | // create a bool option for formula text (matches to SID_PRINTTEXT) |
100 | 0 | m_aUIProperties[nIdx++].Value = setBoolControlOpt(u"formulatext"_ustr, SmResId( RID_PRINTUIOPT_FRMLTXT ), |
101 | 0 | u".HelpID:vcl:PrintDialog:FormulaText:CheckBox"_ustr, |
102 | 0 | PRTUIOPT_FORMULA_TEXT, |
103 | 0 | pConfig->IsPrintFormulaText()); |
104 | | // create a bool option for border (matches to SID_PRINTFRAME) |
105 | 0 | m_aUIProperties[nIdx++].Value = setBoolControlOpt(u"borders"_ustr, SmResId( RID_PRINTUIOPT_BORDERS ), |
106 | 0 | u".HelpID:vcl:PrintDialog:Border:CheckBox"_ustr, |
107 | 0 | PRTUIOPT_BORDER, |
108 | 0 | pConfig->IsPrintFrame()); |
109 | | |
110 | | // create subgroup for print format |
111 | 0 | m_aUIProperties[nIdx++].Value = setSubgroupControlOpt(u"size"_ustr, SmResId( RID_PRINTUIOPT_SIZE ), OUString()); |
112 | | |
113 | | // create a radio button group for print format (matches to SID_PRINTSIZE) |
114 | 0 | Sequence< OUString > aChoices{ |
115 | 0 | SmResId( RID_PRINTUIOPT_ORIGSIZE ), |
116 | 0 | SmResId( RID_PRINTUIOPT_FITTOPAGE ), |
117 | 0 | SmResId( RID_PRINTUIOPT_SCALING ) |
118 | 0 | }; |
119 | 0 | Sequence< OUString > aHelpIds{ |
120 | 0 | u".HelpID:vcl:PrintDialog:PrintFormat:RadioButton:0"_ustr, |
121 | 0 | u".HelpID:vcl:PrintDialog:PrintFormat:RadioButton:1"_ustr, |
122 | 0 | u".HelpID:vcl:PrintDialog:PrintFormat:RadioButton:2"_ustr |
123 | 0 | }; |
124 | 0 | Sequence< OUString > aWidgetIds{ |
125 | 0 | u"originalsize"_ustr, |
126 | 0 | u"fittopage"_ustr, |
127 | 0 | u"scaling"_ustr |
128 | 0 | }; |
129 | 0 | OUString aPrintFormatProp( PRTUIOPT_PRINT_FORMAT ); |
130 | 0 | m_aUIProperties[nIdx++].Value = setChoiceRadiosControlOpt(aWidgetIds, OUString(), |
131 | 0 | aHelpIds, |
132 | 0 | aPrintFormatProp, |
133 | 0 | aChoices, static_cast< sal_Int32 >(pConfig->GetPrintSize()) |
134 | 0 | ); |
135 | | |
136 | | // create a numeric box for scale dependent on PrintFormat = "Scaling" (matches to SID_PRINTZOOM) |
137 | 0 | vcl::PrinterOptionsHelper::UIControlOptions aRangeOpt( aPrintFormatProp, 2, true ); |
138 | 0 | m_aUIProperties[nIdx++].Value = setRangeControlOpt(u"scalingspin"_ustr, OUString(), |
139 | 0 | u".HelpID:vcl:PrintDialog:PrintScale:NumericField"_ustr, |
140 | 0 | PRTUIOPT_PRINT_SCALE, |
141 | 0 | pConfig->GetPrintZoomFactor(), // initial value |
142 | 0 | 10, // min value |
143 | 0 | 1000, // max value |
144 | 0 | aRangeOpt); |
145 | |
|
146 | 0 | Sequence aHintNoLayoutPage{ comphelper::makePropertyValue(u"HintNoLayoutPage"_ustr, true) }; |
147 | 0 | m_aUIProperties[nIdx++].Value <<= aHintNoLayoutPage; |
148 | |
|
149 | 0 | assert(nIdx == nNumProps); |
150 | 0 | } |
151 | | |
152 | | |
153 | | |
154 | | namespace { |
155 | | |
156 | | enum SmModelPropertyHandles |
157 | | { |
158 | | HANDLE_FORMULA, |
159 | | HANDLE_FONT_NAME_MATH, |
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_MATH_POSTURE, |
174 | | HANDLE_FONT_MATH_WEIGHT, |
175 | | HANDLE_FONT_VARIABLES_POSTURE, |
176 | | HANDLE_FONT_VARIABLES_WEIGHT, |
177 | | HANDLE_FONT_FUNCTIONS_POSTURE, |
178 | | HANDLE_FONT_FUNCTIONS_WEIGHT, |
179 | | HANDLE_FONT_NUMBERS_POSTURE, |
180 | | HANDLE_FONT_NUMBERS_WEIGHT, |
181 | | HANDLE_FONT_TEXT_POSTURE, |
182 | | HANDLE_FONT_TEXT_WEIGHT, |
183 | | HANDLE_BASE_FONT_HEIGHT, |
184 | | HANDLE_RELATIVE_FONT_HEIGHT_TEXT, |
185 | | HANDLE_RELATIVE_FONT_HEIGHT_INDICES, |
186 | | HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS, |
187 | | HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS, |
188 | | HANDLE_RELATIVE_FONT_HEIGHT_LIMITS, |
189 | | HANDLE_IS_TEXT_MODE, |
190 | | HANDLE_IS_RIGHT_TO_LEFT, |
191 | | HANDLE_GREEK_CHAR_STYLE, |
192 | | HANDLE_ALIGNMENT, |
193 | | HANDLE_RELATIVE_SPACING, |
194 | | HANDLE_RELATIVE_LINE_SPACING, |
195 | | HANDLE_RELATIVE_ROOT_SPACING, |
196 | | HANDLE_RELATIVE_INDEX_SUPERSCRIPT, |
197 | | HANDLE_RELATIVE_INDEX_SUBSCRIPT, |
198 | | HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT, |
199 | | HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH, |
200 | | HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH, |
201 | | HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT, |
202 | | HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE, |
203 | | HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE, |
204 | | HANDLE_RELATIVE_BRACKET_EXCESS_SIZE, |
205 | | HANDLE_RELATIVE_BRACKET_DISTANCE, |
206 | | HANDLE_IS_SCALE_ALL_BRACKETS, |
207 | | HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE, |
208 | | HANDLE_RELATIVE_MATRIX_LINE_SPACING, |
209 | | HANDLE_RELATIVE_MATRIX_COLUMN_SPACING, |
210 | | HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT, |
211 | | HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT, |
212 | | HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE, |
213 | | HANDLE_RELATIVE_OPERATOR_SPACING, |
214 | | HANDLE_LEFT_MARGIN, |
215 | | HANDLE_RIGHT_MARGIN, |
216 | | HANDLE_TOP_MARGIN, |
217 | | HANDLE_BOTTOM_MARGIN, |
218 | | HANDLE_PRINTER_NAME, |
219 | | HANDLE_PRINTER_SETUP, |
220 | | HANDLE_SYMBOLS, |
221 | | HANDLE_SAVE_THUMBNAIL, |
222 | | HANDLE_USED_SYMBOLS, |
223 | | HANDLE_BASIC_LIBRARIES, |
224 | | HANDLE_RUNTIME_UID, |
225 | | HANDLE_LOAD_READONLY, // Security Options |
226 | | HANDLE_DIALOG_LIBRARIES, // #i73329# |
227 | | HANDLE_BASELINE, |
228 | | HANDLE_INTEROP_GRAB_BAG, |
229 | | HANDLE_STARMATH_VERSION, |
230 | | HANDLE_WINDOWSTATE |
231 | | }; |
232 | | |
233 | | } |
234 | | |
235 | | static const rtl::Reference<PropertySetInfo> & lcl_createModelPropertyInfo () |
236 | 24.1k | { |
237 | 24.1k | static const PropertyMapEntry aModelPropertyInfoMap[] = |
238 | 24.1k | { |
239 | 24.1k | { u"Alignment"_ustr , HANDLE_ALIGNMENT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, 0 }, |
240 | 24.1k | { u"BaseFontHeight"_ustr , HANDLE_BASE_FONT_HEIGHT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, 0 }, |
241 | 24.1k | { u"BasicLibraries"_ustr , HANDLE_BASIC_LIBRARIES , cppu::UnoType<script::XLibraryContainer>::get(), PropertyAttribute::READONLY, 0 }, |
242 | 24.1k | { u"BottomMargin"_ustr , HANDLE_BOTTOM_MARGIN , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_BOTTOMSPACE }, |
243 | 24.1k | { u"CustomFontNameFixed"_ustr , HANDLE_CUSTOM_FONT_NAME_FIXED , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_FIXED }, |
244 | 24.1k | { u"CustomFontNameSans"_ustr , HANDLE_CUSTOM_FONT_NAME_SANS , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_SANS }, |
245 | 24.1k | { u"CustomFontNameSerif"_ustr , HANDLE_CUSTOM_FONT_NAME_SERIF , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_SERIF }, |
246 | 24.1k | { u"DialogLibraries"_ustr , HANDLE_DIALOG_LIBRARIES , cppu::UnoType<script::XLibraryContainer>::get(), PropertyAttribute::READONLY, 0 }, |
247 | 24.1k | { u"FontFixedIsBold"_ustr , HANDLE_CUSTOM_FONT_FIXED_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_FIXED }, |
248 | 24.1k | { u"FontFixedIsItalic"_ustr , HANDLE_CUSTOM_FONT_FIXED_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_FIXED }, |
249 | 24.1k | { u"FontFunctionsIsBold"_ustr , HANDLE_FONT_FUNCTIONS_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_FUNCTION }, |
250 | 24.1k | { u"FontFunctionsIsItalic"_ustr , HANDLE_FONT_FUNCTIONS_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_FUNCTION }, |
251 | 24.1k | { u"FontMathIsBold"_ustr , HANDLE_FONT_MATH_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_MATH }, |
252 | 24.1k | { u"FontMathIsItalic"_ustr , HANDLE_FONT_MATH_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_MATH }, |
253 | 24.1k | { u"FontNameFunctions"_ustr , HANDLE_FONT_NAME_FUNCTIONS , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_FUNCTION }, |
254 | 24.1k | { u"FontNameMath"_ustr , HANDLE_FONT_NAME_MATH , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_MATH }, |
255 | 24.1k | { u"FontNameNumbers"_ustr , HANDLE_FONT_NAME_NUMBERS , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_NUMBER }, |
256 | 24.1k | { u"FontNameText"_ustr , HANDLE_FONT_NAME_TEXT , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_TEXT }, |
257 | 24.1k | { u"FontNameVariables"_ustr , HANDLE_FONT_NAME_VARIABLES , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, FNT_VARIABLE }, |
258 | 24.1k | { u"FontNumbersIsBold"_ustr , HANDLE_FONT_NUMBERS_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_NUMBER }, |
259 | 24.1k | { u"FontNumbersIsItalic"_ustr , HANDLE_FONT_NUMBERS_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_NUMBER }, |
260 | 24.1k | { u"FontSansIsBold"_ustr , HANDLE_CUSTOM_FONT_SANS_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_SANS }, |
261 | 24.1k | { u"FontSansIsItalic"_ustr , HANDLE_CUSTOM_FONT_SANS_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_SANS }, |
262 | 24.1k | { u"FontSerifIsBold"_ustr , HANDLE_CUSTOM_FONT_SERIF_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_SERIF }, |
263 | 24.1k | { u"FontSerifIsItalic"_ustr , HANDLE_CUSTOM_FONT_SERIF_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_SERIF }, |
264 | 24.1k | { u"FontTextIsBold"_ustr , HANDLE_FONT_TEXT_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_TEXT }, |
265 | 24.1k | { u"FontTextIsItalic"_ustr , HANDLE_FONT_TEXT_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_TEXT }, |
266 | 24.1k | { u"FontVariablesIsBold"_ustr , HANDLE_FONT_VARIABLES_WEIGHT , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_VARIABLE }, |
267 | 24.1k | { u"FontVariablesIsItalic"_ustr , HANDLE_FONT_VARIABLES_POSTURE , cppu::UnoType<bool>::get(), PROPERTY_NONE, FNT_VARIABLE }, |
268 | 24.1k | { u"Formula"_ustr , HANDLE_FORMULA , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, |
269 | 24.1k | { u"IsScaleAllBrackets"_ustr , HANDLE_IS_SCALE_ALL_BRACKETS , cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 }, |
270 | 24.1k | { u"IsTextMode"_ustr , HANDLE_IS_TEXT_MODE , cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 }, |
271 | 24.1k | { u"IsRightToLeft"_ustr , HANDLE_IS_RIGHT_TO_LEFT , cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 }, |
272 | 24.1k | { u"GreekCharStyle"_ustr , HANDLE_GREEK_CHAR_STYLE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, 0 }, |
273 | 24.1k | { u"LeftMargin"_ustr , HANDLE_LEFT_MARGIN , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_LEFTSPACE }, |
274 | 24.1k | { u"PrinterName"_ustr , HANDLE_PRINTER_NAME , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, |
275 | 24.1k | { u"PrinterSetup"_ustr , HANDLE_PRINTER_SETUP , cppu::UnoType<const Sequence < sal_Int8 >>::get(), PROPERTY_NONE, 0 }, |
276 | 24.1k | { u"RelativeBracketDistance"_ustr , HANDLE_RELATIVE_BRACKET_DISTANCE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_BRACKETSPACE }, |
277 | 24.1k | { u"RelativeBracketExcessSize"_ustr , HANDLE_RELATIVE_BRACKET_EXCESS_SIZE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_BRACKETSIZE }, |
278 | 24.1k | { u"RelativeFontHeightFunctions"_ustr , HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, SIZ_FUNCTION }, |
279 | 24.1k | { u"RelativeFontHeightIndices"_ustr , HANDLE_RELATIVE_FONT_HEIGHT_INDICES , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, SIZ_INDEX }, |
280 | 24.1k | { u"RelativeFontHeightLimits"_ustr , HANDLE_RELATIVE_FONT_HEIGHT_LIMITS , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, SIZ_LIMITS }, |
281 | 24.1k | { u"RelativeFontHeightOperators"_ustr , HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, SIZ_OPERATOR }, |
282 | 24.1k | { u"RelativeFontHeightText"_ustr , HANDLE_RELATIVE_FONT_HEIGHT_TEXT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, SIZ_TEXT }, |
283 | 24.1k | { u"RelativeFractionBarExcessLength"_ustr , HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH, ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_FRACTION }, |
284 | 24.1k | { u"RelativeFractionBarLineWeight"_ustr , HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_STROKEWIDTH }, |
285 | 24.1k | { u"RelativeFractionDenominatorDepth"_ustr , HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH, ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_DENOMINATOR }, |
286 | 24.1k | { u"RelativeFractionNumeratorHeight"_ustr , HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_NUMERATOR }, |
287 | 24.1k | { u"RelativeIndexSubscript"_ustr , HANDLE_RELATIVE_INDEX_SUBSCRIPT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_SUBSCRIPT }, |
288 | 24.1k | { u"RelativeIndexSuperscript"_ustr , HANDLE_RELATIVE_INDEX_SUPERSCRIPT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_SUPERSCRIPT }, |
289 | 24.1k | { u"RelativeLineSpacing"_ustr , HANDLE_RELATIVE_LINE_SPACING , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_VERTICAL }, |
290 | 24.1k | { u"RelativeLowerLimitDistance"_ustr , HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_LOWERLIMIT }, |
291 | 24.1k | { u"RelativeMatrixColumnSpacing"_ustr , HANDLE_RELATIVE_MATRIX_COLUMN_SPACING , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_MATRIXCOL }, |
292 | 24.1k | { u"RelativeMatrixLineSpacing"_ustr , HANDLE_RELATIVE_MATRIX_LINE_SPACING , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_MATRIXROW }, |
293 | 24.1k | { u"RelativeOperatorExcessSize"_ustr , HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_OPERATORSIZE }, |
294 | 24.1k | { u"RelativeOperatorSpacing"_ustr , HANDLE_RELATIVE_OPERATOR_SPACING , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_OPERATORSPACE }, |
295 | 24.1k | { u"RelativeRootSpacing"_ustr , HANDLE_RELATIVE_ROOT_SPACING , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_ROOT }, |
296 | 24.1k | { u"RelativeScaleBracketExcessSize"_ustr , HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_NORMALBRACKETSIZE }, |
297 | 24.1k | { u"RelativeSpacing"_ustr , HANDLE_RELATIVE_SPACING , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_HORIZONTAL }, |
298 | 24.1k | { u"RelativeSymbolMinimumHeight"_ustr , HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_ORNAMENTSPACE }, |
299 | 24.1k | { u"RelativeSymbolPrimaryHeight"_ustr , HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_ORNAMENTSIZE }, |
300 | 24.1k | { u"RelativeUpperLimitDistance"_ustr , HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_UPPERLIMIT }, |
301 | 24.1k | { u"RightMargin"_ustr , HANDLE_RIGHT_MARGIN , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_RIGHTSPACE }, |
302 | 24.1k | { u"RuntimeUID"_ustr , HANDLE_RUNTIME_UID , cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY, 0 }, |
303 | 24.1k | { u"SaveThumbnail"_ustr , HANDLE_SAVE_THUMBNAIL , cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 }, |
304 | 24.1k | { u"Symbols"_ustr , HANDLE_SYMBOLS , cppu::UnoType<Sequence < SymbolDescriptor >>::get(), PROPERTY_NONE, 0 }, |
305 | 24.1k | { u"UserDefinedSymbolsInUse"_ustr , HANDLE_USED_SYMBOLS , cppu::UnoType<Sequence < SymbolDescriptor >>::get(), PropertyAttribute::READONLY, 0 }, |
306 | 24.1k | { u"TopMargin"_ustr , HANDLE_TOP_MARGIN , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, DIS_TOPSPACE }, |
307 | | // #i33095# Security Options |
308 | 24.1k | { u"LoadReadonly"_ustr , HANDLE_LOAD_READONLY , cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 }, |
309 | | // #i972# |
310 | 24.1k | { u"BaseLine"_ustr , HANDLE_BASELINE , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, 0 }, |
311 | 24.1k | { u"InteropGrabBag"_ustr , HANDLE_INTEROP_GRAB_BAG , cppu::UnoType<uno::Sequence< beans::PropertyValue >>::get(), PROPERTY_NONE, 0 }, |
312 | 24.1k | { u"SyntaxVersion"_ustr , HANDLE_STARMATH_VERSION , ::cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, 0 }, |
313 | 24.1k | { u"WindowState"_ustr , HANDLE_WINDOWSTATE , ::cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, |
314 | 24.1k | }; |
315 | 24.1k | static const rtl::Reference<PropertySetInfo> PROPS_INFO = new PropertySetInfo ( aModelPropertyInfoMap ); |
316 | 24.1k | return PROPS_INFO; |
317 | 24.1k | } |
318 | | |
319 | | SmModel::SmModel(SmDocShell* pObjSh) |
320 | 24.1k | : SfxBaseModel(pObjSh) |
321 | 24.1k | , PropertySetHelper ( lcl_createModelPropertyInfo () ) |
322 | 24.1k | { |
323 | 24.1k | } |
324 | | |
325 | | SmModel::~SmModel() noexcept |
326 | 24.1k | { |
327 | 24.1k | } |
328 | | |
329 | 1.53k | SmDocShell* SmModel::GetSmDocShell() const { return static_cast<SmDocShell*>(GetObjectShell()); } |
330 | | |
331 | | uno::Any SAL_CALL SmModel::queryInterface( const uno::Type& rType ) |
332 | 143k | { |
333 | 143k | uno::Any aRet = ::cppu::queryInterface ( rType, |
334 | | // PropertySetHelper interfaces |
335 | 143k | static_cast< XPropertySet* > ( this ), |
336 | 143k | static_cast< XMultiPropertySet* > ( this ), |
337 | | // my own interfaces |
338 | 143k | static_cast< XServiceInfo* > ( this ), |
339 | 143k | static_cast< XRenderable* > ( this ) ); |
340 | 143k | if (!aRet.hasValue()) |
341 | 142k | aRet = SfxBaseModel::queryInterface ( rType ); |
342 | 143k | return aRet; |
343 | 143k | } |
344 | | |
345 | | void SAL_CALL SmModel::acquire() noexcept |
346 | 433k | { |
347 | 433k | OWeakObject::acquire(); |
348 | 433k | } |
349 | | |
350 | | void SAL_CALL SmModel::release() noexcept |
351 | 433k | { |
352 | 433k | OWeakObject::release(); |
353 | 433k | } |
354 | | |
355 | | uno::Sequence< uno::Type > SAL_CALL SmModel::getTypes( ) |
356 | 0 | { |
357 | 0 | return comphelper::concatSequences(SfxBaseModel::getTypes(), |
358 | 0 | uno::Sequence { |
359 | 0 | cppu::UnoType<XServiceInfo>::get(), |
360 | 0 | cppu::UnoType<XPropertySet>::get(), |
361 | 0 | cppu::UnoType<XMultiPropertySet>::get(), |
362 | 0 | cppu::UnoType<XRenderable>::get() }); |
363 | 0 | } |
364 | | |
365 | | const uno::Sequence< sal_Int8 > & SmModel::getUnoTunnelId() |
366 | 0 | { |
367 | 0 | static const comphelper::UnoIdInit theSmModelUnoTunnelId; |
368 | 0 | return theSmModelUnoTunnelId.getSeq(); |
369 | 0 | } |
370 | | |
371 | | sal_Int64 SAL_CALL SmModel::getSomething( const uno::Sequence< sal_Int8 >& rId ) |
372 | 0 | { |
373 | 0 | return comphelper::getSomethingImpl(rId, this, |
374 | 0 | comphelper::FallbackToGetSomethingOf<SfxBaseModel>{}); |
375 | 0 | } |
376 | | |
377 | | static sal_Int16 lcl_AnyToINT16(const uno::Any& rAny) |
378 | 0 | { |
379 | 0 | sal_Int16 nRet = 0; |
380 | 0 | if( auto x = o3tl::tryAccess<double>(rAny) ) |
381 | 0 | nRet = static_cast<sal_Int16>(*x); |
382 | 0 | else |
383 | 0 | rAny >>= nRet; |
384 | 0 | return nRet; |
385 | 0 | } |
386 | | |
387 | | OUString SmModel::getImplementationName() |
388 | 0 | { |
389 | 0 | return u"com.sun.star.comp.Math.FormulaDocument"_ustr; |
390 | 0 | } |
391 | | |
392 | | sal_Bool SmModel::supportsService(const OUString& rServiceName) |
393 | 0 | { |
394 | 0 | return cppu::supportsService(this, rServiceName); |
395 | 0 | } |
396 | | |
397 | | uno::Sequence< OUString > SmModel::getSupportedServiceNames() |
398 | 0 | { |
399 | 0 | static constexpr OUString service1 = u"com.sun.star.document.OfficeDocument"_ustr; |
400 | 0 | static constexpr OUString service2 = u"com.sun.star.formula.FormulaProperties"_ustr; |
401 | 0 | return uno::Sequence<OUString>{ service1, service2 }; |
402 | 0 | } |
403 | | |
404 | | void SmModel::_setPropertyValues(const PropertyMapEntry** ppEntries, const Any* pValues) |
405 | 1.53k | { |
406 | 1.53k | SolarMutexGuard aGuard; |
407 | | |
408 | 1.53k | SmDocShell* pDocSh = GetSmDocShell(); |
409 | | |
410 | 1.53k | if ( nullptr == pDocSh ) |
411 | 0 | throw UnknownPropertyException(); |
412 | | |
413 | 1.53k | SmFormat aFormat = pDocSh->GetFormat(); |
414 | | |
415 | 3.00k | for (; *ppEntries; ppEntries++, pValues++ ) |
416 | 1.53k | { |
417 | 1.53k | if ((*ppEntries)->mnAttributes & PropertyAttribute::READONLY) |
418 | 0 | throw PropertyVetoException(); |
419 | | |
420 | 1.53k | switch ( (*ppEntries)->mnHandle ) |
421 | 1.53k | { |
422 | 0 | case HANDLE_FORMULA: |
423 | 0 | { |
424 | 0 | OUString aText; |
425 | 0 | *pValues >>= aText; |
426 | 0 | pDocSh->SetText(aText); |
427 | 0 | } |
428 | 0 | break; |
429 | 0 | case HANDLE_FONT_NAME_MATH : |
430 | 0 | case HANDLE_FONT_NAME_VARIABLES : |
431 | 0 | case HANDLE_FONT_NAME_FUNCTIONS : |
432 | 0 | case HANDLE_FONT_NAME_NUMBERS : |
433 | 0 | case HANDLE_FONT_NAME_TEXT : |
434 | 0 | case HANDLE_CUSTOM_FONT_NAME_SERIF : |
435 | 0 | case HANDLE_CUSTOM_FONT_NAME_SANS : |
436 | 0 | case HANDLE_CUSTOM_FONT_NAME_FIXED : |
437 | 0 | { |
438 | 0 | OUString sFontName; |
439 | 0 | *pValues >>= sFontName; |
440 | 0 | if(sFontName.isEmpty()) |
441 | 0 | throw IllegalArgumentException(); |
442 | 0 | maFonts[(*ppEntries)->mnMemberId].SetFamilyName(sFontName); |
443 | 0 | } |
444 | 0 | break; |
445 | 0 | case HANDLE_CUSTOM_FONT_FIXED_POSTURE: |
446 | 0 | case HANDLE_CUSTOM_FONT_SANS_POSTURE : |
447 | 0 | case HANDLE_CUSTOM_FONT_SERIF_POSTURE: |
448 | 0 | case HANDLE_FONT_MATH_POSTURE : |
449 | 0 | case HANDLE_FONT_VARIABLES_POSTURE : |
450 | 0 | case HANDLE_FONT_FUNCTIONS_POSTURE : |
451 | 0 | case HANDLE_FONT_NUMBERS_POSTURE : |
452 | 0 | case HANDLE_FONT_TEXT_POSTURE : |
453 | 0 | { |
454 | 0 | std::optional<const bool> bVal = o3tl::tryAccess<bool>(*pValues); |
455 | 0 | if(!bVal.has_value()) |
456 | 0 | throw IllegalArgumentException(); |
457 | 0 | maFonts[(*ppEntries)->mnMemberId].SetItalic(*bVal ? ITALIC_NORMAL : ITALIC_NONE); |
458 | 0 | } |
459 | 0 | break; |
460 | 0 | case HANDLE_CUSTOM_FONT_FIXED_WEIGHT : |
461 | 0 | case HANDLE_CUSTOM_FONT_SANS_WEIGHT : |
462 | 0 | case HANDLE_CUSTOM_FONT_SERIF_WEIGHT : |
463 | 0 | case HANDLE_FONT_MATH_WEIGHT : |
464 | 0 | case HANDLE_FONT_VARIABLES_WEIGHT : |
465 | 0 | case HANDLE_FONT_FUNCTIONS_WEIGHT : |
466 | 0 | case HANDLE_FONT_NUMBERS_WEIGHT : |
467 | 0 | case HANDLE_FONT_TEXT_WEIGHT : |
468 | 0 | { |
469 | 0 | std::optional<const bool> bVal = o3tl::tryAccess<bool>(*pValues); |
470 | 0 | if(!bVal.has_value()) |
471 | 0 | throw IllegalArgumentException(); |
472 | 0 | maFonts[(*ppEntries)->mnMemberId].SetWeight(*bVal ? WEIGHT_BOLD : WEIGHT_NORMAL); |
473 | 0 | } |
474 | 0 | break; |
475 | 0 | case HANDLE_BASE_FONT_HEIGHT : |
476 | 0 | { |
477 | | // Point! |
478 | 0 | sal_Int16 nVal = lcl_AnyToINT16(*pValues); |
479 | 0 | if(nVal < 1) |
480 | 0 | throw IllegalArgumentException(); |
481 | 0 | Size aSize = aFormat.GetBaseSize(); |
482 | 0 | aSize.setHeight(o3tl::convert(nVal, o3tl::Length::pt, SmO3tlLengthUnit())); |
483 | 0 | aFormat.SetBaseSize(aSize); |
484 | | |
485 | | // apply base size to fonts |
486 | 0 | const Size aTmp( aFormat.GetBaseSize() ); |
487 | 0 | for (sal_uInt16 i = FNT_BEGIN; i <= FNT_END; i++) |
488 | 0 | maFonts[i].SetSize(aTmp); |
489 | 0 | } |
490 | 0 | break; |
491 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_TEXT : |
492 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_INDICES : |
493 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS : |
494 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS : |
495 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_LIMITS : |
496 | 0 | { |
497 | 0 | sal_Int16 nVal = 0; |
498 | 0 | *pValues >>= nVal; |
499 | 0 | if(nVal < 1) |
500 | 0 | throw IllegalArgumentException(); |
501 | 0 | aFormat.SetRelSize((*ppEntries)->mnMemberId, nVal); |
502 | 0 | } |
503 | 0 | break; |
504 | | |
505 | 0 | case HANDLE_IS_TEXT_MODE : |
506 | 0 | { |
507 | 0 | aFormat.SetTextmode(*o3tl::doAccess<bool>(*pValues)); |
508 | 0 | } |
509 | 0 | break; |
510 | | |
511 | 0 | case HANDLE_IS_RIGHT_TO_LEFT : |
512 | 0 | aFormat.SetRightToLeft(*o3tl::doAccess<bool>(*pValues)); |
513 | 0 | break; |
514 | | |
515 | 0 | case HANDLE_GREEK_CHAR_STYLE : |
516 | 0 | { |
517 | 0 | sal_Int16 nVal = 0; |
518 | 0 | *pValues >>= nVal; |
519 | 0 | if (nVal < 0 || nVal > 2) |
520 | 0 | throw IllegalArgumentException(); |
521 | 0 | aFormat.SetGreekCharStyle( nVal ); |
522 | 0 | } |
523 | 0 | break; |
524 | | |
525 | 0 | case HANDLE_ALIGNMENT : |
526 | 0 | { |
527 | | // SmHorAlign uses the same values as HorizontalAlignment |
528 | 0 | sal_Int16 nVal = 0; |
529 | 0 | *pValues >>= nVal; |
530 | 0 | if(nVal < 0 || nVal > 2) |
531 | 0 | throw IllegalArgumentException(); |
532 | 0 | aFormat.SetHorAlign(static_cast<SmHorAlign>(nVal)); |
533 | 0 | } |
534 | 0 | break; |
535 | | |
536 | 0 | case HANDLE_RELATIVE_SPACING : |
537 | 0 | case HANDLE_RELATIVE_LINE_SPACING : |
538 | 0 | case HANDLE_RELATIVE_ROOT_SPACING : |
539 | 0 | case HANDLE_RELATIVE_INDEX_SUPERSCRIPT : |
540 | 0 | case HANDLE_RELATIVE_INDEX_SUBSCRIPT : |
541 | 0 | case HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT : |
542 | 0 | case HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH: |
543 | 0 | case HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH: |
544 | 0 | case HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT : |
545 | 0 | case HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE : |
546 | 0 | case HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE : |
547 | 0 | case HANDLE_RELATIVE_BRACKET_EXCESS_SIZE : |
548 | 0 | case HANDLE_RELATIVE_BRACKET_DISTANCE : |
549 | 0 | case HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE : |
550 | 0 | case HANDLE_RELATIVE_MATRIX_LINE_SPACING : |
551 | 0 | case HANDLE_RELATIVE_MATRIX_COLUMN_SPACING : |
552 | 0 | case HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT : |
553 | 0 | case HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT : |
554 | 0 | case HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE : |
555 | 0 | case HANDLE_RELATIVE_OPERATOR_SPACING : |
556 | 0 | case HANDLE_LEFT_MARGIN : |
557 | 0 | case HANDLE_RIGHT_MARGIN : |
558 | 0 | case HANDLE_TOP_MARGIN : |
559 | 0 | case HANDLE_BOTTOM_MARGIN : |
560 | 0 | { |
561 | 0 | sal_Int16 nVal = 0; |
562 | 0 | *pValues >>= nVal; |
563 | 0 | if(nVal < 0) |
564 | 0 | throw IllegalArgumentException(); |
565 | 0 | aFormat.SetDistance((*ppEntries)->mnMemberId, nVal); |
566 | 0 | } |
567 | 0 | break; |
568 | 0 | case HANDLE_IS_SCALE_ALL_BRACKETS : |
569 | 0 | aFormat.SetScaleNormalBrackets(*o3tl::doAccess<bool>(*pValues)); |
570 | 0 | break; |
571 | 80 | case HANDLE_PRINTER_NAME: |
572 | 80 | { |
573 | | // embedded documents just ignore this property for now |
574 | 80 | if ( pDocSh->GetCreateMode() != SfxObjectCreateMode::EMBEDDED ) |
575 | 0 | { |
576 | 0 | SfxPrinter *pPrinter = pDocSh->GetPrinter ( ); |
577 | 0 | if (pPrinter) |
578 | 0 | { |
579 | 0 | OUString sPrinterName; |
580 | 0 | if ( !(*pValues >>= sPrinterName) ) |
581 | 0 | throw IllegalArgumentException(); |
582 | | |
583 | 0 | if ( !sPrinterName.isEmpty() ) |
584 | 0 | { |
585 | 0 | VclPtrInstance<SfxPrinter> pNewPrinter( pPrinter->GetOptions().Clone(), sPrinterName ); |
586 | 0 | if (pNewPrinter->IsKnown()) |
587 | 0 | pDocSh->SetPrinter ( pNewPrinter ); |
588 | 0 | else |
589 | 0 | pNewPrinter.disposeAndClear(); |
590 | 0 | } |
591 | 0 | } |
592 | 0 | } |
593 | 80 | } |
594 | 80 | break; |
595 | 1.37k | case HANDLE_PRINTER_SETUP: |
596 | 1.37k | { |
597 | 1.37k | Sequence < sal_Int8 > aSequence; |
598 | 1.37k | if ( !(*pValues >>= aSequence) ) |
599 | 42 | throw IllegalArgumentException(); |
600 | | |
601 | 1.32k | sal_uInt32 nSize = aSequence.getLength(); |
602 | 1.32k | SvMemoryStream aStream ( aSequence.getArray(), nSize, StreamMode::READ ); |
603 | 1.32k | aStream.Seek ( STREAM_SEEK_TO_BEGIN ); |
604 | 1.32k | auto pItemSet = std::make_unique<SfxItemSet>(SfxItemSet::makeFixedSfxItemSet< |
605 | 1.32k | SID_PRINTTITLE, SID_PRINTTITLE, |
606 | 1.32k | SID_PRINTTEXT, SID_PRINTTEXT, |
607 | 1.32k | SID_PRINTFRAME, SID_PRINTFRAME, |
608 | 1.32k | SID_PRINTSIZE, SID_PRINTSIZE, |
609 | 1.32k | SID_PRINTZOOM, SID_PRINTZOOM, |
610 | 1.32k | SID_NO_RIGHT_SPACES, SID_NO_RIGHT_SPACES, |
611 | 1.32k | SID_SAVE_ONLY_USED_SYMBOLS, SID_SAVE_ONLY_USED_SYMBOLS, |
612 | 1.32k | SID_AUTO_CLOSE_BRACKETS, SID_SMEDITWINDOWZOOM, |
613 | 1.32k | SID_INLINE_EDIT_ENABLE, SID_INLINE_EDIT_ENABLE> ( SmDocShell::GetPool() )); |
614 | 1.32k | SmModule::get()->GetConfig()->ConfigToItemSet(*pItemSet); |
615 | 1.32k | VclPtr<SfxPrinter> pPrinter = SfxPrinter::Create ( aStream, std::move(pItemSet) ); |
616 | | |
617 | 1.32k | pDocSh->SetPrinter( pPrinter ); |
618 | 1.32k | } |
619 | 0 | break; |
620 | 0 | case HANDLE_SYMBOLS: |
621 | 0 | { |
622 | | // this is set |
623 | 0 | Sequence < SymbolDescriptor > aSequence; |
624 | 0 | if ( !(*pValues >>= aSequence) ) |
625 | 0 | throw IllegalArgumentException(); |
626 | | |
627 | 0 | SmSymbolManager& rManager = SmModule::get()->GetSymbolManager(); |
628 | 0 | for (const SymbolDescriptor& rDescriptor : aSequence) |
629 | 0 | { |
630 | 0 | vcl::Font aFont; |
631 | 0 | aFont.SetFamilyName ( rDescriptor.sFontName ); |
632 | 0 | aFont.SetCharSet ( static_cast < rtl_TextEncoding > (rDescriptor.nCharSet) ); |
633 | 0 | aFont.SetFamily ( static_cast < FontFamily > (rDescriptor.nFamily ) ); |
634 | 0 | aFont.SetPitch ( static_cast < FontPitch > (rDescriptor.nPitch ) ); |
635 | 0 | aFont.SetWeight ( static_cast < FontWeight > (rDescriptor.nWeight ) ); |
636 | 0 | aFont.SetItalic ( static_cast < FontItalic > (rDescriptor.nItalic ) ); |
637 | 0 | SmSym aSymbol ( rDescriptor.sName, aFont, static_cast < sal_Unicode > (rDescriptor.nCharacter), |
638 | 0 | rDescriptor.sSymbolSet ); |
639 | 0 | aSymbol.SetExportName ( rDescriptor.sExportName ); |
640 | 0 | rManager.AddOrReplaceSymbol ( aSymbol ); |
641 | 0 | } |
642 | 0 | } |
643 | 0 | break; |
644 | | // #i33095# Security Options |
645 | 82 | case HANDLE_LOAD_READONLY : |
646 | 82 | { |
647 | 82 | if ( (*pValues).getValueType() != cppu::UnoType<bool>::get() ) |
648 | 14 | throw IllegalArgumentException(); |
649 | 68 | bool bReadonly = false; |
650 | 68 | if ( *pValues >>= bReadonly ) |
651 | 68 | pDocSh->SetLoadReadonly( bReadonly ); |
652 | 68 | break; |
653 | 82 | } |
654 | 0 | case HANDLE_INTEROP_GRAB_BAG: |
655 | 0 | setGrabBagItem(*pValues); |
656 | 0 | break; |
657 | 0 | case HANDLE_SAVE_THUMBNAIL: |
658 | 0 | { |
659 | 0 | if ((*pValues).getValueType() != cppu::UnoType<bool>::get()) |
660 | 0 | throw IllegalArgumentException(); |
661 | 0 | bool bThumbnail = false; |
662 | 0 | if (*pValues >>= bThumbnail) |
663 | 0 | pDocSh->SetUseThumbnailSave(bThumbnail); |
664 | 0 | } |
665 | 0 | break; |
666 | 0 | case HANDLE_STARMATH_VERSION: |
667 | 0 | pDocSh->SetSmSyntaxVersion(pValues->get<sal_Int16>()); |
668 | 0 | break; |
669 | 0 | case HANDLE_WINDOWSTATE: |
670 | 0 | { |
671 | 0 | *pValues >>= msOldWindowState; |
672 | 0 | } |
673 | 0 | break; |
674 | 1.53k | } |
675 | 1.53k | } |
676 | | |
677 | | // tdf#143213 |
678 | | // Collect all font settings and apply them at the end, since the font name change can be seen |
679 | | // after italic or bold settings and would then override them. |
680 | 13.2k | for (sal_uInt16 nFontDesc = FNT_BEGIN; nFontDesc <= FNT_END; ++nFontDesc) |
681 | 11.8k | { |
682 | 11.8k | const SmFace& rFont = maFonts[nFontDesc]; |
683 | 11.8k | if (rFont.GetFamilyName().isEmpty()) |
684 | 11.8k | continue; |
685 | | |
686 | 0 | if (aFormat.GetFont(nFontDesc).GetFamilyName() != rFont.GetFamilyName()) |
687 | 0 | { |
688 | 0 | const SmFace rOld = aFormat.GetFont(nFontDesc); |
689 | |
|
690 | 0 | SmFace aSet(rFont.GetFamilyName(), rOld.GetFontSize()); |
691 | 0 | aSet.SetBorderWidth(rOld.GetBorderWidth()); |
692 | 0 | aSet.SetAlignment(ALIGN_BASELINE); |
693 | 0 | aFormat.SetFont(nFontDesc, aSet); |
694 | 0 | } |
695 | |
|
696 | 0 | if (aFormat.GetFont(nFontDesc).GetItalic() != rFont.GetItalic()) |
697 | 0 | { |
698 | 0 | vcl::Font aNewFont(aFormat.GetFont(nFontDesc)); |
699 | 0 | aNewFont.SetItalic(rFont.GetItalic()); |
700 | 0 | aFormat.SetFont(nFontDesc, SmFace(aNewFont)); |
701 | 0 | } |
702 | |
|
703 | 0 | if (aFormat.GetFont(nFontDesc).GetWeight() != rFont.GetWeight()) |
704 | 0 | { |
705 | 0 | vcl::Font aNewFont(aFormat.GetFont(nFontDesc)); |
706 | 0 | aNewFont.SetWeight(rFont.GetWeight()); |
707 | 0 | aFormat.SetFont(nFontDesc, SmFace(aNewFont)); |
708 | 0 | } |
709 | |
|
710 | 0 | if (aFormat.GetFont(nFontDesc).GetFontSize() != rFont.GetFontSize()) |
711 | 0 | { |
712 | 0 | aFormat.SetFontSize(nFontDesc, rFont.GetFontSize()); |
713 | 0 | } |
714 | 0 | } |
715 | | |
716 | 1.47k | pDocSh->SetFormat( aFormat ); |
717 | | |
718 | | // #i67283# since about all of the above changes are likely to change |
719 | | // the formula size we have to recalculate the vis-area now |
720 | 1.47k | pDocSh->SetVisArea( tools::Rectangle( Point(0, 0), pDocSh->GetSize() ) ); |
721 | 1.47k | } |
722 | | |
723 | | void SmModel::_getPropertyValues( const PropertyMapEntry **ppEntries, Any *pValue ) |
724 | 0 | { |
725 | 0 | SmDocShell* pDocSh = GetSmDocShell(); |
726 | |
|
727 | 0 | if ( nullptr == pDocSh ) |
728 | 0 | throw UnknownPropertyException(); |
729 | | |
730 | 0 | const SmFormat & aFormat = pDocSh->GetFormat(); |
731 | |
|
732 | 0 | for (; *ppEntries; ppEntries++, pValue++ ) |
733 | 0 | { |
734 | 0 | switch ( (*ppEntries)->mnHandle ) |
735 | 0 | { |
736 | 0 | case HANDLE_FORMULA: |
737 | 0 | *pValue <<= pDocSh->GetText(); |
738 | 0 | break; |
739 | 0 | case HANDLE_FONT_NAME_MATH : |
740 | 0 | case HANDLE_FONT_NAME_VARIABLES : |
741 | 0 | case HANDLE_FONT_NAME_FUNCTIONS : |
742 | 0 | case HANDLE_FONT_NAME_NUMBERS : |
743 | 0 | case HANDLE_FONT_NAME_TEXT : |
744 | 0 | case HANDLE_CUSTOM_FONT_NAME_SERIF : |
745 | 0 | case HANDLE_CUSTOM_FONT_NAME_SANS : |
746 | 0 | case HANDLE_CUSTOM_FONT_NAME_FIXED : |
747 | 0 | { |
748 | 0 | const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId); |
749 | 0 | *pValue <<= rFace.GetFamilyName(); |
750 | 0 | } |
751 | 0 | break; |
752 | 0 | case HANDLE_CUSTOM_FONT_FIXED_POSTURE: |
753 | 0 | case HANDLE_CUSTOM_FONT_SANS_POSTURE : |
754 | 0 | case HANDLE_CUSTOM_FONT_SERIF_POSTURE: |
755 | 0 | case HANDLE_FONT_MATH_POSTURE : |
756 | 0 | case HANDLE_FONT_VARIABLES_POSTURE : |
757 | 0 | case HANDLE_FONT_FUNCTIONS_POSTURE : |
758 | 0 | case HANDLE_FONT_NUMBERS_POSTURE : |
759 | 0 | case HANDLE_FONT_TEXT_POSTURE : |
760 | 0 | { |
761 | 0 | const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId); |
762 | 0 | *pValue <<= IsItalic( rFace ); |
763 | 0 | } |
764 | 0 | break; |
765 | 0 | case HANDLE_CUSTOM_FONT_FIXED_WEIGHT : |
766 | 0 | case HANDLE_CUSTOM_FONT_SANS_WEIGHT : |
767 | 0 | case HANDLE_CUSTOM_FONT_SERIF_WEIGHT : |
768 | 0 | case HANDLE_FONT_MATH_WEIGHT : |
769 | 0 | case HANDLE_FONT_VARIABLES_WEIGHT : |
770 | 0 | case HANDLE_FONT_FUNCTIONS_WEIGHT : |
771 | 0 | case HANDLE_FONT_NUMBERS_WEIGHT : |
772 | 0 | case HANDLE_FONT_TEXT_WEIGHT : |
773 | 0 | { |
774 | 0 | const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId); |
775 | 0 | *pValue <<= IsBold( rFace ); |
776 | 0 | } |
777 | 0 | break; |
778 | 0 | case HANDLE_BASE_FONT_HEIGHT : |
779 | 0 | { |
780 | | // Point! |
781 | 0 | *pValue <<= sal_Int16(o3tl::convert(aFormat.GetBaseSize().Height(), |
782 | 0 | SmO3tlLengthUnit(), o3tl::Length::pt)); |
783 | 0 | } |
784 | 0 | break; |
785 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_TEXT : |
786 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_INDICES : |
787 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS : |
788 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS : |
789 | 0 | case HANDLE_RELATIVE_FONT_HEIGHT_LIMITS : |
790 | 0 | *pValue <<= static_cast<sal_Int16>(aFormat.GetRelSize((*ppEntries)->mnMemberId)); |
791 | 0 | break; |
792 | | |
793 | 0 | case HANDLE_IS_TEXT_MODE : |
794 | 0 | *pValue <<= aFormat.IsTextmode(); |
795 | 0 | break; |
796 | | |
797 | 0 | case HANDLE_IS_RIGHT_TO_LEFT : |
798 | 0 | *pValue <<= aFormat.IsRightToLeft(); |
799 | 0 | break; |
800 | | |
801 | 0 | case HANDLE_GREEK_CHAR_STYLE : |
802 | 0 | *pValue <<= aFormat.GetGreekCharStyle(); |
803 | 0 | break; |
804 | | |
805 | 0 | case HANDLE_ALIGNMENT : |
806 | | // SmHorAlign uses the same values as HorizontalAlignment |
807 | 0 | *pValue <<= static_cast<sal_Int16>(aFormat.GetHorAlign()); |
808 | 0 | break; |
809 | | |
810 | 0 | case HANDLE_RELATIVE_SPACING : |
811 | 0 | case HANDLE_RELATIVE_LINE_SPACING : |
812 | 0 | case HANDLE_RELATIVE_ROOT_SPACING : |
813 | 0 | case HANDLE_RELATIVE_INDEX_SUPERSCRIPT : |
814 | 0 | case HANDLE_RELATIVE_INDEX_SUBSCRIPT : |
815 | 0 | case HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT : |
816 | 0 | case HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH: |
817 | 0 | case HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH: |
818 | 0 | case HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT : |
819 | 0 | case HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE : |
820 | 0 | case HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE : |
821 | 0 | case HANDLE_RELATIVE_BRACKET_EXCESS_SIZE : |
822 | 0 | case HANDLE_RELATIVE_BRACKET_DISTANCE : |
823 | 0 | case HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE : |
824 | 0 | case HANDLE_RELATIVE_MATRIX_LINE_SPACING : |
825 | 0 | case HANDLE_RELATIVE_MATRIX_COLUMN_SPACING : |
826 | 0 | case HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT : |
827 | 0 | case HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT : |
828 | 0 | case HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE : |
829 | 0 | case HANDLE_RELATIVE_OPERATOR_SPACING : |
830 | 0 | case HANDLE_LEFT_MARGIN : |
831 | 0 | case HANDLE_RIGHT_MARGIN : |
832 | 0 | case HANDLE_TOP_MARGIN : |
833 | 0 | case HANDLE_BOTTOM_MARGIN : |
834 | 0 | *pValue <<= static_cast<sal_Int16>(aFormat.GetDistance((*ppEntries)->mnMemberId)); |
835 | 0 | break; |
836 | 0 | case HANDLE_IS_SCALE_ALL_BRACKETS : |
837 | 0 | *pValue <<= aFormat.IsScaleNormalBrackets(); |
838 | 0 | break; |
839 | 0 | case HANDLE_PRINTER_NAME: |
840 | 0 | { |
841 | 0 | SfxPrinter *pPrinter = pDocSh->GetPrinter ( ); |
842 | 0 | *pValue <<= pPrinter ? pPrinter->GetName() : OUString(); |
843 | 0 | } |
844 | 0 | break; |
845 | 0 | case HANDLE_PRINTER_SETUP: |
846 | 0 | { |
847 | 0 | SfxPrinter *pPrinter = pDocSh->GetPrinter (); |
848 | 0 | if (pPrinter) |
849 | 0 | { |
850 | 0 | SvMemoryStream aStream; |
851 | 0 | pPrinter->Store( aStream ); |
852 | 0 | sal_uInt32 nSize = aStream.TellEnd(); |
853 | 0 | aStream.Seek ( STREAM_SEEK_TO_BEGIN ); |
854 | 0 | Sequence < sal_Int8 > aSequence ( nSize ); |
855 | 0 | aStream.ReadBytes(aSequence.getArray(), nSize); |
856 | 0 | *pValue <<= aSequence; |
857 | 0 | } |
858 | 0 | } |
859 | 0 | break; |
860 | 0 | case HANDLE_SYMBOLS: |
861 | 0 | case HANDLE_USED_SYMBOLS: |
862 | 0 | { |
863 | 0 | const bool bUsedSymbolsOnly = (*ppEntries)->mnHandle == HANDLE_USED_SYMBOLS; |
864 | 0 | const std::set< OUString > &rUsedSymbols = pDocSh->GetUsedSymbols(); |
865 | | |
866 | | // this is get |
867 | 0 | const SmSymbolManager& rManager = SmModule::get()->GetSymbolManager(); |
868 | 0 | std::vector < const SmSym * > aVector; |
869 | |
|
870 | 0 | const SymbolPtrVec_t aSymbols( rManager.GetSymbols() ); |
871 | 0 | for (const SmSym* pSymbol : aSymbols) |
872 | 0 | { |
873 | 0 | if (pSymbol && !pSymbol->IsPredefined() && |
874 | 0 | (!bUsedSymbolsOnly || |
875 | 0 | rUsedSymbols.find( pSymbol->GetUiName() ) != rUsedSymbols.end())) |
876 | 0 | aVector.push_back ( pSymbol ); |
877 | 0 | } |
878 | 0 | Sequence < SymbolDescriptor > aSequence ( aVector.size() ); |
879 | 0 | SymbolDescriptor * pDescriptor = aSequence.getArray(); |
880 | |
|
881 | 0 | for (const SmSym* pSymbol : aVector) |
882 | 0 | { |
883 | 0 | pDescriptor->sName = pSymbol->GetUiName(); |
884 | 0 | pDescriptor->sExportName = pSymbol->GetExportName(); |
885 | 0 | pDescriptor->sSymbolSet = pSymbol->GetSymbolSetName(); |
886 | 0 | pDescriptor->nCharacter = static_cast < sal_Int32 > (pSymbol->GetCharacter()); |
887 | |
|
888 | 0 | vcl::Font rFont = pSymbol->GetFace(); |
889 | 0 | pDescriptor->sFontName = rFont.GetFamilyName(); |
890 | 0 | pDescriptor->nCharSet = sal::static_int_cast< sal_Int16 >(rFont.GetCharSet()); |
891 | 0 | pDescriptor->nFamily = sal::static_int_cast< sal_Int16 >(rFont.GetFamilyTypeMaybeAskConfig()); |
892 | 0 | pDescriptor->nPitch = sal::static_int_cast< sal_Int16 >(rFont.GetPitchMaybeAskConfig()); |
893 | 0 | pDescriptor->nWeight = sal::static_int_cast< sal_Int16 >(rFont.GetWeightMaybeAskConfig()); |
894 | 0 | pDescriptor->nItalic = sal::static_int_cast< sal_Int16 >(rFont.GetItalicMaybeAskConfig()); |
895 | 0 | pDescriptor++; |
896 | 0 | } |
897 | 0 | *pValue <<= aSequence; |
898 | 0 | } |
899 | 0 | break; |
900 | 0 | case HANDLE_BASIC_LIBRARIES: |
901 | 0 | *pValue <<= pDocSh->GetBasicContainer(); |
902 | 0 | break; |
903 | 0 | case HANDLE_DIALOG_LIBRARIES: |
904 | 0 | *pValue <<= pDocSh->GetDialogContainer(); |
905 | 0 | break; |
906 | 0 | case HANDLE_RUNTIME_UID: |
907 | 0 | *pValue <<= getRuntimeUID(); |
908 | 0 | break; |
909 | | // #i33095# Security Options |
910 | 0 | case HANDLE_LOAD_READONLY : |
911 | 0 | { |
912 | 0 | *pValue <<= pDocSh->IsLoadReadonly(); |
913 | 0 | break; |
914 | 0 | } |
915 | | // #i972# |
916 | 0 | case HANDLE_BASELINE: |
917 | 0 | { |
918 | 0 | if ( !pDocSh->GetFormulaTree() ) |
919 | 0 | pDocSh->Parse(); |
920 | 0 | if ( pDocSh->GetFormulaTree() ) |
921 | 0 | { |
922 | 0 | pDocSh->ArrangeFormula(); |
923 | |
|
924 | 0 | *pValue <<= static_cast<sal_Int32>( |
925 | 0 | o3tl::convert(pDocSh->GetFormulaTree()->GetFormulaBaseline(), |
926 | 0 | SmO3tlLengthUnit(), o3tl::Length::mm100)); |
927 | 0 | } |
928 | 0 | break; |
929 | 0 | } |
930 | 0 | case HANDLE_INTEROP_GRAB_BAG: |
931 | 0 | getGrabBagItem(*pValue); |
932 | 0 | break; |
933 | 0 | case HANDLE_SAVE_THUMBNAIL: |
934 | 0 | { |
935 | 0 | *pValue <<= pDocSh->IsUseThumbnailSave(); |
936 | 0 | } |
937 | 0 | break; |
938 | 0 | case HANDLE_STARMATH_VERSION: |
939 | 0 | *pValue <<= pDocSh->GetSmSyntaxVersion(); |
940 | 0 | break; |
941 | 0 | case HANDLE_WINDOWSTATE: |
942 | 0 | { |
943 | 0 | *pValue <<= msOldWindowState; |
944 | 0 | } |
945 | 0 | } |
946 | 0 | } |
947 | 0 | } |
948 | | |
949 | | |
950 | | sal_Int32 SAL_CALL SmModel::getRendererCount( |
951 | | const uno::Any& /*rSelection*/, |
952 | | const uno::Sequence< beans::PropertyValue >& /*xOptions*/ ) |
953 | 0 | { |
954 | 0 | return 1; |
955 | 0 | } |
956 | | |
957 | | uno::Sequence< beans::PropertyValue > SAL_CALL SmModel::getRenderer( |
958 | | sal_Int32 nRenderer, |
959 | | const uno::Any& /*rSelection*/, |
960 | | const uno::Sequence< beans::PropertyValue >& /*rxOptions*/ ) |
961 | 0 | { |
962 | 0 | SolarMutexGuard aGuard; |
963 | |
|
964 | 0 | if (0 != nRenderer) |
965 | 0 | throw IllegalArgumentException(); |
966 | | |
967 | 0 | SmDocShell* pDocSh = GetSmDocShell(); |
968 | 0 | if (!pDocSh) |
969 | 0 | throw RuntimeException(); |
970 | | |
971 | 0 | SmPrinterAccess aPrinterAccess( *pDocSh ); |
972 | 0 | Size aPrtPaperSize; |
973 | 0 | if (Printer *pPrinter = aPrinterAccess.GetPrinter()) |
974 | 0 | { |
975 | | // tdf#157965: UNO methods are expected to return sizes in mm/100 |
976 | 0 | pPrinter->SetMapMode(MapMode(MapUnit::Map100thMM)); // reset in SmPrinterAccess dtor |
977 | 0 | aPrtPaperSize = pPrinter->GetPaperSize(); |
978 | 0 | } |
979 | | |
980 | | // if paper size is 0 (usually if no 'real' printer is found), |
981 | | // guess the paper size |
982 | 0 | if (aPrtPaperSize.IsEmpty()) |
983 | 0 | aPrtPaperSize = SvxPaperInfo::GetDefaultPaperSize(MapUnit::Map100thMM); |
984 | 0 | awt::Size aPageSize( aPrtPaperSize.Width(), aPrtPaperSize.Height() ); |
985 | |
|
986 | 0 | uno::Sequence< beans::PropertyValue > aRenderer(1); |
987 | 0 | PropertyValue &rValue = aRenderer.getArray()[0]; |
988 | 0 | rValue.Name = "PageSize"; |
989 | 0 | rValue.Value <<= aPageSize; |
990 | |
|
991 | 0 | if (!m_pPrintUIOptions) |
992 | 0 | m_pPrintUIOptions.reset(new SmPrintUIOptions); |
993 | 0 | m_pPrintUIOptions->appendPrintUIOptions( aRenderer ); |
994 | |
|
995 | 0 | return aRenderer; |
996 | 0 | } |
997 | | |
998 | | void SAL_CALL SmModel::render( |
999 | | sal_Int32 nRenderer, |
1000 | | const uno::Any& rSelection, |
1001 | | const uno::Sequence< beans::PropertyValue >& rxOptions ) |
1002 | 0 | { |
1003 | 0 | SolarMutexGuard aGuard; |
1004 | |
|
1005 | 0 | if (0 != nRenderer) |
1006 | 0 | throw IllegalArgumentException(); |
1007 | | |
1008 | 0 | SmDocShell* pDocSh = GetSmDocShell(); |
1009 | 0 | if (!pDocSh) |
1010 | 0 | throw RuntimeException(); |
1011 | | |
1012 | | // get device to be rendered in |
1013 | 0 | uno::Reference< awt::XDevice > xRenderDevice; |
1014 | 0 | for (const auto& rxOption : rxOptions) |
1015 | 0 | { |
1016 | 0 | if( rxOption.Name == "RenderDevice" ) |
1017 | 0 | rxOption.Value >>= xRenderDevice; |
1018 | 0 | } |
1019 | |
|
1020 | 0 | if (!xRenderDevice.is()) |
1021 | 0 | return; |
1022 | | |
1023 | 0 | VCLXDevice* pDevice = dynamic_cast<VCLXDevice*>( xRenderDevice.get() ); |
1024 | 0 | VclPtr< OutputDevice> pOut = pDevice ? pDevice->GetOutputDevice() |
1025 | 0 | : VclPtr< OutputDevice >(); |
1026 | 0 | if (!pOut) |
1027 | 0 | throw RuntimeException(); |
1028 | | |
1029 | 0 | pOut->SetMapMode(MapMode(SmMapUnit())); |
1030 | |
|
1031 | 0 | uno::Reference< frame::XModel > xModel; |
1032 | 0 | rSelection >>= xModel; |
1033 | 0 | if (xModel != pDocSh->GetModel()) |
1034 | 0 | return; |
1035 | | |
1036 | 0 | SmPrinterAccess aPrinterAccess( *pDocSh ); |
1037 | |
|
1038 | 0 | Size aPrtPaperSize; |
1039 | 0 | Size aOutputSize; |
1040 | 0 | Point aPrtPageOffset; |
1041 | 0 | if (Printer *pPrinter = aPrinterAccess.GetPrinter()) |
1042 | 0 | { |
1043 | 0 | aPrtPaperSize = pPrinter->GetPaperSize(); |
1044 | 0 | aOutputSize = pPrinter->GetOutputSize(); |
1045 | 0 | aPrtPageOffset = pPrinter->GetPageOffset(); |
1046 | 0 | } |
1047 | | |
1048 | | // no real printer ?? |
1049 | 0 | if (aPrtPaperSize.IsEmpty()) |
1050 | 0 | { |
1051 | 0 | aPrtPaperSize = SvxPaperInfo::GetDefaultPaperSize(SmMapUnit()); |
1052 | | // factors from Windows DIN A4 |
1053 | 0 | aOutputSize = Size( static_cast<tools::Long>(aPrtPaperSize.Width() * 0.941), |
1054 | 0 | static_cast<tools::Long>(aPrtPaperSize.Height() * 0.961)); |
1055 | 0 | aPrtPageOffset = Point( static_cast<tools::Long>(aPrtPaperSize.Width() * 0.0250), |
1056 | 0 | static_cast<tools::Long>(aPrtPaperSize.Height() * 0.0214)); |
1057 | 0 | } |
1058 | 0 | tools::Rectangle OutputRect( Point(), aOutputSize ); |
1059 | | |
1060 | | |
1061 | | // set minimum top and bottom border |
1062 | 0 | if (aPrtPageOffset.Y() < 2000) |
1063 | 0 | OutputRect.AdjustTop(2000 - aPrtPageOffset.Y() ); |
1064 | 0 | if ((aPrtPaperSize.Height() - (aPrtPageOffset.Y() + OutputRect.Bottom())) < 2000) |
1065 | 0 | OutputRect.AdjustBottom( -(2000 - (aPrtPaperSize.Height() - |
1066 | 0 | (aPrtPageOffset.Y() + OutputRect.Bottom()))) ); |
1067 | | |
1068 | | // set minimum left and right border |
1069 | 0 | if (aPrtPageOffset.X() < 2500) |
1070 | 0 | OutputRect.AdjustLeft(2500 - aPrtPageOffset.X() ); |
1071 | 0 | if ((aPrtPaperSize.Width() - (aPrtPageOffset.X() + OutputRect.Right())) < 1500) |
1072 | 0 | OutputRect.AdjustRight( -(1500 - (aPrtPaperSize.Width() - |
1073 | 0 | (aPrtPageOffset.X() + OutputRect.Right()))) ); |
1074 | |
|
1075 | 0 | if (!m_pPrintUIOptions) |
1076 | 0 | m_pPrintUIOptions.reset(new SmPrintUIOptions); |
1077 | 0 | m_pPrintUIOptions->processProperties( rxOptions ); |
1078 | |
|
1079 | 0 | pDocSh->Impl_Print(*pOut, *m_pPrintUIOptions, OutputRect); |
1080 | | |
1081 | | // release SmPrintUIOptions when everything is done. |
1082 | | // That way, when SmPrintUIOptions is needed again it will read the latest configuration settings in its c-tor. |
1083 | 0 | if (m_pPrintUIOptions->getBoolValue( "IsLastPage" )) |
1084 | 0 | { |
1085 | 0 | m_pPrintUIOptions.reset(); |
1086 | 0 | } |
1087 | 0 | } |
1088 | | |
1089 | | void SAL_CALL SmModel::setParent( const uno::Reference< uno::XInterface >& xParent) |
1090 | 0 | { |
1091 | 0 | SolarMutexGuard aGuard; |
1092 | 0 | SfxBaseModel::setParent( xParent ); |
1093 | 0 | if (SfxObjectShell* pDoc = SfxObjectShell::GetShellFromComponent(xParent)) |
1094 | 0 | GetObjectShell()->OnDocumentPrinterChanged(pDoc->GetDocumentPrinter()); |
1095 | 0 | } |
1096 | | |
1097 | | void SmModel::writeFormulaOoxml( |
1098 | | ::sax_fastparser::FSHelperPtr const pSerializer, |
1099 | | oox::core::OoxmlVersion const version, |
1100 | | oox::drawingml::DocumentType const documentType, sal_Int8 nAlign) |
1101 | 0 | { |
1102 | 0 | GetSmDocShell()->writeFormulaOoxml(pSerializer, version, documentType, nAlign); |
1103 | 0 | } |
1104 | | |
1105 | | void SmModel::writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding) |
1106 | 0 | { |
1107 | 0 | GetSmDocShell()->writeFormulaRtf(rBuffer, nEncoding); |
1108 | 0 | } |
1109 | | |
1110 | | void SmModel::readFormulaOoxml( oox::formulaimport::XmlStream& stream ) |
1111 | 0 | { |
1112 | 0 | GetSmDocShell()->readFormulaOoxml(stream); |
1113 | 0 | } |
1114 | | |
1115 | | Size SmModel::getFormulaSize() const |
1116 | 0 | { |
1117 | 0 | return o3tl::convert(GetSmDocShell()->GetSize(), SmO3tlLengthUnit(), o3tl::Length::mm100); |
1118 | 0 | } |
1119 | | |
1120 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |