update emoji autocorrect entries from po-files
[LibreOffice.git] / sc / inc / chartlis.hxx
blob667e5ea978fdc705201b490e9ffe9ffdaa8eb811
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SC_INC_CHARTLIS_HXX
21 #define INCLUDED_SC_INC_CHARTLIS_HXX
23 #include <vcl/timer.hxx>
24 #include <vcl/idle.hxx>
25 #include <svl/listener.hxx>
26 #include "rangelst.hxx"
27 #include "token.hxx"
28 #include "externalrefmgr.hxx"
30 #include <vector>
31 #include <list>
33 #include <boost/scoped_ptr.hpp>
34 #include <boost/ptr_container/ptr_map.hpp>
35 #include <unordered_set>
37 class ScDocument;
38 class ScChartUnoData;
39 #include <com/sun/star/chart/XChartData.hpp>
40 #include <com/sun/star/chart/XChartDataChangeEventListener.hpp>
42 class SC_DLLPUBLIC ScChartListener : public SvtListener
44 public:
45 class ExternalRefListener : public ScExternalRefManager::LinkListener
47 public:
48 ExternalRefListener(ScChartListener& rParent, ScDocument* pDoc);
49 virtual ~ExternalRefListener();
50 virtual void notify(sal_uInt16 nFileId, ScExternalRefManager::LinkUpdateType eType) SAL_OVERRIDE;
51 void addFileId(sal_uInt16 nFileId);
52 void removeFileId(sal_uInt16 nFileId);
53 std::unordered_set<sal_uInt16>& getAllFileIds() { return maFileIds;}
55 private:
56 ExternalRefListener(const ExternalRefListener& r) SAL_DELETED_FUNCTION;
58 ScChartListener& mrParent;
59 std::unordered_set<sal_uInt16> maFileIds;
60 ScDocument* mpDoc;
63 private:
65 boost::scoped_ptr<ExternalRefListener> mpExtRefListener;
66 boost::scoped_ptr<std::vector<ScTokenRef> > mpTokens;
68 OUString maName;
69 ScChartUnoData* pUnoData;
70 ScDocument* mpDoc;
71 bool bUsed:1; // for ScChartListenerCollection::FreeUnused
72 bool bDirty:1;
73 bool bSeriesRangesScheduled:1;
75 ScChartListener& operator=( const ScChartListener& ) SAL_DELETED_FUNCTION;
77 public:
78 ScChartListener( const OUString& rName, ScDocument* pDoc,
79 const ScRangeListRef& rRangeListRef );
80 ScChartListener( const OUString& rName, ScDocument* pDoc,
81 ::std::vector<ScTokenRef>* pTokens );
82 ScChartListener( const ScChartListener& );
83 virtual ~ScChartListener();
85 const OUString& GetName() const { return maName;}
87 void SetUno( const com::sun::star::uno::Reference< com::sun::star::chart::XChartDataChangeEventListener >& rListener,
88 const com::sun::star::uno::Reference< com::sun::star::chart::XChartData >& rSource );
89 com::sun::star::uno::Reference< com::sun::star::chart::XChartDataChangeEventListener > GetUnoListener() const;
90 com::sun::star::uno::Reference< com::sun::star::chart::XChartData > GetUnoSource() const;
92 bool IsUno() const { return (pUnoData != NULL); }
94 virtual void Notify( const SfxHint& rHint ) SAL_OVERRIDE;
95 void StartListeningTo();
96 void EndListeningTo();
97 void ChangeListening( const ScRangeListRef& rRangeListRef,
98 bool bDirty = false );
99 void Update();
100 ScRangeListRef GetRangeList() const;
101 void SetRangeList( const ScRangeListRef& rNew );
102 bool IsUsed() const { return bUsed; }
103 void SetUsed( bool bFlg ) { bUsed = bFlg; }
104 bool IsDirty() const { return bDirty; }
105 void SetDirty( bool bFlg ) { bDirty = bFlg; }
107 void UpdateChartIntersecting( const ScRange& rRange );
109 // if chart series ranges are to be updated later on (e.g. DeleteTab, InsertTab)
110 void ScheduleSeriesRanges() { bSeriesRangesScheduled = true; }
111 void UpdateScheduledSeriesRanges();
112 void UpdateSeriesRanges();
114 ExternalRefListener* GetExtRefListener();
115 void SetUpdateQueue();
117 bool operator==( const ScChartListener& ) const;
118 bool operator!=( const ScChartListener& r ) const;
121 class ScChartHiddenRangeListener
123 public:
124 ScChartHiddenRangeListener();
125 virtual ~ScChartHiddenRangeListener();
126 virtual void notify() = 0;
129 class ScChartListenerCollection
131 public:
132 struct RangeListenerItem
134 ScRange maRange;
135 ScChartHiddenRangeListener* mpListener;
136 explicit RangeListenerItem(const ScRange& rRange, ScChartHiddenRangeListener* p);
139 typedef boost::ptr_map<OUString, ScChartListener> ListenersType;
140 typedef std::unordered_set<OUString, OUStringHash> StringSetType;
141 private:
142 ListenersType maListeners;
143 enum UpdateStatus
145 SC_CLCUPDATE_NONE,
146 SC_CLCUPDATE_RUNNING,
147 SC_CLCUPDATE_MODIFIED
148 } meModifiedDuringUpdate;
149 ::std::list<RangeListenerItem> maHiddenListeners;
150 StringSetType maNonOleObjectNames;
152 Idle aIdle;
153 ScDocument* pDoc;
155 DECL_LINK_TYPED(TimerHdl, Idle *, void);
157 ScChartListenerCollection& operator=( const ScChartListenerCollection& ) SAL_DELETED_FUNCTION;
159 public:
160 ScChartListenerCollection( ScDocument* pDoc );
161 ScChartListenerCollection( const ScChartListenerCollection& );
162 ~ScChartListenerCollection();
164 // only needed after copy-ctor, if newly added to doc
165 void StartAllListeners();
167 SC_DLLPUBLIC void insert(ScChartListener* pListener);
168 ScChartListener* findByName(const OUString& rName);
169 const ScChartListener* findByName(const OUString& rName) const;
170 bool hasListeners() const;
172 void removeByName(const OUString& rName);
174 const ListenersType& getListeners() const { return maListeners;}
175 ListenersType& getListeners() { return maListeners;}
176 StringSetType& getNonOleObjectNames() { return maNonOleObjectNames;}
179 * Create a unique name that's not taken by any existing chart listener
180 * objects. The name consists of a prefix given followed by a number.
182 OUString getUniqueName(const OUString& rPrefix) const;
184 void ChangeListening( const OUString& rName,
185 const ScRangeListRef& rRangeListRef,
186 bool bDirty = false );
187 // use FreeUnused only the way it's used in ScDocument::UpdateChartListenerCollection
188 void FreeUnused();
189 void FreeUno( const com::sun::star::uno::Reference< com::sun::star::chart::XChartDataChangeEventListener >& rListener,
190 const com::sun::star::uno::Reference< com::sun::star::chart::XChartData >& rSource );
191 void StartTimer();
192 void UpdateDirtyCharts();
193 SC_DLLPUBLIC void SetDirty();
194 void SetDiffDirty( const ScChartListenerCollection&,
195 bool bSetChartRangeLists = false );
197 void SetRangeDirty( const ScRange& rRange ); // for example rows/columns
199 void UpdateScheduledSeriesRanges();
200 void UpdateChartsContainingTab( SCTAB nTab );
202 bool operator==( const ScChartListenerCollection& r ) const;
203 bool operator!=( const ScChartListenerCollection& r ) const;
206 * Start listening on hide/show change within specified cell range. A
207 * single listener may listen on multiple ranges when the caller passes
208 * the same pointer multiple times with different ranges.
210 * Note that the caller is responsible for managing the life-cycle of the
211 * listener instance.
213 void StartListeningHiddenRange( const ScRange& rRange,
214 ScChartHiddenRangeListener* pListener );
217 * Remove all ranges associated with passed listener instance from the
218 * list of hidden range listeners. This does not delete the passed
219 * listener instance.
221 void EndListeningHiddenRange( ScChartHiddenRangeListener* pListener );
224 #endif
226 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */