diff options
author | Eike Rathke <erack@redhat.com> | 2015-07-16 17:52:29 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-09-28 10:21:54 +0200 |
commit | 9711db24fff84dad65c74dec1a6fcefe2a97816c (patch) | |
tree | de662149655f286e497bd48aee41fbd0115ad266 | |
parent | 27e6c7c457ab43dcff79153265a906b6a7e9b9f9 (diff) |
Resolves: tdf#88402 remember sort "has headers" at anonymous database ranges
(cherry picked from commit 33255f974fc712b9e9e2965a350c65a2195a7ae6)
Reviewed-on: https://gerrit.libreoffice.org/17140
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 83d0bb881f7e9a9fb95332a075e577048ae6773f)
Change-Id: I4a126f40589fd401f3a63f74be5e86e3df947ef6
-rw-r--r-- | sc/inc/dbdata.hxx | 5 | ||||
-rw-r--r-- | sc/source/core/tool/dbdata.cxx | 21 | ||||
-rw-r--r-- | sc/source/ui/docshell/dbdocfun.cxx | 3 |
3 files changed, 29 insertions, 0 deletions
diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx index c42e97043541..80239351d689 100644 --- a/sc/inc/dbdata.hxx +++ b/sc/inc/dbdata.hxx @@ -112,6 +112,10 @@ public: void GetSortParam(ScSortParam& rSortParam) const; void SetSortParam(const ScSortParam& rSortParam); + /** Remember some more settings of ScSortParam, only to be called at + anonymous DB ranges as it at least overwrites bHasHeader. */ + void UpdateFromSortParam( const ScSortParam& rSortParam ); + SC_DLLPUBLIC void GetQueryParam(ScQueryParam& rQueryParam) const; SC_DLLPUBLIC void SetQueryParam(const ScQueryParam& rQueryParam); SC_DLLPUBLIC bool GetAdvancedQuerySource(ScRange& rSource) const; @@ -206,6 +210,7 @@ public: ScDBData* getByRange(const ScRange& rRange); void insert(ScDBData* p); bool empty() const; + bool has( const ScDBData* p ) const; bool operator== (const AnonDBs& r) const; }; diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx index e8f171fa4ce0..1ce7d282e0ab 100644 --- a/sc/source/core/tool/dbdata.cxx +++ b/sc/source/core/tool/dbdata.cxx @@ -332,6 +332,11 @@ void ScDBData::SetSortParam( const ScSortParam& rSortParam ) bByRow = rSortParam.bByRow; } +void ScDBData::UpdateFromSortParam( const ScSortParam& rSortParam ) +{ + bHasHeader = rSortParam.bHasHeader; +} + void ScDBData::GetQueryParam( ScQueryParam& rQueryParam ) const { rQueryParam = *mpQueryParam; @@ -641,6 +646,17 @@ public: } }; +class FindByPointer : public unary_function<ScDBData, bool> +{ + const ScDBData* mpDBData; +public: + FindByPointer(const ScDBData* pDBData) : mpDBData(pDBData) {} + bool operator() (const ScDBData& r) const + { + return &r == mpDBData; + } +}; + } ScDBCollection::NamedDBs::NamedDBs(ScDBCollection& rParent, ScDocument& rDoc) : @@ -791,6 +807,11 @@ bool ScDBCollection::AnonDBs::empty() const return maDBs.empty(); } +bool ScDBCollection::AnonDBs::has( const ScDBData* p ) const +{ + return find_if( maDBs.begin(), maDBs.end(), FindByPointer(p)) != maDBs.end(); +} + bool ScDBCollection::AnonDBs::operator== (const AnonDBs& r) const { return maDBs == r.maDBs; diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx index c4e81bcbcbf7..0b094ef7ca72 100644 --- a/sc/source/ui/docshell/dbdocfun.cxx +++ b/sc/source/ui/docshell/dbdocfun.cxx @@ -530,6 +530,9 @@ bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, } pDBData->SetSortParam(rSortParam); + // Remember additional settings on anonymous database ranges. + if (pDBData == pDoc->GetAnonymousDBData( nTab) || pDoc->GetDBCollection()->getAnonDBs().has( pDBData)) + pDBData->UpdateFromSortParam( rSortParam); ScRange aDirtyRange( aLocalParam.nCol1, nStartRow, nTab, |