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