xref: /trunk/main/sc/inc/styleuno.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_STYLEUNO_HXX
25 #define SC_STYLEUNO_HXX
26 
27 #include <svl/itemprop.hxx>
28 #include <svl/lstner.hxx>
29 #include <rsc/rscsfx.hxx>
30 #include <com/sun/star/container/XIndexAccess.hpp>
31 #include <com/sun/star/style/XStyle.hpp>
32 #include <com/sun/star/style/XStyleLoader.hpp>
33 #include <com/sun/star/lang/XServiceInfo.hpp>
34 #include <com/sun/star/container/XNameContainer.hpp>
35 #include <com/sun/star/container/XIndexReplace.hpp>
36 #include <com/sun/star/beans/XPropertySet.hpp>
37 #include <com/sun/star/beans/XMultiPropertySet.hpp>
38 #include <com/sun/star/beans/XPropertyState.hpp>
39 #include <com/sun/star/beans/XMultiPropertyStates.hpp>
40 #include <com/sun/star/lang/XUnoTunnel.hpp>
41 //#include <cppuhelper/implbase3.hxx>
42 #include <cppuhelper/implbase4.hxx>
43 #include <cppuhelper/implbase7.hxx>
44 
45 class SfxStyleSheetBase;
46 class ScDocShell;
47 
48 class ScStyleFamilyObj;
49 class ScStyleObj;
50 
51 
52 class ScStyleNameConversion
53 {
54 public:
55     static String DisplayToProgrammaticName( const String& rDispName, sal_uInt16 nType );
56     static String ProgrammaticToDisplayName( const String& rProgName, sal_uInt16 nType );
57 };
58 
59 
60 class ScStyleFamiliesObj : public ::cppu::WeakImplHelper4<
61                             ::com::sun::star::container::XIndexAccess,
62                             ::com::sun::star::container::XNameAccess,
63                             ::com::sun::star::style::XStyleLoader,
64                             ::com::sun::star::lang::XServiceInfo >,
65                         public SfxListener
66 {
67 private:
68     ScDocShell*             pDocShell;
69 
70     ScStyleFamilyObj*       GetObjectByType_Impl(sal_uInt16 Type) const;
71     ScStyleFamilyObj*       GetObjectByIndex_Impl(sal_uInt32 nIndex) const;
72     ScStyleFamilyObj*       GetObjectByName_Impl(const rtl::OUString& aName) const;
73 
74 public:
75                             ScStyleFamiliesObj(ScDocShell* pDocSh);
76     virtual                 ~ScStyleFamiliesObj();
77 
78     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
79 
80                             // XIndexAccess
81     virtual sal_Int32 SAL_CALL getCount();
82     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index );
83 
84                             // XNameAccess
85     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName );
86     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames();
87     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName );
88 
89                             // XElementAccess
90     virtual ::com::sun::star::uno::Type SAL_CALL getElementType();
91     virtual sal_Bool SAL_CALL hasElements();
92 
93                             // XStyleLoader
94     virtual void SAL_CALL   loadStylesFromURL( const ::rtl::OUString& URL,
95                                 const ::com::sun::star::uno::Sequence<
96                                     ::com::sun::star::beans::PropertyValue >& aOptions );
97     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL
98                             getStyleLoaderOptions();
99 
100                             // XServiceInfo
101     virtual ::rtl::OUString SAL_CALL getImplementationName();
102     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName );
103     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames();
104 };
105 
106 
107 class ScStyleFamilyObj : public ::cppu::WeakImplHelper4<
108                             ::com::sun::star::container::XNameContainer,
109                             ::com::sun::star::container::XIndexAccess,
110                             ::com::sun::star::beans::XPropertySet,
111                             ::com::sun::star::lang::XServiceInfo >,
112                         public SfxListener
113 {
114 private:
115     ScDocShell*             pDocShell;
116     SfxStyleFamily          eFamily;        // Familie
117 
118     ScStyleObj*             GetObjectByIndex_Impl(sal_uInt32 nIndex);
119     ScStyleObj*             GetObjectByName_Impl(const rtl::OUString& Name);
120 
121 public:
122                             ScStyleFamilyObj(ScDocShell* pDocSh, SfxStyleFamily eFam);
123     virtual                 ~ScStyleFamilyObj();
124 
125     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
126 
127                             // XNameContainer
128     virtual void SAL_CALL   insertByName( const ::rtl::OUString& aName,
129                                 const ::com::sun::star::uno::Any& aElement );
130     virtual void SAL_CALL   removeByName( const ::rtl::OUString& Name );
131 
132                             // XNameReplace
133     virtual void SAL_CALL   replaceByName( const ::rtl::OUString& aName,
134                                 const ::com::sun::star::uno::Any& aElement );
135 
136                             // XNameAccess
137     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName );
138     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames();
139     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName );
140 
141                             // XIndexAccess
142     virtual sal_Int32 SAL_CALL getCount();
143     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index );
144 
145                             // XElementAccess
146     virtual ::com::sun::star::uno::Type SAL_CALL getElementType();
147     virtual sal_Bool SAL_CALL hasElements();
148 
149                             // XPropertySet
150     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo();
151     virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue );
152     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName );
153     virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener );
154     virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener );
155     virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener );
156     virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener );
157 
158                             // XServiceInfo
159     virtual ::rtl::OUString SAL_CALL getImplementationName();
160     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName );
161     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames();
162 };
163 
164 
165 class ScStyleObj : public ::cppu::WeakImplHelper7<
166                     ::com::sun::star::style::XStyle,
167                     ::com::sun::star::beans::XPropertySet,
168                     ::com::sun::star::beans::XMultiPropertySet,
169                     ::com::sun::star::beans::XPropertyState,
170                     ::com::sun::star::beans::XMultiPropertyStates,
171                     ::com::sun::star::lang::XUnoTunnel,
172                     ::com::sun::star::lang::XServiceInfo >,
173                 public SfxListener
174 {
175 private:
176     const SfxItemPropertySet* pPropSet;
177     ScDocShell*             pDocShell;
178     SfxStyleFamily          eFamily;        // Familie
179     String                  aStyleName;
180 
181     SfxStyleSheetBase*      GetStyle_Impl();
182     const SfxItemSet*       GetStyleItemSet_Impl( const ::rtl::OUString& rPropName, const SfxItemPropertySimpleEntry*& rpEntry );
183     void                    SetOnePropertyValue(    const ::rtl::OUString& rPropertyName,
184                                                     const SfxItemPropertySimpleEntry* pEntry,
185                                                     const ::com::sun::star::uno::Any* pValue );
186 
187     // enhance ODS load performance
188     bool StyleSheetChangedUpdate();
189     void SetOnePropertyValueWithoutUpdate(  const ::rtl::OUString& rPropertyName,
190                                                     const SfxItemPropertySimpleEntry* pEntry,
191                                                     const ::com::sun::star::uno::Any* pValue );
192     //end add
193 
194     ScStyleObj(); // disabled
195 public:
196                             ScStyleObj(ScDocShell* pDocSh, SfxStyleFamily eFam, const String& rName);
197     virtual                 ~ScStyleObj();
198 
199                             // per getImplementation gerufen:
IsInserted() const200     sal_Bool                IsInserted() const      { return pDocShell != NULL; }
GetFamily() const201     SfxStyleFamily          GetFamily() const       { return eFamily; }
202     void                    InitDoc( ScDocShell* pNewDocSh, const String& rNewName );
203 
204     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
205 
206     static ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace >
207                             CreateEmptyNumberingRules();
208 
209                             // XStyle
210     virtual sal_Bool SAL_CALL isUserDefined();
211     virtual sal_Bool SAL_CALL isInUse();
212     virtual ::rtl::OUString SAL_CALL getParentStyle();
213     virtual void SAL_CALL   setParentStyle( const ::rtl::OUString& aParentStyle );
214 
215                             // XNamed
216     virtual ::rtl::OUString SAL_CALL getName();
217     virtual void SAL_CALL   setName( const ::rtl::OUString& aName );
218 
219                             // XPropertySet
220     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
221                             SAL_CALL getPropertySetInfo();
222     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
223                                     const ::com::sun::star::uno::Any& aValue );
224     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
225                                     const ::rtl::OUString& PropertyName );
226     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
227                                     const ::com::sun::star::uno::Reference<
228                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener );
229     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
230                                     const ::com::sun::star::uno::Reference<
231                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener );
232     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
233                                     const ::com::sun::star::uno::Reference<
234                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener );
235     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
236                                     const ::com::sun::star::uno::Reference<
237                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener );
238 
239                             // XMultiPropertySet
240     virtual void SAL_CALL   setPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
241                                     const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues );
242     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL
243                             getPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames );
244     virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
245                                     const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener );
246     virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener );
247     virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames,
248                                     const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener );
249 
250                             // XPropertyState
251     virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState(
252                                     const ::rtl::OUString& PropertyName );
253     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL
254                             getPropertyStates( const ::com::sun::star::uno::Sequence<
255                                         ::rtl::OUString >& aPropertyName );
256     virtual void SAL_CALL   setPropertyToDefault( const ::rtl::OUString& PropertyName );
257     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault(
258                                     const ::rtl::OUString& aPropertyName );
259 
260                             // XMultiPropertyStates
261     // getPropertyStates already defined for XPropertyState
262     virtual void SAL_CALL   setAllPropertiesToDefault();
263     virtual void SAL_CALL   setPropertiesToDefault( const ::com::sun::star::uno::Sequence<
264                                         ::rtl::OUString >& aPropertyNames );
265     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL
266                             getPropertyDefaults( const ::com::sun::star::uno::Sequence<
267                                         ::rtl::OUString >& aPropertyNames );
268 
269                             // XServiceInfo
270     virtual ::rtl::OUString SAL_CALL getImplementationName();
271     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName );
272     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames();
273 
274                             // XUnoTunnel
275     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
276                                     sal_Int8 >& aIdentifier );
277 
278     static const ::com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
279     static ScStyleObj* getImplementation( const ::com::sun::star::uno::Reference<
280                                     ::com::sun::star::uno::XInterface> xObj );
281 
282 };
283 
284 #endif
285