some PIValueTree changes, fix PIVariantTypes::Enum::fromString

This commit is contained in:
2022-12-15 13:05:15 +03:00
parent c2b8a8d6da
commit badcfac616
4 changed files with 56 additions and 44 deletions

View File

@@ -31,22 +31,22 @@
//! //!
// clang-format off // clang-format off
const char PIValueTree::attributeHidden [] = "hidden" ; const char PIValueTree::Attribute::hidden [] = "hidden" ;
const char PIValueTree::attributeReadOnly [] = "readOnly" ; const char PIValueTree::Attribute::readOnly [] = "readOnly" ;
const char PIValueTree::attributeIsLabel [] = "label" ; const char PIValueTree::Attribute::isLabel [] = "label" ;
const char PIValueTree::attributeArrayType [] = "arrayType" ; const char PIValueTree::Attribute::arrayType [] = "arrayType" ;
const char PIValueTree::attributeArrayMinCount[] = "arrayMinCount"; const char PIValueTree::Attribute::arrayMinCount[] = "arrayMinCount";
const char PIValueTree::attributeArrayMaxCount[] = "arrayMaxCount"; const char PIValueTree::Attribute::arrayMaxCount[] = "arrayMaxCount";
const char PIValueTree::attributeArrayReorder [] = "arrayReorder" ; const char PIValueTree::Attribute::arrayReorder [] = "arrayReorder" ;
const char PIValueTree::attributeArrayResize [] = "arrayResize" ; const char PIValueTree::Attribute::arrayResize [] = "arrayResize" ;
const char PIValueTree::attributeMinimum [] = "minimum" ; const char PIValueTree::Attribute::minimum [] = "minimum" ;
const char PIValueTree::attributeMaximum [] = "maximum" ; const char PIValueTree::Attribute::maximum [] = "maximum" ;
const char PIValueTree::attributeSingleStep [] = "singleStep" ; const char PIValueTree::Attribute::singleStep [] = "singleStep" ;
const char PIValueTree::attributeDecimals [] = "decimals" ; const char PIValueTree::Attribute::decimals [] = "decimals" ;
const char PIValueTree::attributePrefix [] = "prefix" ; const char PIValueTree::Attribute::prefix [] = "prefix" ;
const char PIValueTree::attributeSuffix [] = "suffix" ; const char PIValueTree::Attribute::suffix [] = "suffix" ;
// clang-format on // clang-format on
@@ -93,7 +93,7 @@ void PIValueTree::mergeAttributes(const PIVariantMap & a) {
if (_is_null) return; if (_is_null) return;
auto it = a.makeIterator(); auto it = a.makeIterator();
while (it.next()) { while (it.next()) {
if (!_attributes.contains(it.key())) _attributes.insert(it.key(), it.value()); _attributes[it.key()] = it.value();
} }
} }

View File

@@ -39,29 +39,31 @@ public:
PIValueTree(const PIVariant & v); PIValueTree(const PIVariant & v);
PIValueTree(const PIString & n, const PIVariant & v, const PIVariantMap & a = PIVariantMap()); PIValueTree(const PIString & n, const PIVariant & v, const PIVariantMap & a = PIVariantMap());
struct PIP_EXPORT Attribute {
// clang-format off // clang-format off
static const char attributeHidden []; static const char hidden [];
static const char attributeReadOnly []; static const char readOnly [];
static const char attributeIsLabel []; static const char isLabel [];
static const char attributeArrayType []; static const char arrayType [];
static const char attributeArrayMinCount[]; static const char arrayMinCount[];
static const char attributeArrayMaxCount[]; static const char arrayMaxCount[];
static const char attributeArrayReorder []; static const char arrayReorder [];
static const char attributeArrayResize []; static const char arrayResize [];
static const char attributeMinimum []; static const char minimum [];
static const char attributeMaximum []; static const char maximum [];
static const char attributeSingleStep []; static const char singleStep [];
static const char attributeDecimals []; static const char decimals [];
static const char attributePrefix []; static const char prefix [];
static const char attributeSuffix []; static const char suffix [];
//static constexpr char attribute[] = ""; //static constexpr char attribute[] = "";
// clang-format on // clang-format on
};
bool isNull() const { return _is_null; } bool isNull() const { return _is_null; }
bool isValid() const { return _value.isValid(); } bool isValid() const { return _value.isValid(); }
bool isArray() const { return _attributes.contains(attributeArrayType); } bool isArray() const { return _attributes.contains(Attribute::arrayType); }
bool hasChildren() const { return _children.isNotEmpty(); } bool hasChildren() const { return _children.isNotEmpty(); }
const PIString & name() const { return _name; } const PIString & name() const { return _name; }

View File

@@ -145,7 +145,8 @@ PIVariantTypes::Enum & PIVariantTypes::Enum::operator<<(const PIVariantTypes::En
PIString PIVariantTypes::Enum::toString() { PIString PIVariantTypes::Enum::toString() {
static PIString masks = "\""; static PIString masks = "\"";
PIString ret; PIString ret;
ret += "\"" + enum_name.masked(masks) + "\":("; if (enum_name.isNotEmpty()) ret += "\"" + enum_name.masked(masks) + "\":";
ret += "(";
bool comma = false; bool comma = false;
for (const auto & i: enum_list) { for (const auto & i: enum_list) {
if (comma) ret += ';'; if (comma) ret += ';';
@@ -161,20 +162,27 @@ PIString PIVariantTypes::Enum::toString() {
PIVariantTypes::Enum PIVariantTypes::Enum::fromString(PIString str) { PIVariantTypes::Enum PIVariantTypes::Enum::fromString(PIString str) {
static PIString masks = "\""; static PIString masks = "\"";
Enum ret; Enum ret;
str.trim();
if (str.size() < 3) return ret; if (str.size() < 3) return ret;
if (!str.startsWith("(")) {
ret.enum_name = str.takeRange('"', '"').unmask(masks); ret.enum_name = str.takeRange('"', '"').unmask(masks);
str.trim(); str.trim();
if (str.startsWith(":")) str.cutLeft(1).trim(); if (str.startsWith(":")) str.cutLeft(1).trim();
}
PIString el = str.takeRange('(', ')'); PIString el = str.takeRange('(', ')');
int ps = el.size_s();
while (el.isNotEmpty()) { while (el.isNotEmpty()) {
Enumerator e; Enumerator e;
e.name = el.takeRange('"', '"').unmask(masks); e.name = el.takeRange('"', '"').unmask(masks);
if (e.name.isEmpty()) break;
el.trim(); el.trim();
if (el.startsWith(":")) el.cutLeft(1).trim(); if (el.startsWith(":")) el.cutLeft(1).trim();
e.value = el.takeInteger().toInt(); e.value = el.takeInteger().toInt();
el.trim(); el.trim();
if (el.startsWith(";")) el.cutLeft(1).trim(); if (el.startsWith(";")) el.cutLeft(1).trim();
ret.enum_list << e; ret.enum_list << e;
if (ps == el.size_s()) break;
ps = el.size_s();
} }
str.trim(); str.trim();
if (str.startsWith(":")) str.cutLeft(1).trim(); if (str.startsWith(":")) str.cutLeft(1).trim();

View File

@@ -59,14 +59,16 @@ int main(int argc, char * argv[]) {
v.setValueFromString("0xFF00FFff"); v.setValueFromString("0xFF00FFff");
piCout << v;*/ piCout << v;*/
PIVariantTypes::Enum e; // PIVariantTypes::Enum e;
e.enum_name = "MyEnum"; // e.enum_name = "MyEnum";
e << PIVariantTypes::Enumerator(10105, "Null") << PIVariantTypes::Enumerator(20, "Sec") << PIVariantTypes::Enumerator(100, "Fir"); // e << PIVariantTypes::Enumerator(10105, "Null") << PIVariantTypes::Enumerator(20, "Sec") << PIVariantTypes::Enumerator(100, "Fir");
e.selectValue(20); // e.selectValue(20);
piCout << e.toString(); // piCout << e.toString();
piCout << PIVariantTypes::Enum::fromString(e.toString()).toString(); // piCout << PIVariantTypes::Enum::fromString(e.toString()).toString();
piCout << PIVariantTypes::Enum::fromString("\"MyEnum\"(\"Null\":10105 \"Sec\":20 \"Fir\":100) 20").toString(); // piCout << PIVariantTypes::Enum::fromString("\"MyEnum\"(\"Null\":10105 \"Sec\":20 \"Fir\":100) 20").toString();
piCout << PIVariantTypes::Enum::fromString("(\"DeformationWithTemperature2\":1\n;Sigma1:2\n;Tau:3)").toString();
return 0; return 0;
} }