summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Nabet <serval2412@yahoo.fr>2015-09-15 21:41:48 +0200
committerCaolán McNamara <caolanm@redhat.com>2015-10-05 16:16:07 +0000
commit6cf58fbb1f5f44fa868b74146c3008dc8ffa46e8 (patch)
tree90847dfb40b4a05619a68808059bdefdce2be51c
parent53647c31990f342f31153188397e1c1b321d6449 (diff)
tdf#94173: Calc doesn't save your own created autoformat presets
Auformat list (maData) is defined as "MapType" which itself is defined like this: boost::ptr_map<OUString, ScAutoFormatData> so default sorting is ascii 2 consequences: 1) Default didn't appear first 2) When adding a new autoformat entry when it was new first one of the list wasn't saved because of iterator was incremented first before looping See https://bugs.documentfoundation.org/show_bug.cgi?id=94173#c5 There were some other weird behaviors too according to comments of the bugtracker Regression from http://cgit.freedesktop.org/libreoffice/core/commit/?id=72c1b6141d590fb4479925ed8bc88b79357c2bfc Solution: Add a Compare so Default entry is always first one so the first time incremented iterator is ok and new entry (even if new first one in list) is saved Thank you Markus for the idea! (I was lost in Compare syntax) Reviewed-on: https://gerrit.libreoffice.org/18598 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr> (cherry picked from commit 652158c3f2c9cd0d6f71ecd14bf5d5cc02a71b50) use collator for UI visible sorting, tdf#94173 follow-up (cherry picked from commit a71febc99d2cfc2fe51dec8c0bca5d84d8577168) b9f7ebb087c1ce5008f43b2df3f1fadc41066ed1 Change-Id: I9ba0cdc63c66b747db102bb661cd09fbfe5996ae Reviewed-on: https://gerrit.libreoffice.org/19029 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com> Reviewed-on: https://gerrit.libreoffice.org/19152 (cherry picked from commit 75d6000da3d185da1694631c4444be8dd9dd5eac) Reviewed-on: https://gerrit.libreoffice.org/19153 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sc/inc/autoform.hxx6
-rw-r--r--sc/source/core/tool/autoform.cxx10
2 files changed, 15 insertions, 1 deletions
diff --git a/sc/inc/autoform.hxx b/sc/inc/autoform.hxx
index 938ef5e8dd56..a0831161dd1b 100644
--- a/sc/inc/autoform.hxx
+++ b/sc/inc/autoform.hxx
@@ -307,9 +307,13 @@ public:
bool Save( SvStream& rStream, sal_uInt16 fileVersion );
};
+struct DefaultFirstEntry {
+ bool operator() (const OUString& left, const OUString& right) const;
+};
+
class SC_DLLPUBLIC ScAutoFormat
{
- typedef boost::ptr_map<OUString, ScAutoFormatData> MapType;
+ typedef boost::ptr_map<OUString, ScAutoFormatData, DefaultFirstEntry> MapType;
MapType maData;
bool mbSaveLater;
ScAfVersions m_aVersions;
diff --git a/sc/source/core/tool/autoform.cxx b/sc/source/core/tool/autoform.cxx
index e9265b95388a..830928065da2 100644
--- a/sc/source/core/tool/autoform.cxx
+++ b/sc/source/core/tool/autoform.cxx
@@ -897,6 +897,16 @@ ScAutoFormat::ScAutoFormat() :
insert(pData);
}
+bool DefaultFirstEntry::operator() (const OUString& left, const OUString& right) const
+{
+ OUString aStrStandard(ScGlobal::GetRscString(STR_STYLENAME_STANDARD));
+ if ( ScGlobal::GetpTransliteration()->isEqual( left, aStrStandard ) )
+ return true;
+ if ( ScGlobal::GetpTransliteration()->isEqual( right, aStrStandard ) )
+ return false;
+ return ScGlobal::GetCollator()->compareString( left, right) < 0;
+}
+
ScAutoFormat::ScAutoFormat(const ScAutoFormat& r) :
maData(r.maData),
mbSaveLater(false) {}