[Libreoffice-commits] core.git: Branch 'feature/unitver' - sc/source
Andrzej Hunt
andrzej at ahunt.org
Sat Feb 28 02:08:53 PST 2015
sc/source/core/data/column3.cxx | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
New commits:
commit fec741b1902fd008a732ce0d8f57435cdfa65f57
Author: Andrzej Hunt <andrzej at ahunt.org>
Date: Sat Feb 7 11:33:39 2015 +0000
Implement actual unit extraction / format setting.
This makes the unit verification automatic (modulo no UI),
but is still very hacky.
Change-Id: Iff6f97b2c070e1caf2911533339cb3f07b259ed4
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 5170d14..329a1fd 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -1672,6 +1672,33 @@ bool ScColumn::ParseString(
{
if (aParam.mbDetectNumberFormat)
{
+#ifdef ENABLE_CALC_UNITVERIFICATION
+ OUString sValue, sUnit;
+ boost::shared_ptr< sc::units::Units > pUnits = sc::units::Units::GetUnits();
+ if (pUnits->splitUnitsFromInputString(rString, sValue, sUnit)) {
+ // TODO we should check whether a suitable format already exists.
+ // We also want to ideally preserve whatever format would be used
+ // for the actual numbers (e.g. 1E4 is preserved as 1E4 unless we
+ // now set the number format as #"foo" in which case the raw number is
+ // displayed i.e. 1000foo)
+
+ // I.e. it may be more sensible to extract the unit here, continue processing as normal
+ // and then at the end add the unit to the format. In fact we should probably ALWAYS
+ // remove the unit whenever doing any format processing (i.e. everywhere), and reappend it after?
+ // But in that case it would make sense to actually store units independently of number format.
+
+ // (This is all just a dirty hack for now...)
+ OUString sNewFormat = "#\"" + sUnit + "\"";
+ sal_uInt32 nFormatKey;
+ short nType = css::util::NumberFormat::DEFINED;
+ sal_Int32 nErrorPosition; // Unused, because we should be creating working number formats.
+
+ aParam.mpNumFormatter->PutEntry(sNewFormat, nErrorPosition, nType, nFormatKey);
+ SetNumberFormat(nRow, nFormatKey);
+
+ nIndex = nFormatKey;
+ }
+#endif
if (!aParam.mpNumFormatter->IsNumberFormat(rString, nIndex, nVal))
break;
More information about the Libreoffice-commits
mailing list