From fa918d3f7da65b9b6e3d6244108b5e5cfbceb77d Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Thu, 2 Jan 2020 13:34:04 +0800 Subject: [PATCH] Spreadsheet: fix handling of absolute cell address --- src/Mod/Spreadsheet/App/Sheet.cpp | 37 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/Mod/Spreadsheet/App/Sheet.cpp b/src/Mod/Spreadsheet/App/Sheet.cpp index 1c66083759..6d151e5e4d 100644 --- a/src/Mod/Spreadsheet/App/Sheet.cpp +++ b/src/Mod/Spreadsheet/App/Sheet.cpp @@ -432,7 +432,7 @@ PyObject *Sheet::getPyObject(void) Property * Sheet::getProperty(CellAddress key) const { - return props.getDynamicPropertyByName(key.toString().c_str()); + return props.getDynamicPropertyByName(key.toString(true).c_str()); } /** @@ -512,15 +512,16 @@ void Sheet::onSettingDocument() Property * Sheet::setFloatProperty(CellAddress key, double value) { - Property * prop = props.getDynamicPropertyByName(key.toString().c_str()); + std::string name = key.toString(true); + Property * prop = props.getDynamicPropertyByName(name.c_str()); PropertyFloat * floatProp; if (!prop || prop->getTypeId() != PropertyFloat::getClassTypeId()) { if (prop) { - this->removeDynamicProperty(key.toString().c_str()); + this->removeDynamicProperty(name.c_str()); propAddress.erase(prop); } - floatProp = freecad_dynamic_cast(addDynamicProperty("App::PropertyFloat", key.toString().c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); + floatProp = freecad_dynamic_cast(addDynamicProperty("App::PropertyFloat", name.c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); } else floatProp = static_cast(prop); @@ -533,16 +534,17 @@ Property * Sheet::setFloatProperty(CellAddress key, double value) Property * Sheet::setIntegerProperty(CellAddress key, long value) { - Property * prop = props.getDynamicPropertyByName(key.toString().c_str()); + std::string name = key.toString(true); + Property * prop = props.getDynamicPropertyByName(name.c_str()); PropertyInteger * intProp; if (!prop || prop->getTypeId() != PropertyInteger::getClassTypeId()) { if (prop) { - this->removeDynamicProperty(key.toString().c_str()); + this->removeDynamicProperty(name.c_str()); propAddress.erase(prop); } intProp = freecad_dynamic_cast(addDynamicProperty( - "App::PropertyInteger", key.toString().c_str(), 0, 0, + "App::PropertyInteger", name.c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); } else @@ -567,15 +569,16 @@ Property * Sheet::setIntegerProperty(CellAddress key, long value) Property * Sheet::setQuantityProperty(CellAddress key, double value, const Base::Unit & unit) { - Property * prop = props.getDynamicPropertyByName(key.toString().c_str()); + std::string name = key.toString(true); + Property * prop = props.getDynamicPropertyByName(name.c_str()); PropertySpreadsheetQuantity * quantityProp; if (!prop || prop->getTypeId() != PropertySpreadsheetQuantity::getClassTypeId()) { if (prop) { - this->removeDynamicProperty(key.toString().c_str()); + this->removeDynamicProperty(name.c_str()); propAddress.erase(prop); } - Property * p = addDynamicProperty("Spreadsheet::PropertySpreadsheetQuantity", key.toString().c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist); + Property * p = addDynamicProperty("Spreadsheet::PropertySpreadsheetQuantity", name.c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist); quantityProp = freecad_dynamic_cast(p); } else @@ -601,15 +604,16 @@ Property * Sheet::setQuantityProperty(CellAddress key, double value, const Base: Property * Sheet::setStringProperty(CellAddress key, const std::string & value) { - Property * prop = props.getDynamicPropertyByName(key.toString().c_str()); + std::string name = key.toString(true); + Property * prop = props.getDynamicPropertyByName(name.c_str()); PropertyString * stringProp = freecad_dynamic_cast(prop); if (!stringProp) { if (prop) { - this->removeDynamicProperty(key.toString().c_str()); + this->removeDynamicProperty(name.c_str()); propAddress.erase(prop); } - stringProp = freecad_dynamic_cast(addDynamicProperty("App::PropertyString", key.toString().c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); + stringProp = freecad_dynamic_cast(addDynamicProperty("App::PropertyString", name.c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); } propAddress[stringProp] = key; @@ -620,15 +624,16 @@ Property * Sheet::setStringProperty(CellAddress key, const std::string & value) Property * Sheet::setObjectProperty(CellAddress key, Py::Object object) { - Property * prop = props.getDynamicPropertyByName(key.toString().c_str()); + std::string name = key.toString(true); + Property * prop = props.getDynamicPropertyByName(name.c_str()); PropertyPythonObject * pyProp = freecad_dynamic_cast(prop); if (!pyProp) { if (prop) { - this->removeDynamicProperty(key.toString().c_str()); + this->removeDynamicProperty(name.c_str()); propAddress.erase(prop); } - pyProp = freecad_dynamic_cast(addDynamicProperty("App::PropertyPythonObject", key.toString().c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); + pyProp = freecad_dynamic_cast(addDynamicProperty("App::PropertyPythonObject", name.c_str(), 0, 0, Prop_ReadOnly | Prop_Hidden | Prop_NoPersist)); } propAddress[pyProp] = key;