diff options
author | Eike Rathke <erack@redhat.com> | 2015-09-04 18:30:22 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-09-04 21:14:41 +0200 |
commit | 679a5dc0cf838579e320dd199f02a9a8300c8820 (patch) | |
tree | 406ff67a3115b3943f4fcd76d9b697cd7bb35b0d /sc/inc/dbdata.hxx | |
parent | 6d64d2f38d9f6c2f54e05675ecd0709eabf6d8ca (diff) |
TableRef: update table column names when cell content changed
Change-Id: Id699358c7dae635b13ed4b981326a6490255a4d4
Diffstat (limited to 'sc/inc/dbdata.hxx')
-rw-r--r-- | sc/inc/dbdata.hxx | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx index bf1ac4cb8c2e..7584f6751651 100644 --- a/sc/inc/dbdata.hxx +++ b/sc/inc/dbdata.hxx @@ -24,6 +24,9 @@ #include "refreshtimer.hxx" #include "address.hxx" #include "global.hxx" +#include "rangelst.hxx" + +#include <svl/listener.hxx> #include <boost/scoped_ptr.hpp> @@ -45,7 +48,21 @@ enum class ScDBDataPortion AREA ///< entire area }; -class ScDBData : public ScRefreshTimer +/** Container base class to provide selected access for ScDBData. */ +class ScDBDataContainerBase +{ +public: + ScDBDataContainerBase( ScDocument& rDoc ) : mrDoc(rDoc) {} + virtual ~ScDBDataContainerBase() {} + ScDocument* GetDocument() const; + ScRangeList& GetDirtyTableColumnNames(); + +protected: + ScDocument& mrDoc; + ScRangeList maDirtyTableColumnNames; +}; + +class ScDBData : public SvtListener, public ScRefreshTimer { private: boost::scoped_ptr<ScSortParam> mpSortParam; @@ -53,6 +70,8 @@ private: boost::scoped_ptr<ScSubTotalParam> mpSubTotal; boost::scoped_ptr<ScImportParam> mpImportParam; + ScDBDataContainerBase* mpContainer; + /// DBParam const OUString aName; OUString aUpper; @@ -79,6 +98,7 @@ private: bool bModified; ///< is set/cleared for/by(?) UpdateReference ::std::vector< OUString > maTableColumnNames; ///< names of table columns + bool mbTableColumnNamesDirty; using ScRefreshTimer::operator==; @@ -96,7 +116,9 @@ public: ScDBData(const OUString& rName, const ScDBData& rData); virtual ~ScDBData(); - ScDBData& operator= (const ScDBData& rData); + virtual void Notify( const SfxHint& rHint ) SAL_OVERRIDE; + + ScDBData& operator= (const ScDBData& rData) ; bool operator== (const ScDBData& rData) const; @@ -119,8 +141,13 @@ public: void SetKeepFmt(bool bSet) { bKeepFmt = bSet; } bool IsStripData() const { return bStripData; } void SetStripData(bool bSet) { bStripData = bSet; } - void SetTableColumnNames( const ::std::vector< OUString >& rNames ) { maTableColumnNames = rNames; } - const ::std::vector< OUString >& GetTableColumnNames() const { return maTableColumnNames; } + + void SetContainer( ScDBDataContainerBase* pContainer ) { mpContainer = pContainer; } + void StartTableColumnNamesListener(); + void EndTableColumnNamesListener(); + SC_DLLPUBLIC void SetTableColumnNames( const ::std::vector< OUString >& rNames ); + SC_DLLPUBLIC const ::std::vector< OUString >& GetTableColumnNames() const { return maTableColumnNames; } + bool AreTableColumnNamesDirty() const { return mbTableColumnNamesDirty; } /** Refresh/update the column names with the header row's cell contents. */ SC_DLLPUBLIC void RefreshTableColumnNames( ScDocument* pDoc ); @@ -202,16 +229,16 @@ public: /** * Stores global named database ranges. */ - class SC_DLLPUBLIC NamedDBs + class SC_DLLPUBLIC NamedDBs : public ScDBDataContainerBase { friend class ScDBCollection; typedef ::std::set<std::unique_ptr<ScDBData>, ScDBData::less> DBsType; DBsType m_DBs; ScDBCollection& mrParent; - ScDocument& mrDoc; NamedDBs(ScDBCollection& rParent, ScDocument& rDoc); NamedDBs(const NamedDBs& r); + virtual ~NamedDBs(); NamedDBs & operator=(NamedDBs const&) = delete; public: @@ -287,6 +314,8 @@ public: ScDBData* GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2); ScDBData* GetDBNearCursor(SCCOL nCol, SCROW nRow, SCTAB nTab ); + void RefreshDirtyTableColumnNames(); + void DeleteOnTab( SCTAB nTab ); void UpdateReference(UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, |