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 #ifndef _UNOPORT_HXX 24 #define _UNOPORT_HXX 25 26 #include <unocrsr.hxx> 27 #include <unoevtlstnr.hxx> 28 #include <calbck.hxx> 29 30 #include <com/sun/star/beans/XPropertySet.hpp> 31 #include <com/sun/star/text/XTextRange.hpp> 32 #include <com/sun/star/container/XEnumeration.hpp> 33 #include <com/sun/star/container/XContentEnumerationAccess.hpp> 34 #include <com/sun/star/container/XEnumerationAccess.hpp> 35 #include <com/sun/star/beans/XPropertyState.hpp> 36 #include <com/sun/star/beans/XMultiPropertySet.hpp> 37 #include <com/sun/star/beans/XTolerantMultiPropertySet.hpp> 38 #include <com/sun/star/text/XTextField.hpp> 39 #include <com/sun/star/text/XFootnote.hpp> 40 #include <com/sun/star/lang/XServiceInfo.hpp> 41 #include <com/sun/star/lang/XUnoTunnel.hpp> 42 #include <cppuhelper/implbase8.hxx> 43 #include <cppuhelper/implbase3.hxx> 44 #include <svl/itemprop.hxx> 45 46 #include <memory> 47 #include <deque> 48 49 50 class SwFmtFld; 51 class SwFrmFmt; 52 class SwTxtRuby; 53 54 55 typedef ::std::deque< 56 ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > > 57 TextRangeList_t; 58 59 60 /* -----------------29.05.98 14:42------------------- 61 * 62 * --------------------------------------------------*/ 63 enum SwTextPortionType 64 { 65 PORTION_TEXT, 66 PORTION_FIELD, 67 PORTION_FRAME, 68 PORTION_FOOTNOTE, 69 // obsolete! PORTION_CONTROL_CHAR, 70 PORTION_REFMARK_START, 71 PORTION_REFMARK_END, 72 PORTION_TOXMARK_START, 73 PORTION_TOXMARK_END, 74 PORTION_BOOKMARK_START, 75 PORTION_BOOKMARK_END, 76 PORTION_REDLINE_START, 77 PORTION_REDLINE_END, 78 PORTION_RUBY_START, 79 PORTION_RUBY_END, 80 PORTION_SOFT_PAGEBREAK, 81 PORTION_META, 82 PORTION_FIELD_START, 83 PORTION_FIELD_END, 84 PORTION_FIELD_START_END, 85 PORTION_ANNOTATION, 86 PORTION_ANNOTATION_END 87 }; 88 89 90 class SwXTextPortion : public cppu::WeakImplHelper8 91 < 92 ::com::sun::star::beans::XTolerantMultiPropertySet, 93 ::com::sun::star::beans::XMultiPropertySet, 94 ::com::sun::star::beans::XPropertySet, 95 ::com::sun::star::text::XTextRange, 96 ::com::sun::star::beans::XPropertyState, 97 ::com::sun::star::container::XContentEnumerationAccess, 98 ::com::sun::star::lang::XUnoTunnel, 99 ::com::sun::star::lang::XServiceInfo 100 >, 101 public SwClient 102 { 103 private: 104 105 SwEventListenerContainer m_ListenerContainer; 106 const SfxItemPropertySet * m_pPropSet; 107 const ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > 108 m_xParentText; 109 ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > 110 m_xRefMark; 111 ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > 112 m_xTOXMark; 113 ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > 114 m_xBookmark; 115 ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote > 116 m_xFootnote; 117 ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > 118 m_xTextField; 119 ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > 120 m_xMeta; 121 ::std::auto_ptr< ::com::sun::star::uno::Any > m_pRubyText; 122 ::std::auto_ptr< ::com::sun::star::uno::Any > m_pRubyStyle; 123 ::std::auto_ptr< ::com::sun::star::uno::Any > m_pRubyAdjust; 124 ::std::auto_ptr< ::com::sun::star::uno::Any > m_pRubyIsAbove; 125 126 const SwDepend m_FrameDepend; 127 SwFrmFmt * m_pFrameFmt; 128 const SwTextPortionType m_ePortionType; 129 130 bool m_bIsCollapsed; 131 132 SwFmtFld * GetFldFmt(bool bInit = false); 133 134 void init(const SwUnoCrsr* pPortionCursor); 135 136 protected: 137 138 void SAL_CALL SetPropertyValues_Impl( 139 const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, 140 const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ); 141 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL GetPropertyValues_Impl( 142 const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ); 143 144 void GetPropertyValues( const ::rtl::OUString *pPropertyNames, 145 ::com::sun::star::uno::Any *pValues, 146 sal_Int32 nLength ); 147 148 void GetPropertyValue( ::com::sun::star::uno::Any &rVal, 149 const SfxItemPropertySimpleEntry& rEntry, SwUnoCrsr *pUnoCrsr, SfxItemSet *&pSet ); 150 151 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::GetDirectPropertyTolerantResult > SAL_CALL GetPropertyValuesTolerant_Impl( 152 const ::com::sun::star::uno::Sequence< rtl::OUString >& rPropertyNames, 153 sal_Bool bDirectValuesOnly ); 154 155 virtual ~SwXTextPortion(); 156 157 //SwClient 158 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew); 159 160 public: 161 SwXTextPortion(const SwUnoCrsr* pPortionCrsr, ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > const& rParent, SwTextPortionType eType ); 162 SwXTextPortion(const SwUnoCrsr* pPortionCrsr, ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > const& rParent, SwFrmFmt& rFmt ); 163 164 // for Ruby 165 SwXTextPortion(const SwUnoCrsr* pPortionCrsr, 166 SwTxtRuby const& rAttr, 167 ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > 168 const& xParent, 169 sal_Bool bIsEnd ); 170 171 //XTextRange 172 virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > SAL_CALL getText(); 173 virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL getStart(); 174 virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL getEnd(); 175 virtual rtl::OUString SAL_CALL getString(); 176 virtual void SAL_CALL setString(const rtl::OUString& aString); 177 178 //XTolerantMultiPropertySet 179 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::SetPropertyTolerantFailed > SAL_CALL setPropertyValuesTolerant( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ); 180 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::GetPropertyTolerantResult > SAL_CALL getPropertyValuesTolerant( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ); 181 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::GetDirectPropertyTolerantResult > SAL_CALL getDirectPropertyValuesTolerant( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ); 182 183 //XMultiPropertySet 184 // virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); 185 virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ); 186 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL getPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ); 187 virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ); 188 virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ); 189 virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ); 190 191 //XPropertySet 192 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ); 193 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ); 194 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ); 195 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ); 196 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ); 197 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 198 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ); 199 200 //XPropertyState 201 virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const ::rtl::OUString& PropertyName ); 202 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL getPropertyStates( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyName ); 203 virtual void SAL_CALL setPropertyToDefault( const ::rtl::OUString& PropertyName ); 204 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( const ::rtl::OUString& aPropertyName ); 205 206 //XTextContent 207 virtual void SAL_CALL attach(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange); 208 virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL getAnchor( ); 209 210 //XComponent 211 virtual void SAL_CALL dispose(); 212 virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener); 213 virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener); 214 215 //XUnoTunnel 216 static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId(); 217 virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ); 218 219 //XServiceInfo 220 virtual rtl::OUString SAL_CALL getImplementationName(); 221 virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName); 222 virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(); 223 224 //XContentEnumerationAccess 225 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createContentEnumeration(const rtl::OUString& aServiceName); 226 virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getAvailableServiceNames(); 227 228 void SetRefMark( ::com::sun::star::uno::Reference< 229 ::com::sun::star::text::XTextContent > xMark) 230 { m_xRefMark = xMark; } 231 232 void SetTOXMark( ::com::sun::star::uno::Reference< 233 ::com::sun::star::text::XTextContent > xMark) 234 { m_xTOXMark = xMark; } 235 236 void SetBookmark( ::com::sun::star::uno::Reference< 237 ::com::sun::star::text::XTextContent > xMark) 238 { m_xBookmark = xMark; } 239 240 void SetFootnote( ::com::sun::star::uno::Reference< 241 ::com::sun::star::text::XFootnote > xNote) 242 { m_xFootnote = xNote; } 243 244 void SetTextField( ::com::sun::star::uno::Reference< 245 ::com::sun::star::text::XTextField> xField) 246 { m_xTextField = xField; } 247 248 void SetMeta( ::com::sun::star::uno::Reference< 249 ::com::sun::star::text::XTextContent > xMeta) 250 { m_xMeta = xMeta; } 251 252 bool IsCollapsed() const { return m_bIsCollapsed; } 253 void SetCollapsed(bool bSet) { m_bIsCollapsed = bSet;} 254 255 SwTextPortionType GetTextPortionType() const { return m_ePortionType; } 256 257 SwUnoCrsr* GetCursor() const 258 {return static_cast<SwUnoCrsr*>(const_cast<SwModify*>(GetRegisteredIn()));} 259 }; 260 261 /* -----------------29.05.98 14:42------------------- 262 * 263 * --------------------------------------------------*/ 264 class SwXTextPortionEnumeration 265 : public ::cppu::WeakImplHelper3 266 < ::com::sun::star::container::XEnumeration 267 , ::com::sun::star::lang::XServiceInfo 268 , ::com::sun::star::lang::XUnoTunnel 269 > 270 , public SwClient 271 { 272 TextRangeList_t m_Portions; // contains all portions, filled by ctor 273 274 SwUnoCrsr* GetCursor() const 275 {return static_cast<SwUnoCrsr*>(const_cast<SwModify*>(GetRegisteredIn()));} 276 277 protected: 278 virtual ~SwXTextPortionEnumeration(); 279 280 public: 281 SwXTextPortionEnumeration(SwPaM& rParaCrsr, 282 ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > 283 const & xParent, 284 const sal_Int32 nStart, const sal_Int32 nEnd ); 285 286 SwXTextPortionEnumeration(SwPaM& rParaCrsr, 287 TextRangeList_t const & rPortions ); 288 289 290 static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId(); 291 292 //XUnoTunnel 293 virtual sal_Int64 SAL_CALL getSomething( 294 const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ); 295 296 //XEnumeration 297 virtual sal_Bool SAL_CALL hasMoreElements(); 298 virtual ::com::sun::star::uno::Any SAL_CALL nextElement(); 299 300 //XServiceInfo 301 virtual rtl::OUString SAL_CALL getImplementationName(); 302 virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName); 303 virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL 304 getSupportedServiceNames(); 305 protected: 306 //SwClient 307 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew); 308 }; 309 310 #endif 311