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
;
32 StartListeningContext(const StartListeningContext
&) = delete;
33 const StartListeningContext
& operator=(const StartListeningContext
&) = delete;
34 StartListeningContext(ScDocument
& rDoc
);
35 StartListeningContext(ScDocument
& rDoc
, const std::shared_ptr
<ColumnBlockPositionSet
>& pSet
);
36 void setColumnSet( const std::shared_ptr
<const ColumnSet
>& pColSet
);
37 const std::shared_ptr
<const ColumnSet
>& getColumnSet() const;
38 ScDocument
& getDoc() { return mrDoc
;}
40 ColumnBlockPosition
* getBlockPosition(SCTAB nTab
, SCCOL nCol
);
43 class EndListeningContext
47 std::shared_ptr
<ColumnBlockPositionSet
> mpPosSet
;
48 ScTokenArray
* const mpOldCode
;
49 ScAddress maPosDelta
; // Add this to get the old position prior to the move.
52 EndListeningContext(const EndListeningContext
&) = delete;
53 const EndListeningContext
& operator=(const EndListeningContext
&) = delete;
54 EndListeningContext(ScDocument
& rDoc
, ScTokenArray
* pOldCode
= nullptr);
55 EndListeningContext(ScDocument
& rDoc
, const std::shared_ptr
<ColumnBlockPositionSet
>& pSet
, ScTokenArray
* pOldCode
= nullptr);
57 void setPositionDelta( const ScAddress
& rDelta
);
59 ScDocument
& getDoc() { return mrDoc
;}
60 ScTokenArray
* getOldCode() { return mpOldCode
;}
61 ScAddress
getOldPosition( const ScAddress
& rPos
) const;
63 ColumnBlockPosition
* getBlockPosition(SCTAB nTab
, SCCOL nCol
);
65 void addEmptyBroadcasterPosition(SCTAB nTab
, SCCOL nCol
, SCROW nRow
);
66 void purgeEmptyBroadcasters();
69 class PurgeListenerAction final
: public ColumnSpanSet::Action
72 std::unique_ptr
<ColumnBlockPosition
> mpBlockPos
;
75 PurgeListenerAction(const PurgeListenerAction
&) = delete;
76 const PurgeListenerAction
& operator=(const PurgeListenerAction
&) = delete;
77 PurgeListenerAction( ScDocument
& rDoc
);
79 virtual void startColumn( SCTAB nTab
, SCCOL nCol
) override
;
80 virtual void execute( const ScAddress
& rPos
, SCROW nLength
, bool bVal
) override
;
87 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */