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
21 #include <memory>
22 #include <toolkit/helper/vclunohelper.hxx>
23 #include <SectionView.hxx>
24 #include <UITools.hxx>
25 #include <Formula.hxx>
26 #include <FunctionHelper.hxx>
27 #include <reportformula.hxx>
28
29 #include <comphelper/diagnose_ex.hxx>
30
31 #include <vcl/settings.hxx>
32 #include <vcl/syswin.hxx>
33 #include <vcl/svapp.hxx>
34 #include <vcl/unohelp.hxx>
35 #include <vcl/window.hxx>
36
37 #include <com/sun/star/lang/NullPointerException.hpp>
38 #include <com/sun/star/beans/NamedValue.hpp>
39 #include <com/sun/star/beans/PropertyAttribute.hpp>
40 #include <svx/svdpool.hxx>
41
42 #include <editeng/charscaleitem.hxx>
43 #include <editeng/brushitem.hxx>
44 #include <editeng/fontitem.hxx>
45 #include <editeng/emphasismarkitem.hxx>
46 #include <editeng/postitem.hxx>
47 #include <editeng/udlnitem.hxx>
48 #include <editeng/crossedoutitem.hxx>
49 #include <editeng/contouritem.hxx>
50 #include <editeng/langitem.hxx>
51 #include <editeng/wghtitem.hxx>
52 #include <editeng/fhgtitem.hxx>
53 #include <editeng/shdditem.hxx>
54 #include <editeng/escapementitem.hxx>
55 #include <editeng/wrlmitem.hxx>
56 #include <editeng/cmapitem.hxx>
57 #include <editeng/kernitem.hxx>
58 #include <editeng/blinkitem.hxx>
59 #include <editeng/flstitem.hxx>
60 #include <editeng/autokernitem.hxx>
61 #include <editeng/colritem.hxx>
62 #include <editeng/justifyitem.hxx>
63 #include <svx/drawitem.hxx>
64 #include <editeng/twolinesitem.hxx>
65 #include <editeng/charreliefitem.hxx>
66 #include <editeng/charrotateitem.hxx>
67 #include <editeng/charhiddenitem.hxx>
68 #include <editeng/memberids.h>
69 #include <svx/xgrscit.hxx>
70 #include <svx/svditer.hxx>
71 #include <svx/xtable.hxx>
72 #include <svx/svdview.hxx>
73 #include <svx/svdpage.hxx>
74 #include <svx/svxdlg.hxx>
75 #include <svx/unoprov.hxx>
76 #include <svx/svxids.hrc>
77
78 #include <unotools/charclass.hxx>
79 #include <svtools/ctrltool.hxx>
80 #include <svl/itempool.hxx>
81 #include <svl/itemset.hxx>
82 #include <svl/sharedstringpool.hxx>
83
84 #include <comphelper/propmultiplex.hxx>
85 #include <comphelper/namedvaluecollection.hxx>
86
87 #include <connectivity/dbexception.hxx>
88 #include <connectivity/dbtools.hxx>
89
90 #include <com/sun/star/style/VerticalAlignment.hpp>
91 #include <com/sun/star/report/XShape.hpp>
92 #include <com/sun/star/sdb/XParametersSupplier.hpp>
93 #include <com/sun/star/sdb/SQLContext.hpp>
94 #include <i18nlangtag/languagetag.hxx>
95 #include <dlgpage.hxx>
96 #include <strings.hxx>
97 #include <core_resource.hxx>
98 #include <RptObject.hxx>
99 #include <RptDef.hxx>
100 #include <strings.hrc>
101 #include <ReportDefinition.hxx>
102 #include <RptModel.hxx>
103
104 #include <svx/xflbckit.hxx>
105 #include <svx/xflbmpit.hxx>
106 #include <svx/xflbmsli.hxx>
107 #include <svx/xflbmsxy.hxx>
108 #include <svx/xflbmtit.hxx>
109 #include <svx/xflboxy.hxx>
110 #include <svx/xflbstit.hxx>
111 #include <svx/xflbtoxy.hxx>
112
113 #include <svx/xbtmpit.hxx>
114 #include <svx/xfillit0.hxx>
115 #include <svx/xfltrit.hxx>
116 #include <svx/xflclit.hxx>
117 #include <svx/xflgrit.hxx>
118 #include <svx/xflhtit.hxx>
119 #include <svx/xflftrit.hxx>
120 #include <svx/xsflclit.hxx>
121
122 /// Note that we deliberately overlap an existing item id, so that we can have contiguous item ids for
123 /// the static defaults.
124 #define ITEMID_FIRST XATTR_FILL_LAST
125
126 #define ITEMID_FONT TypedWhichId<SvxFontItem>(ITEMID_FIRST)
127 #define ITEMID_FONTHEIGHT TypedWhichId<SvxFontHeightItem>(ITEMID_FIRST + 1)
128 #define ITEMID_LANGUAGE TypedWhichId<SvxLanguageItem>(ITEMID_FIRST + 2)
129
130 #define ITEMID_POSTURE TypedWhichId<SvxPostureItem>(ITEMID_FIRST + 3)
131 #define ITEMID_WEIGHT TypedWhichId<SvxWeightItem>(ITEMID_FIRST + 4)
132 #define ITEMID_SHADOWED TypedWhichId<SvxShadowedItem>(ITEMID_FIRST + 5)
133 #define ITEMID_WORDLINEMODE TypedWhichId<SvxWordLineModeItem>(ITEMID_FIRST + 6)
134 #define ITEMID_CONTOUR TypedWhichId<SvxContourItem>(ITEMID_FIRST + 7)
135 #define ITEMID_CROSSEDOUT TypedWhichId<SvxCrossedOutItem>(ITEMID_FIRST + 8)
136 #define ITEMID_UNDERLINE TypedWhichId<SvxUnderlineItem>(ITEMID_FIRST + 9)
137
138 #define ITEMID_COLOR TypedWhichId<SvxColorItem>(ITEMID_FIRST + 10)
139 #define ITEMID_KERNING TypedWhichId<SvxKerningItem>(ITEMID_FIRST + 11)
140 #define ITEMID_CASEMAP TypedWhichId<SvxCaseMapItem>(ITEMID_FIRST + 12)
141
142 #define ITEMID_ESCAPEMENT TypedWhichId<SvxEscapementItem>(ITEMID_FIRST + 13)
143 #define ITEMID_FONTLIST ITEMID_FIRST + 14
144 #define ITEMID_AUTOKERN TypedWhichId<SvxAutoKernItem>(ITEMID_FIRST + 15)
145 #define ITEMID_COLOR_TABLE TypedWhichId<SvxColorListItem>(ITEMID_FIRST + 16)
146 #define ITEMID_BLINK TypedWhichId<SvxBlinkItem>(ITEMID_FIRST + 17)
147 #define ITEMID_EMPHASISMARK TypedWhichId<SvxEmphasisMarkItem>(ITEMID_FIRST + 18)
148 #define ITEMID_TWOLINES TypedWhichId<SvxTwoLinesItem>(ITEMID_FIRST + 19)
149 #define ITEMID_CHARROTATE TypedWhichId<SvxCharRotateItem>(ITEMID_FIRST + 20)
150 #define ITEMID_CHARSCALE_W TypedWhichId<SvxCharScaleWidthItem>(ITEMID_FIRST + 21)
151 #define ITEMID_CHARRELIEF TypedWhichId<SvxCharReliefItem>(ITEMID_FIRST + 22)
152 #define ITEMID_CHARHIDDEN TypedWhichId<SvxCharHiddenItem>(ITEMID_FIRST + 23)
153 #define ITEMID_BRUSH TypedWhichId<SvxBrushItem>(ITEMID_FIRST + 24)
154 #define ITEMID_HORJUSTIFY TypedWhichId<SvxHorJustifyItem>(ITEMID_FIRST + 25)
155 #define ITEMID_VERJUSTIFY TypedWhichId<SvxVerJustifyItem>(ITEMID_FIRST + 26)
156 #define ITEMID_FONT_ASIAN TypedWhichId<SvxFontItem>(ITEMID_FIRST + 27)
157 #define ITEMID_FONTHEIGHT_ASIAN TypedWhichId<SvxFontHeightItem>(ITEMID_FIRST + 28)
158 #define ITEMID_LANGUAGE_ASIAN TypedWhichId<SvxLanguageItem>(ITEMID_FIRST + 29)
159 #define ITEMID_POSTURE_ASIAN TypedWhichId<SvxPostureItem>(ITEMID_FIRST + 30)
160 #define ITEMID_WEIGHT_ASIAN TypedWhichId<SvxWeightItem>(ITEMID_FIRST + 31)
161 #define ITEMID_FONT_COMPLEX TypedWhichId<SvxFontItem>(ITEMID_FIRST + 32)
162 #define ITEMID_FONTHEIGHT_COMPLEX TypedWhichId<SvxFontHeightItem>(ITEMID_FIRST + 33)
163 #define ITEMID_LANGUAGE_COMPLEX TypedWhichId<SvxLanguageItem>(ITEMID_FIRST + 34)
164 #define ITEMID_POSTURE_COMPLEX TypedWhichId<SvxPostureItem>(ITEMID_FIRST + 35)
165 #define ITEMID_WEIGHT_COMPLEX TypedWhichId<SvxWeightItem>(ITEMID_FIRST + 36)
166
167 static_assert((ITEMID_WEIGHT_COMPLEX - XATTR_FILL_FIRST) == 56, "Item ids are not contiguous");
168
169 #define WESTERN 0
170 #define ASIAN 1
171 #define COMPLEX 2
172
173 namespace rptui
174 {
175 using namespace ::com::sun::star;
176
adjustSectionName(const uno::Reference<report::XGroup> & _xGroup,sal_Int32 _nPos)177 void adjustSectionName(const uno::Reference< report::XGroup >& _xGroup,sal_Int32 _nPos)
178 {
179 OSL_ENSURE(_xGroup.is(),"Group is NULL -> GPF");
180 if ( _xGroup->getHeaderOn() && _xGroup->getHeader()->getName().isEmpty() )
181 {
182 OUString sName = RptResId(RID_STR_GROUPHEADER) + OUString::number(_nPos);
183 _xGroup->getHeader()->setName(sName);
184 }
185
186 if ( _xGroup->getFooterOn() && _xGroup->getFooter()->getName().isEmpty() )
187 {
188 OUString sName = RptResId(RID_STR_GROUPFOOTER) + OUString::number(_nPos);
189 _xGroup->getFooter()->setName(sName);
190 }
191 }
192
addStyleListener(const uno::Reference<report::XReportDefinition> & _xReportDefinition,::comphelper::OPropertyChangeListener * _pListener)193 ::rtl::Reference< comphelper::OPropertyChangeMultiplexer> addStyleListener(const uno::Reference< report::XReportDefinition >& _xReportDefinition,::comphelper::OPropertyChangeListener* _pListener)
194 {
195 ::rtl::Reference< comphelper::OPropertyChangeMultiplexer> pRet;
196 if ( _xReportDefinition.is() )
197 {
198 uno::Reference<beans::XPropertySet> xPageStyle(getUsedStyle(_xReportDefinition),uno::UNO_QUERY);
199 if ( xPageStyle.is() )
200 {
201 pRet = new comphelper::OPropertyChangeMultiplexer(_pListener,xPageStyle);
202 pRet->addProperty(PROPERTY_LEFTMARGIN);
203 pRet->addProperty(PROPERTY_RIGHTMARGIN);
204 pRet->addProperty(PROPERTY_PAPERSIZE);
205 pRet->addProperty(PROPERTY_BACKCOLOR);
206 }
207 }
208 return pRet;
209 }
210
211
212 namespace
213 {
214
lcl_getReportControlFont(const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,awt::FontDescriptor & _out_rControlFont,sal_uInt16 _nWichFont)215 vcl::Font lcl_getReportControlFont( const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat, awt::FontDescriptor& _out_rControlFont ,sal_uInt16 _nWichFont)
216 {
217 if ( !_rxReportControlFormat.is() )
218 throw uno::RuntimeException();
219
220 switch(_nWichFont)
221 {
222 case WESTERN:
223 _out_rControlFont = _rxReportControlFormat->getFontDescriptor();
224 break;
225 case ASIAN:
226 _out_rControlFont = _rxReportControlFormat->getFontDescriptorAsian();
227 break;
228 case COMPLEX:
229 _out_rControlFont = _rxReportControlFormat->getFontDescriptorComplex();
230 break;
231
232 }
233
234 vcl::Font aDefaultFont = Application::GetDefaultDevice()->GetSettings().GetStyleSettings().GetAppFont();
235 return VCLUnoHelper::CreateFont( _out_rControlFont, aDefaultFont );
236 }
237
238
lcl_getReportControlFont(const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,sal_uInt16 _nWhich)239 vcl::Font lcl_getReportControlFont( const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,sal_uInt16 _nWhich )
240 {
241 awt::FontDescriptor aAwtFont;
242 return lcl_getReportControlFont( _rxReportControlFormat, aAwtFont, _nWhich );
243 }
244
lcl_setFont(const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,SfxItemSet & _rItemSet,sal_uInt16 _nWhich,sal_uInt16 _nFont,sal_uInt16 _nFontHeight,sal_uInt16 _nLanguage,sal_uInt16 _nPosture,sal_uInt16 _nWeight)245 vcl::Font lcl_setFont(const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,
246 SfxItemSet& _rItemSet,sal_uInt16 _nWhich,sal_uInt16 _nFont, sal_uInt16 _nFontHeight,sal_uInt16 _nLanguage,sal_uInt16 _nPosture, sal_uInt16 _nWeight)
247 {
248 // fill it
249 awt::FontDescriptor aControlFont;
250 const vcl::Font aFont( lcl_getReportControlFont( _rxReportControlFormat, aControlFont,_nWhich ) );
251
252 SvxFontItem aFontItem(_nFont);
253 aFontItem.PutValue( uno::Any( aControlFont ), 0 );
254 _rItemSet.Put(aFontItem);
255
256 _rItemSet.Put(SvxFontHeightItem(o3tl::convert(aFont.GetFontHeight(), o3tl::Length::pt, o3tl::Length::twip), 100, _nFontHeight));
257 lang::Locale aLocale;
258 switch(_nWhich)
259 {
260 default:
261 aLocale = _rxReportControlFormat->getCharLocale();
262 break;
263 case ASIAN:
264 aLocale = _rxReportControlFormat->getCharLocaleAsian();
265 break;
266 case COMPLEX:
267 aLocale = _rxReportControlFormat->getCharLocaleComplex();
268 break;
269 }
270
271 _rItemSet.Put(SvxLanguageItem(LanguageTag(aLocale).makeFallback().getLanguageType(),_nLanguage));
272
273 _rItemSet.Put(SvxPostureItem(aFont.GetItalic(),_nPosture));
274 _rItemSet.Put(SvxWeightItem(aFont.GetWeight(),_nWeight));
275 return aFont;
276 }
277
lcl_fillShapeToItems(const uno::Reference<report::XShape> & _xShape,SfxItemSet & _rItemSet)278 void lcl_fillShapeToItems( const uno::Reference<report::XShape >& _xShape,SfxItemSet& _rItemSet )
279 {
280 uno::Reference< beans::XPropertySetInfo> xInfo = _xShape->getPropertySetInfo();
281 SvxUnoPropertyMapProvider aMap;
282 const SfxItemPropertyMap& rPropertyMap = aMap.GetPropertySet(SVXMAP_CUSTOMSHAPE, SdrObject::GetGlobalDrawObjectItemPool())->getPropertyMap();
283 for (const auto pProp : rPropertyMap.getPropertyEntries())
284 {
285 if ( xInfo->hasPropertyByName(pProp->aName) )
286 {
287 const SfxPoolItem* pItem = _rItemSet.GetItem(pProp->nWID);
288 if ( pItem )
289 {
290 ::std::unique_ptr<SfxPoolItem> pClone(pItem->CloneSetWhich(pProp->nWID));
291 pClone->PutValue(_xShape->getPropertyValue(pProp->aName), pProp->nMemberId);
292 _rItemSet.Put(std::move(pClone));
293 }
294 }
295 }
296 }
297
lcl_fillItemsToShape(const uno::Reference<report::XShape> & _xShape,const SfxItemSet & _rItemSet)298 void lcl_fillItemsToShape( const uno::Reference<report::XShape >& _xShape,const SfxItemSet& _rItemSet )
299 {
300 const uno::Reference< beans::XPropertySetInfo> xInfo = _xShape->getPropertySetInfo();
301 SvxUnoPropertyMapProvider aMap;
302 const SfxItemPropertyMap& rPropertyMap = aMap.GetPropertySet(SVXMAP_CUSTOMSHAPE, SdrObject::GetGlobalDrawObjectItemPool())->getPropertyMap();
303 for (const auto pProp : rPropertyMap.getPropertyEntries())
304 {
305 const SfxPoolItem* pItem = nullptr;
306 if ( SfxItemState::SET == _rItemSet.GetItemState(pProp->nWID, true, &pItem) && xInfo->hasPropertyByName(pProp->aName) )
307 {
308 if ( ( pProp->nFlags & beans::PropertyAttribute::READONLY ) != beans::PropertyAttribute::READONLY )
309 {
310 if ( pItem )
311 {
312 uno::Any aValue;
313 pItem->QueryValue(aValue, pProp->nMemberId);
314 try
315 {
316 _xShape->setPropertyValue(pProp->aName, aValue);
317 }
318 catch(uno::Exception&)
319 { // shapes have a bug so we ignore this one.
320 }
321 }
322 }
323 }
324 }
325 }
326
lcl_CharPropertiesToItems(const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,SfxItemSet & _rItemSet)327 void lcl_CharPropertiesToItems( const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,
328 SfxItemSet& _rItemSet )
329 {
330 if ( !_rxReportControlFormat.is() )
331 throw lang::NullPointerException();
332
333 uno::Reference< beans::XPropertySet > xSet(_rxReportControlFormat,uno::UNO_QUERY_THROW);
334
335 // fill it
336 const vcl::Font aFont( lcl_setFont(_rxReportControlFormat, _rItemSet,WESTERN,ITEMID_FONT,ITEMID_FONTHEIGHT,ITEMID_LANGUAGE,ITEMID_POSTURE,ITEMID_WEIGHT ) );
337
338 _rItemSet.Put(SvxShadowedItem(_rxReportControlFormat->getCharShadowed(),ITEMID_SHADOWED));
339 _rItemSet.Put(SvxWordLineModeItem(aFont.IsWordLineMode(),ITEMID_WORDLINEMODE));
340 _rItemSet.Put(SvxContourItem(_rxReportControlFormat->getCharContoured(),ITEMID_CONTOUR));
341 _rItemSet.Put(SvxAutoKernItem(_rxReportControlFormat->getCharAutoKerning(),ITEMID_AUTOKERN));
342 _rItemSet.Put(SvxCrossedOutItem(aFont.GetStrikeout(),ITEMID_CROSSEDOUT));
343 _rItemSet.Put(SvxCaseMapItem(static_cast<SvxCaseMap>(_rxReportControlFormat->getCharCaseMap()),ITEMID_CASEMAP));
344
345 _rItemSet.Put(SvxEscapementItem(_rxReportControlFormat->getCharEscapement(),_rxReportControlFormat->getCharEscapementHeight(),ITEMID_ESCAPEMENT));
346 _rItemSet.Put(SvxBlinkItem(_rxReportControlFormat->getCharFlash(),ITEMID_BLINK));
347 _rItemSet.Put(SvxCharHiddenItem(_rxReportControlFormat->getCharHidden(),ITEMID_CHARHIDDEN));
348 _rItemSet.Put(SvxTwoLinesItem(_rxReportControlFormat->getCharCombineIsOn(),_rxReportControlFormat->getCharCombinePrefix().toChar(),_rxReportControlFormat->getCharCombineSuffix().toChar(),ITEMID_TWOLINES));
349 SvxUnderlineItem aUnderLineItem(aFont.GetUnderline(),ITEMID_UNDERLINE);
350 aUnderLineItem.SetColor(Color(ColorTransparency, _rxReportControlFormat->getCharUnderlineColor()));
351 _rItemSet.Put(aUnderLineItem);
352 _rItemSet.Put(SvxKerningItem(_rxReportControlFormat->getCharKerning(),ITEMID_KERNING));
353 _rItemSet.Put(SvxEmphasisMarkItem(static_cast<FontEmphasisMark>(_rxReportControlFormat->getCharEmphasis()),ITEMID_EMPHASISMARK));
354 _rItemSet.Put(SvxCharReliefItem(static_cast<FontRelief>(_rxReportControlFormat->getCharRelief()),ITEMID_CHARRELIEF));
355 _rItemSet.Put(SvxColorItem(::Color(ColorTransparency, _rxReportControlFormat->getCharColor()),ITEMID_COLOR));
356 _rItemSet.Put(SvxCharRotateItem(Degree10(_rxReportControlFormat->getCharRotation()),false,ITEMID_CHARROTATE));
357 _rItemSet.Put(SvxCharScaleWidthItem(_rxReportControlFormat->getCharScaleWidth(),ITEMID_CHARSCALE_W));
358
359 SvxHorJustifyItem aHorJustifyItem(ITEMID_HORJUSTIFY);
360 aHorJustifyItem.PutValue(xSet->getPropertyValue(PROPERTY_PARAADJUST),MID_HORJUST_ADJUST);
361 _rItemSet.Put(aHorJustifyItem);
362 SvxVerJustifyItem aVerJustifyItem(ITEMID_VERJUSTIFY);
363 aVerJustifyItem.PutValue(xSet->getPropertyValue(PROPERTY_VERTICALALIGN),MID_HORJUST_ADJUST);
364 _rItemSet.Put(aVerJustifyItem);
365
366 uno::Reference< report::XShape> xShape(_rxReportControlFormat,uno::UNO_QUERY);
367 if ( !xShape.is() )
368 _rItemSet.Put(SvxBrushItem(::Color(ColorTransparency, _rxReportControlFormat->getControlBackground()),ITEMID_BRUSH));
369
370 lcl_setFont(_rxReportControlFormat, _rItemSet,ASIAN,ITEMID_FONT_ASIAN,ITEMID_FONTHEIGHT_ASIAN,ITEMID_LANGUAGE_ASIAN,ITEMID_POSTURE_ASIAN,ITEMID_WEIGHT_ASIAN );
371 lcl_setFont(_rxReportControlFormat, _rItemSet,COMPLEX,ITEMID_FONT_COMPLEX,ITEMID_FONTHEIGHT_COMPLEX,ITEMID_LANGUAGE_COMPLEX,ITEMID_POSTURE_COMPLEX,ITEMID_WEIGHT_COMPLEX );
372 }
373
374
lcl_pushBack(uno::Sequence<beans::NamedValue> & _out_rProperties,const OUString & _sName,const uno::Any & _rValue)375 void lcl_pushBack( uno::Sequence< beans::NamedValue >& _out_rProperties, const OUString& _sName, const uno::Any& _rValue )
376 {
377 sal_Int32 nLen( _out_rProperties.getLength() );
378 _out_rProperties.realloc( nLen + 1 );
379 _out_rProperties.getArray()[ nLen ] = beans::NamedValue( _sName, _rValue );
380 }
381
382
lcl_initAwtFont(const vcl::Font & _rOriginalFont,const SfxItemSet & _rItemSet,awt::FontDescriptor & _out_rAwtFont,TypedWhichId<SvxFontItem> _nFont,TypedWhichId<SvxFontHeightItem> _nFontHeight,TypedWhichId<SvxPostureItem> _nPosture,TypedWhichId<SvxWeightItem> _nWeight)383 void lcl_initAwtFont( const vcl::Font& _rOriginalFont, const SfxItemSet& _rItemSet, awt::FontDescriptor& _out_rAwtFont,
384 TypedWhichId<SvxFontItem> _nFont, TypedWhichId<SvxFontHeightItem> _nFontHeight,
385 TypedWhichId<SvxPostureItem> _nPosture, TypedWhichId<SvxWeightItem> _nWeight)
386 {
387 vcl::Font aNewFont( _rOriginalFont );
388 if ( const SvxFontItem* pFontItem = _rItemSet.GetItemIfSet( _nFont) )
389 {
390 aNewFont.SetFamilyName(pFontItem->GetFamilyName());
391 aNewFont.SetStyleName(pFontItem->GetStyleName());
392 aNewFont.SetFamily(pFontItem->GetFamily());
393 aNewFont.SetPitch(pFontItem->GetPitch());
394 aNewFont.SetCharSet(pFontItem->GetCharSet());
395 }
396 if ( const SvxFontHeightItem* pFontItem = _rItemSet.GetItemIfSet( _nFontHeight ) )
397 {
398 aNewFont.SetFontHeight(o3tl::convert(pFontItem->GetHeight(), o3tl::Length::twip, o3tl::Length::pt));
399 }
400 if ( const SvxPostureItem* pPostureItem = _rItemSet.GetItemIfSet( _nPosture) )
401 {
402 aNewFont.SetItalic(pPostureItem->GetPosture());
403 }
404 if ( const SvxWeightItem* pWeightItem = _rItemSet.GetItemIfSet( _nWeight ) )
405 {
406 aNewFont.SetWeight(pWeightItem->GetWeight());
407 }
408 if ( const SvxWordLineModeItem* pWordLineItem = _rItemSet.GetItemIfSet( ITEMID_WORDLINEMODE ) )
409 {
410 aNewFont.SetWordLineMode(pWordLineItem->GetValue());
411 }
412 if ( const SvxCrossedOutItem* pCrossedOutItem = _rItemSet.GetItemIfSet( ITEMID_CROSSEDOUT ) )
413 {
414 aNewFont.SetStrikeout(pCrossedOutItem->GetStrikeout());
415 }
416 if ( const SvxCharRotateItem* pRotateItem = _rItemSet.GetItemIfSet( ITEMID_CHARROTATE ) )
417 {
418 aNewFont.SetOrientation(pRotateItem->GetValue());
419 }
420 if ( const SvxCharScaleWidthItem* pCharItem = _rItemSet.GetItemIfSet( ITEMID_CHARSCALE_W ) )
421 {
422 aNewFont.SetWidthType(vcl::unohelper::ConvertFontWidth(pCharItem->GetValue()));
423 }
424 if ( const SvxUnderlineItem* pUnderlineItem = _rItemSet.GetItemIfSet( ITEMID_UNDERLINE ) )
425 {
426 aNewFont.SetUnderline(pUnderlineItem->GetLineStyle());
427 }
428 if ( const SvxColorItem* pColorItem = _rItemSet.GetItemIfSet( ITEMID_COLOR ) )
429 {
430 aNewFont.SetColor(pColorItem->GetValue());
431 }
432
433 _out_rAwtFont = VCLUnoHelper::CreateFontDescriptor( aNewFont );
434 }
435
436
lcl_itemsToCharProperties(const vcl::Font & _rOriginalControlFont,const vcl::Font & _rOriginalControlFontAsian,const vcl::Font & _rOriginalControlFontComplex,const SfxItemSet & _rItemSet,uno::Sequence<beans::NamedValue> & _out_rProperties)437 void lcl_itemsToCharProperties( const vcl::Font& _rOriginalControlFont,const vcl::Font& _rOriginalControlFontAsian,const vcl::Font& _rOriginalControlFontComplex, const SfxItemSet& _rItemSet, uno::Sequence< beans::NamedValue >& _out_rProperties )
438 {
439 // create an AWT font
440 awt::FontDescriptor aAwtFont;
441 lcl_initAwtFont( _rOriginalControlFont, _rItemSet, aAwtFont,ITEMID_FONT,ITEMID_FONTHEIGHT,ITEMID_POSTURE, ITEMID_WEIGHT);
442 lcl_pushBack( _out_rProperties, u"Font"_ustr, uno::Any( aAwtFont ) );
443 lcl_initAwtFont( _rOriginalControlFontAsian, _rItemSet, aAwtFont,ITEMID_FONT_ASIAN,ITEMID_FONTHEIGHT_ASIAN,ITEMID_POSTURE_ASIAN, ITEMID_WEIGHT_ASIAN);
444 lcl_pushBack( _out_rProperties, u"FontAsian"_ustr, uno::Any( aAwtFont ) );
445 lcl_initAwtFont( _rOriginalControlFontComplex, _rItemSet, aAwtFont,ITEMID_FONT_COMPLEX,ITEMID_FONTHEIGHT_COMPLEX,ITEMID_POSTURE_COMPLEX, ITEMID_WEIGHT_COMPLEX);
446 lcl_pushBack( _out_rProperties, u"FontComplex"_ustr, uno::Any( aAwtFont ) );
447
448 // properties which cannot be represented in an AWT font need to be preserved directly
449 if ( const SvxShadowedItem* pShadowedItem = _rItemSet.GetItemIfSet( ITEMID_SHADOWED) )
450 lcl_pushBack( _out_rProperties, PROPERTY_CHARSHADOWED, uno::Any( pShadowedItem->GetValue() ) );
451 if ( const SvxContourItem* pContourItem = _rItemSet.GetItemIfSet( ITEMID_CONTOUR ) )
452 lcl_pushBack( _out_rProperties, PROPERTY_CHARCONTOURED, uno::Any( pContourItem->GetValue() ) );
453 if ( const SvxUnderlineItem* pUnderlineItem = _rItemSet.GetItemIfSet( ITEMID_UNDERLINE ) )
454 lcl_pushBack( _out_rProperties, PROPERTY_CHARUNDERLINECOLOR, uno::Any( pUnderlineItem->GetColor() ) );
455 if ( const SvxHorJustifyItem* pJustifyItem = _rItemSet.GetItemIfSet( ITEMID_HORJUSTIFY ) )
456 {
457 uno::Any aValue;
458 pJustifyItem->QueryValue(aValue,MID_HORJUST_ADJUST);
459 lcl_pushBack( _out_rProperties, PROPERTY_PARAADJUST, aValue );
460 }
461 if ( const SvxVerJustifyItem* pJustifyItem = _rItemSet.GetItemIfSet( ITEMID_VERJUSTIFY ) )
462 {
463 uno::Any aValue;
464 pJustifyItem->QueryValue(aValue,MID_HORJUST_ADJUST);
465 lcl_pushBack( _out_rProperties, PROPERTY_VERTICALALIGN, aValue );
466 }
467 if ( const SvxCharReliefItem* pReliefItem = _rItemSet.GetItemIfSet( ITEMID_CHARRELIEF ) )
468 {
469 uno::Any aValue;
470 pReliefItem->QueryValue(aValue, MID_RELIEF);
471 lcl_pushBack( _out_rProperties, PROPERTY_CHARRELIEF, aValue );
472 }
473 if ( const SvxCharHiddenItem* pHiddenItem = _rItemSet.GetItemIfSet( ITEMID_CHARHIDDEN ) )
474 lcl_pushBack( _out_rProperties, PROPERTY_CHARHIDDEN, uno::Any( pHiddenItem->GetValue() ) );
475 if ( const SvxAutoKernItem* pKernItem = _rItemSet.GetItemIfSet( ITEMID_AUTOKERN ) )
476 lcl_pushBack( _out_rProperties, PROPERTY_CHARAUTOKERNING, uno::Any( pKernItem->GetValue() ) );
477 if ( const SvxBrushItem* pBrushItem = _rItemSet.GetItemIfSet( ITEMID_BRUSH ) )
478 lcl_pushBack( _out_rProperties, PROPERTY_CONTROLBACKGROUND, uno::Any( pBrushItem->GetColor() ) );
479 if ( const SvxBlinkItem* pBlinkItem = _rItemSet.GetItemIfSet( ITEMID_BLINK ) )
480 lcl_pushBack( _out_rProperties, PROPERTY_CHARFLASH, uno::Any( pBlinkItem->GetValue() ) );
481 if ( const SvxEmphasisMarkItem* pMarkItem = _rItemSet.GetItemIfSet( ITEMID_EMPHASISMARK ) )
482 lcl_pushBack( _out_rProperties, PROPERTY_CHAREMPHASIS, uno::Any( static_cast< sal_Int16 >( pMarkItem->GetEmphasisMark() ) ) );
483 if ( const SvxTwoLinesItem* pLinesItem = _rItemSet.GetItemIfSet( ITEMID_TWOLINES ) )
484 {
485 lcl_pushBack( _out_rProperties, PROPERTY_CHARCOMBINEISON, uno::Any( pLinesItem->GetValue() ) );
486 lcl_pushBack( _out_rProperties, PROPERTY_CHARCOMBINEPREFIX, uno::Any( OUString( pLinesItem->GetStartBracket() ) ) );
487 lcl_pushBack( _out_rProperties, PROPERTY_CHARCOMBINESUFFIX, uno::Any( OUString( pLinesItem->GetEndBracket() ) ) );
488 }
489 if ( const SvxColorItem* pColorItem = _rItemSet.GetItemIfSet( ITEMID_COLOR ) )
490 lcl_pushBack( _out_rProperties, PROPERTY_CHARCOLOR, uno::Any( pColorItem->GetValue() ) );
491 if ( const SvxKerningItem* pKernItem = _rItemSet.GetItemIfSet( ITEMID_KERNING ) )
492 lcl_pushBack( _out_rProperties, PROPERTY_CHARKERNING, uno::Any( pKernItem->GetValue() ) );
493 if ( const SvxCaseMapItem* pCaseMapItem = _rItemSet.GetItemIfSet( ITEMID_CASEMAP ) )
494 {
495 uno::Any aValue;
496 pCaseMapItem->QueryValue(aValue);
497 lcl_pushBack( _out_rProperties, PROPERTY_CHARCASEMAP, aValue );
498 }
499 struct Items {
500 TypedWhichId<SvxLanguageItem> nWhich;
501 OUString sPropertyName;
502 };
503 const Items pItems[] = { {ITEMID_LANGUAGE,PROPERTY_CHARLOCALE}
504 ,{ITEMID_LANGUAGE_ASIAN,PROPERTY_CHARLOCALEASIAN}
505 ,{ITEMID_LANGUAGE_COMPLEX,PROPERTY_CHARLOCALECOMPLEX}
506 };
507 for(const auto & k : pItems)
508 {
509 if ( const SvxLanguageItem* pLanguageItem = _rItemSet.GetItemIfSet( k.nWhich ) )
510 {
511 lang::Locale aCharLocale( LanguageTag( pLanguageItem->GetLanguage()).getLocale());
512 lcl_pushBack( _out_rProperties, k.sPropertyName, uno::Any( aCharLocale ) );
513 }
514 }
515 if ( const SvxEscapementItem* pEscapementItem = _rItemSet.GetItemIfSet( ITEMID_ESCAPEMENT ) )
516 {
517 lcl_pushBack( _out_rProperties, PROPERTY_CHARESCAPEMENT, uno::Any( pEscapementItem->GetEsc() ) );
518 lcl_pushBack( _out_rProperties, PROPERTY_CHARESCAPEMENTHEIGHT, uno::Any(static_cast<sal_Int8>(pEscapementItem->GetProportionalHeight())) );
519 }
520 }
521
522
523 template< class ATTRIBUTE_TYPE >
lcl_applyFontAttribute(const::comphelper::NamedValueCollection & _rAttrValues,const OUString & _pAttributeName,const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,void (SAL_CALL report::XReportControlFormat::* pSetter)(ATTRIBUTE_TYPE))524 void lcl_applyFontAttribute( const ::comphelper::NamedValueCollection& _rAttrValues, const OUString& _pAttributeName,
525 const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,
526 void (SAL_CALL report::XReportControlFormat::*pSetter)( ATTRIBUTE_TYPE ) )
527 {
528 ATTRIBUTE_TYPE aAttributeValue = ATTRIBUTE_TYPE();
529 if ( _rAttrValues.get_ensureType( _pAttributeName, aAttributeValue ) )
530 (_rxReportControlFormat.get()->*pSetter)( aAttributeValue );
531 }
532
533
lcl_applyFontAttribute(const::comphelper::NamedValueCollection & _rAttrValues,const OUString & _pAttributeName,const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,void (SAL_CALL report::XReportControlFormat::* pSetter)(const OUString &))534 void lcl_applyFontAttribute( const ::comphelper::NamedValueCollection& _rAttrValues, const OUString& _pAttributeName,
535 const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,
536 void (SAL_CALL report::XReportControlFormat::*pSetter)( const OUString& ) )
537 {
538 OUString aAttributeValue;
539 if ( _rAttrValues.get_ensureType( _pAttributeName, aAttributeValue ) )
540 (_rxReportControlFormat.get()->*pSetter)( aAttributeValue );
541 }
542
543
lcl_applyFontAttribute(const::comphelper::NamedValueCollection & _rAttrValues,const OUString & _pAttributeName,const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,void (SAL_CALL report::XReportControlFormat::* pSetter)(const lang::Locale &))544 void lcl_applyFontAttribute( const ::comphelper::NamedValueCollection& _rAttrValues, const OUString& _pAttributeName,
545 const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,
546 void (SAL_CALL report::XReportControlFormat::*pSetter)( const lang::Locale& ) )
547 {
548 lang::Locale aAttributeValue;
549 if ( _rAttrValues.get_ensureType( _pAttributeName, aAttributeValue ) )
550 (_rxReportControlFormat.get()->*pSetter)( aAttributeValue );
551 }
552 }
553
getItemInfoPackageOpenCharDlg()554 static ItemInfoPackage& getItemInfoPackageOpenCharDlg()
555 {
556 class ItemInfoPackageOpenCharDlg : public ItemInfoPackage
557 {
558 typedef std::array<ItemInfoStatic, ITEMID_WEIGHT_COMPLEX - XATTR_FILL_FIRST + 1> ItemInfoArrayOpenCharDlg;
559 // const ::Color aNullFillCol(COL_DEFAULT_SHAPE_FILLING); // #i121448# Use defined default color
560 // const ::Color aNullLineCol(COL_DEFAULT_SHAPE_STROKE); // #i121448# Use defined default color
561 // const basegfx::BGradient aNullGrad;
562 // const XHatch aNullHatch(Color(COL_DEFAULT_SHAPE_STROKE));
563 ItemInfoArrayOpenCharDlg maItemInfos {{
564 // m_nWhich, m_pItem, m_nSlotID, m_nItemInfoFlags
565 { XATTR_FILLSTYLE, new XFillStyleItem, 0, SFX_ITEMINFOFLAG_NONE },
566 { XATTR_FILLCOLOR, new XFillColorItem(u""_ustr, COL_DEFAULT_SHAPE_FILLING), 0, SFX_ITEMINFOFLAG_SUPPORT_SURROGATE },
567 { XATTR_FILLGRADIENT, new XFillGradientItem(basegfx::BGradient()), 0, SFX_ITEMINFOFLAG_NONE },
568 { XATTR_FILLHATCH, new XFillHatchItem(COL_DEFAULT_SHAPE_STROKE), 0, SFX_ITEMINFOFLAG_NONE },
569 { XATTR_FILLBITMAP, nullptr, 0, SFX_ITEMINFOFLAG_NONE },
570 { XATTR_FILLTRANSPARENCE, new XFillTransparenceItem, 0, SFX_ITEMINFOFLAG_NONE },
571 { XATTR_GRADIENTSTEPCOUNT, new XGradientStepCountItem, 0, SFX_ITEMINFOFLAG_NONE },
572 { XATTR_FILLBMP_TILE, new XFillBmpTileItem, 0, SFX_ITEMINFOFLAG_NONE },
573 { XATTR_FILLBMP_POS, new XFillBmpPosItem, 0, SFX_ITEMINFOFLAG_NONE },
574 { XATTR_FILLBMP_SIZEX, new XFillBmpSizeXItem, 0, SFX_ITEMINFOFLAG_NONE },
575 { XATTR_FILLBMP_SIZEY, new XFillBmpSizeYItem, 0, SFX_ITEMINFOFLAG_NONE },
576 { XATTR_FILLFLOATTRANSPARENCE, new XFillFloatTransparenceItem(basegfx::BGradient(), false), 0, SFX_ITEMINFOFLAG_NONE },
577 { XATTR_SECONDARYFILLCOLOR, new XSecondaryFillColorItem(u""_ustr, COL_DEFAULT_SHAPE_FILLING), 0, SFX_ITEMINFOFLAG_NONE },
578 { XATTR_FILLBMP_SIZELOG, new XFillBmpSizeLogItem, 0, SFX_ITEMINFOFLAG_NONE },
579 { XATTR_FILLBMP_TILEOFFSETX, new XFillBmpTileOffsetXItem, 0, SFX_ITEMINFOFLAG_NONE },
580 { XATTR_FILLBMP_TILEOFFSETY, new XFillBmpTileOffsetYItem, 0, SFX_ITEMINFOFLAG_NONE },
581 { XATTR_FILLBMP_STRETCH, new XFillBmpStretchItem, 0, SFX_ITEMINFOFLAG_NONE },
582 { XATTR_FILLBMP_POSOFFSETX, new XFillBmpPosOffsetXItem, 0, SFX_ITEMINFOFLAG_NONE },
583 { XATTR_FILLBMP_POSOFFSETY, new XFillBmpPosOffsetYItem, 0, SFX_ITEMINFOFLAG_NONE },
584 { XATTR_FILLBACKGROUND, new XFillBackgroundItem, 0, SFX_ITEMINFOFLAG_NONE },
585
586 { ITEMID_FONT, new SvxFontItem(ITEMID_FONT), SID_ATTR_CHAR_FONT, SFX_ITEMINFOFLAG_NONE },
587 { ITEMID_FONTHEIGHT, new SvxFontHeightItem(240,100,ITEMID_FONTHEIGHT), SID_ATTR_CHAR_FONTHEIGHT, SFX_ITEMINFOFLAG_NONE },
588 { ITEMID_LANGUAGE, new SvxLanguageItem(LANGUAGE_GERMAN,ITEMID_LANGUAGE), SID_ATTR_CHAR_LANGUAGE, SFX_ITEMINFOFLAG_NONE },
589 { ITEMID_POSTURE, new SvxPostureItem(ITALIC_NONE,ITEMID_POSTURE), SID_ATTR_CHAR_POSTURE, SFX_ITEMINFOFLAG_NONE },
590 { ITEMID_WEIGHT, new SvxWeightItem(WEIGHT_NORMAL,ITEMID_WEIGHT), SID_ATTR_CHAR_WEIGHT, SFX_ITEMINFOFLAG_NONE },
591 { ITEMID_SHADOWED, new SvxShadowedItem(false,ITEMID_SHADOWED), SID_ATTR_CHAR_SHADOWED, SFX_ITEMINFOFLAG_NONE },
592 { ITEMID_WORDLINEMODE, new SvxWordLineModeItem(false,ITEMID_WORDLINEMODE), SID_ATTR_CHAR_WORDLINEMODE, SFX_ITEMINFOFLAG_NONE },
593 { ITEMID_CONTOUR, new SvxContourItem(false,ITEMID_CONTOUR), SID_ATTR_CHAR_CONTOUR, SFX_ITEMINFOFLAG_NONE },
594 { ITEMID_CROSSEDOUT, new SvxCrossedOutItem(STRIKEOUT_NONE,ITEMID_CROSSEDOUT), SID_ATTR_CHAR_STRIKEOUT, SFX_ITEMINFOFLAG_NONE },
595 { ITEMID_UNDERLINE, new SvxUnderlineItem(LINESTYLE_NONE,ITEMID_UNDERLINE), SID_ATTR_CHAR_UNDERLINE, SFX_ITEMINFOFLAG_NONE },
596 { ITEMID_COLOR, new SvxColorItem(ITEMID_COLOR), SID_ATTR_CHAR_COLOR, SFX_ITEMINFOFLAG_NONE },
597 { ITEMID_KERNING, new SvxKerningItem(0,ITEMID_KERNING), SID_ATTR_CHAR_KERNING, SFX_ITEMINFOFLAG_NONE },
598 { ITEMID_CASEMAP, new SvxCaseMapItem(SvxCaseMap::NotMapped,ITEMID_CASEMAP), SID_ATTR_CHAR_CASEMAP, SFX_ITEMINFOFLAG_NONE },
599 { ITEMID_ESCAPEMENT, new SvxEscapementItem(ITEMID_ESCAPEMENT), SID_ATTR_CHAR_ESCAPEMENT, SFX_ITEMINFOFLAG_NONE },
600
601 // needs to be a on-demand item created in the callback
602 { ITEMID_FONTLIST, nullptr, SID_ATTR_CHAR_FONTLIST, SFX_ITEMINFOFLAG_NONE },
603
604 { ITEMID_AUTOKERN, new SvxAutoKernItem(false,ITEMID_AUTOKERN), SID_ATTR_CHAR_AUTOKERN, SFX_ITEMINFOFLAG_NONE },
605 { ITEMID_COLOR_TABLE, new SvxColorListItem(XColorList::CreateStdColorList(),ITEMID_COLOR_TABLE), SID_COLOR_TABLE, SFX_ITEMINFOFLAG_NONE },
606 { ITEMID_BLINK, new SvxBlinkItem(false,ITEMID_BLINK), SID_ATTR_FLASH, SFX_ITEMINFOFLAG_NONE },
607 { ITEMID_EMPHASISMARK, new SvxEmphasisMarkItem(FontEmphasisMark::NONE,ITEMID_EMPHASISMARK), SID_ATTR_CHAR_EMPHASISMARK, SFX_ITEMINFOFLAG_NONE },
608 { ITEMID_TWOLINES, new SvxTwoLinesItem(true,0,0,ITEMID_TWOLINES), SID_ATTR_CHAR_TWO_LINES, SFX_ITEMINFOFLAG_NONE },
609 { ITEMID_CHARROTATE, new SvxCharRotateItem(0_deg10,false,ITEMID_CHARROTATE), SID_ATTR_CHAR_ROTATED, SFX_ITEMINFOFLAG_NONE },
610 { ITEMID_CHARSCALE_W, new SvxCharScaleWidthItem(100,ITEMID_CHARSCALE_W), SID_ATTR_CHAR_SCALEWIDTH, SFX_ITEMINFOFLAG_NONE },
611 { ITEMID_CHARRELIEF, new SvxCharReliefItem(FontRelief::NONE,ITEMID_CHARRELIEF), SID_ATTR_CHAR_RELIEF, SFX_ITEMINFOFLAG_NONE },
612 { ITEMID_CHARHIDDEN, new SvxCharHiddenItem(false,ITEMID_CHARHIDDEN), SID_ATTR_CHAR_HIDDEN, SFX_ITEMINFOFLAG_NONE },
613 { ITEMID_BRUSH, new SvxBrushItem(ITEMID_BRUSH), SID_ATTR_BRUSH, SFX_ITEMINFOFLAG_NONE },
614 { ITEMID_HORJUSTIFY, new SvxHorJustifyItem(ITEMID_HORJUSTIFY), SID_ATTR_ALIGN_HOR_JUSTIFY, SFX_ITEMINFOFLAG_NONE },
615 { ITEMID_VERJUSTIFY, new SvxVerJustifyItem(ITEMID_VERJUSTIFY), SID_ATTR_ALIGN_VER_JUSTIFY, SFX_ITEMINFOFLAG_NONE },
616
617 // Asian
618 { ITEMID_FONT_ASIAN , new SvxFontItem(ITEMID_FONT_ASIAN), SID_ATTR_CHAR_CJK_FONT, SFX_ITEMINFOFLAG_NONE },
619 { ITEMID_FONTHEIGHT_ASIAN , new SvxFontHeightItem(240,100,ITEMID_FONTHEIGHT_ASIAN), SID_ATTR_CHAR_CJK_FONTHEIGHT, SFX_ITEMINFOFLAG_NONE },
620 { ITEMID_LANGUAGE_ASIAN , new SvxLanguageItem(LANGUAGE_GERMAN,ITEMID_LANGUAGE_ASIAN), SID_ATTR_CHAR_CJK_LANGUAGE, SFX_ITEMINFOFLAG_NONE },
621 { ITEMID_POSTURE_ASIAN , new SvxPostureItem(ITALIC_NONE,ITEMID_POSTURE_ASIAN), SID_ATTR_CHAR_CJK_POSTURE, SFX_ITEMINFOFLAG_NONE },
622 { ITEMID_WEIGHT_ASIAN , new SvxWeightItem(WEIGHT_NORMAL,ITEMID_WEIGHT_ASIAN), SID_ATTR_CHAR_CJK_WEIGHT, SFX_ITEMINFOFLAG_NONE },
623
624 // Complex
625 { ITEMID_FONT_COMPLEX , new SvxFontItem(ITEMID_FONT_COMPLEX), SID_ATTR_CHAR_CTL_FONT, SFX_ITEMINFOFLAG_NONE },
626 { ITEMID_FONTHEIGHT_COMPLEX , new SvxFontHeightItem(240,100,ITEMID_FONTHEIGHT_COMPLEX), SID_ATTR_CHAR_CTL_FONTHEIGHT, SFX_ITEMINFOFLAG_NONE },
627 { ITEMID_LANGUAGE_COMPLEX , new SvxLanguageItem(LANGUAGE_GERMAN,ITEMID_LANGUAGE_COMPLEX), SID_ATTR_CHAR_CTL_LANGUAGE, SFX_ITEMINFOFLAG_NONE },
628 { ITEMID_POSTURE_COMPLEX , new SvxPostureItem(ITALIC_NONE,ITEMID_POSTURE_COMPLEX), SID_ATTR_CHAR_CTL_POSTURE, SFX_ITEMINFOFLAG_NONE },
629 { ITEMID_WEIGHT_COMPLEX , new SvxWeightItem(WEIGHT_NORMAL,ITEMID_WEIGHT_COMPLEX), SID_ATTR_CHAR_CTL_WEIGHT, SFX_ITEMINFOFLAG_NONE }
630 }};
631
632 virtual const ItemInfoStatic& getItemInfoStatic(size_t nIndex) const override { return maItemInfos[nIndex]; }
633
634 public:
635 virtual size_t size() const override { return maItemInfos.size(); }
636 virtual const ItemInfo& getItemInfo(size_t nIndex, SfxItemPool& /*rPool*/) override
637 {
638 const ItemInfo& rRetval(maItemInfos[nIndex]);
639
640 // return immediately if we have the static entry and Item
641 if (nullptr != rRetval.getItem())
642 return rRetval;
643
644 if (XATTR_FILLBITMAP == rRetval.getWhich())
645 return *new ItemInfoDynamic(rRetval, new XFillBitmapItem(Graphic()));
646
647 // return in any case
648 return rRetval;
649 }
650 };
651
652 static std::unique_ptr<ItemInfoPackageOpenCharDlg> g_aItemInfoPackageOpenCharDlg;
653 if (!g_aItemInfoPackageOpenCharDlg)
654 g_aItemInfoPackageOpenCharDlg.reset(new ItemInfoPackageOpenCharDlg);
655 return *g_aItemInfoPackageOpenCharDlg;
656 }
657
openCharDialog(const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,const uno::Reference<awt::XWindow> & _rxParentWindow,uno::Sequence<beans::NamedValue> & _out_rNewValues)658 bool openCharDialog( const uno::Reference<report::XReportControlFormat >& _rxReportControlFormat,
659 const uno::Reference< awt::XWindow>& _rxParentWindow, uno::Sequence< beans::NamedValue >& _out_rNewValues )
660 {
661 OSL_PRECOND( _rxReportControlFormat.is() && _rxParentWindow.is(), "openCharDialog: invalid parameters!" );
662 if ( !_rxReportControlFormat.is() || !_rxParentWindow.is() )
663 return false;
664
665 _out_rNewValues = uno::Sequence< beans::NamedValue >();
666
667 // UNO->ItemSet
668 static const WhichRangesContainer pRanges(svl::Items<
669 XATTR_FILLSTYLE, XATTR_FILLBACKGROUND,
670 ITEMID_FONT, ITEMID_WEIGHT_COMPLEX
671 >);
672
673 rtl::Reference<SfxItemPool> pPool(new SfxItemPool(u"ReportCharProperties"_ustr));
674 // not needed for font height pPool->SetDefaultMetric( MapUnit::Map100thMM ); // ripped, don't understand why
675
676 // here we have to use the callback to create all needed default entries.
677 // this uses local aFontList for temporary SvxFontListItem
678 FontList aFontList(Application::GetDefaultDevice());
679 pPool->registerItemInfoPackage(
680 getItemInfoPackageOpenCharDlg(),
681 [&aFontList](sal_uInt16 nWhich)
682 {
683 SfxPoolItem* pRetval(nullptr);
684 if (ITEMID_FONTLIST == nWhich)
685 pRetval = new SvxFontListItem(&aFontList, ITEMID_FONTLIST);
686 return pRetval;
687 });
688
689 bool bSuccess = false;
690 try
691 {
692 SfxItemSet aDescriptor( *pPool, pRanges );
693 lcl_CharPropertiesToItems( _rxReportControlFormat, aDescriptor );
694
695 { // want the dialog to be destroyed before our set
696 ORptPageDialog aDlg(Application::GetFrameWeld(_rxParentWindow), &aDescriptor, u"CharDialog"_ustr);
697 uno::Reference< report::XShape > xShape( _rxReportControlFormat, uno::UNO_QUERY );
698 if ( xShape.is() )
699 aDlg.RemoveTabPage(u"background"_ustr);
700 bSuccess = aDlg.run() == RET_OK;
701 if ( bSuccess )
702 {
703 lcl_itemsToCharProperties( lcl_getReportControlFont( _rxReportControlFormat,WESTERN ),
704 lcl_getReportControlFont( _rxReportControlFormat,ASIAN ),
705 lcl_getReportControlFont( _rxReportControlFormat,COMPLEX ), *aDlg.GetOutputItemSet(), _out_rNewValues );
706 }
707 }
708 }
709 catch(uno::Exception&)
710 {
711 DBG_UNHANDLED_EXCEPTION("reportdesign");
712 }
713
714 pPool.clear();
715
716 return bSuccess;
717 }
718
openAreaDialog(const uno::Reference<report::XShape> & _xShape,const uno::Reference<awt::XWindow> & _rxParentWindow)719 bool openAreaDialog( const uno::Reference<report::XShape >& _xShape,const uno::Reference< awt::XWindow>& _rxParentWindow )
720 {
721 OSL_PRECOND( _xShape.is() && _rxParentWindow.is(), "openAreaDialog: invalid parameters!" );
722 if ( !_xShape.is() || !_rxParentWindow.is() )
723 return false;
724
725 std::shared_ptr<rptui::OReportModel> pModel = ::reportdesign::OReportDefinition::getSdrModel(_xShape->getSection()->getReportDefinition());
726
727 weld::Window* pParent = Application::GetFrameWeld(_rxParentWindow);
728
729 bool bSuccess = false;
730 try
731 {
732 SfxItemPool& rItemPool = pModel->GetItemPool();
733 SfxItemSet aDescriptor( rItemPool, rItemPool.GetFirstWhich(), rItemPool.GetLastWhich() );
734 lcl_fillShapeToItems(_xShape, aDescriptor);
735
736 { // want the dialog to be destroyed before our set
737 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
738 ScopedVclPtr<AbstractSvxAreaTabDialog> pDialog(
739 pFact->CreateSvxAreaTabDialog(pParent, &aDescriptor, pModel.get(), true, false));
740 if ( RET_OK == pDialog->Execute() )
741 {
742 bSuccess = true;
743 lcl_fillItemsToShape(_xShape,*pDialog->GetOutputItemSet());
744 }
745 }
746 }
747 catch(uno::Exception&)
748 {
749 DBG_UNHANDLED_EXCEPTION("reportdesign");
750 }
751
752 return bSuccess;
753 }
754
755
applyCharacterSettings(const uno::Reference<report::XReportControlFormat> & _rxReportControlFormat,const uno::Sequence<beans::NamedValue> & _rSettings)756 void applyCharacterSettings( const uno::Reference< report::XReportControlFormat >& _rxReportControlFormat, const uno::Sequence< beans::NamedValue >& _rSettings )
757 {
758 ::comphelper::NamedValueCollection aSettings( _rSettings );
759
760 try
761 {
762 awt::FontDescriptor aAwtFont;
763 if ( aSettings.get( u"Font"_ustr ) >>= aAwtFont )
764 {
765 OUString sTemp = aAwtFont.Name;
766 aAwtFont.Name.clear(); // hack to
767 _rxReportControlFormat->setFontDescriptor( aAwtFont );
768 _rxReportControlFormat->setCharFontName( sTemp );
769 }
770 if ( aSettings.get( u"FontAsian"_ustr ) >>= aAwtFont )
771 {
772 OUString sTemp = aAwtFont.Name;
773 aAwtFont.Name.clear(); // hack to
774 _rxReportControlFormat->setFontDescriptorAsian( aAwtFont );
775 _rxReportControlFormat->setCharFontNameAsian( sTemp );
776 }
777 if ( aSettings.get( u"FontComplex"_ustr ) >>= aAwtFont )
778 {
779 OUString sTemp = aAwtFont.Name;
780 aAwtFont.Name.clear(); // hack to
781 _rxReportControlFormat->setFontDescriptorComplex( aAwtFont );
782 _rxReportControlFormat->setCharFontNameComplex( sTemp );
783 }
784
785 lcl_applyFontAttribute( aSettings, PROPERTY_CHARSHADOWED, _rxReportControlFormat, &report::XReportControlFormat::setCharShadowed );
786 lcl_applyFontAttribute( aSettings, PROPERTY_CHARCONTOURED, _rxReportControlFormat, &report::XReportControlFormat::setCharContoured );
787 lcl_applyFontAttribute( aSettings, PROPERTY_CHARUNDERLINECOLOR, _rxReportControlFormat, &report::XReportControlFormat::setCharUnderlineColor );
788 lcl_applyFontAttribute( aSettings, PROPERTY_PARAADJUST, _rxReportControlFormat, &report::XReportControlFormat::setParaAdjust );
789 lcl_applyFontAttribute( aSettings, PROPERTY_VERTICALALIGN, _rxReportControlFormat, &report::XReportControlFormat::setVerticalAlign );
790 lcl_applyFontAttribute( aSettings, PROPERTY_CHARRELIEF, _rxReportControlFormat, &report::XReportControlFormat::setCharRelief );
791 lcl_applyFontAttribute( aSettings, PROPERTY_CHARHIDDEN, _rxReportControlFormat, &report::XReportControlFormat::setCharHidden );
792 lcl_applyFontAttribute( aSettings, PROPERTY_CHARAUTOKERNING, _rxReportControlFormat, &report::XReportControlFormat::setCharAutoKerning );
793 lcl_applyFontAttribute( aSettings, PROPERTY_CONTROLBACKGROUND, _rxReportControlFormat, &report::XReportControlFormat::setControlBackground );
794 lcl_applyFontAttribute( aSettings, PROPERTY_CHARFLASH, _rxReportControlFormat, &report::XReportControlFormat::setCharFlash );
795 lcl_applyFontAttribute( aSettings, PROPERTY_CHAREMPHASIS, _rxReportControlFormat, &report::XReportControlFormat::setCharEmphasis );
796 lcl_applyFontAttribute( aSettings, PROPERTY_CHARCOMBINEISON, _rxReportControlFormat, &report::XReportControlFormat::setCharCombineIsOn );
797 lcl_applyFontAttribute( aSettings, PROPERTY_CHARCOMBINEPREFIX, _rxReportControlFormat, &report::XReportControlFormat::setCharCombinePrefix );
798 lcl_applyFontAttribute( aSettings, PROPERTY_CHARCOMBINESUFFIX, _rxReportControlFormat, &report::XReportControlFormat::setCharCombineSuffix );
799 lcl_applyFontAttribute( aSettings, PROPERTY_CHARCOLOR, _rxReportControlFormat, &report::XReportControlFormat::setCharColor );
800 lcl_applyFontAttribute( aSettings, PROPERTY_CHARKERNING, _rxReportControlFormat, &report::XReportControlFormat::setCharKerning );
801 lcl_applyFontAttribute( aSettings, PROPERTY_CHARCASEMAP, _rxReportControlFormat, &report::XReportControlFormat::setCharCaseMap );
802 lcl_applyFontAttribute( aSettings, PROPERTY_CHARLOCALE, _rxReportControlFormat, &report::XReportControlFormat::setCharLocale );
803 lcl_applyFontAttribute( aSettings, PROPERTY_CHARESCAPEMENT, _rxReportControlFormat, &report::XReportControlFormat::setCharEscapement );
804 lcl_applyFontAttribute( aSettings, PROPERTY_CHARESCAPEMENTHEIGHT, _rxReportControlFormat, &report::XReportControlFormat::setCharEscapementHeight );
805 lcl_applyFontAttribute( aSettings, PROPERTY_CHARLOCALEASIAN, _rxReportControlFormat, &report::XReportControlFormat::setCharLocaleAsian );
806 lcl_applyFontAttribute( aSettings, PROPERTY_CHARLOCALECOMPLEX, _rxReportControlFormat, &report::XReportControlFormat::setCharLocaleComplex );
807 }
808 catch( const uno::Exception& )
809 {
810 DBG_UNHANDLED_EXCEPTION("reportdesign");
811 }
812 }
813
notifySystemWindow(vcl::Window const * _pWindow,vcl::Window * _pToRegister,const::comphelper::mem_fun1_t<TaskPaneList,vcl::Window * > & rMemFunc)814 void notifySystemWindow(vcl::Window const * _pWindow, vcl::Window* _pToRegister, const ::comphelper::mem_fun1_t<TaskPaneList,vcl::Window*>& rMemFunc)
815 {
816 OSL_ENSURE(_pWindow,"Window can not be null!");
817 SystemWindow* pSystemWindow = _pWindow ? _pWindow->GetSystemWindow() : nullptr;
818 if ( pSystemWindow )
819 {
820 rMemFunc( pSystemWindow->GetTaskPaneList(), _pToRegister );
821 }
822 }
823
isOver(const tools::Rectangle & _rRect,SdrPage const & _rPage,SdrView const & _rView,bool _bAllObjects,SdrObject const * _pIgnore,sal_Int16 _nIgnoreType)824 SdrObject* isOver(const tools::Rectangle& _rRect, SdrPage const & _rPage, SdrView const & _rView, bool _bAllObjects, SdrObject const * _pIgnore, sal_Int16 _nIgnoreType)
825 {
826 SdrObject* pOverlappedObj = nullptr;
827 SdrObjListIter aIter(&_rPage,SdrIterMode::DeepNoGroups);
828
829 while( !pOverlappedObj )
830 {
831 SdrObject* pObjIter = aIter.Next();
832 if( !pObjIter )
833 break;
834 if ( _pIgnore != pObjIter
835 && (_bAllObjects || !_rView.IsObjMarked(pObjIter))
836 && (dynamic_cast<OUnoObject*>(pObjIter) != nullptr || dynamic_cast<OOle2Obj*>(pObjIter) != nullptr))
837 {
838 if (_nIgnoreType == ISOVER_IGNORE_CUSTOMSHAPES && pObjIter->GetObjIdentifier() == SdrObjKind::CustomShape)
839 {
840 continue;
841 }
842
843 if (dynamic_cast<OUnoObject*>(pObjIter) != nullptr || dynamic_cast<OOle2Obj*>(pObjIter) != nullptr)
844 {
845 tools::Rectangle aRect = _rRect.GetIntersection(pObjIter->GetLastBoundRect());
846 if ( !aRect.IsEmpty() && (aRect.Left() != aRect.Right() && aRect.Top() != aRect.Bottom() ) )
847 pOverlappedObj = pObjIter;
848 }
849 }
850 }
851 return pOverlappedObj;
852 }
853
checkArrayForOccurrence(SdrObject const * _pObjToCheck,rtl::Reference<SdrUnoObj> _pIgnore[],int _nListLength)854 static bool checkArrayForOccurrence(SdrObject const * _pObjToCheck, rtl::Reference<SdrUnoObj> _pIgnore[], int _nListLength)
855 {
856 for(int i=0;i<_nListLength;i++)
857 {
858 SdrObject *pIgnore = _pIgnore[i].get();
859 if (pIgnore == _pObjToCheck)
860 {
861 return true;
862 }
863 }
864 return false;
865 }
866
isOver(const tools::Rectangle & _rRect,SdrPage const & _rPage,SdrView const & _rView,bool _bAllObjects,rtl::Reference<SdrUnoObj> _pIgnoreList[],int _nIgnoreListLength)867 SdrObject* isOver(const tools::Rectangle& _rRect,SdrPage const & _rPage,SdrView const & _rView,bool _bAllObjects, rtl::Reference<SdrUnoObj> _pIgnoreList[], int _nIgnoreListLength)
868 {
869 SdrObject* pOverlappedObj = nullptr;
870 SdrObjListIter aIter(&_rPage,SdrIterMode::DeepNoGroups);
871
872 while( !pOverlappedObj )
873 {
874 SdrObject* pObjIter = aIter.Next();
875 if( !pObjIter )
876 break;
877 if (checkArrayForOccurrence(pObjIter, _pIgnoreList, _nIgnoreListLength))
878 {
879 continue;
880 }
881
882 if ( (_bAllObjects || !_rView.IsObjMarked(pObjIter))
883 && (dynamic_cast<OUnoObject*>(pObjIter) != nullptr || dynamic_cast<OOle2Obj*>(pObjIter) != nullptr) )
884 {
885 tools::Rectangle aRect = _rRect.GetIntersection(pObjIter->GetLastBoundRect());
886 if ( !aRect.IsEmpty() && (aRect.Left() != aRect.Right() && aRect.Top() != aRect.Bottom() ) )
887 pOverlappedObj = pObjIter;
888 }
889 }
890 return pOverlappedObj;
891 }
892
893
isOver(SdrObject const * _pObj,SdrPage const & _rPage,SdrView const & _rView)894 SdrObject* isOver(SdrObject const * _pObj,SdrPage const & _rPage,SdrView const & _rView)
895 {
896 SdrObject* pOverlappedObj = nullptr;
897 if (dynamic_cast<OUnoObject const *>(_pObj) != nullptr || dynamic_cast<OOle2Obj const *>(_pObj) != nullptr) // this doesn't need to be done for shapes
898 {
899 tools::Rectangle aRect = _pObj->GetCurrentBoundRect();
900 pOverlappedObj = isOver(aRect,_rPage,_rView,false/*_bUnMarkedObjects*/,_pObj);
901 }
902 return pOverlappedObj;
903 }
904
905
getParameterNames(const uno::Reference<sdbc::XRowSet> & _rxRowSet)906 uno::Sequence< OUString > getParameterNames( const uno::Reference< sdbc::XRowSet >& _rxRowSet )
907 {
908 uno::Sequence< OUString > aNames;
909
910 try
911 {
912 uno::Reference< sdb::XParametersSupplier > xSuppParams( _rxRowSet, uno::UNO_QUERY_THROW );
913 uno::Reference< container::XIndexAccess > xParams( xSuppParams->getParameters() );
914 if ( xParams.is() )
915 {
916 sal_Int32 count( xParams->getCount() );
917 aNames.realloc( count );
918 auto pNames = aNames.getArray();
919
920 uno::Reference< beans::XPropertySet > xParam;
921 OUString sParamName;
922 for ( sal_Int32 i=0; i<count; ++i )
923 {
924 xParam.set( xParams->getByIndex(i), uno::UNO_QUERY_THROW );
925 OSL_VERIFY( xParam->getPropertyValue( PROPERTY_NAME ) >>= sParamName );
926 pNames[i] = sParamName;
927 }
928 }
929 }
930 catch( const uno::Exception& )
931 {
932 DBG_UNHANDLED_EXCEPTION("reportdesign");
933 }
934
935 return aNames;
936 }
937
getRectangleFromControl(SdrObject * _pControl)938 tools::Rectangle getRectangleFromControl(SdrObject* _pControl)
939 {
940 if (_pControl)
941 {
942 uno::Reference< report::XReportComponent > xComponent( _pControl->getUnoShape(), uno::UNO_QUERY);
943 if (xComponent.is())
944 {
945 tools::Rectangle aRect(vcl::unohelper::ConvertToVCLPoint(xComponent->getPosition()),
946 vcl::unohelper::ConvertToVCLSize(xComponent->getSize()));
947 aRect.setHeight(aRect.getOpenHeight() + 1);
948 aRect.setWidth(aRect.getOpenWidth() + 1);
949 return aRect;
950 }
951 }
952 return tools::Rectangle();
953 }
954
955 // check overlapping
correctOverlapping(SdrObject * _pControl,OReportSection const & _aReportSection,bool _bInsert)956 void correctOverlapping(SdrObject* _pControl,OReportSection const & _aReportSection,bool _bInsert)
957 {
958 OSectionView& rSectionView = _aReportSection.getSectionView();
959 uno::Reference< report::XReportComponent> xComponent(_pControl->getUnoShape(),uno::UNO_QUERY);
960 tools::Rectangle aRect = getRectangleFromControl(_pControl);
961
962 bool bOverlapping = true;
963 while ( bOverlapping )
964 {
965 SdrObject* pOverlappedObj = isOver(aRect,*_aReportSection.getPage(),rSectionView,true, _pControl);
966 bOverlapping = pOverlappedObj != nullptr;
967 if ( bOverlapping )
968 {
969 const tools::Rectangle& aLogicRect = pOverlappedObj->GetLogicRect();
970 aRect.Move(0,aLogicRect.Top() + aLogicRect.getOpenHeight() - aRect.Top());
971 xComponent->setPositionY(aRect.Top());
972 }
973 }
974 if (_bInsert) // now insert objects
975 rSectionView.InsertObjectAtView(_pControl,*rSectionView.GetSdrPageView(), SdrInsertFlags::ADDMARK);
976 }
977
setZoomFactor(const Fraction & _aZoom,vcl::Window & _rWindow)978 void setZoomFactor(const Fraction& _aZoom, vcl::Window& _rWindow)
979 {
980 MapMode aMapMode( _rWindow.GetMapMode() );
981 aMapMode.SetScaleX(_aZoom);
982 aMapMode.SetScaleY(_aZoom);
983 _rWindow.SetMapMode(aMapMode);
984 }
985
openDialogFormula_nothrow(OUString & _in_out_rFormula,const css::uno::Reference<css::uno::XComponentContext> & _xContext,const uno::Reference<awt::XWindow> & _xInspectorWindow,const css::uno::Reference<css::beans::XPropertySet> & _xRowSet)986 bool openDialogFormula_nothrow( OUString& _in_out_rFormula
987 , const css::uno::Reference< css::uno::XComponentContext >& _xContext
988 , const uno::Reference< awt::XWindow>& _xInspectorWindow
989 , const css::uno::Reference < css::beans::XPropertySet >& _xRowSet
990 )
991 {
992 OSL_PRECOND( _xInspectorWindow.is(), "openDialogFormula_nothrow: invalid parameters!" );
993 if ( !_xInspectorWindow.is() )
994 return false;
995 bool bSuccess = false;
996 ::dbtools::SQLExceptionInfo aErrorInfo;
997 uno::Reference< awt::XWindow > xInspectorWindow;
998 try
999 {
1000 uno::Reference<lang::XMultiComponentFactory> xFactory = _xContext->getServiceManager();
1001 uno::Reference<lang::XMultiServiceFactory> xServiceFactory(xFactory, uno::UNO_QUERY);
1002
1003 uno::Reference< report::meta::XFunctionManager> xMgr(xFactory->createInstanceWithContext(u"org.libreoffice.report.pentaho.SOFunctionManager"_ustr,_xContext),uno::UNO_QUERY);
1004 if ( xMgr.is() )
1005 {
1006 auto pFormulaManager = std::make_shared<FunctionManager>(xMgr);
1007 ReportFormula aFormula( _in_out_rFormula );
1008
1009 CharClass aCC(_xContext, LanguageTag(LANGUAGE_SYSTEM));
1010 svl::SharedStringPool aStringPool(aCC);
1011
1012 FormulaDialog aDlg(
1013 Application::GetFrameWeld(_xInspectorWindow), xServiceFactory, pFormulaManager,
1014 aFormula.getUndecoratedContent(), _xRowSet, aStringPool);
1015
1016 bSuccess = aDlg.run() == RET_OK;
1017 if ( bSuccess )
1018 {
1019 OUString sFormula = aDlg.getCurrentFormula();
1020 if ( sFormula[0] == '=' )
1021 _in_out_rFormula = OUString::Concat("rpt:") + sFormula.subView(1);
1022 else
1023 _in_out_rFormula = "rpt:" + sFormula;
1024 }
1025 }
1026 }
1027 catch (const sdb::SQLContext& e) { aErrorInfo = e; }
1028 catch (const sdbc::SQLWarning& e) { aErrorInfo = e; }
1029 catch (const sdbc::SQLException& e) { aErrorInfo = e; }
1030 catch( const uno::Exception& )
1031 {
1032 TOOLS_WARN_EXCEPTION( "reportdesign", "GeometryHandler::impl_dialogFilter_nothrow" );
1033 }
1034
1035 if ( aErrorInfo.isValid() )
1036 ::dbtools::showError( aErrorInfo, xInspectorWindow, _xContext );
1037
1038 return bSuccess;
1039 }
1040
1041 } // namespace rptui
1042
1043
1044 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1045