Coverage Report

Created: 2025-12-08 09:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/svx/source/inc/cell.hxx
Line
Count
Source
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_SVX_SOURCE_INC_CELL_HXX
21
#define INCLUDED_SVX_SOURCE_INC_CELL_HXX
22
23
#include <config_options.h>
24
#include <com/sun/star/table/XMergeableCell.hpp>
25
#include <com/sun/star/awt/XLayoutConstrains.hpp>
26
#include <com/sun/star/lang/XEventListener.hpp>
27
28
#include <rtl/ref.hxx>
29
#include <svl/style.hxx>
30
#include <svl/grabbagitem.hxx>
31
#include <svx/sdtaitm.hxx>
32
#include "tablemodel.hxx"
33
#include <editeng/unotext.hxx>
34
#include <svx/svdtext.hxx>
35
36
37
class SfxItemSet;
38
class SdrObject;
39
namespace sdr::properties { class CellProperties; }
40
41
42
namespace sdr::table {
43
44
45
class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Cell final : public SdrText,
46
                public SvxUnoTextBase,
47
                public css::table::XMergeableCell,
48
                public css::awt::XLayoutConstrains,
49
                public css::lang::XEventListener
50
{
51
    friend class CellUndo;
52
53
public:
54
    SVX_DLLPRIVATE static rtl::Reference< Cell > create( SdrTableObj& rTableObj );
55
56
    // private
57
    SVX_DLLPRIVATE void dispose();
58
59
    // SdrTextShape proxy
60
    bool IsActiveCell() const;
61
    bool IsTextEditActive() const;
62
    SVX_DLLPRIVATE bool hasText() const;
63
64
    SVX_DLLPRIVATE void cloneFrom( const CellRef& rCell );
65
66
0
    SVX_DLLPRIVATE void setCellRect( ::tools::Rectangle const & rCellRect ) { maCellRect = rCellRect; }
67
0
    SVX_DLLPRIVATE const ::tools::Rectangle& getCellRect() const { return maCellRect; }
68
0
    SVX_DLLPRIVATE ::tools::Rectangle& getCellRect() { return maCellRect; }
69
70
    bool CanCreateEditOutlinerParaObject() const;
71
    std::optional<OutlinerParaObject> CreateEditOutlinerParaObject() const;
72
    SVX_DLLPRIVATE void SetStyleSheet( SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr );
73
    SVX_DLLPRIVATE virtual SfxStyleSheet* GetStyleSheet() const override;
74
    SVX_DLLPRIVATE void TakeTextAnchorRect(tools::Rectangle& rAnchorRect) const;
75
76
    SVX_DLLPRIVATE void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems);
77
    void SetMergedItem(const SfxPoolItem& rItem);
78
79
    SVX_DLLPRIVATE sal_Int32 calcPreferredWidth( const Size aSize );
80
    SVX_DLLPRIVATE sal_Int32 getMinimumWidth() const;
81
    SVX_DLLPRIVATE sal_Int32 getMinimumHeight();
82
83
    SVX_DLLPRIVATE tools::Long GetTextLeftDistance() const;
84
    SVX_DLLPRIVATE tools::Long GetTextRightDistance() const;
85
    SVX_DLLPRIVATE tools::Long GetTextUpperDistance() const;
86
    SVX_DLLPRIVATE tools::Long GetTextLowerDistance() const;
87
88
    SVX_DLLPRIVATE SdrTextVertAdjust GetTextVerticalAdjust() const;
89
    SdrTextHorzAdjust GetTextHorizontalAdjust() const;
90
91
    SVX_DLLPRIVATE void merge( sal_Int32 nColumnSpan, sal_Int32 nRowSpan );
92
    SVX_DLLPRIVATE void mergeContent( const CellRef& xSourceCell );
93
    SVX_DLLPRIVATE void replaceContentAndFormatting( const CellRef& xSourceCell );
94
95
    SVX_DLLPRIVATE void setMerged();
96
97
    SVX_DLLPRIVATE void copyFormatFrom( const CellRef& xSourceCell );
98
99
    // XInterface
100
    SVX_DLLPRIVATE virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& Type ) override;
101
    virtual void SAL_CALL acquire() noexcept override;
102
    virtual void SAL_CALL release() noexcept override;
103
104
    // XTypeProvider
105
    SVX_DLLPRIVATE virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(  ) override;
106
    SVX_DLLPRIVATE virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL getImplementationId(  ) override;
107
108
    // XLayoutConstrains
109
    SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL getMinimumSize() override;
110
    SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL getPreferredSize() override;
111
    SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override;
112
113
    // XMergeableCell
114
    virtual ::sal_Int32 SAL_CALL getRowSpan() override;
115
    virtual ::sal_Int32 SAL_CALL getColumnSpan() override;
116
    virtual sal_Bool SAL_CALL isMerged() override;
117
118
    // XCell
119
    SVX_DLLPRIVATE virtual OUString SAL_CALL getFormula() override;
120
    SVX_DLLPRIVATE virtual void SAL_CALL setFormula( const OUString& aFormula ) override;
121
    SVX_DLLPRIVATE virtual double SAL_CALL getValue() override;
122
    SVX_DLLPRIVATE virtual void SAL_CALL setValue( double nValue ) override;
