xref: /aoo4110/main/svx/source/table/tabledesign.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyle.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XSingleServiceFactory.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexAccess.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifyBroadcaster.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifyListener.hpp>
36*b1cdbd2cSJim Jagielski #include <comphelper/serviceinfohelper.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
39*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski #include <cppuhelper/basemutex.hxx>
43*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase6.hxx>
44*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase7.hxx>
45*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.h>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #include "svx/unoprov.hxx"
48*b1cdbd2cSJim Jagielski #include "svx/sdr/table/tabledesign.hxx"
49*b1cdbd2cSJim Jagielski #include "svx/dialmgr.hxx"
50*b1cdbd2cSJim Jagielski #include "svx/dialogs.hrc"
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski #include "celltypes.hxx"
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski #include <vector>
55*b1cdbd2cSJim Jagielski #include <map>
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski #include <boost/bind.hpp>
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
62*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
64*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
65*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski using ::rtl::OUString;
69*b1cdbd2cSJim Jagielski using ::vos::OGuard;
70*b1cdbd2cSJim Jagielski using ::osl::MutexGuard;
71*b1cdbd2cSJim Jagielski using ::osl::ClearableMutexGuard;
72*b1cdbd2cSJim Jagielski using ::cppu::OInterfaceContainerHelper;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski namespace sdr { namespace table {
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski typedef std::map< OUString, sal_Int32 > CellStyleNameMap;
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski typedef ::cppu::WeakComponentImplHelper6< XStyle, XNameReplace, XServiceInfo, XIndexAccess, XModifyBroadcaster, XModifyListener > TableDesignStyleBase;
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski class TableDesignStyle : private ::cppu::BaseMutex, public TableDesignStyleBase
81*b1cdbd2cSJim Jagielski {
82*b1cdbd2cSJim Jagielski public:
83*b1cdbd2cSJim Jagielski 	TableDesignStyle();
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	// XServiceInfo
86*b1cdbd2cSJim Jagielski     virtual OUString SAL_CALL getImplementationName() throw(RuntimeException);
87*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
88*b1cdbd2cSJim Jagielski     virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(RuntimeException);
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 	// XStyle
91*b1cdbd2cSJim Jagielski     virtual ::sal_Bool SAL_CALL isUserDefined() throw (RuntimeException);
92*b1cdbd2cSJim Jagielski     virtual ::sal_Bool SAL_CALL isInUse() throw (RuntimeException);
93*b1cdbd2cSJim Jagielski     virtual OUString SAL_CALL getParentStyle() throw (RuntimeException);
94*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setParentStyle( const OUString& aParentStyle ) throw (NoSuchElementException, RuntimeException);
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski 	// XNamed
97*b1cdbd2cSJim Jagielski     virtual OUString SAL_CALL getName() throw (RuntimeException);
98*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setName( const OUString& aName ) throw (RuntimeException);
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 	// XNameAccess
101*b1cdbd2cSJim Jagielski     virtual Any SAL_CALL getByName( const OUString& aName ) throw(NoSuchElementException, WrappedTargetException, RuntimeException);
102*b1cdbd2cSJim Jagielski     virtual Sequence< OUString > SAL_CALL getElementNames() throw(RuntimeException);
103*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) throw(RuntimeException);
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 	// XElementAccess
106*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(RuntimeException);
107*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL hasElements() throw(RuntimeException);
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 	// XIndexAccess
110*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL getCount() throw(RuntimeException) ;
111*b1cdbd2cSJim Jagielski     virtual Any SAL_CALL getByIndex( sal_Int32 Index ) throw(IndexOutOfBoundsException, WrappedTargetException, RuntimeException);
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 	// XNameReplace
114*b1cdbd2cSJim Jagielski     virtual void SAL_CALL replaceByName( const OUString& aName, const Any& aElement ) throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException);
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     // XModifyBroadcaster
117*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addModifyListener( const Reference< XModifyListener >& aListener ) throw (RuntimeException);
118*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeModifyListener( const Reference< XModifyListener >& aListener ) throw (RuntimeException);
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski     // XModifyListener
121*b1cdbd2cSJim Jagielski     virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
122*b1cdbd2cSJim Jagielski     virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	void notifyModifyListener();
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 	// this function is called upon disposing the component
127*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL disposing();
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 	static const CellStyleNameMap& getCellStyleNameMap();
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	OUString msName;
132*b1cdbd2cSJim Jagielski 	Reference< XStyle > maCellStyles[style_count];
133*b1cdbd2cSJim Jagielski };
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski typedef std::vector< Reference< XStyle > > TableDesignStyleVector;
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski class TableDesignFamily : public ::cppu::WeakImplHelper7< XNameContainer, XNamed, XIndexAccess, XSingleServiceFactory,  XServiceInfo, XComponent, XPropertySet >
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski public:
140*b1cdbd2cSJim Jagielski 	// XServiceInfo
141*b1cdbd2cSJim Jagielski     virtual OUString SAL_CALL getImplementationName() throw(RuntimeException);
142*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
143*b1cdbd2cSJim Jagielski     virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(RuntimeException);
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 	// XNamed
146*b1cdbd2cSJim Jagielski     virtual OUString SAL_CALL getName(  ) throw (RuntimeException);
147*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setName( const OUString& aName ) throw (RuntimeException);
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 	// XNameAccess
150*b1cdbd2cSJim Jagielski     virtual Any SAL_CALL getByName( const OUString& aName ) throw(NoSuchElementException, WrappedTargetException, RuntimeException);
151*b1cdbd2cSJim Jagielski     virtual Sequence< OUString > SAL_CALL getElementNames() throw(RuntimeException);
152*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) throw(RuntimeException);
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 	// XElementAccess
155*b1cdbd2cSJim Jagielski     virtual Type SAL_CALL getElementType() throw(RuntimeException);
156*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL hasElements() throw(RuntimeException);
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski 	// XIndexAccess
159*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL getCount() throw(RuntimeException) ;
160*b1cdbd2cSJim Jagielski     virtual Any SAL_CALL getByIndex( sal_Int32 Index ) throw(IndexOutOfBoundsException, WrappedTargetException, RuntimeException);
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	// XNameContainer
163*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL insertByName( const OUString& aName, const Any& aElement ) throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException);
164*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL removeByName( const OUString& Name ) throw(NoSuchElementException, WrappedTargetException, RuntimeException);
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	// XNameReplace
167*b1cdbd2cSJim Jagielski     virtual void SAL_CALL replaceByName( const OUString& aName, const Any& aElement ) throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException);
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 	// XSingleServiceFactory
170*b1cdbd2cSJim Jagielski     virtual Reference< XInterface > SAL_CALL createInstance(  ) throw(Exception, RuntimeException);
171*b1cdbd2cSJim Jagielski     virtual Reference< XInterface > SAL_CALL createInstanceWithArguments( const Sequence< Any >& aArguments ) throw(Exception, RuntimeException);
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 	// XComponent
174*b1cdbd2cSJim Jagielski     virtual void SAL_CALL dispose(  ) throw (RuntimeException);
175*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
176*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski     // XPropertySet
179*b1cdbd2cSJim Jagielski 	virtual Reference<XPropertySetInfo> SAL_CALL getPropertySetInfo() throw (RuntimeException);
180*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException);
181*b1cdbd2cSJim Jagielski 	virtual Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException);
182*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const Reference<XPropertyChangeListener>& xListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException);
183*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const Reference<XPropertyChangeListener>& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException);
184*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addVetoableChangeListener(const OUString& PropertyName, const Reference<XVetoableChangeListener>& aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException);
185*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeVetoableChangeListener(const OUString& PropertyName,const Reference<XVetoableChangeListener>&aListener ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException);
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 	TableDesignStyleVector	maDesigns;
188*b1cdbd2cSJim Jagielski };
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
191*b1cdbd2cSJim Jagielski // TableDesignStyle
192*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
193*b1cdbd2cSJim Jagielski 
TableDesignStyle()194*b1cdbd2cSJim Jagielski TableDesignStyle::TableDesignStyle()
195*b1cdbd2cSJim Jagielski : TableDesignStyleBase(m_aMutex)
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
getCellStyleNameMap()199*b1cdbd2cSJim Jagielski const CellStyleNameMap& TableDesignStyle::getCellStyleNameMap()
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski 	static CellStyleNameMap aMap;
202*b1cdbd2cSJim Jagielski 	if( aMap.empty() )
203*b1cdbd2cSJim Jagielski 	{
204*b1cdbd2cSJim Jagielski 		CellStyleNameMap aNewMap;
205*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "first-row" ) ) ] = first_row_style;
206*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "last-row" ) ) ] = last_row_style;
207*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "first-column" ) ) ] = first_column_style;
208*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "last-column" ) ) ] = last_column_style;
209*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "body" ) ) ] = body_style;
210*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "even-rows" ) ) ] = even_rows_style;
211*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "odd-rows" ) ) ] = odd_rows_style;
212*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "even-columns" ) ) ] = even_columns_style;
213*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "odd-columns" ) ) ] = odd_columns_style;
214*b1cdbd2cSJim Jagielski 		aNewMap[ OUString( RTL_CONSTASCII_USTRINGPARAM( "background" ) ) ] = background_style;
215*b1cdbd2cSJim Jagielski 		aMap.swap( aNewMap );
216*b1cdbd2cSJim Jagielski 	}
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 	return aMap;
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
222*b1cdbd2cSJim Jagielski // XServiceInfo
223*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
224*b1cdbd2cSJim Jagielski 
getImplementationName()225*b1cdbd2cSJim Jagielski OUString SAL_CALL TableDesignStyle::getImplementationName() throw(RuntimeException)
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski 	return OUString( RTL_CONSTASCII_USTRINGPARAM("TableDesignStyle") );
228*b1cdbd2cSJim Jagielski }
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
231*b1cdbd2cSJim Jagielski 
supportsService(const OUString & ServiceName)232*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignStyle::supportsService( const OUString& ServiceName ) throw(RuntimeException)
233*b1cdbd2cSJim Jagielski {
234*b1cdbd2cSJim Jagielski 	return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() );
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
238*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()239*b1cdbd2cSJim Jagielski Sequence< OUString > SAL_CALL TableDesignStyle::getSupportedServiceNames() throw(RuntimeException)
240*b1cdbd2cSJim Jagielski {
241*b1cdbd2cSJim Jagielski 	OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.Style") );
242*b1cdbd2cSJim Jagielski 	Sequence< OUString > aSeq( &aServiceName, 1 );
243*b1cdbd2cSJim Jagielski 	return aSeq;
244*b1cdbd2cSJim Jagielski }
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
247*b1cdbd2cSJim Jagielski // XStyle
248*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
249*b1cdbd2cSJim Jagielski 
isUserDefined()250*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignStyle::isUserDefined() throw (RuntimeException)
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski 	return sal_False;
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
256*b1cdbd2cSJim Jagielski 
isInUse()257*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignStyle::isInUse() throw (RuntimeException)
258*b1cdbd2cSJim Jagielski {
259*b1cdbd2cSJim Jagielski 	ClearableMutexGuard aGuard( rBHelper.rMutex );
260*b1cdbd2cSJim Jagielski 	OInterfaceContainerHelper * pContainer = rBHelper.getContainer( XModifyListener::static_type() );
261*b1cdbd2cSJim Jagielski 	if( pContainer )
262*b1cdbd2cSJim Jagielski 	{
263*b1cdbd2cSJim Jagielski 		Sequence< Reference< XInterface > > aListener( pContainer->getElements() );
264*b1cdbd2cSJim Jagielski 		aGuard.clear();
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 		sal_Int32 nIndex = aListener.getLength();
267*b1cdbd2cSJim Jagielski 		while( --nIndex >= 0 )
268*b1cdbd2cSJim Jagielski 		{
269*b1cdbd2cSJim Jagielski 			TableDesignUser* pUser = dynamic_cast< TableDesignUser* >( aListener[nIndex].get() );
270*b1cdbd2cSJim Jagielski 			if( pUser && pUser->isInUse() )
271*b1cdbd2cSJim Jagielski 				return sal_True;
272*b1cdbd2cSJim Jagielski 		}
273*b1cdbd2cSJim Jagielski 	}
274*b1cdbd2cSJim Jagielski 	return sal_False;
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
278*b1cdbd2cSJim Jagielski 
getParentStyle()279*b1cdbd2cSJim Jagielski OUString SAL_CALL TableDesignStyle::getParentStyle() throw (RuntimeException)
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski 	return OUString();
282*b1cdbd2cSJim Jagielski }
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
285*b1cdbd2cSJim Jagielski 
setParentStyle(const OUString &)286*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::setParentStyle( const OUString& ) throw (NoSuchElementException, RuntimeException)
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
291*b1cdbd2cSJim Jagielski // XNamed
292*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
293*b1cdbd2cSJim Jagielski 
getName()294*b1cdbd2cSJim Jagielski OUString SAL_CALL TableDesignStyle::getName() throw (RuntimeException)
295*b1cdbd2cSJim Jagielski {
296*b1cdbd2cSJim Jagielski 	return msName;
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
300*b1cdbd2cSJim Jagielski 
setName(const OUString & rName)301*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::setName( const OUString& rName ) throw (RuntimeException)
302*b1cdbd2cSJim Jagielski {
303*b1cdbd2cSJim Jagielski 	msName = rName;
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
307*b1cdbd2cSJim Jagielski // XNameAccess
308*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
309*b1cdbd2cSJim Jagielski 
getByName(const OUString & rName)310*b1cdbd2cSJim Jagielski Any SAL_CALL TableDesignStyle::getByName( const OUString& rName ) throw(NoSuchElementException, WrappedTargetException, RuntimeException)
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 	const CellStyleNameMap& rMap = getCellStyleNameMap();
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski 	CellStyleNameMap::const_iterator iter = rMap.find( rName );
317*b1cdbd2cSJim Jagielski 	if( iter == rMap.end() )
318*b1cdbd2cSJim Jagielski 		throw NoSuchElementException();
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 	return Any( maCellStyles[(*iter).second] );
321*b1cdbd2cSJim Jagielski }
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
324*b1cdbd2cSJim Jagielski 
getElementNames()325*b1cdbd2cSJim Jagielski Sequence< OUString > SAL_CALL TableDesignStyle::getElementNames() throw(RuntimeException)
326*b1cdbd2cSJim Jagielski {
327*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski 	const CellStyleNameMap& rMap = getCellStyleNameMap();
330*b1cdbd2cSJim Jagielski 	Sequence< OUString > aRet( rMap.size() );
331*b1cdbd2cSJim Jagielski 	OUString* pName = aRet.getArray();
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 	CellStyleNameMap::const_iterator iter = rMap.begin();
334*b1cdbd2cSJim Jagielski 	while( iter != rMap.end() )
335*b1cdbd2cSJim Jagielski 		*pName++ = (*iter++).first;
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski 	return aRet;
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
341*b1cdbd2cSJim Jagielski 
hasByName(const OUString & rName)342*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignStyle::hasByName( const OUString& rName )	throw(RuntimeException)
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski 	const CellStyleNameMap& rMap = getCellStyleNameMap();
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 	CellStyleNameMap::const_iterator iter = rMap.find( rName );
349*b1cdbd2cSJim Jagielski 	return ( iter != rMap.end() ) ? sal_True : sal_False;
350*b1cdbd2cSJim Jagielski }
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
353*b1cdbd2cSJim Jagielski // XElementAccess
354*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
355*b1cdbd2cSJim Jagielski 
getElementType()356*b1cdbd2cSJim Jagielski Type SAL_CALL TableDesignStyle::getElementType() throw(RuntimeException)
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski 	return XStyle::static_type();
359*b1cdbd2cSJim Jagielski }
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
362*b1cdbd2cSJim Jagielski 
hasElements()363*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignStyle::hasElements() throw(RuntimeException)
364*b1cdbd2cSJim Jagielski {
365*b1cdbd2cSJim Jagielski 	return sal_True;
366*b1cdbd2cSJim Jagielski }
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
369*b1cdbd2cSJim Jagielski // XIndexAccess
370*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
371*b1cdbd2cSJim Jagielski 
getCount()372*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL TableDesignStyle::getCount() throw(RuntimeException)
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski 	return style_count;
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
378*b1cdbd2cSJim Jagielski 
getByIndex(sal_Int32 Index)379*b1cdbd2cSJim Jagielski Any SAL_CALL TableDesignStyle::getByIndex( sal_Int32 Index ) throw(IndexOutOfBoundsException, WrappedTargetException, RuntimeException)
380*b1cdbd2cSJim Jagielski {
381*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 	if( (Index < 0) || (Index >= style_count) )
384*b1cdbd2cSJim Jagielski 		throw IndexOutOfBoundsException();
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 	return Any( maCellStyles[Index] );
387*b1cdbd2cSJim Jagielski }
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
390*b1cdbd2cSJim Jagielski // XNameReplace
391*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
392*b1cdbd2cSJim Jagielski 
replaceByName(const OUString & rName,const Any & aElement)393*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::replaceByName( const OUString& rName, const Any& aElement ) throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
394*b1cdbd2cSJim Jagielski {
395*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski 	const CellStyleNameMap& rMap = getCellStyleNameMap();
398*b1cdbd2cSJim Jagielski 	CellStyleNameMap::const_iterator iter = rMap.find( rName );
399*b1cdbd2cSJim Jagielski 	if( iter == rMap.end() )
400*b1cdbd2cSJim Jagielski 		throw NoSuchElementException();
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 	Reference< XStyle > xNewStyle;
404*b1cdbd2cSJim Jagielski 	if( !(aElement >>= xNewStyle) )
405*b1cdbd2cSJim Jagielski 		throw IllegalArgumentException();
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 	const sal_Int32 nIndex = (*iter).second;
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski 	Reference< XStyle > xOldStyle( maCellStyles[nIndex] );
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski 	if( xNewStyle != xOldStyle )
412*b1cdbd2cSJim Jagielski 	{
413*b1cdbd2cSJim Jagielski 		Reference< XModifyListener > xListener( this );
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski 		// end listening to old style, if possible
416*b1cdbd2cSJim Jagielski 		Reference< XModifyBroadcaster > xOldBroadcaster( xOldStyle, UNO_QUERY );
417*b1cdbd2cSJim Jagielski 		if( xOldBroadcaster.is() )
418*b1cdbd2cSJim Jagielski 			xOldBroadcaster->removeModifyListener( xListener );
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 		// start listening to new style, if possible
421*b1cdbd2cSJim Jagielski 		Reference< XModifyBroadcaster > xNewBroadcaster( xNewStyle, UNO_QUERY );
422*b1cdbd2cSJim Jagielski 		if( xNewBroadcaster.is() )
423*b1cdbd2cSJim Jagielski 			xNewBroadcaster->addModifyListener( xListener );
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski 		maCellStyles[nIndex] = xNewStyle;
426*b1cdbd2cSJim Jagielski 	}
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
430*b1cdbd2cSJim Jagielski // XComponent
431*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
432*b1cdbd2cSJim Jagielski 
disposing()433*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::disposing()
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski 	for( sal_Int32 nIndex = 0; nIndex < style_count; nIndex++ )
436*b1cdbd2cSJim Jagielski 		maCellStyles[nIndex].clear();
437*b1cdbd2cSJim Jagielski }
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
440*b1cdbd2cSJim Jagielski // XModifyBroadcaster
441*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
442*b1cdbd2cSJim Jagielski 
addModifyListener(const Reference<XModifyListener> & xListener)443*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::addModifyListener( const Reference< XModifyListener >& xListener ) throw (RuntimeException)
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski 	ClearableMutexGuard aGuard( rBHelper.rMutex );
446*b1cdbd2cSJim Jagielski 	if (rBHelper.bDisposed || rBHelper.bInDispose)
447*b1cdbd2cSJim Jagielski 	{
448*b1cdbd2cSJim Jagielski 		aGuard.clear();
449*b1cdbd2cSJim Jagielski 		EventObject aEvt( static_cast< OWeakObject * >( this ) );
450*b1cdbd2cSJim Jagielski 		xListener->disposing( aEvt );
451*b1cdbd2cSJim Jagielski 	}
452*b1cdbd2cSJim Jagielski 	else
453*b1cdbd2cSJim Jagielski 	{
454*b1cdbd2cSJim Jagielski 		rBHelper.addListener( XModifyListener::static_type(), xListener );
455*b1cdbd2cSJim Jagielski 	}
456*b1cdbd2cSJim Jagielski }
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
459*b1cdbd2cSJim Jagielski 
removeModifyListener(const Reference<XModifyListener> & xListener)460*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::removeModifyListener( const Reference< XModifyListener >& xListener ) throw (RuntimeException)
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski 	rBHelper.removeListener( XModifyListener::static_type(), xListener );
463*b1cdbd2cSJim Jagielski }
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
466*b1cdbd2cSJim Jagielski 
notifyModifyListener()467*b1cdbd2cSJim Jagielski void TableDesignStyle::notifyModifyListener()
468*b1cdbd2cSJim Jagielski {
469*b1cdbd2cSJim Jagielski 	MutexGuard aGuard( rBHelper.rMutex );
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski 	OInterfaceContainerHelper * pContainer = rBHelper.getContainer( XModifyListener::static_type() );
472*b1cdbd2cSJim Jagielski 	if( pContainer )
473*b1cdbd2cSJim Jagielski 	{
474*b1cdbd2cSJim Jagielski 		EventObject aEvt( static_cast< OWeakObject * >( this ) );
475*b1cdbd2cSJim Jagielski 		pContainer->forEach<XModifyListener>( boost::bind( &XModifyListener::modified, _1, boost::cref( aEvt ) ) );
476*b1cdbd2cSJim Jagielski 	}
477*b1cdbd2cSJim Jagielski }
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
480*b1cdbd2cSJim Jagielski // XModifyListener
481*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski // if we get a modify hint from a style, notify all registered XModifyListener
modified(const::com::sun::star::lang::EventObject &)484*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::modified( const ::com::sun::star::lang::EventObject& ) throw (::com::sun::star::uno::RuntimeException)
485*b1cdbd2cSJim Jagielski {
486*b1cdbd2cSJim Jagielski 	notifyModifyListener();
487*b1cdbd2cSJim Jagielski }
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
490*b1cdbd2cSJim Jagielski 
disposing(const::com::sun::star::lang::EventObject &)491*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignStyle::disposing( const ::com::sun::star::lang::EventObject& ) throw (::com::sun::star::uno::RuntimeException)
492*b1cdbd2cSJim Jagielski {
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
496*b1cdbd2cSJim Jagielski // TableStyle
497*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
500*b1cdbd2cSJim Jagielski // XServiceInfo
501*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
502*b1cdbd2cSJim Jagielski 
getImplementationName()503*b1cdbd2cSJim Jagielski OUString SAL_CALL TableDesignFamily::getImplementationName() throw(RuntimeException)
504*b1cdbd2cSJim Jagielski {
505*b1cdbd2cSJim Jagielski 	return OUString( RTL_CONSTASCII_USTRINGPARAM("TableDesignFamily") );
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
509*b1cdbd2cSJim Jagielski 
supportsService(const OUString & ServiceName)510*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignFamily::supportsService( const OUString& ServiceName ) throw(RuntimeException)
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski 	return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() );
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
516*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()517*b1cdbd2cSJim Jagielski Sequence< OUString > SAL_CALL TableDesignFamily::getSupportedServiceNames() throw(RuntimeException)
518*b1cdbd2cSJim Jagielski {
519*b1cdbd2cSJim Jagielski 	OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.StyleFamily") );
520*b1cdbd2cSJim Jagielski 	Sequence< OUString > aSeq( &aServiceName, 1 );
521*b1cdbd2cSJim Jagielski 	return aSeq;
522*b1cdbd2cSJim Jagielski }
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
525*b1cdbd2cSJim Jagielski // XNamed
526*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
527*b1cdbd2cSJim Jagielski 
getName()528*b1cdbd2cSJim Jagielski OUString SAL_CALL TableDesignFamily::getName() throw (RuntimeException)
529*b1cdbd2cSJim Jagielski {
530*b1cdbd2cSJim Jagielski 	return OUString( RTL_CONSTASCII_USTRINGPARAM( "table" ) );
531*b1cdbd2cSJim Jagielski }
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
534*b1cdbd2cSJim Jagielski 
setName(const OUString &)535*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::setName( const OUString& ) throw (RuntimeException)
536*b1cdbd2cSJim Jagielski {
537*b1cdbd2cSJim Jagielski }
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
540*b1cdbd2cSJim Jagielski // XNameAccess
541*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
542*b1cdbd2cSJim Jagielski 
getByName(const OUString & rName)543*b1cdbd2cSJim Jagielski Any SAL_CALL TableDesignFamily::getByName( const OUString& rName ) throw(NoSuchElementException, WrappedTargetException, RuntimeException)
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( maDesigns.begin() ); iter != maDesigns.end(); iter++ )
548*b1cdbd2cSJim Jagielski 	{
549*b1cdbd2cSJim Jagielski 		if( (*iter)->getName() == rName )
550*b1cdbd2cSJim Jagielski 			return Any( (*iter) );
551*b1cdbd2cSJim Jagielski 	}
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski 	throw NoSuchElementException();
554*b1cdbd2cSJim Jagielski }
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
557*b1cdbd2cSJim Jagielski 
getElementNames()558*b1cdbd2cSJim Jagielski Sequence< OUString > SAL_CALL TableDesignFamily::getElementNames() throw(RuntimeException)
559*b1cdbd2cSJim Jagielski {
560*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski 	Sequence< OUString > aRet( maDesigns.size() );
563*b1cdbd2cSJim Jagielski 	OUString* pNames = aRet.getArray();
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( maDesigns.begin() ); iter != maDesigns.end(); iter++ )
566*b1cdbd2cSJim Jagielski 		*pNames++ = (*iter)->getName();
567*b1cdbd2cSJim Jagielski 
568*b1cdbd2cSJim Jagielski 	return aRet;
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski 
571*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
572*b1cdbd2cSJim Jagielski 
hasByName(const OUString & aName)573*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignFamily::hasByName( const OUString& aName )	throw(RuntimeException)
574*b1cdbd2cSJim Jagielski {
575*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( maDesigns.begin() ); iter != maDesigns.end(); iter++ )
578*b1cdbd2cSJim Jagielski 		if( (*iter)->getName() == aName )
579*b1cdbd2cSJim Jagielski 			return sal_True;
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski 	return sal_False;
582*b1cdbd2cSJim Jagielski }
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
585*b1cdbd2cSJim Jagielski // XElementAccess
586*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
587*b1cdbd2cSJim Jagielski 
getElementType()588*b1cdbd2cSJim Jagielski Type SAL_CALL TableDesignFamily::getElementType() throw(RuntimeException)
589*b1cdbd2cSJim Jagielski {
590*b1cdbd2cSJim Jagielski 	return XStyle::static_type();
591*b1cdbd2cSJim Jagielski }
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
594*b1cdbd2cSJim Jagielski 
hasElements()595*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TableDesignFamily::hasElements() throw(RuntimeException)
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 	return maDesigns.empty() ? sal_False : sal_True;
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski 
602*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
603*b1cdbd2cSJim Jagielski // XIndexAccess
604*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
605*b1cdbd2cSJim Jagielski 
getCount()606*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL TableDesignFamily::getCount() throw(RuntimeException)
607*b1cdbd2cSJim Jagielski {
608*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
609*b1cdbd2cSJim Jagielski 
610*b1cdbd2cSJim Jagielski 	return sal::static_int_cast< sal_Int32 >( maDesigns.size() );
611*b1cdbd2cSJim Jagielski }
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
614*b1cdbd2cSJim Jagielski 
getByIndex(sal_Int32 Index)615*b1cdbd2cSJim Jagielski Any SAL_CALL TableDesignFamily::getByIndex( sal_Int32 Index ) throw(IndexOutOfBoundsException, WrappedTargetException, RuntimeException)
616*b1cdbd2cSJim Jagielski {
617*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski 	if( (Index >= 0) && (Index < sal::static_int_cast< sal_Int32 >( maDesigns.size() ) ) )
620*b1cdbd2cSJim Jagielski 		return Any( maDesigns[Index] );
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski 	throw IndexOutOfBoundsException();
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
626*b1cdbd2cSJim Jagielski // XNameContainer
627*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
628*b1cdbd2cSJim Jagielski 
insertByName(const OUString & rName,const Any & rElement)629*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::insertByName( const OUString& rName, const Any& rElement ) throw(IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException)
630*b1cdbd2cSJim Jagielski {
631*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski 	Reference< XStyle > xStyle( rElement, UNO_QUERY );
634*b1cdbd2cSJim Jagielski 	if( !xStyle.is() )
635*b1cdbd2cSJim Jagielski 		throw IllegalArgumentException();
636*b1cdbd2cSJim Jagielski 
637*b1cdbd2cSJim Jagielski 	xStyle->setName( rName );
638*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( maDesigns.begin() ); iter != maDesigns.end(); iter++ )
639*b1cdbd2cSJim Jagielski 		if( (*iter)->getName() == rName )
640*b1cdbd2cSJim Jagielski 			throw ElementExistException();
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 	maDesigns.push_back( xStyle );
643*b1cdbd2cSJim Jagielski }
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
646*b1cdbd2cSJim Jagielski 
removeByName(const OUString & rName)647*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::removeByName( const OUString& rName ) throw(NoSuchElementException, WrappedTargetException, RuntimeException)
648*b1cdbd2cSJim Jagielski {
649*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
650*b1cdbd2cSJim Jagielski 
651*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( maDesigns.begin() ); iter != maDesigns.end(); iter++ )
652*b1cdbd2cSJim Jagielski 	{
653*b1cdbd2cSJim Jagielski 		if( (*iter)->getName() == rName )
654*b1cdbd2cSJim Jagielski 		{
655*b1cdbd2cSJim Jagielski 			maDesigns.erase( iter );
656*b1cdbd2cSJim Jagielski 			return;
657*b1cdbd2cSJim Jagielski 		}
658*b1cdbd2cSJim Jagielski 	}
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski 
661*b1cdbd2cSJim Jagielski 	throw NoSuchElementException();
662*b1cdbd2cSJim Jagielski }
663*b1cdbd2cSJim Jagielski 
664*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
665*b1cdbd2cSJim Jagielski // XNameReplace
666*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
667*b1cdbd2cSJim Jagielski 
replaceByName(const OUString & rName,const Any & aElement)668*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::replaceByName( const OUString& rName, const Any& aElement ) throw(IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException)
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
671*b1cdbd2cSJim Jagielski 
672*b1cdbd2cSJim Jagielski 	Reference< XStyle > xStyle( aElement, UNO_QUERY );
673*b1cdbd2cSJim Jagielski 	if( !xStyle.is() )
674*b1cdbd2cSJim Jagielski 		throw IllegalArgumentException();
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( maDesigns.begin() ); iter != maDesigns.end(); iter++ )
677*b1cdbd2cSJim Jagielski 	{
678*b1cdbd2cSJim Jagielski 		if( (*iter)->getName() == rName )
679*b1cdbd2cSJim Jagielski 		{
680*b1cdbd2cSJim Jagielski 			(*iter) = xStyle;
681*b1cdbd2cSJim Jagielski 			xStyle->setName( rName );
682*b1cdbd2cSJim Jagielski 			return;
683*b1cdbd2cSJim Jagielski 		}
684*b1cdbd2cSJim Jagielski 	}
685*b1cdbd2cSJim Jagielski 
686*b1cdbd2cSJim Jagielski 	throw NoSuchElementException();
687*b1cdbd2cSJim Jagielski }
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
690*b1cdbd2cSJim Jagielski // XSingleServiceFactory
691*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
692*b1cdbd2cSJim Jagielski 
createInstance()693*b1cdbd2cSJim Jagielski Reference< XInterface > SAL_CALL TableDesignFamily::createInstance() throw(Exception, RuntimeException)
694*b1cdbd2cSJim Jagielski {
695*b1cdbd2cSJim Jagielski 	OGuard aGuard( Application::GetSolarMutex() );
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 	return Reference< XInterface >( static_cast< XStyle* >( new TableDesignStyle ) );
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski 
700*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
701*b1cdbd2cSJim Jagielski 
createInstanceWithArguments(const Sequence<Any> &)702*b1cdbd2cSJim Jagielski Reference< XInterface > SAL_CALL TableDesignFamily::createInstanceWithArguments( const Sequence< Any >&  ) throw(Exception, RuntimeException)
703*b1cdbd2cSJim Jagielski {
704*b1cdbd2cSJim Jagielski 	return createInstance();
705*b1cdbd2cSJim Jagielski }
706*b1cdbd2cSJim Jagielski 
707*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
708*b1cdbd2cSJim Jagielski // XComponent
709*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
710*b1cdbd2cSJim Jagielski 
dispose()711*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::dispose(  ) throw (RuntimeException)
712*b1cdbd2cSJim Jagielski {
713*b1cdbd2cSJim Jagielski 	TableDesignStyleVector aDesigns;
714*b1cdbd2cSJim Jagielski 	aDesigns.swap( maDesigns );
715*b1cdbd2cSJim Jagielski 
716*b1cdbd2cSJim Jagielski 	for( TableDesignStyleVector::iterator iter( aDesigns.begin() ); iter != aDesigns.end(); iter++ )
717*b1cdbd2cSJim Jagielski 	{
718*b1cdbd2cSJim Jagielski 		Reference< XComponent > xComp( (*iter), UNO_QUERY );
719*b1cdbd2cSJim Jagielski 		if( xComp.is() )
720*b1cdbd2cSJim Jagielski 			xComp->dispose();
721*b1cdbd2cSJim Jagielski 	}
722*b1cdbd2cSJim Jagielski }
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
725*b1cdbd2cSJim Jagielski 
addEventListener(const Reference<XEventListener> &)726*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::addEventListener( const Reference< XEventListener >&  ) throw (RuntimeException)
727*b1cdbd2cSJim Jagielski {
728*b1cdbd2cSJim Jagielski }
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
731*b1cdbd2cSJim Jagielski 
removeEventListener(const Reference<XEventListener> &)732*b1cdbd2cSJim Jagielski void SAL_CALL TableDesignFamily::removeEventListener( const Reference< XEventListener >&  ) throw (RuntimeException)
733*b1cdbd2cSJim Jagielski {
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski 
736*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
737*b1cdbd2cSJim Jagielski // XPropertySet
738*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
739*b1cdbd2cSJim Jagielski 
getPropertySetInfo()740*b1cdbd2cSJim Jagielski Reference<XPropertySetInfo> TableDesignFamily::getPropertySetInfo() throw (RuntimeException)
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski     OSL_ENSURE( 0, "###unexpected!" );
743*b1cdbd2cSJim Jagielski     return Reference<XPropertySetInfo>();
744*b1cdbd2cSJim Jagielski }
745*b1cdbd2cSJim Jagielski 
746*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
747*b1cdbd2cSJim Jagielski 
setPropertyValue(const OUString &,const Any &)748*b1cdbd2cSJim Jagielski void TableDesignFamily::setPropertyValue( const OUString& , const Any&  ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException)
749*b1cdbd2cSJim Jagielski {
750*b1cdbd2cSJim Jagielski     OSL_ENSURE( 0, "###unexpected!" );
751*b1cdbd2cSJim Jagielski }
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
754*b1cdbd2cSJim Jagielski 
getPropertyValue(const OUString & PropertyName)755*b1cdbd2cSJim Jagielski Any TableDesignFamily::getPropertyValue( const OUString& PropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException)
756*b1cdbd2cSJim Jagielski {
757*b1cdbd2cSJim Jagielski     if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DisplayName") ))
758*b1cdbd2cSJim Jagielski 	{
759*b1cdbd2cSJim Jagielski         OUString sDisplayName( SVX_RESSTR( RID_SVXSTR_STYLEFAMILY_TABLEDESIGN ) );
760*b1cdbd2cSJim Jagielski 		return Any( sDisplayName );
761*b1cdbd2cSJim Jagielski     }
762*b1cdbd2cSJim Jagielski     else
763*b1cdbd2cSJim Jagielski 	{
764*b1cdbd2cSJim Jagielski         throw UnknownPropertyException( OUString( RTL_CONSTASCII_USTRINGPARAM("unknown property: ") ) + PropertyName, static_cast<OWeakObject *>(this) );
765*b1cdbd2cSJim Jagielski 	}
766*b1cdbd2cSJim Jagielski }
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
769*b1cdbd2cSJim Jagielski 
addPropertyChangeListener(const OUString &,const Reference<XPropertyChangeListener> &)770*b1cdbd2cSJim Jagielski void TableDesignFamily::addPropertyChangeListener( const OUString& , const Reference<XPropertyChangeListener>&  ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException)
771*b1cdbd2cSJim Jagielski {
772*b1cdbd2cSJim Jagielski     OSL_ENSURE( 0, "###unexpected!" );
773*b1cdbd2cSJim Jagielski }
774*b1cdbd2cSJim Jagielski 
775*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
776*b1cdbd2cSJim Jagielski 
removePropertyChangeListener(const OUString &,const Reference<XPropertyChangeListener> &)777*b1cdbd2cSJim Jagielski void TableDesignFamily::removePropertyChangeListener( const OUString& , const Reference<XPropertyChangeListener>&  ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException)
778*b1cdbd2cSJim Jagielski {
779*b1cdbd2cSJim Jagielski     OSL_ENSURE( 0, "###unexpected!" );
780*b1cdbd2cSJim Jagielski }
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
783*b1cdbd2cSJim Jagielski 
addVetoableChangeListener(const OUString &,const Reference<XVetoableChangeListener> &)784*b1cdbd2cSJim Jagielski void TableDesignFamily::addVetoableChangeListener( const OUString& , const Reference<XVetoableChangeListener>& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException)
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski     OSL_ENSURE( 0, "###unexpected!" );
787*b1cdbd2cSJim Jagielski }
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski // ----------------------------------------------------------
790*b1cdbd2cSJim Jagielski 
removeVetoableChangeListener(const OUString &,const Reference<XVetoableChangeListener> &)791*b1cdbd2cSJim Jagielski void TableDesignFamily::removeVetoableChangeListener( const OUString& , const Reference<XVetoableChangeListener>&  ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException)
792*b1cdbd2cSJim Jagielski {
793*b1cdbd2cSJim Jagielski     OSL_ENSURE( 0, "###unexpected!" );
794*b1cdbd2cSJim Jagielski }
795*b1cdbd2cSJim Jagielski 
796*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------
797*b1cdbd2cSJim Jagielski 
798*b1cdbd2cSJim Jagielski 
CreateTableDesignFamily()799*b1cdbd2cSJim Jagielski SVX_DLLPUBLIC Reference< XNameAccess > CreateTableDesignFamily()
800*b1cdbd2cSJim Jagielski {
801*b1cdbd2cSJim Jagielski 	return new TableDesignFamily();
802*b1cdbd2cSJim Jagielski }
803*b1cdbd2cSJim Jagielski 
804*b1cdbd2cSJim Jagielski } }
805