1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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/.
10 #ifndef INCLUDED_SC_INC_LISTENERCONTEXT_HXX
11 #define INCLUDED_SC_INC_LISTENERCONTEXT_HXX
13 #include "address.hxx"
14 #include "columnspanset.hxx"
15 #include "mtvelements.hxx"
26 class StartListeningContext
29 std::shared_ptr
<ColumnBlockPositionSet
> mpSet
;
30 std::shared_ptr
<const ColumnSet
> mpColSet
;
33 StartListeningContext(const StartListeningContext
&) = delete;
34 const StartListeningContext
& operator=(const StartListeningContext
&) = delete;
35 StartListeningContext(ScDocument
& rDoc
);
36 StartListeningContext(ScDocument
& rDoc
, const std::shared_ptr
<ColumnBlockPositionSet
>& pSet
);
37 void setColumnSet(const std::shared_ptr
<const ColumnSet
>& pColSet
);
38 const std::shared_ptr
<const ColumnSet
>& getColumnSet() const;
39 ScDocument
& getDoc() { return mrDoc
; }
41 ColumnBlockPosition
* getBlockPosition(SCTAB nTab
, SCCOL nCol
);
44 class EndListeningContext
48 std::shared_ptr
<ColumnBlockPositionSet
> mpPosSet
;
49 ScTokenArray
* mpOldCode
;
50 ScAddress maPosDelta
; // Add this to get the old position prior to the move.
53 EndListeningContext(const EndListeningContext
&) = delete;
54 const EndListeningContext
& operator=(const EndListeningContext
&) = delete;
55 EndListeningContext(ScDocument
& rDoc
, ScTokenArray
* pOldCode
= nullptr);
56 EndListeningContext(ScDocument
& rDoc
, const std::shared_ptr
<ColumnBlockPositionSet
>& pSet
,
57 ScTokenArray
* pOldCode
= nullptr);
59 void setPositionDelta(const ScAddress
& rDelta
);
61 ScDocument
& getDoc() { return mrDoc
; }
62 ScTokenArray
* getOldCode() { return mpOldCode
; }
63 ScAddress
getOldPosition(const ScAddress
& rPos
) const;
65 ColumnBlockPosition
* getBlockPosition(SCTAB nTab
, SCCOL nCol
);
67 void addEmptyBroadcasterPosition(SCTAB nTab
, SCCOL nCol
, SCROW nRow
);
68 void purgeEmptyBroadcasters();
71 class PurgeListenerAction final
: public ColumnSpanSet::Action
74 std::unique_ptr
<ColumnBlockPosition
> mpBlockPos
;
77 PurgeListenerAction(const PurgeListenerAction
&) = delete;
78 const PurgeListenerAction
& operator=(const PurgeListenerAction
&) = delete;
79 PurgeListenerAction(ScDocument
& rDoc
);
81 virtual void startColumn(SCTAB nTab
, SCCOL nCol
) override
;
82 virtual void execute(const ScAddress
& rPos
, SCROW nLength
, bool bVal
) override
;
88 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */