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_NAMEUNO_HXX 25 #define SC_NAMEUNO_HXX 26 27 #include <svl/lstner.hxx> 28 #include "address.hxx" 29 #include "formula/grammar.hxx" 30 #include <com/sun/star/sheet/XLabelRange.hpp> 31 #include <com/sun/star/sheet/XLabelRanges.hpp> 32 #include <com/sun/star/sheet/XCellRangeReferrer.hpp> 33 #include <com/sun/star/sheet/XNamedRange.hpp> 34 #include <com/sun/star/sheet/XFormulaTokens.hpp> 35 #include <com/sun/star/sheet/XNamedRanges.hpp> 36 #include <com/sun/star/container/XEnumerationAccess.hpp> 37 #include <com/sun/star/lang/XServiceName.hpp> 38 #include <com/sun/star/lang/XServiceInfo.hpp> 39 #include <com/sun/star/lang/XUnoTunnel.hpp> 40 #include <com/sun/star/beans/XPropertySet.hpp> 41 #include <com/sun/star/document/XActionLockable.hpp> 42 #include <cppuhelper/implbase2.hxx> 43 #include <cppuhelper/implbase3.hxx> 44 #include <cppuhelper/implbase5.hxx> 45 #include <cppuhelper/implbase6.hxx> 46 47 #include <global.hxx> //for EMPTY_STRING 48 49 class ScDocShell; 50 class ScRangeData; 51 class ScTokenArray; 52 53 54 class ScNamedRangeObj : public ::cppu::WeakImplHelper6< 55 ::com::sun::star::sheet::XNamedRange, 56 ::com::sun::star::sheet::XFormulaTokens, 57 ::com::sun::star::sheet::XCellRangeReferrer, 58 ::com::sun::star::beans::XPropertySet, 59 ::com::sun::star::lang::XUnoTunnel, 60 ::com::sun::star::lang::XServiceInfo >, 61 public SfxListener 62 { 63 private: 64 ScDocShell* pDocShell; 65 String aName; 66 String aScopeName; 67 68 private: 69 ScRangeData* GetRangeData_Impl(); 70 void Modify_Impl( const String* pNewName, 71 const ScTokenArray* pNewTokens, const String* pNewContent, 72 const ScAddress* pNewPos, const sal_uInt16* pNewType, 73 const formula::FormulaGrammar::Grammar eGrammar, const String* pNewScopeName = NULL ); 74 75 public: 76 ScNamedRangeObj(ScDocShell* pDocSh, const String& rNm, const String& rScopeName = EMPTY_STRING); 77 virtual ~ScNamedRangeObj(); 78 79 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 80 81 // XNamedRange 82 virtual ::rtl::OUString SAL_CALL getContent() throw(::com::sun::star::uno::RuntimeException); 83 virtual void SAL_CALL setContent( const ::rtl::OUString& aContent ) 84 throw(::com::sun::star::uno::RuntimeException); 85 virtual ::com::sun::star::table::CellAddress SAL_CALL getReferencePosition() 86 throw(::com::sun::star::uno::RuntimeException); 87 virtual void SAL_CALL setReferencePosition( 88 const ::com::sun::star::table::CellAddress& aReferencePosition ) 89 throw(::com::sun::star::uno::RuntimeException); 90 virtual sal_Int32 SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException); 91 virtual void SAL_CALL setType( sal_Int32 nType ) throw(::com::sun::star::uno::RuntimeException); 92 virtual ::rtl::OUString SAL_CALL getScopeName() throw(::com::sun::star::uno::RuntimeException); 93 virtual void SAL_CALL setScopeAndRangeName( const ::rtl::OUString& aScopeName, const ::rtl::OUString& aRangeName ) throw(::com::sun::star::uno::RuntimeException); 94 95 // XFormulaTokens 96 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken > SAL_CALL getTokens() 97 throw (::com::sun::star::uno::RuntimeException); 98 virtual void SAL_CALL setTokens( const ::com::sun::star::uno::Sequence< 99 ::com::sun::star::sheet::FormulaToken >& aTokens ) 100 throw (::com::sun::star::uno::RuntimeException); 101 102 // XNamed 103 virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException); 104 virtual void SAL_CALL setName( const ::rtl::OUString& aName ) 105 throw(::com::sun::star::uno::RuntimeException); 106 107 // XCellRangeReferrer 108 virtual ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > SAL_CALL 109 getReferredCells() throw(::com::sun::star::uno::RuntimeException); 110 111 // XPropertySet 112 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > 113 SAL_CALL getPropertySetInfo() 114 throw(::com::sun::star::uno::RuntimeException); 115 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, 116 const ::com::sun::star::uno::Any& aValue ) 117 throw(::com::sun::star::beans::UnknownPropertyException, 118 ::com::sun::star::beans::PropertyVetoException, 119 ::com::sun::star::lang::IllegalArgumentException, 120 ::com::sun::star::lang::WrappedTargetException, 121 ::com::sun::star::uno::RuntimeException); 122 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( 123 const ::rtl::OUString& PropertyName ) 124 throw(::com::sun::star::beans::UnknownPropertyException, 125 ::com::sun::star::lang::WrappedTargetException, 126 ::com::sun::star::uno::RuntimeException); 127 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, 128 const ::com::sun::star::uno::Reference< 129 ::com::sun::star::beans::XPropertyChangeListener >& xListener ) 130 throw(::com::sun::star::beans::UnknownPropertyException, 131 ::com::sun::star::lang::WrappedTargetException, 132 ::com::sun::star::uno::RuntimeException); 133 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, 134 const ::com::sun::star::uno::Reference< 135 ::com::sun::star::beans::XPropertyChangeListener >& aListener ) 136 throw(::com::sun::star::beans::UnknownPropertyException, 137 ::com::sun::star::lang::WrappedTargetException, 138 ::com::sun::star::uno::RuntimeException); 139 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, 140 const ::com::sun::star::uno::Reference< 141 ::com::sun::star::beans::XVetoableChangeListener >& aListener ) 142 throw(::com::sun::star::beans::UnknownPropertyException, 143 ::com::sun::star::lang::WrappedTargetException, 144 ::com::sun::star::uno::RuntimeException); 145 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, 146 const ::com::sun::star::uno::Reference< 147 ::com::sun::star::beans::XVetoableChangeListener >& aListener ) 148 throw(::com::sun::star::beans::UnknownPropertyException, 149 ::com::sun::star::lang::WrappedTargetException, 150 ::com::sun::star::uno::RuntimeException); 151 152 // XUnoTunnel 153 virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< 154 sal_Int8 >& aIdentifier ) 155 throw(::com::sun::star::uno::RuntimeException); 156 157 static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId(); 158 static ScNamedRangeObj* getImplementation( const com::sun::star::uno::Reference< 159 com::sun::star::uno::XInterface> xObj ); 160 161 // XServiceInfo 162 virtual ::rtl::OUString SAL_CALL getImplementationName() 163 throw(::com::sun::star::uno::RuntimeException); 164 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 165 throw(::com::sun::star::uno::RuntimeException); 166 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() 167 throw(::com::sun::star::uno::RuntimeException); 168 169 // methods accessible via getImplementation() 170 void SetContentWithGrammar( const ::rtl::OUString& aContent, 171 const formula::FormulaGrammar::Grammar eGrammar ) 172 throw(::com::sun::star::uno::RuntimeException); 173 }; 174 175 176 class ScNamedRangesObj : public ::cppu::WeakImplHelper5< 177 ::com::sun::star::sheet::XNamedRanges, 178 ::com::sun::star::container::XEnumerationAccess, 179 ::com::sun::star::container::XIndexAccess, 180 ::com::sun::star::document::XActionLockable, 181 ::com::sun::star::lang::XServiceInfo >, 182 public SfxListener 183 { 184 private: 185 ScDocShell* pDocShell; 186 187 ScNamedRangeObj* GetObjectByIndex_Impl(sal_uInt16 nIndex); 188 ScNamedRangeObj* GetObjectByName_Impl(const ::rtl::OUString& aName); 189 ScNamedRangeObj* GetObjectByScopeName_Impl(const ::rtl::OUString& aScopeName, const ::rtl::OUString& aRangeName); 190 191 void ImplAddNewByScopeAndName(SCTAB aScope,const ::rtl::OUString& aRangeName, const ::rtl::OUString& aContent, 192 const ::com::sun::star::table::CellAddress& aPosition, sal_Int32 nType) 193 throw(::com::sun::star::uno::RuntimeException); 194 195 void ImplRemoveByScopeAndName(SCTAB aScope,const ::rtl::OUString& aRangeName) 196 throw(::com::sun::star::uno::RuntimeException); 197 198 protected: 199 /** called from the XActionLockable interface methods on initial locking */ 200 virtual void lock(); 201 202 /** called from the XActionLockable interface methods on final unlock */ 203 virtual void unlock(); 204 205 public: 206 ScNamedRangesObj(ScDocShell* pDocSh); 207 virtual ~ScNamedRangesObj(); 208 209 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 210 211 // XNamedRanges 212 virtual void SAL_CALL addNewByName( const ::rtl::OUString& aName, const ::rtl::OUString& aContent, 213 const ::com::sun::star::table::CellAddress& aPosition, sal_Int32 nType ) 214 throw(::com::sun::star::uno::RuntimeException); 215 216 virtual void SAL_CALL addNewByScopeName( const ::rtl::OUString& aScopeName,const ::rtl::OUString& aRangeName, const ::rtl::OUString& aContent, 217 const ::com::sun::star::table::CellAddress& aPosition, sal_Int32 nType ) 218 throw(::com::sun::star::uno::RuntimeException); 219 virtual void SAL_CALL addNewFromTitles( const ::com::sun::star::table::CellRangeAddress& aSource, 220 ::com::sun::star::sheet::Border aBorder ) 221 throw(::com::sun::star::uno::RuntimeException); 222 virtual void SAL_CALL removeByName( const ::rtl::OUString& aName ) 223 throw(::com::sun::star::uno::RuntimeException); 224 virtual void SAL_CALL removeByScopeName( const ::rtl::OUString& aScopeName, const ::rtl::OUString& aRangeName ) 225 throw(::com::sun::star::uno::RuntimeException); 226 virtual void SAL_CALL outputList( const ::com::sun::star::table::CellAddress& aOutputPosition ) 227 throw(::com::sun::star::uno::RuntimeException); 228 virtual sal_Bool SAL_CALL hasByScopeName( const ::rtl::OUString& aScopeName, const ::rtl::OUString& aRangeName ) 229 throw(::com::sun::star::uno::RuntimeException); 230 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::RangeScopeName > SAL_CALL getElementScopeNames() 231 throw(::com::sun::star::uno::RuntimeException); 232 virtual ::com::sun::star::uno::Any SAL_CALL getByScopeName( const ::rtl::OUString& aScopeName, const ::rtl::OUString& aRangeName ) 233 throw(::com::sun::star::container::NoSuchElementException, 234 ::com::sun::star::lang::WrappedTargetException, 235 ::com::sun::star::uno::RuntimeException); 236 237 // XNameAccess 238 virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) 239 throw(::com::sun::star::container::NoSuchElementException, 240 ::com::sun::star::lang::WrappedTargetException, 241 ::com::sun::star::uno::RuntimeException); 242 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames() 243 throw(::com::sun::star::uno::RuntimeException); 244 virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) 245 throw(::com::sun::star::uno::RuntimeException); 246 247 // XIndexAccess 248 virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); 249 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) 250 throw(::com::sun::star::lang::IndexOutOfBoundsException, 251 ::com::sun::star::lang::WrappedTargetException, 252 ::com::sun::star::uno::RuntimeException); 253 254 // XEnumerationAccess 255 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 256 createEnumeration() throw(::com::sun::star::uno::RuntimeException); 257 258 // XElementAccess 259 virtual ::com::sun::star::uno::Type SAL_CALL getElementType() 260 throw(::com::sun::star::uno::RuntimeException); 261 virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); 262 263 // XActionLockable 264 virtual sal_Bool SAL_CALL isActionLocked() throw(::com::sun::star::uno::RuntimeException); 265 virtual void SAL_CALL addActionLock() throw(::com::sun::star::uno::RuntimeException); 266 virtual void SAL_CALL removeActionLock() throw(::com::sun::star::uno::RuntimeException); 267 virtual void SAL_CALL setActionLocks( sal_Int16 nLock ) throw(::com::sun::star::uno::RuntimeException); 268 virtual sal_Int16 SAL_CALL resetActionLocks() throw(::com::sun::star::uno::RuntimeException); 269 270 // XServiceInfo 271 virtual ::rtl::OUString SAL_CALL getImplementationName() 272 throw(::com::sun::star::uno::RuntimeException); 273 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 274 throw(::com::sun::star::uno::RuntimeException); 275 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() 276 throw(::com::sun::star::uno::RuntimeException); 277 }; 278 279 280 class ScLabelRangeObj : public ::cppu::WeakImplHelper2< 281 ::com::sun::star::sheet::XLabelRange, 282 ::com::sun::star::lang::XServiceInfo >, 283 public SfxListener 284 { 285 private: 286 ScDocShell* pDocShell; 287 sal_Bool bColumn; 288 ScRange aRange; // Kriterium um Bereich zu finden 289 290 private: 291 ScRangePair* GetData_Impl(); 292 void Modify_Impl( const ScRange* pLabel, const ScRange* pData ); 293 294 public: 295 ScLabelRangeObj(ScDocShell* pDocSh, sal_Bool bCol, const ScRange& rR); 296 virtual ~ScLabelRangeObj(); 297 298 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 299 300 // XLabelRange 301 virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getLabelArea() 302 throw(::com::sun::star::uno::RuntimeException); 303 virtual void SAL_CALL setLabelArea( const ::com::sun::star::table::CellRangeAddress& aLabelArea ) 304 throw(::com::sun::star::uno::RuntimeException); 305 virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getDataArea() 306 throw(::com::sun::star::uno::RuntimeException); 307 virtual void SAL_CALL setDataArea( const ::com::sun::star::table::CellRangeAddress& aDataArea ) 308 throw(::com::sun::star::uno::RuntimeException); 309 310 // XServiceInfo 311 virtual ::rtl::OUString SAL_CALL getImplementationName() 312 throw(::com::sun::star::uno::RuntimeException); 313 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 314 throw(::com::sun::star::uno::RuntimeException); 315 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() 316 throw(::com::sun::star::uno::RuntimeException); 317 }; 318 319 320 class ScLabelRangesObj : public ::cppu::WeakImplHelper3< 321 ::com::sun::star::sheet::XLabelRanges, 322 ::com::sun::star::container::XEnumerationAccess, 323 ::com::sun::star::lang::XServiceInfo >, 324 public SfxListener 325 { 326 private: 327 ScDocShell* pDocShell; 328 sal_Bool bColumn; 329 330 ScLabelRangeObj* GetObjectByIndex_Impl(sal_uInt16 nIndex); 331 332 public: 333 ScLabelRangesObj(ScDocShell* pDocSh, sal_Bool bCol); 334 virtual ~ScLabelRangesObj(); 335 336 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 337 338 // XLabelRanges 339 virtual void SAL_CALL addNew( const ::com::sun::star::table::CellRangeAddress& aLabelArea, 340 const ::com::sun::star::table::CellRangeAddress& aDataArea ) 341 throw(::com::sun::star::uno::RuntimeException); 342 virtual void SAL_CALL removeByIndex( sal_Int32 nIndex ) 343 throw(::com::sun::star::uno::RuntimeException); 344 345 // XIndexAccess 346 virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); 347 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) 348 throw(::com::sun::star::lang::IndexOutOfBoundsException, 349 ::com::sun::star::lang::WrappedTargetException, 350 ::com::sun::star::uno::RuntimeException); 351 352 // XEnumerationAccess 353 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL 354 createEnumeration() throw(::com::sun::star::uno::RuntimeException); 355 356 // XElementAccess 357 virtual ::com::sun::star::uno::Type SAL_CALL getElementType() 358 throw(::com::sun::star::uno::RuntimeException); 359 virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); 360 361 // XServiceInfo 362 virtual ::rtl::OUString SAL_CALL getImplementationName() 363 throw(::com::sun::star::uno::RuntimeException); 364 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 365 throw(::com::sun::star::uno::RuntimeException); 366 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() 367 throw(::com::sun::star::uno::RuntimeException); 368 }; 369 370 371 372 373 #endif 374 375