xref: /core/reportdesign/source/ui/misc/UITools.cxx (revision b5165b191550fc40516c4041e112f5c9ad6b569d)
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