LibreOffice Module chart2 (master) 1
ShapeController.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include "ShapeController.hxx"
21#include <ChartController.hxx>
23#include <dlg_ShapeFont.hxx>
25#include <ChartModel.hxx>
27#include <com/sun/star/drawing/XShapes.hpp>
28#include <com/sun/star/frame/CommandGroup.hpp>
29
30#include <vcl/svapp.hxx>
32#include <editeng/editids.hrc>
33#include <editeng/eeitem.hxx>
35#include <editeng/orphitem.hxx>
36#include <editeng/spltitem.hxx>
37#include <svx/svxdlg.hxx>
38#include <editeng/widwitem.hxx>
40
41using namespace ::com::sun::star;
42using namespace ::com::sun::star::frame;
43
44using ::com::sun::star::uno::Reference;
45using ::com::sun::star::uno::Sequence;
46
47namespace chart
48{
49
51 ChartController* pController )
52 :FeatureCommandDispatchBase( rxContext )
53 ,m_pChartController( pController )
54{
55}
56
58{
59}
60
61// WeakComponentImplHelperBase
62void ShapeController::disposing(std::unique_lock<std::mutex>& /*rGuard*/)
63{
64}
65
66// XEventListener
67void ShapeController::disposing( const lang::EventObject& /* Source */ )
68{
69}
70
71FeatureState ShapeController::getState( const OUString& rCommand )
72{
73 FeatureState aReturn;
74 aReturn.bEnabled = false;
75 aReturn.aState <<= false;
76
77 bool bWritable = false;
79 {
81 if ( xStorable.is() )
82 {
83 bWritable = !xStorable->isReadonly();
84 }
85 }
86
87 SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand );
88 if ( aIter != m_aSupportedFeatures.end() )
89 {
90 ChartCommandID nFeatureId = aIter->second.nFeatureId;
91 switch ( nFeatureId )
92 {
99 {
100 aReturn.bEnabled = bWritable;
101 aReturn.aState <<= false;
102 }
103 break;
106 {
107 aReturn.bEnabled = ( bWritable && isForwardPossible() );
108 aReturn.aState <<= false;
109 }
110 break;
113 {
114
115 aReturn.bEnabled = ( bWritable && isBackwardPossible() );
116 aReturn.aState <<= false;
117 }
118 break;
121 {
122 aReturn.bEnabled = bWritable;
123 aReturn.aState <<= false;
124 }
125 break;
126 default:
127 {
128 aReturn.bEnabled = false;
129 aReturn.aState <<= false;
130 }
131 break;
132 }
133 }
134
135 return aReturn;
136}
137
138void ShapeController::execute( const OUString& rCommand, const Sequence< beans::PropertyValue>& )
139{
140 SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand );
141 if ( aIter == m_aSupportedFeatures.end() )
142 return;
143
144 ChartCommandID nFeatureId = aIter->second.nFeatureId;
145 switch ( nFeatureId )
146 {
148 {
150 }
151 break;
153 {
155 }
156 break;
158 {
160 }
161 break;
163 {
165 }
166 break;
168 {
170 }
171 break;
173 {
175 }
176 break;
181 {
182 executeDispatch_ChangeZOrder( nFeatureId );
183 }
184 break;
186 {
188 }
189 break;
191 {
193 }
194 break;
195 default:
196 {
197 }
198 break;
199 }
200}
201
203{
204 implDescribeSupportedFeature( ".uno:FormatLine", ChartCommandID::ShapeFormatLine, CommandGroup::FORMAT );
205 implDescribeSupportedFeature( ".uno:FormatArea", ChartCommandID::ShapeFormatArea, CommandGroup::FORMAT );
206 implDescribeSupportedFeature( ".uno:TextAttributes", ChartCommandID::ShapeTextAttributes, CommandGroup::FORMAT );
207 implDescribeSupportedFeature( ".uno:TransformDialog", ChartCommandID::ShapeTransformDialog, CommandGroup::FORMAT );
208 implDescribeSupportedFeature( ".uno:ObjectTitleDescription", ChartCommandID::ShapeObjectTitleDescription, CommandGroup::FORMAT );
209 implDescribeSupportedFeature( ".uno:RenameObject", ChartCommandID::ShapeRenameObject, CommandGroup::FORMAT );
210 implDescribeSupportedFeature( ".uno:BringToFront", ChartCommandID::ShapeBringToFront, CommandGroup::FORMAT );
211 implDescribeSupportedFeature( ".uno:Forward", ChartCommandID::ShapeForward, CommandGroup::FORMAT );
212 implDescribeSupportedFeature( ".uno:Backward", ChartCommandID::ShapeBackward, CommandGroup::FORMAT );
213 implDescribeSupportedFeature( ".uno:SendToBack", ChartCommandID::ShapeSendToBack, CommandGroup::FORMAT );
214 implDescribeSupportedFeature( ".uno:FontDialog", ChartCommandID::ShapeFontDialog, CommandGroup::EDIT );
215 implDescribeSupportedFeature( ".uno:ParagraphDialog", ChartCommandID::ShapeParagraphDialog, CommandGroup::EDIT );
216}
217
219{
220 OUString aName;
221 rDialog.GetName( aName );
222
223 if ( !aName.isEmpty() )
224 {
225 DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : nullptr );
226 if ( pDrawViewWrapper && pDrawViewWrapper->getNamedSdrObject( aName ) )
227 {
228 return false;
229 }
230 }
231 return true;
232}
233
235{
236 SolarMutexGuard aGuard;
237 if ( !m_pChartController )
238 return;
239
243 if ( !(pChartWindow && pDrawModelWrapper && pDrawViewWrapper) )
244 return;
245
246 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
247 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
248 bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
249 if ( bHasMarked )
250 {
251 pDrawViewWrapper->MergeAttrFromMarked( aAttr, false );
252 }
255 pFact->CreateSvxLineTabDialog(pChartWindow, &aAttr, &pDrawModelWrapper->getSdrModel(),
256 pSelectedObj, bHasMarked));
257 if ( pDlg->Execute() == RET_OK )
258 {
259 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
260 if ( bHasMarked )
261 {
262 pDrawViewWrapper->SetAttrToMarked( *pOutAttr, false );
263 }
264 else
265 {
266 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, false );
267 }
268 }
269}
270
272{
273 SolarMutexGuard aGuard;
274 if ( !m_pChartController )
275 return;
276
280 if ( !(pChartWindow && pDrawModelWrapper && pDrawViewWrapper) )
281 return;
282
283 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
284 bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
285 if ( bHasMarked )
286 {
287 pDrawViewWrapper->MergeAttrFromMarked( aAttr, false );
288 }
291 pFact->CreateSvxAreaTabDialog(pChartWindow, &aAttr, &pDrawModelWrapper->getSdrModel(), true, false));
292 if ( pDlg->Execute() == RET_OK )
293 {
294 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
295 if ( bHasMarked )
296 {
297 pDrawViewWrapper->SetAttrToMarked( *pOutAttr, false );
298 }
299 else
300 {
301 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, false );
302 }
303 }
304}
305
307{
308 SolarMutexGuard aGuard;
309 if ( !m_pChartController )
310 return;
311
314 if ( !(pChartWindow && pDrawViewWrapper) )
315 return;
316
317 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
318 bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
319 if ( bHasMarked )
320 {
321 pDrawViewWrapper->MergeAttrFromMarked( aAttr, false );
322 }
325 pFact->CreateTextTabDialog(pChartWindow, &aAttr, pDrawViewWrapper));
326 if ( pDlg->Execute() == RET_OK )
327 {
328 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
329 if ( bHasMarked )
330 {
331 pDrawViewWrapper->SetAttributes( *pOutAttr );
332 }
333 else
334 {
335 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, false );
336 }
337 }
338}
339
341{
342 SolarMutexGuard aGuard;
343 if ( !m_pChartController )
344 return;
345
348 if ( !(pChartWindow && pDrawViewWrapper) )
349 return;
350
351 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
352 if ( pSelectedObj && pSelectedObj->GetObjIdentifier() == SdrObjKind::Caption )
353 {
354 // item set for caption
355 SfxItemSet aAttr(pDrawViewWrapper->GetModel().GetItemPool());
356 pDrawViewWrapper->GetAttributes( aAttr );
357 // item set for position and size
358 SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() );
361 pFact->CreateCaptionDialog(pChartWindow, pDrawViewWrapper));
362 const WhichRangesContainer& pRange = pDlg->GetInputRanges( *aAttr.GetPool() );
363 SfxItemSet aCombAttr( *aAttr.GetPool(), pRange );
364 aCombAttr.Put( aAttr );
365 aCombAttr.Put( aGeoAttr );
366 pDlg->SetInputSet( &aCombAttr );
367 if ( pDlg->Execute() == RET_OK )
368 {
369 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
370 pDrawViewWrapper->SetAttributes( *pOutAttr );
371 pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr );
372 }
373 }
374 else
375 {
376 SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() );
379 pFact->CreateSvxTransformTabDialog(pChartWindow, &aGeoAttr, pDrawViewWrapper));
380 if ( pDlg->Execute() == RET_OK )
381 {
382 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
383 pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr );
384 }
385 }
386}
387
389{
390 SolarMutexGuard aGuard;
391 if ( !m_pChartController )
392 return;
393
395 if ( !(pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1) )
396 return;
397
398 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
399 if ( !pSelectedObj )
400 return;
401
402 OUString aTitle( pSelectedObj->GetTitle() );
403 OUString aDescription( pSelectedObj->GetDescription() );
404 bool isDecorative(pSelectedObj->IsDecorative());
408 pFact->CreateSvxObjectTitleDescDialog(pChartWindow, aTitle, aDescription, isDecorative));
409 if ( pDlg->Execute() == RET_OK )
410 {
411 pDlg->GetTitle( aTitle );
412 pDlg->GetDescription( aDescription );
413 pDlg->IsDecorative(isDecorative);
414 pSelectedObj->SetTitle( aTitle );
415 pSelectedObj->SetDescription( aDescription );
416 pSelectedObj->SetDecorative(isDecorative);
417 }
418}
419
421{
422 SolarMutexGuard aGuard;
423 if ( !m_pChartController )
424 return;
425
427 if ( !(pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1) )
428 return;
429
430 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
431 if ( !pSelectedObj )
432 return;
433
434 OUString aName = pSelectedObj->GetName();
438 pFact->CreateSvxObjectNameDialog(pChartWindow, aName));
439 pDlg->SetCheckNameHdl( LINK( this, ShapeController, CheckNameHdl ) );
440 if ( pDlg->Execute() == RET_OK )
441 {
442 pDlg->GetName(aName);
443 if (pSelectedObj->GetName() == aName)
444 {
445 pSelectedObj->SetName( aName );
446 }
447 }
448}
449
451{
452 SolarMutexGuard aGuard;
453 DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : nullptr );
454 if ( !pDrawViewWrapper )
455 return;
456
457 switch ( nId )
458 {
460 {
461 if ( isForwardPossible() )
462 {
463 pDrawViewWrapper->PutMarkedToTop();
464 }
465 }
466 break;
468 {
469 if ( isForwardPossible() )
470 {
471 pDrawViewWrapper->MovMarkedToTop();
472 }
473 }
474 break;
476 {
477 if ( isBackwardPossible() )
478 {
479 pDrawViewWrapper->MovMarkedToBtm();
480 }
481 }
482 break;
484 {
485 if ( isBackwardPossible() )
486 {
487 SdrObject* pFirstObj = getFirstAdditionalShape();
488 pDrawViewWrapper->PutMarkedBehindObj( pFirstObj );
489 }
490 }
491 break;
492 default:
493 {
494 }
495 break;
496 }
497}
498
500{
501 SolarMutexGuard aGuard;
502 if ( !m_pChartController )
503 return;
504
508 if ( pChartWindow && pDrawModelWrapper && pDrawViewWrapper )
509 {
510 SfxItemSet aAttr(pDrawViewWrapper->GetModel().GetItemPool());
511 pDrawViewWrapper->GetAttributes( aAttr );
512 ViewElementListProvider aViewElementListProvider( pDrawModelWrapper );
513 ShapeFontDialog aDlg(pChartWindow, &aAttr, &aViewElementListProvider);
514 if (aDlg.run() == RET_OK)
515 {
516 const SfxItemSet* pOutAttr = aDlg.GetOutputItemSet();
517 pDrawViewWrapper->SetAttributes( *pOutAttr );
518 }
519 }
520}
521
523{
524 SolarMutexGuard aGuard;
525 if ( !m_pChartController )
526 return;
527
530 if ( !(pChartWindow && pDrawViewWrapper) )
531 return;
532
533 SfxItemPool& rPool = pDrawViewWrapper->GetModel().GetItemPool();
534 SfxItemSet aAttr( rPool );
535 pDrawViewWrapper->GetAttributes( aAttr );
536
539 SID_ATTR_PARA_PAGEBREAK, SID_ATTR_PARA_WIDOWS> aNewAttr(rPool);
540 aNewAttr.Put( aAttr );
541 aNewAttr.Put( SvxHyphenZoneItem( false, SID_ATTR_PARA_HYPHENZONE ) );
542 aNewAttr.Put( SvxFormatBreakItem( SvxBreak::NONE, SID_ATTR_PARA_PAGEBREAK ) );
543 aNewAttr.Put( SvxFormatSplitItem( true, SID_ATTR_PARA_SPLIT) );
544 aNewAttr.Put( SvxWidowsItem( 0, SID_ATTR_PARA_WIDOWS) );
545 aNewAttr.Put( SvxOrphansItem( 0, SID_ATTR_PARA_ORPHANS) );
546
547 ShapeParagraphDialog aDlg(pChartWindow, &aNewAttr);
548 if (aDlg.run() == RET_OK)
549 {
550 const SfxItemSet* pOutAttr = aDlg.GetOutputItemSet();
551 pDrawViewWrapper->SetAttributes( *pOutAttr );
552 }
553}
554
556{
557 SdrObject* pFirstObj = nullptr;
558
559 try
560 {
561 DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : nullptr );
562 if ( pDrawModelWrapper )
563 {
565 rtl::Reference<SvxDrawPage> xDrawPage( pDrawModelWrapper->getMainDrawPage() );
567 sal_Int32 nCount = xDrawPage->getCount();
568 for ( sal_Int32 i = 0; i < nCount; ++i )
569 {
571 if ( xDrawPage->getByIndex( i ) >>= xShape )
572 {
573 if ( xShape.is() && xShape != xChartRoot )
574 {
575 xFirstShape = xShape;
576 break;
577 }
578 }
579 }
580 if ( xFirstShape.is() )
581 {
582 pFirstObj = DrawViewWrapper::getSdrObject( xFirstShape );
583 }
584 }
585 }
586 catch ( const uno::Exception& )
587 {
588 DBG_UNHANDLED_EXCEPTION("chart2");
589 }
590
591 return pFirstObj;
592}
593
595{
596 SdrObject* pLastObj = nullptr;
597
598 try
599 {
600 DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : nullptr );
601 if ( pDrawModelWrapper )
602 {
604 rtl::Reference<SvxDrawPage> xDrawPage( pDrawModelWrapper->getMainDrawPage() );
606 sal_Int32 nCount = xDrawPage->getCount();
607 for ( sal_Int32 i = nCount - 1; i >= 0; --i )
608 {
610 if ( xDrawPage->getByIndex( i ) >>= xShape )
611 {
612 if ( xShape.is() && xShape != xChartRoot )
613 {
614 xLastShape = xShape;
615 break;
616 }
617 }
618 }
619 if ( xLastShape.is() )
620 {
621 pLastObj = DrawViewWrapper::getSdrObject( xLastShape );
622 }
623 }
624 }
625 catch ( const uno::Exception& )
626 {
627 DBG_UNHANDLED_EXCEPTION("chart2");
628 }
629
630 return pLastObj;
631}
632
634{
636 {
637 SolarMutexGuard aGuard;
639 if ( pDrawViewWrapper )
640 {
641 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
642 SdrObject* pFirstObj = getFirstAdditionalShape();
643 if ( pSelectedObj && pFirstObj && pSelectedObj != pFirstObj )
644 {
645 return true;
646 }
647 }
648 }
649 return false;
650}
651
653{
655 {
656 SolarMutexGuard aGuard;
658 if ( pDrawViewWrapper )
659 {
660 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
661 SdrObject* pLastObj = getLastAdditionalShape();
662 if ( pSelectedObj && pLastObj && pSelectedObj != pLastObj )
663 {
664 return true;
665 }
666 }
667 }
668 return false;
669}
670
671} // namespace chart
672
673/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
@ ShapeObjectTitleDescription
void PutMarkedToTop()
void PutMarkedBehindObj(const SdrObject *pRefObj)
void SetAttrToMarked(const SfxItemSet &rAttr, bool bReplaceAll)
void MovMarkedToTop()
void SetGeoAttrToMarked(const SfxItemSet &rAttr, bool addPageMargin=false)
void MergeAttrFromMarked(SfxItemSet &rAttr, bool bOnlyHardAttr) const
void MovMarkedToBtm()
SfxItemSet GetGeoAttrFromMarked() const
bool AreObjectsMarked() const
size_t GetMarkedObjectCount() const
const SfxItemPool & GetItemPool() const
virtual OUString GetTitle() const
virtual void SetTitle(const OUString &rStr)
virtual void SetDescription(const OUString &rStr)
virtual OUString GetDescription() const
virtual const OUString & GetName() const
virtual SdrObjKind GetObjIdentifier() const
virtual void SetDecorative(bool isDecorative)
virtual void SetName(const OUString &rStr, const bool bSetChanged=true)
virtual bool IsDecorative() const
const SfxItemSet & GetDefaultAttr() const
void SetDefaultAttr(const SfxItemSet &rAttr, bool bReplaceAll)
SdrModel & GetModel() const
bool SetAttributes(const SfxItemSet &rSet, bool bReplaceAll=false)
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr=false) const
SfxItemPool * GetPool() const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
virtual short run() override
const SfxItemSet * GetOutputItemSet() const
virtual VclPtr< AbstractSvxAreaTabDialog > CreateSvxAreaTabDialog(weld::Window *pParent, const SfxItemSet *pAttr, SdrModel *pModel, bool bShadow, bool bSlideBackground)=0
virtual VclPtr< AbstractSvxObjectTitleDescDialog > CreateSvxObjectTitleDescDialog(weld::Window *pParent, const OUString &rTitle, const OUString &rDescription, bool isDecorative)=0
virtual VclPtr< SfxAbstractTabDialog > CreateTextTabDialog(weld::Window *pParent, const SfxItemSet *pAttrSet, SdrView *pView)=0
virtual VclPtr< AbstractSvxTransformTabDialog > CreateSvxTransformTabDialog(weld::Window *pParent, const SfxItemSet *pAttr, const SdrView *pView, SvxAnchorIds nAnchorTypes=SvxAnchorIds::NONE)=0
virtual VclPtr< AbstractSvxCaptionDialog > CreateCaptionDialog(weld::Window *pParent, const SdrView *pView, SvxAnchorIds nAnchorTypes=SvxAnchorIds::NONE)=0
virtual VclPtr< AbstractSvxObjectNameDialog > CreateSvxObjectNameDialog(weld::Window *pParent, const OUString &rName)=0
virtual VclPtr< SfxAbstractTabDialog > CreateSvxLineTabDialog(weld::Window *pParent, const SfxItemSet *pAttr, SdrModel *pModel, const SdrObject *pObj, bool bHasObj)=0
static SvxAbstractDialogFactory * Create()
rtl::Reference<::chart::ChartModel > getChartModel()
DrawViewWrapper * GetDrawViewWrapper()
bool isAdditionalShapeSelected() const
weld::Window * GetChartFrame()
DrawModelWrapper * GetDrawModelWrapper()
static rtl::Reference< SvxShapeGroupAnyD > getChartRootShape(const rtl::Reference< SvxDrawPage > &xPage)
const rtl::Reference< SvxDrawPage > & getMainDrawPage()
static SdrObject * getSdrObject(const css::uno::Reference< css::drawing::XShape > &xShape)
SdrObject * getNamedSdrObject(const OUString &rName) const
SdrObject * getSelectedObject() const
This is a base class for CommandDispatch implementations with feature support.
void implDescribeSupportedFeature(const char *pAsciiCommandURL, ChartCommandID nId, sal_Int16 nGroup)
describes a feature supported by the controller
This is a CommandDispatch implementation for shapes.
virtual ~ShapeController() override
void executeDispatch_ChangeZOrder(ChartCommandID nId)
SdrObject * getFirstAdditionalShape()
ShapeController(const css::uno::Reference< css::uno::XComponentContext > &rxContext, ChartController *pController)
virtual void execute(const OUString &rCommand, const css::uno::Sequence< css::beans::PropertyValue > &rArgs) override
ChartController * m_pChartController
virtual void disposing(std::unique_lock< std::mutex > &rGuard) override
is called when this is disposed
virtual FeatureState getState(const OUString &rCommand) override
void executeDispatch_ObjectTitleDescription()
virtual void describeSupportedFeatures() override
SdrObject * getLastAdditionalShape()
dialog for font properties of shapes
dialog for paragraph properties of shapes
int nCount
#define DBG_UNHANDLED_EXCEPTION(...)
constexpr sal_uInt16 EE_ITEMS_END(EE_FEATURE_END)
constexpr sal_uInt16 EE_ITEMS_START(OWN_ATTR_VALUE_END+1)
OUString aName
IMPL_LINK(StackingResourceGroup, StackingChangeHdl, weld::Toggleable &, rRadio, void)
int i
sal_Int16 nId
RET_OK