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
10 #include <listenercontext.hxx>
11 #include <document.hxx>
12 #include <mtvelements.hxx>
13
14 namespace sc {
15
StartListeningContext(ScDocument & rDoc)16 StartListeningContext::StartListeningContext(ScDocument& rDoc) :
17 mrDoc(rDoc), mpSet(std::make_shared<ColumnBlockPositionSet>(rDoc)) {}
18
StartListeningContext(ScDocument & rDoc,const std::shared_ptr<ColumnBlockPositionSet> & pSet)19 StartListeningContext::StartListeningContext(
20 ScDocument& rDoc, const std::shared_ptr<ColumnBlockPositionSet>& pSet) :
21 mrDoc(rDoc), mpSet(pSet) {}
22
setColumnSet(const std::shared_ptr<const ColumnSet> & rpColSet)23 void StartListeningContext::setColumnSet( const std::shared_ptr<const ColumnSet>& rpColSet )
24 {
25 mpColSet = rpColSet;
26 }
27
getColumnSet() const28 const std::shared_ptr<const ColumnSet>& StartListeningContext::getColumnSet() const
29 {
30 return mpColSet;
31 }
32
getBlockPosition(SCTAB nTab,SCCOL nCol)33 ColumnBlockPosition* StartListeningContext::getBlockPosition(SCTAB nTab, SCCOL nCol)
34 {
35 return mpSet->getBlockPosition(nTab, nCol);
36 }
37
EndListeningContext(ScDocument & rDoc,ScTokenArray * pOldCode)38 EndListeningContext::EndListeningContext(ScDocument& rDoc, ScTokenArray* pOldCode) :
39 mrDoc(rDoc), maSet(), mpPosSet(std::make_shared<ColumnBlockPositionSet>(rDoc)),
40 mpOldCode(pOldCode), maPosDelta(0,0,0) {}
41
EndListeningContext(ScDocument & rDoc,const std::shared_ptr<ColumnBlockPositionSet> & pSet,ScTokenArray * pOldCode)42 EndListeningContext::EndListeningContext(
43 ScDocument& rDoc, const std::shared_ptr<ColumnBlockPositionSet>& pSet, ScTokenArray* pOldCode) :
44 mrDoc(rDoc), maSet(), mpPosSet(pSet),
45 mpOldCode(pOldCode), maPosDelta(0,0,0) {}
46
setPositionDelta(const ScAddress & rDelta)47 void EndListeningContext::setPositionDelta( const ScAddress& rDelta )
48 {
49 maPosDelta = rDelta;
50 }
51
getOldPosition(const ScAddress & rPos) const52 ScAddress EndListeningContext::getOldPosition( const ScAddress& rPos ) const
53 {
54 ScAddress aOldPos = rPos;
55 aOldPos.IncCol(maPosDelta.Col());
56 aOldPos.IncRow(maPosDelta.Row());
57 aOldPos.IncTab(maPosDelta.Tab());
58 return aOldPos;
59 }
60
getBlockPosition(SCTAB nTab,SCCOL nCol)61 ColumnBlockPosition* EndListeningContext::getBlockPosition(SCTAB nTab, SCCOL nCol)
62 {
63 return mpPosSet->getBlockPosition(nTab, nCol);
64 }
65
addEmptyBroadcasterPosition(SCTAB nTab,SCCOL nCol,SCROW nRow)66 void EndListeningContext::addEmptyBroadcasterPosition(SCTAB nTab, SCCOL nCol, SCROW nRow)
67 {
68 maSet.set(mrDoc, nTab, nCol, nRow, true);
69 }
70
purgeEmptyBroadcasters()71 void EndListeningContext::purgeEmptyBroadcasters()
72 {
73 PurgeListenerAction aAction(mrDoc);
74 maSet.executeAction(aAction);
75 }
76
PurgeListenerAction(ScDocument & rDoc)77 PurgeListenerAction::PurgeListenerAction(ScDocument& rDoc) :
78 mrDoc(rDoc), mpBlockPos(new ColumnBlockPosition) {}
79
startColumn(SCTAB nTab,SCCOL nCol)80 void PurgeListenerAction::startColumn( SCTAB nTab, SCCOL nCol )
81 {
82 mrDoc.InitColumnBlockPosition(*mpBlockPos, nTab, nCol);
83 }
84
execute(const ScAddress & rPos,SCROW nLength,bool bVal)85 void PurgeListenerAction::execute( const ScAddress& rPos, SCROW nLength, bool bVal )
86 {
87 if (bVal)
88 {
89 mrDoc.DeleteBroadcasters(*mpBlockPos, rPos, nLength);
90 }
91 };
92
93 }
94
95 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
96