1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
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/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
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 .
18  */
19 
20 #ifndef INCLUDED_SW_INC_UNOTBL_HXX
21 #define INCLUDED_SW_INC_UNOTBL_HXX
22 
23 #include <com/sun/star/container/XNamed.hpp>
24 #include <com/sun/star/container/XEnumerationAccess.hpp>
25 #include <com/sun/star/util/XSortable.hpp>
26 #include <com/sun/star/chart/XChartDataArray.hpp>
27 #include <com/sun/star/text/XTextTableCursor.hpp>
28 #include <com/sun/star/text/XTextTable.hpp>
29 #include <com/sun/star/table/XCellRange.hpp>
30 #include <com/sun/star/sheet/XCellRangeData.hpp>
31 #include <com/sun/star/table/XAutoFormattable.hpp>
32 
33 #include <cppuhelper/implbase.hxx>
34 
35 #include <comphelper/uno3.hxx>
36 
37 #include <svl/listener.hxx>
38 
39 #include "TextCursorHelper.hxx"
40 #include "unotext.hxx"
41 #include "frmfmt.hxx"
42 #include "unocrsr.hxx"
43 
44 class SwTable;
45 class SwTableBox;
46 class SwTableLine;
47 class SwTableCursor;
48 class SfxItemPropertySet;
49 
50 typedef
51 cppu::WeakImplHelper
52 <
53     css::table::XCell,
54     css::lang::XServiceInfo,
55     css::beans::XPropertySet,
56     css::container::XEnumerationAccess
57 >
58 SwXCellBaseClass;
59 class SwXCell final : public SwXCellBaseClass,
60     public SwXText,
61     public SvtListener
62 {
63     friend void   sw_setString( SwXCell &rCell, const OUString &rText,
64                                 bool bKeepNumberFormat );
65     friend void   sw_setValue( SwXCell &rCell, double nVal );
66 
67     const SfxItemPropertySet*   m_pPropSet;
68     SwTableBox*                 m_pBox;       // only set in non-XML import
69     const SwStartNode*      m_pStartNode; // only set in XML import
70     SwFrameFormat* m_pTableFormat;
71 
72     // table position where pBox was found last
73     size_t m_nFndPos;
74     css::uno::Reference<css::text::XText> m_xParentText;
75     static size_t const NOTFOUND = SAL_MAX_SIZE;
76 
77     virtual const SwStartNode *GetStartNode() const override;
78 
79     virtual css::uno::Reference< css::text::XTextCursor >
80         CreateCursor() override;
81 
82     bool IsValid() const;
83 
84     virtual ~SwXCell() override;
85 
86     virtual void Notify(const SfxHint&) override;
87 
88 public:
89     SwXCell(SwFrameFormat* pTableFormat, SwTableBox* pBox, size_t nPos);
90     SwXCell(SwFrameFormat* pTableFormat, const SwStartNode& rStartNode); // XML import interface
91 
92 
93     static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId();
94 
95     //XUnoTunnel
96     virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
97 
98     virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override;
99     virtual void SAL_CALL acquire(  ) noexcept override;
100     virtual void SAL_CALL release(  ) noexcept override;
101 
102     //XTypeProvider
103     virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(  ) override;
104     virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) override;
105 
106     //XCell
107     virtual OUString SAL_CALL getFormula(  ) override;
108     virtual void SAL_CALL setFormula( const OUString& aFormula ) override;
109     virtual double SAL_CALL getValue(  ) override;
110     /// @throws css::uno::RuntimeException
getValue() const111     double getValue(  ) const
112         { return const_cast<SwXCell*>(this)->getValue(); };
113     virtual void SAL_CALL setValue( double nValue ) override;
114     virtual css::table::CellContentType SAL_CALL getType(  ) override;
115     virtual sal_Int32 SAL_CALL getError(  ) override;
116 
117     //XText
118     virtual css::uno::Reference< css::text::XTextCursor >  SAL_CALL createTextCursor() override;
119     virtual css::uno::Reference< css::text::XTextCursor >  SAL_CALL createTextCursorByRange(const css::uno::Reference< css::text::XTextRange > & aTextPosition) override;
120     virtual void SAL_CALL  setString(const OUString& aString) override;
121 
122     //XPropertySet
123     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
124     virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
125     virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
126     virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
127     virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
128     virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
129     virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
130 
131     //XServiceInfo
132     virtual OUString SAL_CALL getImplementationName() override;
133     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
134     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
135 
136     //XEnumerationAccess - was: XParagraphEnumerationAccess
137     virtual css::uno::Reference< css::container::XEnumeration >  SAL_CALL createEnumeration() override;
138 
139     //XElementAccess
140     virtual css::uno::Type SAL_CALL getElementType(  ) override;
141     virtual sal_Bool SAL_CALL hasElements(  ) override;
142 
GetTableBox() const143     SwTableBox* GetTableBox() const { return m_pBox; }
144     static rtl::Reference<SwXCell> CreateXCell(SwFrameFormat* pTableFormat, SwTableBox* pBox, SwTable *pTable = nullptr );
145     SwTableBox* FindBox(SwTable* pTable, SwTableBox* pBox);
GetFrameFormat() const146     SwFrameFormat* GetFrameFormat() const { return m_pTableFormat; }
147     double GetForcedNumericalValue() const;
148     css::uno::Any GetAny() const;
149 };
150 
151 class SwXTextTableRow final
152     : public cppu::WeakImplHelper<css::beans::XPropertySet, css::lang::XServiceInfo>
153     , public SvtListener
154 {
155     SwFrameFormat* m_pFormat;
156     SwTableLine* m_pLine;
157     const SfxItemPropertySet* m_pPropSet;
158 
GetFrameFormat()159     SwFrameFormat* GetFrameFormat() { return m_pFormat; }
GetFrameFormat() const160     const SwFrameFormat* GetFrameFormat() const { return m_pFormat; }
161     virtual ~SwXTextTableRow() override;
162 
163 public:
164     SwXTextTableRow(SwFrameFormat* pFormat, SwTableLine* pLine);
165 
166 
167     //XPropertySet
168     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
169     virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
170     virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
171     virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
172     virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
173     virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
174     virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
175 
176     //XServiceInfo
177     virtual OUString SAL_CALL getImplementationName() override;
178     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
179     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
180 
181     static SwTableLine* FindLine(SwTable* pTable, SwTableLine const * pLine);
182 
183     void Notify(const SfxHint&) override;
184 };
185 
186 typedef cppu::WeakImplHelper<
187     css::text::XTextTableCursor,
188     css::lang::XServiceInfo,
189     css::beans::XPropertySet> SwXTextTableCursor_Base;
190 class SW_DLLPUBLIC SwXTextTableCursor final
191     : public SwXTextTableCursor_Base
192     , public SvtListener
193     , public OTextCursorHelper
194 {
195     SwFrameFormat* m_pFrameFormat;
196     const SfxItemPropertySet* m_pPropSet;
197 
198 public:
199     SwXTextTableCursor(SwFrameFormat* pFormat, SwTableBox const* pBox);
200     SwXTextTableCursor(SwFrameFormat& rTableFormat, const SwTableCursor* pTableSelection);
201     DECLARE_XINTERFACE()
202 
203     //XTextTableCursor
204     virtual OUString SAL_CALL getRangeName() override;
205     virtual sal_Bool SAL_CALL gotoCellByName( const OUString& aCellName, sal_Bool bExpand ) override;
206     virtual sal_Bool SAL_CALL goLeft( sal_Int16 nCount, sal_Bool bExpand ) override;
207     virtual sal_Bool SAL_CALL goRight( sal_Int16 nCount, sal_Bool bExpand ) override;
208     virtual sal_Bool SAL_CALL goUp( sal_Int16 nCount, sal_Bool bExpand ) override;
209     virtual sal_Bool SAL_CALL goDown( sal_Int16 nCount, sal_Bool bExpand ) override;
210     virtual void SAL_CALL gotoStart( sal_Bool bExpand ) override;
211     virtual void SAL_CALL gotoEnd( sal_Bool bExpand ) override;
212     virtual sal_Bool SAL_CALL mergeRange() override;
213     virtual sal_Bool SAL_CALL splitRange( sal_Int16 Count, sal_Bool Horizontal ) override;
214 
215     //XPropertySet
216     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
217     virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
218     virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
219     virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
220     virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
221     virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
222     virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
223 
224     //XServiceInfo
225     virtual OUString SAL_CALL getImplementationName() override;
226     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
227     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
228 
229 
230     // ITextCursorHelper
231     virtual const SwPaM*        GetPaM() const override;
232     virtual SwPaM*              GetPaM() override;
233     virtual const SwDoc*        GetDoc() const override;
234     virtual SwDoc*              GetDoc() override;
235 
236     virtual void Notify( const SfxHint& ) override;
237 
238     const SwUnoCursor&            GetCursor() const;
239     SwUnoCursor&                  GetCursor();
240     sw::UnoCursorPointer m_pUnoCursor;
GetFrameFormat() const241     SwFrameFormat* GetFrameFormat() const { return m_pFrameFormat; }
242 };
243 
244 struct SwRangeDescriptor
245 {
246     sal_Int32 nTop;
247     sal_Int32 nLeft;
248     sal_Int32 nBottom;
249     sal_Int32 nRight;
250 
251     void Normalize();
252 };
253 
254 class SAL_DLLPUBLIC_RTTI SwXTextTable final : public cppu::WeakImplHelper
255 <
256     css::text::XTextTable,
257     css::lang::XServiceInfo,
258     css::table::XCellRange,
259     css::chart::XChartDataArray,
260     css::beans::XPropertySet,
261     css::container::XNamed,
262     css::table::XAutoFormattable,
263     css::util::XSortable,
264     css::lang::XUnoTunnel,
265     css::sheet::XCellRangeData
266 >
267 {
268 private:
269     class Impl;
270     ::sw::UnoImplPtr<Impl> m_pImpl;
271 
272     SwXTextTable();
273     SwXTextTable(SwFrameFormat& rFrameFormat);
274     virtual ~SwXTextTable() override;
275 
276 public:
277     static css::uno::Reference<css::text::XTextTable>
278             CreateXTextTable(SwFrameFormat * pFrameFormat);
279 
280     SW_DLLPUBLIC static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId();
281 
282     SW_DLLPUBLIC static void GetCellPosition(const OUString& rCellName, sal_Int32& o_rColumn, sal_Int32& o_rRow);
283 
284     SW_DLLPUBLIC SwFrameFormat* GetFrameFormat();
285 
286     //XUnoTunnel
287     virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
288 
289 
290     //XTextTable
291     virtual void SAL_CALL initialize( sal_Int32 nRows, sal_Int32 nColumns ) override;
292     virtual css::uno::Reference< css::table::XTableRows > SAL_CALL getRows(  ) override;
293     virtual css::uno::Reference< css::table::XTableColumns > SAL_CALL getColumns(  ) override;
294     virtual css::uno::Reference< css::table::XCell > SAL_CALL getCellByName( const OUString& aCellName ) override;
295     virtual css::uno::Sequence< OUString > SAL_CALL getCellNames(  ) override;
296     virtual css::uno::Reference< css::text::XTextTableCursor > SAL_CALL createCursorByCellName( const OUString& aCellName ) override;
297 
298     //XTextContent
299     virtual void SAL_CALL attach(const css::uno::Reference< css::text::XTextRange > & xTextRange) override;
300     virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getAnchor(  ) override;
301 
302     //XComponent
303     virtual void SAL_CALL dispose() override;
304     virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > & aListener) override;
305     virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > & aListener) override;
306 
307     //XCellRange
308     virtual css::uno::Reference< css::table::XCell > SAL_CALL getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) override;
309     virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) override;
310     virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getCellRangeByName( const OUString& aRange ) override;
311 
312     //XChartDataArray
313     virtual css::uno::Sequence< css::uno::Sequence< double > > SAL_CALL getData(  ) override;
314     virtual void SAL_CALL setData( const css::uno::Sequence< css::uno::Sequence< double > >& aData ) override;
315     virtual css::uno::Sequence< OUString > SAL_CALL getRowDescriptions(  ) override;
316     virtual void SAL_CALL setRowDescriptions( const css::uno::Sequence< OUString >& aRowDescriptions ) override;
317     virtual css::uno::Sequence< OUString > SAL_CALL getColumnDescriptions(  ) override;
318     virtual void SAL_CALL setColumnDescriptions( const css::uno::Sequence< OUString >& aColumnDescriptions ) override;
319 
320     //XChartData
321     virtual void SAL_CALL addChartDataChangeEventListener( const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override;
322     virtual void SAL_CALL removeChartDataChangeEventListener( const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override;
323     virtual double SAL_CALL getNotANumber(  ) override;
324     virtual sal_Bool SAL_CALL isNotANumber( double nNumber ) override;
325 
326     //XSortable
327     virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL createSortDescriptor() override;
328     virtual void SAL_CALL sort(const css::uno::Sequence< css::beans::PropertyValue >& xDescriptor) override;
329 
330     //XAutoFormattable
331     virtual void SAL_CALL autoFormat(const OUString& aName) override;
332 
333     //XPropertySet
334     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
335     virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
336     virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
337     virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
338     virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
339     virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
340     virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
341 
342     //XNamed
343     virtual OUString SAL_CALL getName() override;
344     virtual void SAL_CALL setName(const OUString& Name_) override;
345 
346     //XCellRangeData
347     virtual css::uno::Sequence< css::uno::Sequence< css::uno::Any > > SAL_CALL getDataArray(  ) override;
348     virtual void SAL_CALL setDataArray( const css::uno::Sequence< css::uno::Sequence< css::uno::Any > >& aArray ) override;
349 
350     //XServiceInfo
351     virtual OUString SAL_CALL getImplementationName() override;
352     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
353     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
354 
355 };
356 
357 class SwXCellRange final : public cppu::WeakImplHelper
358 <
359     css::table::XCellRange,
360     css::lang::XServiceInfo,
361     css::lang::XUnoTunnel,
362     css::beans::XPropertySet,
363     css::chart::XChartDataArray,
364     css::util::XSortable,
365     css::sheet::XCellRangeData
366 >
367 {
368 private:
369     class Impl;
370     ::sw::UnoImplPtr<Impl> m_pImpl;
371 
372     SwXCellRange(const sw::UnoCursorPointer& pCursor, SwFrameFormat& rFrameFormat, SwRangeDescriptor const & rDesc);
373     virtual ~SwXCellRange() override;
374 
375 public:
376     static ::rtl::Reference<SwXCellRange> CreateXCellRange(
377             const sw::UnoCursorPointer& pCursor, SwFrameFormat& rFrameFormat,
378             SwRangeDescriptor const & rDesc);
379 
380     static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId();
381 
382     void SetLabels(bool bFirstRowAsLabel, bool bFirstColumnAsLabel);
383 
384     std::vector<css::uno::Reference<css::table::XCell>> GetCells();
385 
386     const SwUnoCursor* GetTableCursor() const;
387 
388     //XUnoTunnel
389     virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
390 
391     //XCellRange
392     virtual css::uno::Reference< css::table::XCell > SAL_CALL getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) override;
393     virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) override;
394     virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getCellRangeByName( const OUString& aRange ) override;
395 
396     //XPropertySet
397     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) override;
398     virtual void SAL_CALL setPropertyValue(const OUString& aPropertyName, const css::uno::Any& aValue) override;
399     virtual css::uno::Any SAL_CALL getPropertyValue(const OUString& PropertyName) override;
400     virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
401     virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
402     virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
403     virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
404 
405     //XChartData
406     virtual void SAL_CALL addChartDataChangeEventListener( const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override;
407     virtual void SAL_CALL removeChartDataChangeEventListener( const css::uno::Reference< css::chart::XChartDataChangeEventListener >& aListener ) override;
408     virtual double SAL_CALL getNotANumber(  ) override;
409     virtual sal_Bool SAL_CALL isNotANumber( double nNumber ) override;
410 
411     //XChartDataArray
412     virtual css::uno::Sequence< css::uno::Sequence< double > > SAL_CALL getData(  ) override;
413     virtual void SAL_CALL setData( const css::uno::Sequence< css::uno::Sequence< double > >& aData ) override;
414     virtual css::uno::Sequence< OUString > SAL_CALL getRowDescriptions(  ) override;
415     virtual void SAL_CALL setRowDescriptions( const css::uno::Sequence< OUString >& aRowDescriptions ) override;
416     virtual css::uno::Sequence< OUString > SAL_CALL getColumnDescriptions(  ) override;
417     virtual void SAL_CALL setColumnDescriptions( const css::uno::Sequence< OUString >& aColumnDescriptions ) override;
418 
419     //XSortable
420     virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL createSortDescriptor() override;
421     virtual void SAL_CALL sort(const css::uno::Sequence< css::beans::PropertyValue >& xDescriptor) override;
422 
423     //XCellRangeData
424     virtual css::uno::Sequence< css::uno::Sequence< css::uno::Any > > SAL_CALL getDataArray(  ) override;
425     virtual void SAL_CALL setDataArray( const css::uno::Sequence< css::uno::Sequence< css::uno::Any > >& aArray ) override;
426 
427     //XServiceInfo
428     virtual OUString SAL_CALL getImplementationName() override;
429     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
430     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
431 
432 };
433 
434 class SwXTableRows final : public cppu::WeakImplHelper
435 <
436     css::table::XTableRows,
437     css::lang::XServiceInfo
438 >
439 {
440     class Impl;
441     ::sw::UnoImplPtr<Impl> m_pImpl;
442     SwFrameFormat* GetFrameFormat();
GetFrameFormat() const443     const SwFrameFormat* GetFrameFormat() const { return const_cast<SwXTableRows*>(this)->GetFrameFormat(); }
444     virtual ~SwXTableRows() override;
445 
446 public:
447     SwXTableRows(SwFrameFormat& rFrameFormat);
448 
449     //XIndexAccess
450     virtual sal_Int32 SAL_CALL getCount() override;
451     virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
452 
453     //XElementAccess
454     virtual css::uno::Type SAL_CALL getElementType(  ) override;
455     virtual sal_Bool SAL_CALL hasElements(  ) override;
456 
457     //XTableRows
458     virtual void SAL_CALL insertByIndex(sal_Int32 nIndex, sal_Int32 nCount) override;
459     virtual void SAL_CALL removeByIndex(sal_Int32 nIndex, sal_Int32 nCount) override;
460 
461     //XServiceInfo
462     virtual OUString SAL_CALL getImplementationName() override;
463     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
464     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
465 };
466 
467 class SwXTableColumns final : public cppu::WeakImplHelper
468 <
469     css::table::XTableColumns,
470     css::lang::XServiceInfo
471 >
472 {
473 private:
474     class Impl;
475     ::sw::UnoImplPtr<Impl> m_pImpl;
476     SwFrameFormat* GetFrameFormat() const;
477 
478     virtual ~SwXTableColumns() override;
479 public:
480     SwXTableColumns(SwFrameFormat& rFrameFormat);
481 
482 
483     //XIndexAccess
484     virtual sal_Int32 SAL_CALL getCount() override;
485     virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
486 
487     //XElementAccess
488     virtual css::uno::Type SAL_CALL getElementType(  ) override;
489     virtual sal_Bool SAL_CALL hasElements(  ) override;
490 
491     //XTableColumns
492     virtual void SAL_CALL insertByIndex(sal_Int32 nIndex, sal_Int32 nCount) override;
493     virtual void SAL_CALL removeByIndex(sal_Int32 nIndex, sal_Int32 nCount) override;
494 
495     //XServiceInfo
496     virtual OUString SAL_CALL getImplementationName() override;
497     virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
498     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
499 };
500 
501 int sw_CompareCellRanges(
502         const OUString &rRange1StartCell, const OUString &rRange1EndCell,
503         const OUString &rRange2StartCell, const OUString &rRange2EndCell,
504         bool bCmpColsFirst );
505 
506 void sw_NormalizeRange( OUString &rCell1, OUString &rCell2 );
507 
508 OUString sw_GetCellName( sal_Int32 nColumn, sal_Int32 nRow );
509 
510 int sw_CompareCellsByColFirst( const OUString &rCellName1, const OUString &rCellName2 );
511 
512 int sw_CompareCellsByRowFirst( const OUString &rCellName1, const OUString &rCellName2 );
513 
514 #endif
515 
516 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
517