xref: /trunk/main/sw/source/core/inc/unometa.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 SW_UNOMETA_HXX
25 #define SW_UNOMETA_HXX
26 
27 #include <deque>
28 
29 #include <com/sun/star/lang/XServiceInfo.hpp>
30 #include <com/sun/star/lang/XUnoTunnel.hpp>
31 #include <com/sun/star/beans/XPropertySet.hpp>
32 #include <com/sun/star/container/XChild.hpp>
33 #include <com/sun/star/container/XEnumerationAccess.hpp>
34 #include <com/sun/star/text/XTextContent.hpp>
35 #include <com/sun/star/text/XTextField.hpp>
36 
37 #include <cppuhelper/implbase2.hxx>
38 #include <cppuhelper/implbase6.hxx>
39 
40 #include <sfx2/Metadatable.hxx>
41 
42 #include <unobaseclass.hxx>
43 
44 
45 typedef ::std::deque<
46     ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > >
47     TextRangeList_t;
48 
49 class SwPaM;
50 class SwTxtNode;
51 
52 namespace sw {
53     class Meta;
54     class MetaField;
55 }
56 
57 typedef ::cppu::ImplInheritanceHelper6
58 <   ::sfx2::MetadatableMixin
59 ,   ::com::sun::star::lang::XUnoTunnel
60 ,   ::com::sun::star::lang::XServiceInfo
61 ,   ::com::sun::star::container::XChild
62 ,   ::com::sun::star::container::XEnumerationAccess
63 ,   ::com::sun::star::text::XTextContent
64 ,   ::com::sun::star::text::XText
65 > SwXMeta_Base;
66 
67 class SwXMeta
68     : public SwXMeta_Base
69     , private ::boost::noncopyable
70 {
71 
72 public:
73 
74     class Impl;
75 
76 protected:
77 
78     ::sw::UnoImplPtr<Impl> m_pImpl;
79 
80     virtual void SAL_CALL AttachImpl(
81             const ::com::sun::star::uno::Reference<
82                 ::com::sun::star::text::XTextRange > & xTextRange,
83             const sal_uInt16 nWhich);
84 
85     virtual ~SwXMeta();
86 
87     /// @param pDoc and pMeta != 0, but not & because of ImplInheritanceHelper
88     SwXMeta(SwDoc *const pDoc, ::sw::Meta *const pMeta,
89         ::com::sun::star::uno::Reference< ::com::sun::star::text::XText> const&
90             xParentText,
91         TextRangeList_t const*const pPortions);
92 
93 public:
94 
95     SwXMeta(SwDoc *const pDoc);
96 
97     static ::com::sun::star::uno::Reference<
98             ::com::sun::star::rdf::XMetadatable >
99         CreateXMeta(
100             ::sw::Meta & rMeta,
101             ::com::sun::star::uno::Reference< ::com::sun::star::text::XText>
102                 const& xParentText = 0,
103             ::std::auto_ptr<TextRangeList_t const> pPortions =
104                 ::std::auto_ptr<TextRangeList_t const>(0));
105 
106     /// init params with position of the attribute content (w/out CH_TXTATR)
107     bool SetContentRange(
108             SwTxtNode *& rpNode, xub_StrLen & rStart, xub_StrLen & rEnd) const;
109     ::com::sun::star::uno::Reference< ::com::sun::star::text::XText >
110         GetParentText() const;
111 
112     bool CheckForOwnMemberMeta(const SwPaM & rPam, const bool bAbsorb);
113 
114     // MetadatableMixin
115     virtual ::sfx2::Metadatable * GetCoreObject();
116     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >
117         GetModel();
118 
119     static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId();
120 
121     // XUnoTunnel
122     virtual sal_Int64 SAL_CALL getSomething(
123             const ::com::sun::star::uno::Sequence< sal_Int8 >& Identifier );
124 
125     // XServiceInfo
126     virtual ::rtl::OUString SAL_CALL getImplementationName();
127     virtual sal_Bool SAL_CALL supportsService(
128             const ::rtl::OUString& rServiceName);
129     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
130         getSupportedServiceNames();
131 
132     // XComponent
133     virtual void SAL_CALL dispose();
134     virtual void SAL_CALL addEventListener(
135             const ::com::sun::star::uno::Reference<
136                 ::com::sun::star::lang::XEventListener > & xListener);
137     virtual void SAL_CALL removeEventListener(
138             const ::com::sun::star::uno::Reference<
139                 ::com::sun::star::lang::XEventListener > & xListener);
140 
141     // XChild
142     virtual ::com::sun::star::uno::Reference<
143             ::com::sun::star::uno::XInterface > SAL_CALL
144         getParent();
145     virtual void SAL_CALL setParent(
146             ::com::sun::star::uno::Reference<
147                 ::com::sun::star::uno::XInterface> const& xParent);
148 
149     // XElementAccess
150     virtual ::com::sun::star::uno::Type SAL_CALL getElementType();
151     virtual sal_Bool SAL_CALL hasElements();
152 
153     // XEnumerationAccess
154     virtual ::com::sun::star::uno::Reference<
155             ::com::sun::star::container::XEnumeration >  SAL_CALL
156         createEnumeration();
157 
158     // XTextContent
159     virtual void SAL_CALL attach(
160             const ::com::sun::star::uno::Reference<
161                 ::com::sun::star::text::XTextRange > & xTextRange);
162     virtual ::com::sun::star::uno::Reference<
163                 ::com::sun::star::text::XTextRange > SAL_CALL getAnchor();
164 
165     // XTextRange
166     virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XText >
167         SAL_CALL getText();
168     virtual ::com::sun::star::uno::Reference<
169                 ::com::sun::star::text::XTextRange > SAL_CALL getStart();
170     virtual ::com::sun::star::uno::Reference<
171                 ::com::sun::star::text::XTextRange > SAL_CALL getEnd();
172     virtual rtl::OUString SAL_CALL getString();
173     virtual void SAL_CALL setString(const rtl::OUString& rString);
174 
175     // XSimpleText
176     virtual ::com::sun::star::uno::Reference<
177                 ::com::sun::star::text::XTextCursor >  SAL_CALL
178         createTextCursor();
179     virtual ::com::sun::star::uno::Reference<
180                 ::com::sun::star::text::XTextCursor >  SAL_CALL
181         createTextCursorByRange(
182             const ::com::sun::star::uno::Reference<
183                 ::com::sun::star::text::XTextRange > & xTextPosition);
184     virtual void SAL_CALL insertString(
185             const ::com::sun::star::uno::Reference<
186                 ::com::sun::star::text::XTextRange > & xRange,
187             const rtl::OUString& aString, sal_Bool bAbsorb);
188     virtual void SAL_CALL insertControlCharacter(
189             const ::com::sun::star::uno::Reference<
190                 ::com::sun::star::text::XTextRange > & xRange,
191             sal_Int16 nControlCharacter, sal_Bool bAbsorb);
192 
193     // XText
194     virtual void SAL_CALL insertTextContent(
195             const ::com::sun::star::uno::Reference<
196                 ::com::sun::star::text::XTextRange > & xRange,
197             const ::com::sun::star::uno::Reference<
198                 ::com::sun::star::text::XTextContent > & xContent,
199             sal_Bool bAbsorb);
200     virtual void SAL_CALL removeTextContent(
201             const ::com::sun::star::uno::Reference<
202                 ::com::sun::star::text::XTextContent > & xContent);
203 
204 };
205 
206 
207 typedef ::cppu::ImplInheritanceHelper2
208 <   SwXMeta
209 ,   ::com::sun::star::beans::XPropertySet
210 ,   ::com::sun::star::text::XTextField
211 > SwXMetaField_Base;
212 
213 class SwXMetaField
214     : public SwXMetaField_Base
215 {
216 
217 private:
218 
219     virtual ~SwXMetaField();
220 
221     friend ::com::sun::star::uno::Reference<
222             ::com::sun::star::rdf::XMetadatable >
223         SwXMeta::CreateXMeta(::sw::Meta &,
224             ::com::sun::star::uno::Reference< ::com::sun::star::text::XText>
225                 const&,
226             ::std::auto_ptr<TextRangeList_t const> pPortions);
227 
228     SwXMetaField(SwDoc *const pDoc, ::sw::Meta *const pMeta,
229         ::com::sun::star::uno::Reference< ::com::sun::star::text::XText> const&
230             xParentText,
231         TextRangeList_t const*const pPortions);
232 
233 public:
234 
235     SwXMetaField(SwDoc *const pDoc);
236 
237     // XServiceInfo
238     virtual ::rtl::OUString SAL_CALL getImplementationName();
239     virtual sal_Bool SAL_CALL supportsService(
240             const ::rtl::OUString& ServiceName);
241     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
242         getSupportedServiceNames( );
243 
244     // XComponent
245     virtual void SAL_CALL dispose();
246     virtual void SAL_CALL addEventListener(
247             const ::com::sun::star::uno::Reference<
248                 ::com::sun::star::lang::XEventListener > & xListener);
249     virtual void SAL_CALL removeEventListener(
250             const ::com::sun::star::uno::Reference<
251                 ::com::sun::star::lang::XEventListener > & xListener);
252 
253     // XPropertySet
254     virtual ::com::sun::star::uno::Reference<
255             ::com::sun::star::beans::XPropertySetInfo > SAL_CALL
256         getPropertySetInfo();
257     virtual void SAL_CALL setPropertyValue(
258             const ::rtl::OUString& rPropertyName,
259             const ::com::sun::star::uno::Any& rValue);
260     virtual ::com::sun::star::uno::Any SAL_CALL
261         getPropertyValue(const ::rtl::OUString& rPropertyName);
262     virtual void SAL_CALL addPropertyChangeListener(
263             const ::rtl::OUString& rPropertyName,
264             const ::com::sun::star::uno::Reference<
265                 ::com::sun::star::beans::XPropertyChangeListener >& xListener);
266     virtual void SAL_CALL removePropertyChangeListener(
267             const ::rtl::OUString& rPropertyName,
268             const ::com::sun::star::uno::Reference<
269                 ::com::sun::star::beans::XPropertyChangeListener >& xListener);
270     virtual void SAL_CALL addVetoableChangeListener(
271             const ::rtl::OUString& rPropertyName,
272             const ::com::sun::star::uno::Reference<
273                 ::com::sun::star::beans::XVetoableChangeListener >& xListener);
274     virtual void SAL_CALL removeVetoableChangeListener(
275             const ::rtl::OUString& rPropertyName,
276             const ::com::sun::star::uno::Reference<
277                 ::com::sun::star::beans::XVetoableChangeListener >& xListener);
278 
279     // XTextContent
280     virtual void SAL_CALL attach(
281             const ::com::sun::star::uno::Reference<
282                 ::com::sun::star::text::XTextRange > & xTextRange);
283     virtual ::com::sun::star::uno::Reference<
284             ::com::sun::star::text::XTextRange > SAL_CALL getAnchor();
285 
286     // XTextField
287     virtual rtl::OUString SAL_CALL getPresentation(sal_Bool bShowCommand);
288 
289 };
290 
291 /// get prefix/suffix from the RDF repository. @throws RuntimeException
292 void getPrefixAndSuffix(
293         const ::com::sun::star::uno::Reference<
294             ::com::sun::star::frame::XModel>& xModel,
295         const ::com::sun::star::uno::Reference<
296             ::com::sun::star::rdf::XMetadatable>& xMetaField,
297         ::rtl::OUString *const o_pPrefix, ::rtl::OUString *const o_pSuffix);
298 
299 #endif // SW_UNOMETA_HXX
300