ofz: Use-of-uninitialized-value
[LibreOffice.git] / sc / inc / cellsuno.hxx
bloba0d5b3e8971c03b8e50e949b1418a6d392021858
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #pragma once
22 #include "address.hxx"
23 #include "rangelst.hxx"
25 #include <formula/grammar.hxx>
26 #include <rtl/ref.hxx>
27 #include <sal/types.h>
28 #include <tools/link.hxx>
29 #include <svl/itemset.hxx>
30 #include <svl/lstner.hxx>
31 #include <svl/listener.hxx>
32 #include <com/sun/star/table/XTableChartsSupplier.hpp>
33 #include <com/sun/star/table/XTablePivotChartsSupplier.hpp>
34 #include <com/sun/star/chart/XChartDataArray.hpp>
35 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
36 #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
37 #include <com/sun/star/sheet/XSheetCellRange.hpp>
38 #include <com/sun/star/sheet/XFormulaQuery.hpp>
39 #include <com/sun/star/sheet/XCellRangeAddressable.hpp>
40 #include <com/sun/star/sheet/XSheetOperation.hpp>
41 #include <com/sun/star/sheet/XSheetCellRangeContainer.hpp>
42 #include <com/sun/star/sheet/XCellFormatRangesSupplier.hpp>
43 #include <com/sun/star/sheet/XUniqueCellFormatRangesSupplier.hpp>
44 #include <com/sun/star/sheet/XCellRangesQuery.hpp>
45 #include <com/sun/star/sheet/XSheetFilterableEx.hpp>
46 #include <com/sun/star/sheet/XSpreadsheet.hpp>
47 #include <com/sun/star/sheet/XSheetPageBreak.hpp>
48 #include <com/sun/star/sheet/XCellRangeMovement.hpp>
49 #include <com/sun/star/text/XText.hpp>
50 #include <com/sun/star/sheet/XPrintAreas.hpp>
51 #include <com/sun/star/sheet/XSheetLinkable.hpp>
52 #include <com/sun/star/sheet/XSubTotalCalculatable.hpp>
53 #include <com/sun/star/sheet/XArrayFormulaRange.hpp>
54 #include <com/sun/star/sheet/XCellRangeData.hpp>
55 #include <com/sun/star/sheet/XCellRangeFormula.hpp>
56 #include <com/sun/star/sheet/XCellSeries.hpp>
57 #include <com/sun/star/sheet/XMultipleOperation.hpp>
58 #include <com/sun/star/sheet/XFormulaTokens.hpp>
59 #include <com/sun/star/sheet/XArrayFormulaTokens.hpp>
60 #include <com/sun/star/sheet/XCellAddressable.hpp>
61 #include <com/sun/star/util/XReplaceable.hpp>
62 #include <com/sun/star/util/XIndent.hpp>
63 #include <com/sun/star/lang/XServiceInfo.hpp>
64 #include <com/sun/star/container/XNameContainer.hpp>
65 #include <com/sun/star/util/XMergeable.hpp>
66 #include <com/sun/star/table/XAutoFormattable.hpp>
67 #include <com/sun/star/util/XSortable.hpp>
68 #include <com/sun/star/util/XImportable.hpp>
69 #include <com/sun/star/table/XColumnRowRange.hpp>
70 #include <com/sun/star/table/XCell2.hpp>
71 #include <com/sun/star/sheet/XDataPilotTablesSupplier.hpp>
72 #include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp>
73 #include <com/sun/star/sheet/XScenariosSupplier.hpp>
74 #include <com/sun/star/sheet/XSheetAnnotationsSupplier.hpp>
75 #include <com/sun/star/sheet/XSheetAuditing.hpp>
76 #include <com/sun/star/sheet/XSheetOutline.hpp>
77 #include <com/sun/star/util/XProtectable.hpp>
78 #include <com/sun/star/sheet/XScenario.hpp>
79 #include <com/sun/star/sheet/XScenarioEnhanced.hpp>
80 #include <com/sun/star/util/XModifyBroadcaster.hpp>
81 #include <com/sun/star/beans/XPropertyState.hpp>
82 #include <com/sun/star/beans/XMultiPropertySet.hpp>
83 #include <com/sun/star/lang/XUnoTunnel.hpp>
84 #include <com/sun/star/document/XActionLockable.hpp>
85 #include <com/sun/star/beans/XTolerantMultiPropertySet.hpp>
86 #include <com/sun/star/sheet/XExternalSheetName.hpp>
87 #include <com/sun/star/document/XEventsSupplier.hpp>
88 #include <comphelper/servicehelper.hxx>
89 #include <cppuhelper/implbase.hxx>
90 #include <cppuhelper/weakref.hxx>
92 #include <memory>
93 #include <optional>
94 #include <vector>
96 namespace com::sun::star::table { struct BorderLine2; }
97 namespace com::sun::star::table { struct BorderLine; }
98 namespace com::sun::star::table { struct TableBorder2; }
99 namespace com::sun::star::table { struct TableBorder; }
101 class ScDocShell;
102 class ScMarkData;
103 class ScMemChart;
104 class ScPrintRangeSaver;
105 class ScAttrRectIterator;
106 class ScCellRangeObj;
107 class ScPatternAttr;
108 class SvxBoxItem;
109 class SvxBoxInfoItem;
110 class SvxItemPropertySet;
111 class SvxUnoText;
112 class ScDocument;
113 class SfxBroadcaster;
114 class SfxHint;
115 class SfxItemPropertyMap;
116 class SfxItemPropertySet;
117 struct SfxItemPropertyMapEntry;
119 namespace editeng { class SvxBorderLine; }
121 class ScLinkListener final : public SvtListener
123 Link<const SfxHint&,void> aLink;
124 public:
125 ScLinkListener(const Link<const SfxHint&,void>& rL) : aLink(rL) {}
126 virtual ~ScLinkListener() override;
127 virtual void Notify( const SfxHint& rHint ) override;
130 typedef std::vector< css::uno::Reference< css::util::XModifyListener > > XModifyListenerArr_Impl;
132 // ScCellRangesBase - base class for ScCellRangesObj (with access by index)
133 // and ScCellRangeObj (without access by index)
135 // XServiceInfo is implemented in derived classes
137 class ScHelperFunctions
139 public:
140 static const ::editeng::SvxBorderLine* GetBorderLine( ::editeng::SvxBorderLine& rLine, const css::table::BorderLine& rStruct );
141 static const ::editeng::SvxBorderLine* GetBorderLine( ::editeng::SvxBorderLine& rLine, const css::table::BorderLine2& rStruct );
142 static void FillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const css::table::TableBorder& rBorder );
143 static void FillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const css::table::TableBorder2& rBorder );
144 static void FillBorderLine( css::table::BorderLine& rStruct, const ::editeng::SvxBorderLine* pLine );
145 static void FillBorderLine( css::table::BorderLine2& rStruct, const ::editeng::SvxBorderLine* pLine );
146 static void AssignTableBorderToAny( css::uno::Any& rAny,
147 const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner, bool bInvalidateHorVerDist = false );
148 static void AssignTableBorder2ToAny( css::uno::Any& rAny,
149 const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner, bool bInvalidateHorVerDist = false );
150 static void ApplyBorder( ScDocShell* pDocShell, const ScRangeList& rRanges,
151 const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner );
154 namespace ooo::vba::excel {
155 class ScVbaCellRangeAccess; // Vba Helper class
158 class SC_DLLPUBLIC ScCellRangesBase :
159 public cppu::WeakImplHelper<
160 css::beans::XPropertySet,
161 css::beans::XMultiPropertySet,
162 css::beans::XPropertyState,
163 css::sheet::XSheetOperation,
164 css::chart::XChartDataArray,
165 css::util::XIndent,
166 css::sheet::XCellRangesQuery,
167 css::sheet::XFormulaQuery,
168 css::util::XReplaceable,
169 css::util::XModifyBroadcaster,
170 css::lang::XServiceInfo,
171 css::lang::XUnoTunnel,
172 css::beans::XTolerantMultiPropertySet>,
173 public SfxListener
175 friend class ScTabViewObj; // for select()
176 friend class ScTableSheetObj; // for createCursorByRange()
177 friend class ooo::vba::excel::ScVbaCellRangeAccess;
179 private:
180 const SfxItemPropertySet* pPropSet;
181 ScDocShell* pDocShell;
182 std::unique_ptr<ScLinkListener> pValueListener;
183 std::unique_ptr<ScPatternAttr> pCurrentFlat;
184 std::unique_ptr<ScPatternAttr> pCurrentDeep;
185 std::optional<SfxItemSet> moCurrentDataSet;
186 std::optional<SfxItemSet> moNoDfltCurrentDataSet;
187 std::unique_ptr<ScMarkData> pMarkData;
188 ScRangeList aRanges;
189 sal_Int64 nObjectId;
190 bool bChartColAsHdr;
191 bool bChartRowAsHdr;
192 bool bCursorOnly;
193 bool bGotDataChangedHint;
194 XModifyListenerArr_Impl aValueListeners;
196 DECL_DLLPRIVATE_LINK( ValueListenerHdl, const SfxHint&, void );
198 private:
199 void PaintGridRanges_Impl();
200 ScRangeListRef GetLimitedChartRanges_Impl( sal_Int32 nDataColumns, sal_Int32 nDataRows ) const;
201 void ForceChartListener_Impl();
202 std::unique_ptr<ScMemChart> CreateMemChart_Impl() const;
204 const ScPatternAttr* GetCurrentAttrsFlat();
205 const ScPatternAttr* GetCurrentAttrsDeep();
206 SfxItemSet* GetCurrentDataSet(bool bNoDflt = false);
207 void ForgetMarkData();
208 void ForgetCurrentAttrs();
210 css::uno::Reference<css::sheet::XSheetCellRanges>
211 QueryDifferences_Impl(const css::table::CellAddress& aCompare,
212 bool bColumnDiff);
213 css::uno::Reference<css::uno::XInterface>
214 Find_Impl(const css::uno::Reference<css::util::XSearchDescriptor>& xDesc,
215 const ScAddress* pLastPos);
217 protected:
218 const ScMarkData* GetMarkData();
220 // GetItemPropertyMap for derived classes must contain all entries, including base class
221 virtual const SfxItemPropertyMap& GetItemPropertyMap();
222 css::beans::PropertyState GetOnePropertyState(
223 sal_uInt16 nItemWhich, const SfxItemPropertyMapEntry* pEntry );
224 /// @throws css::uno::RuntimeException
225 virtual void GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
226 css::uno::Any& );
227 /// @throws css::lang::IllegalArgumentException
228 /// @throws css::uno::RuntimeException
229 virtual void SetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
230 const css::uno::Any& aValue );
232 public:
233 ScCellRangesBase(ScDocShell* pDocSh, const ScRange& rR);
234 ScCellRangesBase(ScDocShell* pDocSh, const ScRangeList& rR);
235 virtual ~ScCellRangesBase() override;
237 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
238 virtual void RefChanged();
240 // from derived classes and by getImplementation
241 ScDocShell* GetDocShell() const { return pDocShell; }
242 ScDocument* GetDocument() const;
243 const ScRangeList& GetRangeList() const { return aRanges; }
244 void AddRange(const ScRange& rRange, const bool bMergeRanges);
246 // arouse object created via service:
247 void InitInsertRange(ScDocShell* pDocSh, const ScRange& rR);
249 void SetNewRange(const ScRange& rNew); // for cursor
250 void SetNewRanges(const ScRangeList& rNew);
252 void SetCursorOnly(bool bSet);
253 bool IsCursorOnly() const { return bCursorOnly; }
255 // XSheetOperation
256 virtual double SAL_CALL computeFunction( css::sheet::GeneralFunction nFunction ) override;
257 virtual void SAL_CALL clearContents( sal_Int32 nContentFlags ) override;
259 // XPropertySet
260 virtual css::uno::Reference< css::beans::XPropertySetInfo >
261 SAL_CALL getPropertySetInfo() override;
262 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName,
263 const css::uno::Any& aValue ) override;
264 virtual css::uno::Any SAL_CALL getPropertyValue(
265 const OUString& PropertyName ) override;
266 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName,
267 const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
268 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName,
269 const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
270 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName,
271 const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
272 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName,
273 const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
275 // XMultiPropertySet
276 virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames,
277 const css::uno::Sequence< css::uno::Any >& aValues ) override;
278 virtual css::uno::Sequence< css::uno::Any > SAL_CALL
279 getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) override;
280 virtual void SAL_CALL addPropertiesChangeListener( const css::uno::Sequence< OUString >& aPropertyNames,
281 const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
282 virtual void SAL_CALL removePropertiesChangeListener( const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
283 virtual void SAL_CALL firePropertiesChangeEvent( const css::uno::Sequence< OUString >& aPropertyNames,
284 const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
286 // XTolerantMultiPropertySet
287 virtual css::uno::Sequence< css::beans::SetPropertyTolerantFailed > SAL_CALL
288 setPropertyValuesTolerant( const css::uno::Sequence< OUString >& aPropertyNames,
289 const css::uno::Sequence< css::uno::Any >& aValues ) override;
290 virtual css::uno::Sequence< css::beans::GetPropertyTolerantResult > SAL_CALL
291 getPropertyValuesTolerant( const css::uno::Sequence< OUString >& aPropertyNames ) override;
292 virtual css::uno::Sequence< css::beans::GetDirectPropertyTolerantResult > SAL_CALL
293 getDirectPropertyValuesTolerant( const css::uno::Sequence< OUString >& aPropertyNames ) override;
295 // XPropertyState
296 virtual css::beans::PropertyState SAL_CALL getPropertyState(
297 const OUString& PropertyName ) override;
298 virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL
299 getPropertyStates( const css::uno::Sequence<
300 OUString >& aPropertyName ) override;
301 virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) override;
302 virtual css::uno::Any SAL_CALL getPropertyDefault(
303 const OUString& aPropertyName ) override;
305 // XIndent
306 virtual void SAL_CALL decrementIndent() override;
307 virtual void SAL_CALL incrementIndent() override;
309 // XChartData
310 virtual void SAL_CALL addChartDataChangeEventListener(
311 const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override;
312 virtual void SAL_CALL removeChartDataChangeEventListener( const css::uno::Reference<
313 css::chart::XChartDataChangeEventListener >& aListener ) override;
314 virtual double SAL_CALL getNotANumber() override;
315 virtual sal_Bool SAL_CALL isNotANumber( double nNumber ) override;
317 // XChartDataArray
318 virtual css::uno::Sequence< css::uno::Sequence< double > > SAL_CALL
319 getData() override;
320 virtual void SAL_CALL setData( const css::uno::Sequence< css::uno::Sequence< double > >& aData ) override;
321 virtual css::uno::Sequence< OUString > SAL_CALL getRowDescriptions() override;
322 virtual void SAL_CALL setRowDescriptions( const css::uno::Sequence< OUString >& aRowDescriptions ) override;
323 virtual css::uno::Sequence< OUString > SAL_CALL getColumnDescriptions() override;
324 virtual void SAL_CALL setColumnDescriptions( const css::uno::Sequence< OUString >& aColumnDescriptions ) override;
326 // XCellRangesQuery
327 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
328 queryVisibleCells() override;
329 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
330 queryEmptyCells() override;
331 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
332 queryContentCells( sal_Int16 nContentFlags ) override;
333 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
334 queryFormulaCells( sal_Int32 nResultFlags ) override;
335 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
336 queryColumnDifferences(
337 const css::table::CellAddress& aCompare ) override;
338 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
339 queryRowDifferences(
340 const css::table::CellAddress& aCompare ) override;
341 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
342 queryIntersection(
343 const css::table::CellRangeAddress& aRange ) override;
345 // XFormulaQuery
346 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
347 queryDependents( sal_Bool bRecursive ) override;
348 virtual css::uno::Reference< css::sheet::XSheetCellRanges > SAL_CALL
349 queryPrecedents( sal_Bool bRecursive ) override;
351 // XSearchable
352 virtual css::uno::Reference< css::util::XSearchDescriptor > SAL_CALL
353 createSearchDescriptor() override;
354 virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL
355 findAll( const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override;
356 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
357 findFirst( const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override;
358 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
359 findNext( const css::uno::Reference< css::uno::XInterface >& xStartAt,
360 const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override;
362 // XReplaceable
363 virtual css::uno::Reference< css::util::XReplaceDescriptor > SAL_CALL
364 createReplaceDescriptor() override;
365 virtual sal_Int32 SAL_CALL replaceAll( const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override;
367 // XModifyBroadcaster
368 virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
369 virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
371 // XServiceInfo
372 virtual OUString SAL_CALL getImplementationName() override;
373 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
374 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
376 // XUnoTunnel
377 UNO3_GETIMPLEMENTATION_DECL(ScCellRangesBase)
380 class SC_DLLPUBLIC ScCellRangesObj final : public ScCellRangesBase,
381 public css::sheet::XSheetCellRangeContainer,
382 public css::container::XNameContainer,
383 public css::container::XEnumerationAccess
385 public:
386 struct ScNamedEntry
388 OUString aName;
389 ScRange aRange;
390 const OUString& GetName() const { return aName; }
391 const ScRange& GetRange() const { return aRange; }
393 private:
394 std::vector<ScNamedEntry> m_aNamedEntries;
396 rtl::Reference<ScCellRangeObj> GetObjectByIndex_Impl(sal_Int32 nIndex) const;
398 public:
399 ScCellRangesObj(ScDocShell* pDocSh, const ScRangeList& rR);
400 virtual ~ScCellRangesObj() override;
402 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
403 virtual void SAL_CALL acquire() noexcept override;
404 virtual void SAL_CALL release() noexcept override;
406 virtual void RefChanged() override;
408 // XSheetCellRanges
409 virtual css::uno::Reference< css::container::XEnumerationAccess > SAL_CALL
410 getCells() override;
411 virtual OUString SAL_CALL getRangeAddressesAsString() override;
412 virtual css::uno::Sequence< css::table::CellRangeAddress > SAL_CALL
413 getRangeAddresses() override;
415 // XSheetCellRangeContainer
416 virtual void SAL_CALL addRangeAddress( const css::table::CellRangeAddress& rRange,
417 sal_Bool bMergeRanges ) override;
418 virtual void SAL_CALL removeRangeAddress( const css::table::CellRangeAddress& rRange ) override;
419 virtual void SAL_CALL addRangeAddresses( const css::uno::Sequence<
420 css::table::CellRangeAddress >& rRanges,
421 sal_Bool bMergeRanges ) override;
422 virtual void SAL_CALL removeRangeAddresses( const css::uno::Sequence<
423 css::table::CellRangeAddress >& rRanges ) override;
425 // XNameContainer
426 virtual void SAL_CALL insertByName( const OUString& aName,
427 const css::uno::Any& aElement ) override;
428 virtual void SAL_CALL removeByName( const OUString& Name ) override;
430 // XNameReplace
431 virtual void SAL_CALL replaceByName( const OUString& aName,
432 const css::uno::Any& aElement ) override;
434 // XNameAccess
435 virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override;
436 virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
437 virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override;
439 // XIndexAccess
440 virtual sal_Int32 SAL_CALL getCount() override;
441 virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override;
443 // XElementAccess
444 virtual css::uno::Type SAL_CALL getElementType() override;
445 virtual sal_Bool SAL_CALL hasElements() override;
447 // XEnumerationAccess
448 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
449 createEnumeration() override;
451 // XServiceInfo
452 virtual OUString SAL_CALL getImplementationName() override;
453 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
454 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
456 // XTypeProvider
457 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
458 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
461 class SC_DLLPUBLIC ScCellRangeObj : public ScCellRangesBase,
462 public css::sheet::XCellRangeAddressable,
463 public css::sheet::XSheetCellRange,
464 public css::sheet::XArrayFormulaRange,
465 public css::sheet::XArrayFormulaTokens,
466 public css::sheet::XCellRangeData,
467 public css::sheet::XCellRangeFormula,
468 public css::sheet::XMultipleOperation,
469 public css::util::XMergeable,
470 public css::sheet::XCellSeries,
471 public css::table::XAutoFormattable,
472 public css::util::XSortable,
473 public css::sheet::XSheetFilterableEx,
474 public css::sheet::XSubTotalCalculatable,
475 public css::util::XImportable,
476 public css::sheet::XCellFormatRangesSupplier,
477 public css::sheet::XUniqueCellFormatRangesSupplier,
478 public css::table::XColumnRowRange
480 private:
481 const SfxItemPropertySet* pRangePropSet;
482 ScRange aRange;
484 protected:
485 const ScRange& GetRange() const { return aRange; }
486 virtual const SfxItemPropertyMap& GetItemPropertyMap() override;
487 virtual void GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
488 css::uno::Any& ) override;
489 virtual void SetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
490 const css::uno::Any& aValue ) override;
492 /// @throws css::lang::IndexOutOfBoundsException
493 /// @throws css::uno::RuntimeException
494 css::uno::Reference< css::table::XCell >
495 GetCellByPosition_Impl( sal_Int32 nColumn, sal_Int32 nRow );
497 /// @throws css::uno::RuntimeException
498 void SetArrayFormula_Impl( const OUString& rFormula,
499 const formula::FormulaGrammar::Grammar eGrammar );
501 public:
502 ScCellRangeObj(ScDocShell* pDocSh, const ScRange& rR);
503 virtual ~ScCellRangeObj() override;
505 // uses ObjectShell from document, if set (returns NULL otherwise)
506 static css::uno::Reference<css::table::XCellRange>
507 CreateRangeFromDoc( const ScDocument& rDoc, const ScRange& rR );
509 virtual css::uno::Any SAL_CALL queryInterface(
510 const css::uno::Type & rType ) override;
511 virtual void SAL_CALL acquire() noexcept override;
512 virtual void SAL_CALL release() noexcept override;
514 virtual void RefChanged() override;
516 // XCellRangeAddressable
517 virtual css::table::CellRangeAddress SAL_CALL getRangeAddress() override;
519 // XSheetCellRange
520 virtual css::uno::Reference< css::sheet::XSpreadsheet > SAL_CALL
521 getSpreadsheet() override;
523 // XArrayFormulaRange
524 virtual OUString SAL_CALL getArrayFormula() override;
525 virtual void SAL_CALL setArrayFormula( const OUString& aFormula ) override;
527 // XArrayFormulaTokens
528 virtual css::uno::Sequence< css::sheet::FormulaToken > SAL_CALL getArrayTokens() override;
529 virtual void SAL_CALL setArrayTokens( const css::uno::Sequence<
530 css::sheet::FormulaToken >& aTokens ) override;
532 // XCellRangeData
533 virtual css::uno::Sequence< css::uno::Sequence< css::uno::Any > > SAL_CALL getDataArray() override;
534 virtual void SAL_CALL setDataArray( const css::uno::Sequence< css::uno::Sequence< css::uno::Any > >& aArray ) override;
536 // XCellRangeFormula
537 virtual css::uno::Sequence< css::uno::Sequence<
538 OUString > > SAL_CALL getFormulaArray() override;
539 virtual void SAL_CALL setFormulaArray( const css::uno::Sequence< css::uno::Sequence< OUString > >& aArray ) override;
541 // XMultipleOperation
542 virtual void SAL_CALL setTableOperation(
543 const css::table::CellRangeAddress& aFormulaRange,
544 css::sheet::TableOperationMode nMode,
545 const css::table::CellAddress& aColumnCell,
546 const css::table::CellAddress& aRowCell ) override;
548 // XMergeable
549 virtual void SAL_CALL merge( sal_Bool bMerge ) override;
550 virtual sal_Bool SAL_CALL getIsMerged() override;
552 // XCellSeries
553 virtual void SAL_CALL fillSeries( css::sheet::FillDirection nFillDirection,
554 css::sheet::FillMode nFillMode,
555 css::sheet::FillDateMode nFillDateMode,
556 double fStep, double fEndValue ) override;
557 virtual void SAL_CALL fillAuto( css::sheet::FillDirection nFillDirection,
558 sal_Int32 nSourceCount ) override;
560 // XAutoFormattable
561 virtual void SAL_CALL autoFormat( const OUString& aName ) override;
563 // XSortable
564 virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL
565 createSortDescriptor() override;
566 virtual void SAL_CALL sort( const css::uno::Sequence<
567 css::beans::PropertyValue >& xDescriptor ) override;
569 // XSheetFilterableEx
570 virtual css::uno::Reference< css::sheet::XSheetFilterDescriptor > SAL_CALL
571 createFilterDescriptorByObject( const css::uno::Reference<
572 css::sheet::XSheetFilterable >& xObject ) override;
574 // XSheetFilterable
575 virtual css::uno::Reference< css::sheet::XSheetFilterDescriptor > SAL_CALL
576 createFilterDescriptor( sal_Bool bEmpty ) override;
577 virtual void SAL_CALL filter( const css::uno::Reference<
578 css::sheet::XSheetFilterDescriptor >& xDescriptor ) override;
580 // XSubTotalCalculatable
581 virtual css::uno::Reference< css::sheet::XSubTotalDescriptor > SAL_CALL
582 createSubTotalDescriptor( sal_Bool bEmpty ) override;
583 virtual void SAL_CALL applySubTotals(const css::uno::Reference< css::sheet::XSubTotalDescriptor >& xDescriptor,
584 sal_Bool bReplace) override;
585 virtual void SAL_CALL removeSubTotals() override;
587 // XImportable
588 virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL
589 createImportDescriptor( sal_Bool bEmpty ) override;
590 virtual void SAL_CALL doImport( const css::uno::Sequence< css::beans::PropertyValue >& aDescriptor ) override;
592 // XCellFormatRangesSupplier
593 virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL
594 getCellFormatRanges() override;
596 // XUniqueCellFormatRangesSupplier
597 virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL
598 getUniqueCellFormatRanges() override;
600 // XColumnRowRange
601 virtual css::uno::Reference< css::table::XTableColumns > SAL_CALL
602 getColumns() override;
603 virtual css::uno::Reference< css::table::XTableRows > SAL_CALL
604 getRows() override;
606 // XCellRange
607 virtual css::uno::Reference< css::table::XCell > SAL_CALL
608 getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) override;
609 virtual css::uno::Reference< css::table::XCellRange > SAL_CALL
610 getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop,
611 sal_Int32 nRight, sal_Int32 nBottom ) override;
612 virtual css::uno::Reference< css::table::XCellRange > SAL_CALL
613 getCellRangeByName( const OUString& aRange ) override;
614 /// @throws css::uno::RuntimeException
615 css::uno::Reference< css::table::XCellRange >
616 getCellRangeByName( const OUString& aRange, const ScAddress::Details& rDetails );
618 // XPropertySet override due to Range-Properties
619 virtual css::uno::Reference< css::beans::XPropertySetInfo >
620 SAL_CALL getPropertySetInfo() override;
622 // XServiceInfo
623 virtual OUString SAL_CALL getImplementationName() override;
624 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
625 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
627 // XTypeProvider
628 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
629 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
632 //! really derive cell from range?
634 class SC_DLLPUBLIC ScCellObj final : public ScCellRangeObj,
635 public css::text::XText,
636 public css::container::XEnumerationAccess,
637 public css::table::XCell2,
638 public css::sheet::XFormulaTokens,
639 public css::sheet::XCellAddressable,
640 public css::sheet::XSheetAnnotationAnchor,
641 public css::text::XTextFieldsSupplier,
642 public css::document::XActionLockable
644 private:
645 rtl::Reference<SvxUnoText> mxUnoText;
646 const SfxItemPropertySet* pCellPropSet;
647 ScAddress aCellPos;
648 sal_Int16 nActionLockCount;
650 private:
651 OUString GetInputString_Impl(bool bEnglish) const;
652 OUString GetOutputString_Impl() const;
653 void SetString_Impl(const OUString& rString, bool bInterpret, bool bEnglish);
654 double GetValue_Impl() const;
655 void SetValue_Impl(double fValue);
656 css::table::CellContentType GetContentType_Impl();
657 sal_Int32 GetResultType_Impl() const;
659 virtual const SfxItemPropertyMap& GetItemPropertyMap() override;
660 virtual void GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
661 css::uno::Any& ) override;
662 virtual void SetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
663 const css::uno::Any& aValue ) override;
665 public:
666 static const SvxItemPropertySet* GetEditPropertySet();
667 static const SfxItemPropertyMap& GetCellPropertyMap();
669 ScCellObj(ScDocShell* pDocSh, const ScAddress& rP);
670 virtual ~ScCellObj() override;
672 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
673 virtual void SAL_CALL acquire() noexcept override;
674 virtual void SAL_CALL release() noexcept override;
676 virtual void RefChanged() override;
678 SvxUnoText& GetUnoText();
680 // XML import needs to set results at formula cells,
681 // not meant for any other purpose.
682 const ScAddress& GetPosition() const { return aCellPos; }
684 void InputEnglishString( const OUString& rText );
686 // XText
687 virtual void SAL_CALL insertTextContent( const css::uno::Reference< css::text::XTextRange >& xRange,
688 const css::uno::Reference< css::text::XTextContent >& xContent,
689 sal_Bool bAbsorb ) override;
690 virtual void SAL_CALL removeTextContent( const css::uno::Reference< css::text::XTextContent >& xContent ) override;
692 // XSimpleText
693 virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL
694 createTextCursor() override;
695 virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL
696 createTextCursorByRange( const css::uno::Reference< css::text::XTextRange >& aTextPosition ) override;
697 virtual void SAL_CALL insertString( const css::uno::Reference< css::text::XTextRange >& xRange,
698 const OUString& aString, sal_Bool bAbsorb ) override;
699 virtual void SAL_CALL insertControlCharacter( const css::uno::Reference< css::text::XTextRange >& xRange,
700 sal_Int16 nControlCharacter, sal_Bool bAbsorb ) override;
702 // XTextRange
703 virtual css::uno::Reference< css::text::XText > SAL_CALL
704 getText() override;
705 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
706 getStart() override;
707 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
708 getEnd() override;
709 virtual OUString SAL_CALL getString() override;
710 virtual void SAL_CALL setString( const OUString& aString ) override;
712 // XEnumerationAccess
713 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
714 createEnumeration() override;
716 // XElementAccess
717 virtual css::uno::Type SAL_CALL getElementType() override;
718 virtual sal_Bool SAL_CALL hasElements() override;
720 // XCell
721 virtual OUString SAL_CALL getFormula() override;
722 virtual void SAL_CALL setFormula( const OUString& aFormula ) override;
723 virtual void SAL_CALL setFormulaResult( double nValue ) override;
724 virtual void SAL_CALL setFormulaString( const OUString& aFormula ) override;
725 virtual double SAL_CALL getValue() override;
726 virtual void SAL_CALL setValue( double nValue ) override;
727 virtual css::table::CellContentType SAL_CALL getType() override;
728 virtual sal_Int32 SAL_CALL getError() override;
730 // XFormulaTokens
731 virtual css::uno::Sequence< css::sheet::FormulaToken > SAL_CALL getTokens() override;
732 virtual void SAL_CALL setTokens( const css::uno::Sequence< css::sheet::FormulaToken >& aTokens ) override;
734 // XCellAddressable
735 virtual css::table::CellAddress SAL_CALL getCellAddress() override;
737 // XSheetAnnotationAnchor
738 virtual css::uno::Reference< css::sheet::XSheetAnnotation > SAL_CALL
739 getAnnotation() override;
741 // XTextFieldsSupplier
742 virtual css::uno::Reference< css::container::XEnumerationAccess > SAL_CALL
743 getTextFields() override;
744 virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL
745 getTextFieldMasters() override;
747 // XPropertySet override due to cell properties
748 virtual css::uno::Reference< css::beans::XPropertySetInfo >
749 SAL_CALL getPropertySetInfo() override;
751 // XServiceInfo
752 virtual OUString SAL_CALL getImplementationName() override;
753 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
754 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
756 // XTypeProvider
757 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
758 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
760 // XActionLockable
761 virtual sal_Bool SAL_CALL isActionLocked() override;
762 virtual void SAL_CALL addActionLock() override;
763 virtual void SAL_CALL removeActionLock() override;
764 virtual void SAL_CALL setActionLocks( sal_Int16 nLock ) override;
765 virtual sal_Int16 SAL_CALL resetActionLocks() override;
768 class SC_DLLPUBLIC ScTableSheetObj final : public ScCellRangeObj,
769 public css::sheet::XSpreadsheet,
770 public css::container::XNamed,
771 public css::sheet::XSheetPageBreak,
772 public css::sheet::XCellRangeMovement,
773 public css::table::XTableChartsSupplier,
774 public css::table::XTablePivotChartsSupplier,
775 public css::sheet::XDataPilotTablesSupplier,
776 public css::sheet::XScenariosSupplier,
777 public css::sheet::XSheetAnnotationsSupplier,
778 public css::drawing::XDrawPageSupplier,
779 public css::sheet::XPrintAreas,
780 public css::sheet::XSheetLinkable,
781 public css::sheet::XSheetAuditing,
782 public css::sheet::XSheetOutline,
783 public css::util::XProtectable,
784 public css::sheet::XScenario,
785 public css::sheet::XScenarioEnhanced,
786 public css::sheet::XExternalSheetName,
787 public css::document::XEventsSupplier
789 friend class ScTableSheetsObj; // for insertByName()
791 private:
792 const SfxItemPropertySet* pSheetPropSet;
794 SCTAB GetTab_Impl() const;
795 void PrintAreaUndo_Impl( std::unique_ptr<ScPrintRangeSaver> pOldRanges );
797 virtual const SfxItemPropertyMap& GetItemPropertyMap() override;
798 virtual void GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
799 css::uno::Any& ) override;
800 virtual void SetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
801 const css::uno::Any& aValue ) override;
803 public:
804 ScTableSheetObj(ScDocShell* pDocSh, SCTAB nTab);
805 virtual ~ScTableSheetObj() override;
807 void InitInsertSheet(ScDocShell* pDocSh, SCTAB nTab);
809 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
810 virtual void SAL_CALL acquire() noexcept override;
811 virtual void SAL_CALL release() noexcept override;
813 // XSpreadsheet
814 virtual css::uno::Reference< css::sheet::XSheetCellCursor >
815 SAL_CALL createCursor() override;
816 virtual css::uno::Reference< css::sheet::XSheetCellCursor > SAL_CALL
817 createCursorByRange( const css::uno::Reference<
818 css::sheet::XSheetCellRange >& aRange ) override;
820 // XSheetCellRange
821 virtual css::uno::Reference< css::sheet::XSpreadsheet > SAL_CALL
822 getSpreadsheet() override;
824 // XCellRange
825 virtual css::uno::Reference< css::table::XCell > SAL_CALL
826 getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) override;
827 virtual css::uno::Reference< css::table::XCellRange > SAL_CALL
828 getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop,
829 sal_Int32 nRight, sal_Int32 nBottom ) override;
830 using ScCellRangeObj::getCellRangeByName;
831 virtual css::uno::Reference< css::table::XCellRange > SAL_CALL
832 getCellRangeByName( const OUString& aRange ) override;
834 // XNamed
835 virtual OUString SAL_CALL getName() override;
836 virtual void SAL_CALL setName( const OUString& aName ) override;
838 // XSheetPageBreak
839 virtual css::uno::Sequence< css::sheet::TablePageBreakData > SAL_CALL
840 getColumnPageBreaks() override;
841 virtual css::uno::Sequence< css::sheet::TablePageBreakData > SAL_CALL
842 getRowPageBreaks() override;
843 virtual void SAL_CALL removeAllManualPageBreaks() override;
845 // XCellRangeMovement
846 virtual void SAL_CALL insertCells( const css::table::CellRangeAddress& aRange,
847 css::sheet::CellInsertMode nMode ) override;
848 virtual void SAL_CALL removeRange( const css::table::CellRangeAddress& aRange,
849 css::sheet::CellDeleteMode nMode ) override;
850 virtual void SAL_CALL moveRange( const css::table::CellAddress& aDestination,
851 const css::table::CellRangeAddress& aSource ) override;
852 virtual void SAL_CALL copyRange( const css::table::CellAddress& aDestination,
853 const css::table::CellRangeAddress& aSource ) override;
855 // XTableChartsSupplier
856 virtual css::uno::Reference< css::table::XTableCharts > SAL_CALL
857 getCharts() override;
859 // XTablePivotChartsSupplier
860 virtual css::uno::Reference<css::table::XTablePivotCharts> SAL_CALL
861 getPivotCharts() override;
863 // XDataPilotTablesSupplier
864 virtual css::uno::Reference< css::sheet::XDataPilotTables > SAL_CALL
865 getDataPilotTables() override;
867 // XScenariosSupplier
868 virtual css::uno::Reference< css::sheet::XScenarios > SAL_CALL
869 getScenarios() override;
871 // XSheetAnnotationsSupplier
872 virtual css::uno::Reference< css::sheet::XSheetAnnotations > SAL_CALL
873 getAnnotations() override;
875 // XDrawPageSupplier
876 virtual css::uno::Reference< css::drawing::XDrawPage > SAL_CALL
877 getDrawPage() override;
879 // XPrintAreas
880 virtual css::uno::Sequence< css::table::CellRangeAddress > SAL_CALL
881 getPrintAreas() override;
882 virtual void SAL_CALL setPrintAreas( const css::uno::Sequence<
883 css::table::CellRangeAddress >& aPrintAreas ) override;
884 virtual sal_Bool SAL_CALL getPrintTitleColumns() override;
885 virtual void SAL_CALL setPrintTitleColumns( sal_Bool bPrintTitleColumns ) override;
886 virtual css::table::CellRangeAddress SAL_CALL getTitleColumns() override;
887 virtual void SAL_CALL setTitleColumns(
888 const css::table::CellRangeAddress& aTitleColumns ) override;
889 virtual sal_Bool SAL_CALL getPrintTitleRows() override;
890 virtual void SAL_CALL setPrintTitleRows( sal_Bool bPrintTitleRows ) override;
891 virtual css::table::CellRangeAddress SAL_CALL getTitleRows() override;
892 virtual void SAL_CALL setTitleRows(
893 const css::table::CellRangeAddress& aTitleRows ) override;
895 // XSheetLinkable
896 virtual css::sheet::SheetLinkMode SAL_CALL getLinkMode() override;
897 virtual void SAL_CALL setLinkMode( css::sheet::SheetLinkMode nLinkMode ) override;
898 virtual OUString SAL_CALL getLinkUrl() override;
899 virtual void SAL_CALL setLinkUrl( const OUString& aLinkUrl ) override;
900 virtual OUString SAL_CALL getLinkSheetName() override;
901 virtual void SAL_CALL setLinkSheetName( const OUString& aLinkSheetName ) override;
902 virtual void SAL_CALL link( const OUString& aUrl,
903 const OUString& aSheetName,
904 const OUString& aFilterName,
905 const OUString& aFilterOptions,
906 css::sheet::SheetLinkMode nMode ) override;
908 // XSheetAuditing
909 virtual sal_Bool SAL_CALL hideDependents( const css::table::CellAddress& aPosition ) override;
910 virtual sal_Bool SAL_CALL hidePrecedents( const css::table::CellAddress& aPosition ) override;
911 virtual sal_Bool SAL_CALL showDependents( const css::table::CellAddress& aPosition ) override;
912 virtual sal_Bool SAL_CALL showPrecedents( const css::table::CellAddress& aPosition ) override;
913 virtual sal_Bool SAL_CALL showErrors( const css::table::CellAddress& aPosition ) override;
914 virtual sal_Bool SAL_CALL showInvalid() override;
915 virtual void SAL_CALL clearArrows() override;
917 // XSheetOutline
918 virtual void SAL_CALL group( const css::table::CellRangeAddress& aRange,
919 css::table::TableOrientation nOrientation ) override;
920 virtual void SAL_CALL ungroup( const css::table::CellRangeAddress& aRange,
921 css::table::TableOrientation nOrientation ) override;
922 virtual void SAL_CALL autoOutline( const css::table::CellRangeAddress& aRange ) override;
923 virtual void SAL_CALL clearOutline() override;
924 virtual void SAL_CALL hideDetail( const css::table::CellRangeAddress& aRange ) override;
925 virtual void SAL_CALL showDetail( const css::table::CellRangeAddress& aRange ) override;
926 virtual void SAL_CALL showLevel( sal_Int16 nLevel,
927 css::table::TableOrientation nOrientation ) override;
929 // XProtectable
930 virtual void SAL_CALL protect( const OUString& aPassword ) override;
931 virtual void SAL_CALL unprotect( const OUString& aPassword ) override;
932 virtual sal_Bool SAL_CALL isProtected() override;
934 // XScenario
935 virtual sal_Bool SAL_CALL getIsScenario() override;
936 virtual OUString SAL_CALL getScenarioComment() override;
937 virtual void SAL_CALL setScenarioComment( const OUString& aScenarioComment ) override;
938 virtual void SAL_CALL addRanges( const css::uno::Sequence<
939 css::table::CellRangeAddress >& aRanges ) override;
940 virtual void SAL_CALL apply() override;
941 // XScenarioEnhanced
942 virtual css::uno::Sequence< css::table::CellRangeAddress > SAL_CALL
943 getRanges( ) override;
945 // XExternalSheetName
946 virtual void SAL_CALL setExternalName( const OUString& aUrl, const OUString& aSheetName ) override;
948 // XEventsSupplier
949 virtual css::uno::Reference< css::container::XNameReplace > SAL_CALL getEvents() override;
951 // XPropertySet override due to sheet properties
952 virtual css::uno::Reference< css::beans::XPropertySetInfo >
953 SAL_CALL getPropertySetInfo() override;
955 // XServiceInfo
956 virtual OUString SAL_CALL getImplementationName() override;
957 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
958 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
960 // XUnoTunnel
961 UNO3_GETIMPLEMENTATION_DECL(ScTableSheetObj);
963 // XTypeProvider
964 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
965 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
968 class ScTableColumnObj final : public ScCellRangeObj,
969 public css::container::XNamed
971 private:
972 const SfxItemPropertySet* pColPropSet;
974 virtual const SfxItemPropertyMap& GetItemPropertyMap() override;
975 virtual void GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
976 css::uno::Any& ) override;
977 virtual void SetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
978 const css::uno::Any& aValue ) override;
980 public:
981 ScTableColumnObj(ScDocShell* pDocSh, SCCOL nCol, SCTAB nTab);
982 virtual ~ScTableColumnObj() override;
984 virtual css::uno::Any SAL_CALL queryInterface(
985 const css::uno::Type & rType ) override;
986 virtual void SAL_CALL acquire() noexcept override;
987 virtual void SAL_CALL release() noexcept override;
989 // XNamed
990 virtual OUString SAL_CALL getName() override;
991 virtual void SAL_CALL setName( const OUString& aName ) override;
993 // XPropertySet override due to column properties
994 virtual css::uno::Reference< css::beans::XPropertySetInfo >
995 SAL_CALL getPropertySetInfo() override;
997 // XServiceInfo
998 virtual OUString SAL_CALL getImplementationName() override;
999 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1000 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1002 // XTypeProvider
1003 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
1004 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
1007 class ScTableRowObj final : public ScCellRangeObj
1009 private:
1010 const SfxItemPropertySet* pRowPropSet;
1012 virtual const SfxItemPropertyMap& GetItemPropertyMap() override;
1013 virtual void GetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
1014 css::uno::Any& ) override;
1015 virtual void SetOnePropertyValue( const SfxItemPropertyMapEntry* pEntry,
1016 const css::uno::Any& aValue ) override;
1018 public:
1019 ScTableRowObj(ScDocShell* pDocSh, SCROW nRow, SCTAB nTab);
1020 virtual ~ScTableRowObj() override;
1022 // XPropertySet override due to row properties
1023 virtual css::uno::Reference< css::beans::XPropertySetInfo >
1024 SAL_CALL getPropertySetInfo() override;
1026 // XServiceInfo
1027 virtual OUString SAL_CALL getImplementationName() override;
1028 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1029 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1032 class ScCellsObj final : public cppu::WeakImplHelper<
1033 css::container::XEnumerationAccess,
1034 css::lang::XServiceInfo >,
1035 public SfxListener
1037 private:
1038 ScDocShell* pDocShell;
1039 ScRangeList aRanges;
1041 public:
1042 ScCellsObj(ScDocShell* pDocSh, const ScRangeList& rR);
1043 virtual ~ScCellsObj() override;
1045 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
1047 // XEnumerationAccess
1048 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
1049 createEnumeration() override;
1051 // XElementAccess
1052 virtual css::uno::Type SAL_CALL getElementType() override;
1053 virtual sal_Bool SAL_CALL hasElements() override;
1055 // XServiceInfo
1056 virtual OUString SAL_CALL getImplementationName() override;
1057 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1058 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1061 class ScCellsEnumeration final : public cppu::WeakImplHelper<
1062 css::container::XEnumeration,
1063 css::lang::XServiceInfo >,
1064 public SfxListener
1066 private:
1067 ScDocShell* pDocShell;
1068 ScRangeList aRanges;
1069 ScAddress aPos;
1070 std::unique_ptr<ScMarkData> pMark;
1071 bool bAtEnd;
1073 private:
1074 void Advance_Impl();
1075 void CheckPos_Impl();
1077 public:
1078 ScCellsEnumeration(ScDocShell* pDocSh, const ScRangeList& rR);
1079 virtual ~ScCellsEnumeration() override;
1081 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
1083 // XEnumeration
1084 virtual sal_Bool SAL_CALL hasMoreElements() override;
1085 virtual css::uno::Any SAL_CALL nextElement() override;
1087 // XServiceInfo
1088 virtual OUString SAL_CALL getImplementationName() override;
1089 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1090 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1093 class ScCellFormatsObj final : public cppu::WeakImplHelper<
1094 css::container::XIndexAccess,
1095 css::container::XEnumerationAccess,
1096 css::lang::XServiceInfo >,
1097 public SfxListener
1099 private:
1100 ScDocShell* pDocShell;
1101 ScRange aTotalRange;
1103 private:
1104 rtl::Reference<ScCellRangeObj> GetObjectByIndex_Impl(tools::Long nIndex) const;
1106 public:
1107 ScCellFormatsObj(ScDocShell* pDocSh, const ScRange& rR);
1108 virtual ~ScCellFormatsObj() override;
1110 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
1112 // XIndexAccess
1113 virtual sal_Int32 SAL_CALL getCount() override;
1114 virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override;
1116 // XEnumerationAccess
1117 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
1118 createEnumeration() override;
1120 // XElementAccess
1121 virtual css::uno::Type SAL_CALL getElementType() override;
1122 virtual sal_Bool SAL_CALL hasElements() override;
1124 // XServiceInfo
1125 virtual OUString SAL_CALL getImplementationName() override;
1126 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1127 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1130 class ScCellFormatsEnumeration final : public cppu::WeakImplHelper<
1131 css::container::XEnumeration,
1132 css::lang::XServiceInfo >,
1133 public SfxListener
1135 private:
1136 ScDocShell* pDocShell;
1137 SCTAB nTab;
1138 std::unique_ptr<ScAttrRectIterator> pIter;
1139 ScRange aNext;
1140 bool bAtEnd;
1141 bool bDirty;
1143 private:
1144 void Advance_Impl();
1145 rtl::Reference<ScCellRangeObj> NextObject_Impl();
1147 public:
1148 ScCellFormatsEnumeration(ScDocShell* pDocSh, const ScRange& rR);
1149 virtual ~ScCellFormatsEnumeration() override;
1151 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
1153 // XEnumeration
1154 virtual sal_Bool SAL_CALL hasMoreElements() override;
1155 virtual css::uno::Any SAL_CALL nextElement() override;
1157 // XServiceInfo
1158 virtual OUString SAL_CALL getImplementationName() override;
1159 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1160 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1163 class ScUniqueCellFormatsObj final : public cppu::WeakImplHelper<
1164 css::container::XIndexAccess,
1165 css::container::XEnumerationAccess,
1166 css::lang::XServiceInfo >,
1167 public SfxListener
1169 private:
1170 ScDocShell* pDocShell;
1171 std::vector<ScRangeList> aRangeLists;
1173 public:
1174 ScUniqueCellFormatsObj(ScDocShell* pDocSh, const ScRange& rR);
1175 virtual ~ScUniqueCellFormatsObj() override;
1177 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
1179 // XIndexAccess
1180 virtual sal_Int32 SAL_CALL getCount() override;
1181 virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override;
1183 // XEnumerationAccess
1184 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
1185 createEnumeration() override;
1187 // XElementAccess
1188 virtual css::uno::Type SAL_CALL getElementType() override;
1189 virtual sal_Bool SAL_CALL hasElements() override;
1191 // XServiceInfo
1192 virtual OUString SAL_CALL getImplementationName() override;
1193 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1194 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1197 class ScUniqueCellFormatsEnumeration final : public cppu::WeakImplHelper<
1198 css::container::XEnumeration,
1199 css::lang::XServiceInfo >,
1200 public SfxListener
1202 private:
1203 std::vector<ScRangeList> aRangeLists;
1204 ScDocShell* pDocShell;
1205 sal_Int32 nCurrentPosition;
1207 public:
1208 ScUniqueCellFormatsEnumeration(ScDocShell* pDocShell, std::vector<ScRangeList>&& rRangeLists);
1209 virtual ~ScUniqueCellFormatsEnumeration() override;
1211 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
1213 // XEnumeration
1214 virtual sal_Bool SAL_CALL hasMoreElements() override;
1215 virtual css::uno::Any SAL_CALL nextElement() override;
1217 // XServiceInfo
1218 virtual OUString SAL_CALL getImplementationName() override;
1219 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
1220 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
1223 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */