LibreOffice Module svx (master)  1
tabledesign.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 
21 #include <com/sun/star/style/XStyle.hpp>
22 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
23 #include <com/sun/star/lang/XServiceInfo.hpp>
24 #include <com/sun/star/lang/XComponent.hpp>
25 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
26 #include <com/sun/star/container/XIndexAccess.hpp>
27 #include <com/sun/star/container/XNameContainer.hpp>
28 #include <com/sun/star/beans/XPropertySet.hpp>
29 #include <com/sun/star/util/XModifyBroadcaster.hpp>
30 #include <com/sun/star/util/XModifyListener.hpp>
31 
32 #include <vcl/svapp.hxx>
33 
34 #include <comphelper/compbase.hxx>
36 #include <cppuhelper/implbase.hxx>
38 #include <comphelper/sequence.hxx>
39 
41 #include <svx/dialmgr.hxx>
42 #include <svx/strings.hrc>
43 
44 #include <celltypes.hxx>
45 
46 #include <vector>
47 #include <map>
48 
49 
50 using namespace ::com::sun::star::uno;
51 using namespace ::com::sun::star::style;
52 using namespace ::com::sun::star::lang;
53 using namespace ::com::sun::star::beans;
54 using namespace ::com::sun::star::util;
55 using namespace ::com::sun::star::container;
56 
57 namespace sdr::table {
58 
59 typedef std::map< OUString, sal_Int32 > CellStyleNameMap;
60 
61 typedef ::comphelper::WeakComponentImplHelper< XStyle, XNameReplace, XServiceInfo, XIndexAccess, XModifyBroadcaster, XModifyListener > TableDesignStyleBase;
62 
63 namespace {
64 
65 class TableDesignStyle : public TableDesignStyleBase
66 {
67 public:
68  TableDesignStyle();
69 
70  // XServiceInfo
71  virtual OUString SAL_CALL getImplementationName() override;
72  virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
73  virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
74 
75  // XStyle
76  virtual sal_Bool SAL_CALL isUserDefined() override;
77  virtual sal_Bool SAL_CALL isInUse() override;
78  virtual OUString SAL_CALL getParentStyle() override;
79  virtual void SAL_CALL setParentStyle( const OUString& aParentStyle ) override;
80 
81  // XNamed
82  virtual OUString SAL_CALL getName() override;
83  virtual void SAL_CALL setName( const OUString& aName ) override;
84 
85  // XNameAccess
86  virtual Any SAL_CALL getByName( const OUString& aName ) override;
87  virtual Sequence< OUString > SAL_CALL getElementNames() override;
88  virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override;
89 
90  // XElementAccess
91  virtual css::uno::Type SAL_CALL getElementType() override;
92  virtual sal_Bool SAL_CALL hasElements() override;
93 
94  // XIndexAccess
95  virtual sal_Int32 SAL_CALL getCount() override ;
96  virtual Any SAL_CALL getByIndex( sal_Int32 Index ) override;
97 
98  // XNameReplace
99  virtual void SAL_CALL replaceByName( const OUString& aName, const Any& aElement ) override;
100 
101  // XModifyBroadcaster
102  virtual void SAL_CALL addModifyListener( const Reference< XModifyListener >& aListener ) override;
103  virtual void SAL_CALL removeModifyListener( const Reference< XModifyListener >& aListener ) override;
104 
105  // XModifyListener
106  virtual void SAL_CALL modified( const css::lang::EventObject& aEvent ) override;
107  virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
108 
109  void notifyModifyListener();
110 
111  // this function is called upon disposing the component
112  virtual void disposing(std::unique_lock<std::mutex>&) override;
113 
114  static const CellStyleNameMap& getCellStyleNameMap();
115 
116  OUString msName;
117  Reference< XStyle > maCellStyles[style_count];
119 };
120 
121 }
122 
123 typedef std::vector< Reference< XStyle > > TableDesignStyleVector;
124 
125 namespace {
126 
127 class TableDesignFamily : public ::cppu::WeakImplHelper< XNameContainer, XNamed, XIndexAccess, XSingleServiceFactory, XServiceInfo, XComponent, XPropertySet >
128 {
129 public:
130  // XServiceInfo
131  virtual OUString SAL_CALL getImplementationName() override;
132  virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
133  virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
134 
135  // XNamed
136  virtual OUString SAL_CALL getName( ) override;
137  virtual void SAL_CALL setName( const OUString& aName ) override;
138 
139  // XNameAccess
140  virtual Any SAL_CALL getByName( const OUString& aName ) override;
141  virtual Sequence< OUString > SAL_CALL getElementNames() override;
142  virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override;
143 
144  // XElementAccess
145  virtual Type SAL_CALL getElementType() override;
146  virtual sal_Bool SAL_CALL hasElements() override;
147 
148  // XIndexAccess
149  virtual sal_Int32 SAL_CALL getCount() override ;
150  virtual Any SAL_CALL getByIndex( sal_Int32 Index ) override;
151 
152  // XNameContainer
153  virtual void SAL_CALL insertByName( const OUString& aName, const Any& aElement ) override;
154  virtual void SAL_CALL removeByName( const OUString& Name ) override;
155 
156  // XNameReplace
157  virtual void SAL_CALL replaceByName( const OUString& aName, const Any& aElement ) override;
158 
159  // XSingleServiceFactory
160  virtual Reference< XInterface > SAL_CALL createInstance( ) override;
161  virtual Reference< XInterface > SAL_CALL createInstanceWithArguments( const Sequence< Any >& aArguments ) override;
162 
163  // XComponent
164  virtual void SAL_CALL dispose( ) override;
165  virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) override;
166  virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) override;
167 
168  // XPropertySet
169  virtual Reference<XPropertySetInfo> SAL_CALL getPropertySetInfo() override;
170  virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const Any& aValue ) override;
171  virtual Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
172  virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const Reference<XPropertyChangeListener>& xListener ) override;
173  virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const Reference<XPropertyChangeListener>& aListener ) override;
174  virtual void SAL_CALL addVetoableChangeListener(const OUString& PropertyName, const Reference<XVetoableChangeListener>& aListener ) override;
175  virtual void SAL_CALL removeVetoableChangeListener(const OUString& PropertyName,const Reference<XVetoableChangeListener>&aListener ) override;
176 
177  TableDesignStyleVector maDesigns;
178 };
179 
180 }
181 
182 TableDesignStyle::TableDesignStyle()
183 {
184 }
185 
186 const CellStyleNameMap& TableDesignStyle::getCellStyleNameMap()
187 {
188  static CellStyleNameMap const aMap
189  {
190  { OUString( "first-row" ) , first_row_style },
191  { OUString( "last-row" ) , last_row_style },
192  { OUString( "first-column" ) , first_column_style },
193  { OUString( "last-column" ) , last_column_style },
194  { OUString( "body" ) , body_style },
195  { OUString( "even-rows" ) , even_rows_style },
196  { OUString( "odd-rows" ) , odd_rows_style },
197  { OUString( "even-columns" ) , even_columns_style },
198  { OUString( "odd-columns" ) , odd_columns_style },
199  { OUString( "background" ) , background_style },
200  };
201 
202  return aMap;
203 }
204 
205 // XServiceInfo
206 OUString SAL_CALL TableDesignStyle::getImplementationName()
207 {
208  return "TableDesignStyle";
209 }
210 
211 sal_Bool SAL_CALL TableDesignStyle::supportsService( const OUString& ServiceName )
212 {
213  return cppu::supportsService( this, ServiceName );
214 }
215 
216 Sequence< OUString > SAL_CALL TableDesignStyle::getSupportedServiceNames()
217 {
218  return { "com.sun.star.style.Style" };
219 }
220 
221 // XStyle
222 sal_Bool SAL_CALL TableDesignStyle::isUserDefined()
223 {
224  return false;
225 }
226 
227 sal_Bool SAL_CALL TableDesignStyle::isInUse()
228 {
229  std::unique_lock aGuard( m_aMutex );
230  if (maModifyListeners.getLength(aGuard))
231  {
233  while ( it.hasMoreElements() )
234  {
235  TableDesignUser* pUser = dynamic_cast< TableDesignUser* >( it.next().get() );
236  if( pUser && pUser->isInUse() )
237  return true;
238  }
239  }
240  return false;
241 }
242 
243 
244 OUString SAL_CALL TableDesignStyle::getParentStyle()
245 {
246  return OUString();
247 }
248 
249 
250 void SAL_CALL TableDesignStyle::setParentStyle( const OUString& )
251 {
252 }
253 
254 
255 // XNamed
256 
257 
258 OUString SAL_CALL TableDesignStyle::getName()
259 {
260  return msName;
261 }
262 
263 
264 void SAL_CALL TableDesignStyle::setName( const OUString& rName )
265 {
266  msName = rName;
267 }
268 
269 
270 // XNameAccess
271 
272 
273 Any SAL_CALL TableDesignStyle::getByName( const OUString& rName )
274 {
275  const CellStyleNameMap& rMap = getCellStyleNameMap();
276 
277  CellStyleNameMap::const_iterator iter = rMap.find( rName );
278  if( iter == rMap.end() )
279  throw NoSuchElementException();
280 
281  return Any( maCellStyles[(*iter).second] );
282 }
283 
284 
285 Sequence< OUString > SAL_CALL TableDesignStyle::getElementNames()
286 {
287  return comphelper::mapKeysToSequence( getCellStyleNameMap() );
288 }
289 
290 
291 sal_Bool SAL_CALL TableDesignStyle::hasByName( const OUString& rName )
292 {
293  const CellStyleNameMap& rMap = getCellStyleNameMap();
294 
295  CellStyleNameMap::const_iterator iter = rMap.find( rName );
296  return iter != rMap.end();
297 }
298 
299 
300 // XElementAccess
301 
302 
303 Type SAL_CALL TableDesignStyle::getElementType()
304 {
306 }
307 
308 
309 sal_Bool SAL_CALL TableDesignStyle::hasElements()
310 {
311  return true;
312 }
313 
314 
315 // XIndexAccess
316 
317 
318 sal_Int32 SAL_CALL TableDesignStyle::getCount()
319 {
320  return style_count;
321 }
322 
323 
324 Any SAL_CALL TableDesignStyle::getByIndex( sal_Int32 Index )
325 {
326  if( (Index < 0) || (Index >= style_count) )
327  throw IndexOutOfBoundsException();
328 
329  std::unique_lock aGuard( m_aMutex );
330  return Any( maCellStyles[Index] );
331 }
332 
333 
334 // XNameReplace
335 
336 
337 void SAL_CALL TableDesignStyle::replaceByName( const OUString& rName, const Any& aElement )
338 {
339  const CellStyleNameMap& rMap = getCellStyleNameMap();
340  CellStyleNameMap::const_iterator iter = rMap.find( rName );
341  if( iter == rMap.end() )
342  throw NoSuchElementException();
343 
344 
345  Reference< XStyle > xNewStyle;
346  if( !(aElement >>= xNewStyle) )
347  throw IllegalArgumentException();
348 
349  const sal_Int32 nIndex = (*iter).second;
350 
351  std::unique_lock aGuard( m_aMutex );
352 
353  Reference< XStyle > xOldStyle( maCellStyles[nIndex] );
354 
355  if( xNewStyle == xOldStyle )
356  return;
357 
358  Reference< XModifyListener > xListener( this );
359 
360  // end listening to old style, if possible
361  Reference< XModifyBroadcaster > xOldBroadcaster( xOldStyle, UNO_QUERY );
362  if( xOldBroadcaster.is() )
363  xOldBroadcaster->removeModifyListener( xListener );
364 
365  // start listening to new style, if possible
366  Reference< XModifyBroadcaster > xNewBroadcaster( xNewStyle, UNO_QUERY );
367  if( xNewBroadcaster.is() )
368  xNewBroadcaster->addModifyListener( xListener );
369 
370  maCellStyles[nIndex] = xNewStyle;
371 }
372 
373 
374 // XComponent
375 
376 
377 void TableDesignStyle::disposing(std::unique_lock<std::mutex>&)
378 {
379  for(Reference<XStyle> & rCellStyle : maCellStyles)
380  rCellStyle.clear();
381 }
382 
383 
384 // XModifyBroadcaster
385 
386 
387 void SAL_CALL TableDesignStyle::addModifyListener( const Reference< XModifyListener >& xListener )
388 {
389  std::unique_lock aGuard( m_aMutex );
390  if (m_bDisposed)
391  {
392  aGuard.unlock();
393  EventObject aEvt( static_cast< OWeakObject * >( this ) );
394  xListener->disposing( aEvt );
395  }
396  else
397  {
398  maModifyListeners.addInterface( aGuard, xListener );
399  }
400 }
401 
402 
403 void SAL_CALL TableDesignStyle::removeModifyListener( const Reference< XModifyListener >& xListener )
404 {
405  std::unique_lock aGuard( m_aMutex );
406  maModifyListeners.removeInterface( aGuard, xListener );
407 }
408 
409 
410 void TableDesignStyle::notifyModifyListener()
411 {
412  std::unique_lock aGuard( m_aMutex );
413 
414  if( maModifyListeners.getLength(aGuard) )
415  {
416  EventObject aEvt( static_cast< OWeakObject * >( this ) );
417  maModifyListeners.forEach(aGuard,
418  [&] (Reference<XModifyListener> const& xListener)
419  { return xListener->modified(aEvt); });
420  }
421 }
422 
423 
424 // XModifyListener
425 
426 
427 // if we get a modify hint from a style, notify all registered XModifyListener
428 void SAL_CALL TableDesignStyle::modified( const css::lang::EventObject& )
429 {
430  notifyModifyListener();
431 }
432 
433 
434 void SAL_CALL TableDesignStyle::disposing( const css::lang::EventObject& )
435 {
436 }
437 
438 
439 // TableStyle
440 
441 
442 // XServiceInfo
443 OUString SAL_CALL TableDesignFamily::getImplementationName()
444 {
445  return "TableDesignFamily";
446 }
447 
448 sal_Bool SAL_CALL TableDesignFamily::supportsService( const OUString& ServiceName )
449 {
450  return cppu::supportsService( this, ServiceName );
451 }
452 
453 Sequence< OUString > SAL_CALL TableDesignFamily::getSupportedServiceNames()
454 {
455  return { "com.sun.star.style.StyleFamily" };
456 }
457 
458 // XNamed
459 OUString SAL_CALL TableDesignFamily::getName()
460 {
461  return "table";
462 }
463 
464 void SAL_CALL TableDesignFamily::setName( const OUString& )
465 {
466 }
467 
468 // XNameAccess
469 Any SAL_CALL TableDesignFamily::getByName( const OUString& rName )
470 {
471  SolarMutexGuard aGuard;
472 
473  auto iter = std::find_if(maDesigns.begin(), maDesigns.end(),
474  [&rName](const Reference<XStyle>& rpStyle) { return rpStyle->getName() == rName; });
475  if (iter != maDesigns.end())
476  return Any( (*iter) );
477 
478  throw NoSuchElementException();
479 }
480 
481 
482 Sequence< OUString > SAL_CALL TableDesignFamily::getElementNames()
483 {
484  SolarMutexGuard aGuard;
485 
486  Sequence< OUString > aRet( maDesigns.size() );
487  OUString* pNames = aRet.getArray();
488 
489  for( const auto& rpStyle : maDesigns )
490  *pNames++ = rpStyle->getName();
491 
492  return aRet;
493 }
494 
495 
496 sal_Bool SAL_CALL TableDesignFamily::hasByName( const OUString& aName )
497 {
498  SolarMutexGuard aGuard;
499 
500  return std::any_of(maDesigns.begin(), maDesigns.end(),
501  [&aName](const Reference<XStyle>& rpStyle) { return rpStyle->getName() == aName; });
502 }
503 
504 
505 // XElementAccess
506 
507 
508 Type SAL_CALL TableDesignFamily::getElementType()
509 {
511 }
512 
513 
514 sal_Bool SAL_CALL TableDesignFamily::hasElements()
515 {
516  SolarMutexGuard aGuard;
517 
518  return !maDesigns.empty();
519 }
520 
521 
522 // XIndexAccess
523 
524 
525 sal_Int32 SAL_CALL TableDesignFamily::getCount()
526 {
527  SolarMutexGuard aGuard;
528 
529  return sal::static_int_cast< sal_Int32 >( maDesigns.size() );
530 }
531 
532 
533 Any SAL_CALL TableDesignFamily::getByIndex( sal_Int32 Index )
534 {
535  SolarMutexGuard aGuard;
536 
537  if( (Index >= 0) && (Index < sal::static_int_cast< sal_Int32 >( maDesigns.size() ) ) )
538  return Any( maDesigns[Index] );
539 
540  throw IndexOutOfBoundsException();
541 }
542 
543 
544 // XNameContainer
545 
546 
547 void SAL_CALL TableDesignFamily::insertByName( const OUString& rName, const Any& rElement )
548 {
549  SolarMutexGuard aGuard;
550 
551  Reference< XStyle > xStyle( rElement, UNO_QUERY );
552  if( !xStyle.is() )
553  throw IllegalArgumentException();
554 
555  xStyle->setName( rName );
556  if (std::any_of(maDesigns.begin(), maDesigns.end(),
557  [&rName](const Reference<XStyle>& rpStyle) { return rpStyle->getName() == rName; }))
558  throw ElementExistException();
559 
560  maDesigns.push_back( xStyle );
561 }
562 
563 
564 void SAL_CALL TableDesignFamily::removeByName( const OUString& rName )
565 {
566  SolarMutexGuard aGuard;
567 
568  auto iter = std::find_if(maDesigns.begin(), maDesigns.end(),
569  [&rName](const Reference<XStyle>& rpStyle) { return rpStyle->getName() == rName; });
570  if (iter != maDesigns.end())
571  {
572  maDesigns.erase( iter );
573  return;
574  }
575 
576  throw NoSuchElementException();
577 }
578 
579 
580 // XNameReplace
581 
582 
583 void SAL_CALL TableDesignFamily::replaceByName( const OUString& rName, const Any& aElement )
584 {
585  SolarMutexGuard aGuard;
586 
587  Reference< XStyle > xStyle( aElement, UNO_QUERY );
588  if( !xStyle.is() )
589  throw IllegalArgumentException();
590 
591  auto iter = std::find_if(maDesigns.begin(), maDesigns.end(),
592  [&rName](const Reference<XStyle>& rpStyle) { return rpStyle->getName() == rName; });
593  if (iter != maDesigns.end())
594  {
595  (*iter) = xStyle;
596  xStyle->setName( rName );
597  return;
598  }
599 
600  throw NoSuchElementException();
601 }
602 
603 
604 // XSingleServiceFactory
605 
606 
607 Reference< XInterface > SAL_CALL TableDesignFamily::createInstance()
608 {
609  return Reference< XInterface >( static_cast< XStyle* >( new TableDesignStyle ) );
610 }
611 
612 
613 Reference< XInterface > SAL_CALL TableDesignFamily::createInstanceWithArguments( const Sequence< Any >& )
614 {
615  return createInstance();
616 }
617 
618 
619 // XComponent
620 
621 
622 void SAL_CALL TableDesignFamily::dispose( )
623 {
624  TableDesignStyleVector aDesigns;
625  aDesigns.swap( maDesigns );
626 
627  for( const auto& rStyle : aDesigns )
628  {
629  Reference< XComponent > xComp( rStyle, UNO_QUERY );
630  if( xComp.is() )
631  xComp->dispose();
632  }
633 }
634 
635 
636 void SAL_CALL TableDesignFamily::addEventListener( const Reference< XEventListener >& )
637 {
638 }
639 
640 
641 void SAL_CALL TableDesignFamily::removeEventListener( const Reference< XEventListener >& )
642 {
643 }
644 
645 
646 // XPropertySet
647 
648 
649 Reference<XPropertySetInfo> TableDesignFamily::getPropertySetInfo()
650 {
651  OSL_FAIL( "###unexpected!" );
652  return Reference<XPropertySetInfo>();
653 }
654 
655 
656 void TableDesignFamily::setPropertyValue( const OUString& , const Any& )
657 {
658  OSL_FAIL( "###unexpected!" );
659 }
660 
661 
662 Any TableDesignFamily::getPropertyValue( const OUString& PropertyName )
663 {
664  if ( PropertyName != "DisplayName" )
665  {
666  throw UnknownPropertyException( "unknown property: " + PropertyName, static_cast<OWeakObject *>(this) );
667  }
668 
669  OUString sDisplayName( SvxResId( RID_SVXSTR_STYLEFAMILY_TABLEDESIGN ) );
670  return Any( sDisplayName );
671 }
672 
673 
674 void TableDesignFamily::addPropertyChangeListener( const OUString& , const Reference<XPropertyChangeListener>& )
675 {
676  OSL_FAIL( "###unexpected!" );
677 }
678 
679 
680 void TableDesignFamily::removePropertyChangeListener( const OUString& , const Reference<XPropertyChangeListener>& )
681 {
682  OSL_FAIL( "###unexpected!" );
683 }
684 
685 
686 void TableDesignFamily::addVetoableChangeListener( const OUString& , const Reference<XVetoableChangeListener>& )
687 {
688  OSL_FAIL( "###unexpected!" );
689 }
690 
691 
692 void TableDesignFamily::removeVetoableChangeListener( const OUString& , const Reference<XVetoableChangeListener>& )
693 {
694  OSL_FAIL( "###unexpected!" );
695 }
696 
697 
699 {
700  return new TableDesignFamily;
701 }
702 
703 }
704 
705 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Type
sal_Int32 nIndex
std::vector< Reference< XStyle > > TableDesignStyleVector
Reference< XNameAccess > CreateTableDesignFamily()
std::map< OUString, sal_Int32 > CellStyleNameMap
Definition: tabledesign.cxx:59
OUString msName
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
const sal_Int32 first_column_style
Definition: tabledesign.hxx:31
Reference< XStyle > maCellStyles[style_count]
OUString Name
const sal_Int32 last_column_style
Definition: tabledesign.hxx:32
HashMap_OWString_Interface aMap
Sequence< PropertyValue > aArguments
bool getPropertyValue(ValueType &rValue, css::uno::Reference< css::beans::XPropertySet > const &xPropSet, OUString const &propName)
OUString SvxResId(TranslateId aId)
Definition: dialmgr.cxx:24
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
const sal_Int32 style_count
Definition: tabledesign.hxx:39
const sal_Int32 first_row_style
Definition: tabledesign.hxx:29
const sal_Int32 background_style
Definition: tabledesign.hxx:38
const sal_Int32 even_columns_style
Definition: tabledesign.hxx:35
HRESULT createInstance(REFIID iid, Ifc **ppIfc)
unsigned char sal_Bool
css::uno::Type const & get()
bool setPropertyValue(uno::Sequence< beans::PropertyValue > &aProp, const OUString &aName, const uno::Any &aValue)
TableDesignStyleVector maDesigns
const sal_Int32 odd_columns_style
Definition: tabledesign.hxx:36
const sal_Int32 body_style
Definition: tabledesign.hxx:37
const sal_Int32 even_rows_style
Definition: tabledesign.hxx:33
OUString aName
::comphelper::WeakComponentImplHelper< XStyle, XNameReplace, XServiceInfo, XIndexAccess, XModifyBroadcaster, XModifyListener > TableDesignStyleBase
Definition: tabledesign.cxx:61
void dispose()
comphelper::OInterfaceContainerHelper4< XModifyListener > maModifyListeners
struct _ADOIndex Index
AnyEventRef aEvent
const sal_Int32 last_row_style
Definition: tabledesign.hxx:30
css::uno::Sequence< typename M::key_type > mapKeysToSequence(M const &map)
OUString sDisplayName
const sal_Int32 odd_rows_style
Definition: tabledesign.hxx:34