123
    SVX_DLLPRIVATE virtual css::table::CellContentType SAL_CALL getType() override;
124
    SVX_DLLPRIVATE virtual sal_Int32 SAL_CALL getError() override;
125
126
    // css::beans::XPropertySet
127
    SVX_DLLPRIVATE virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override;
128
    SVX_DLLPRIVATE virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
129
    SVX_DLLPRIVATE virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override;
130
    SVX_DLLPRIVATE virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
131
    SVX_DLLPRIVATE virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
132
    SVX_DLLPRIVATE virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
133
    SVX_DLLPRIVATE virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
134
135
    // XMultiPropertySet
136
    SVX_DLLPRIVATE virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues ) override;
137
    SVX_DLLPRIVATE virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) override;
138
    SVX_DLLPRIVATE virtual void SAL_CALL addPropertiesChangeListener( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
139
    SVX_DLLPRIVATE virtual void SAL_CALL removePropertiesChangeListener( const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
140
    SVX_DLLPRIVATE virtual void SAL_CALL firePropertiesChangeEvent( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override;
141
142
    // css::beans::XPropertyState
143
    SVX_DLLPRIVATE virtual css::beans::PropertyState SAL_CALL getPropertyState( const OUString& PropertyName ) override;
144
    SVX_DLLPRIVATE virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) override;
145
    SVX_DLLPRIVATE virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) override;
146
    SVX_DLLPRIVATE virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) override;
147
148
    // XMultiPropertyStates
149
    SVX_DLLPRIVATE virtual void SAL_CALL setAllPropertiesToDefault() override;
150
    SVX_DLLPRIVATE virtual void SAL_CALL setPropertiesToDefault( const css::uno::Sequence< OUString >& aPropertyNames ) override;
151
    SVX_DLLPRIVATE virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyDefaults( const css::uno::Sequence< OUString >& aPropertyNames ) override;
152
153
    // XText
154
    SVX_DLLPRIVATE virtual void SAL_CALL insertTextContent( const css::uno::Reference< css::text::XTextRange >& xRange, const css::uno::Reference< css::text::XTextContent >& xContent, sal_Bool bAbsorb ) override;
155
    SVX_DLLPRIVATE virtual void SAL_CALL removeTextContent( const css::uno::Reference< css::text::XTextContent >& xContent ) override;
156
157
    // XSimpleText
158
    SVX_DLLPRIVATE virtual void SAL_CALL insertString( const css::uno::Reference< css::text::XTextRange >& xRange, const OUString& aString, sal_Bool bAbsorb ) override;
159
    SVX_DLLPRIVATE virtual void SAL_CALL insertControlCharacter( const css::uno::Reference< css::text::XTextRange >& xRange, ::sal_Int16 nControlCharacter, sal_Bool bAbsorb ) override;
160
161
    // XTextRange
162
    SVX_DLLPRIVATE virtual OUString SAL_CALL getString(  ) override;
163
    SVX_DLLPRIVATE virtual void SAL_CALL setString( const OUString& aString ) override;
164
165
    // XEventListener
166
    SVX_DLLPRIVATE virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
167
168
    SVX_DLLPRIVATE virtual void SetOutlinerParaObject( std::optional<OutlinerParaObject> pTextObject ) override;
169
170
    SVX_DLLPRIVATE void AddUndo();
171
172
    using SvxUnoTextRangeBase::setPropertyValue;
173
    using SvxUnoTextRangeBase::getPropertyValue;
174
175
    SVX_DLLPRIVATE sdr::properties::CellProperties* CloneProperties( SdrObject& rNewObj, Cell& rNewCell );
176
177
    SVX_DLLPRIVATE void notifyModified();
178
179
    void dumpAsXml(xmlTextWriterPtr pWriter, sal_Int32 nRow, sal_Int32 nCol) const;
180
181
private:
182
    SVX_DLLPRIVATE virtual const SfxItemSet& GetObjectItemSet() override;
183
    SVX_DLLPRIVATE void SetObjectItem(const SfxPoolItem& rItem);
184
185
    SVX_DLLPRIVATE static css::uno::Any GetAnyForItem( SfxItemSet const & aSet, const SfxItemPropertyMapEntry* pMap );
186
187
    /// @throws css::uno::RuntimeException
188
    SVX_DLLPRIVATE Cell( SdrTableObj& rTableObj );
189
    SVX_DLLPRIVATE virtual ~Cell() override;
190
191
    Cell(Cell const &) = delete;
192
    void operator =(Cell const &) = delete;
193
194
    const SvxItemPropertySet* mpPropSet;
195
196
    std::unique_ptr<sdr::properties::CellProperties> mpProperties;
197
198
    css::table::CellContentType mnCellContentType;
199
200
    OUString        msFormula;
201
    double          mfValue;
202
    ::sal_Int32     mnError;
203
    bool            mbMerged;
204
    ::sal_Int32     mnRowSpan;
205
    ::sal_Int32     mnColSpan;
206
207
    tools::Rectangle       maCellRect;
208
209
    css::uno::Reference< css::table::XTable > mxTable;
210
211
    std::unique_ptr<SfxGrabBagItem> mpGrabBagItem = {};
212
};
213
214
215
}
216
217
#endif
218
219
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */