Compare commits
4 Commits
pico_sdk
...
4253acb72b
| Author | SHA1 | Date | |
|---|---|---|---|
| 4253acb72b | |||
| e22630b1bd | |||
| 563d9c5487 | |||
| 34bc322b9b |
@@ -6,7 +6,7 @@ endif()
|
|||||||
project(PIP)
|
project(PIP)
|
||||||
set(PIP_MAJOR 5)
|
set(PIP_MAJOR 5)
|
||||||
set(PIP_MINOR 5)
|
set(PIP_MINOR 5)
|
||||||
set(PIP_REVISION 2)
|
set(PIP_REVISION 4)
|
||||||
set(PIP_SUFFIX )
|
set(PIP_SUFFIX )
|
||||||
set(PIP_COMPANY SHS)
|
set(PIP_COMPANY SHS)
|
||||||
set(PIP_DOMAIN org.SHS)
|
set(PIP_DOMAIN org.SHS)
|
||||||
|
|||||||
@@ -400,9 +400,9 @@ PIJSON PIJSON::parseValue(PIString & s) {
|
|||||||
s.trim();
|
s.trim();
|
||||||
if (s.isEmpty()) return ret;
|
if (s.isEmpty()) return ret;
|
||||||
if (s[0] == '{') {
|
if (s[0] == '{') {
|
||||||
ret = parseObject(s.takeRange('{', '}'));
|
ret = parseObject(s.takeRange('{', '}').trim());
|
||||||
} else if (s[0] == '[') {
|
} else if (s[0] == '[') {
|
||||||
ret = parseArray(s.takeRange('[', ']'));
|
ret = parseArray(s.takeRange('[', ']').trim());
|
||||||
} else {
|
} else {
|
||||||
s.trim();
|
s.trim();
|
||||||
if (s.startsWith('"')) {
|
if (s.startsWith('"')) {
|
||||||
|
|||||||
@@ -42,6 +42,14 @@ PIString mask(const PIString & str) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PIString overrideFile(PIString path) {
|
||||||
|
if (path.isEmpty()) return {};
|
||||||
|
PIFile::FileInfo fi(path);
|
||||||
|
auto ext = fi.extension();
|
||||||
|
path.insert(path.size_s() - ext.size_s() - (ext.isEmpty() ? 0 : 1), ".override");
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PIValueTree PIValueTreeConversions::fromPropertyStorage(const PIPropertyStorage & ps) {
|
PIValueTree PIValueTreeConversions::fromPropertyStorage(const PIPropertyStorage & ps) {
|
||||||
PIValueTree ret;
|
PIValueTree ret;
|
||||||
@@ -292,7 +300,11 @@ PIString toTextTree(const PIValueTree & root, PIString prefix, PIValueTreeConver
|
|||||||
ret += "\n[" + prefix + "]\n";
|
ret += "\n[" + prefix + "]\n";
|
||||||
if (root.isArray() && options[PIValueTreeConversions::WithAttributes]) ret += toTextTreeAttributes(root, "", options);
|
if (root.isArray() && options[PIValueTreeConversions::WithAttributes]) ret += toTextTreeAttributes(root, "", options);
|
||||||
for (const auto & c: root.children()) {
|
for (const auto & c: root.children()) {
|
||||||
PIString cp = prefix;
|
if (c.hasChildren()) continue;
|
||||||
|
ret += toTextTree(c, prefix, options);
|
||||||
|
}
|
||||||
|
for (const auto & c: root.children()) {
|
||||||
|
if (!c.hasChildren()) continue;
|
||||||
ret += toTextTree(c, prefix, options);
|
ret += toTextTree(c, prefix, options);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -315,9 +327,13 @@ PIString toTextTree(const PIValueTree & root, PIString prefix, PIValueTreeConver
|
|||||||
PIString PIValueTreeConversions::toText(const PIValueTree & root, Options options) {
|
PIString PIValueTreeConversions::toText(const PIValueTree & root, Options options) {
|
||||||
PIString ret;
|
PIString ret;
|
||||||
for (const auto & c: root.children()) {
|
for (const auto & c: root.children()) {
|
||||||
ret += toTextTree(c, PIString(), options);
|
if (c.hasChildren()) continue;
|
||||||
|
ret += toTextTree(c, {}, options);
|
||||||
|
}
|
||||||
|
for (const auto & c: root.children()) {
|
||||||
|
if (!c.hasChildren()) continue;
|
||||||
|
ret += toTextTree(c, {}, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,13 +345,26 @@ PIValueTree PIValueTreeConversions::fromText(const PIString & str) {
|
|||||||
|
|
||||||
|
|
||||||
PIValueTree PIValueTreeConversions::fromJSONFile(const PIString & path) {
|
PIValueTree PIValueTreeConversions::fromJSONFile(const PIString & path) {
|
||||||
return PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(PIFile::readAll(path))));
|
auto ret = PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(PIFile::readAll(path))));
|
||||||
|
auto ofp = overrideFile(path);
|
||||||
|
if (PIFile::isExists(ofp)) {
|
||||||
|
auto override_vt = PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(PIFile::readAll(ofp))));
|
||||||
|
ret.merge(override_vt);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PIValueTree PIValueTreeConversions::fromTextFile(const PIString & path) {
|
PIValueTree PIValueTreeConversions::fromTextFile(const PIString & path) {
|
||||||
PIFile f(path, PIIODevice::ReadOnly);
|
PIFile f(path, PIIODevice::ReadOnly);
|
||||||
return PIValueTreeConversions::fromText(&f);
|
auto ret = PIValueTreeConversions::fromText(&f);
|
||||||
|
auto ofp = overrideFile(path);
|
||||||
|
if (PIFile::isExists(ofp)) {
|
||||||
|
PIFile of(ofp, PIIODevice::ReadOnly);
|
||||||
|
auto override_vt = PIValueTreeConversions::fromText(&of);
|
||||||
|
ret.merge(override_vt);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -206,7 +206,10 @@ PIString PIString::dtos(const double num, char format, int precision) {
|
|||||||
if (wr > 4) wr = 4;
|
if (wr > 4) wr = 4;
|
||||||
f[2 + wr] = format;
|
f[2 + wr] = format;
|
||||||
f[3 + wr] = 0;
|
f[3 + wr] = 0;
|
||||||
pisprintf(f, num);
|
char ch[256];
|
||||||
|
piZeroMemory(ch, 256);
|
||||||
|
snprintf(ch, 256, f, num);
|
||||||
|
return PIStringAscii(ch).replaceAll(',', '.');
|
||||||
}
|
}
|
||||||
#undef pisprintf
|
#undef pisprintf
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,23 @@ void PIValueTree::applyValues(const PIValueTree & root, bool recursive) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PIValueTree::merge(const PIValueTree & root) {
|
||||||
|
if (_is_null) return;
|
||||||
|
for (const auto & c: root._children) {
|
||||||
|
bool found = false;
|
||||||
|
for (auto & i: _children) {
|
||||||
|
if (c.name() == i.name()) {
|
||||||
|
if (c.isValid()) i._value = c._value;
|
||||||
|
i.merge(c);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) _children << c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PIVariant PIValueTree::childValue(const PIString & child_name, const PIVariant & default_value, bool * exists) const {
|
PIVariant PIValueTree::childValue(const PIString & child_name, const PIVariant & default_value, bool * exists) const {
|
||||||
const PIValueTree & node = child(child_name);
|
const PIValueTree & node = child(child_name);
|
||||||
if (node.isNull()) {
|
if (node.isNull()) {
|
||||||
|
|||||||
@@ -170,6 +170,13 @@ public:
|
|||||||
//! \param recursive Если установлено в true, то значения будут применяться рекурсивно к дочерним узлам.
|
//! \param recursive Если установлено в true, то значения будут применяться рекурсивно к дочерним узлам.
|
||||||
void applyValues(const PIValueTree & root, bool recursive = true);
|
void applyValues(const PIValueTree & root, bool recursive = true);
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Set or add the values of a given %PIValueTree object to the current %PIValueTree object.
|
||||||
|
//! \param root The %PIValueTree object whose values are to be merged.
|
||||||
|
//! \~russian Устанавливает или добавляет значения данного объекта %PIValueTree к текущему объекту %PIValueTree.
|
||||||
|
//! \param root Объект %PIValueTree, значения которого должны быть добавлены.
|
||||||
|
void merge(const PIValueTree & root);
|
||||||
|
|
||||||
//! \~\brief
|
//! \~\brief
|
||||||
//! \~english Returns the children of the current %PIValueTree object.
|
//! \~english Returns the children of the current %PIValueTree object.
|
||||||
//! \~russian Возвращает дочерние элементы текущего объекта %PIValueTree.
|
//! \~russian Возвращает дочерние элементы текущего объекта %PIValueTree.
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ const PIString contextName = "QAD::PIValueTreeEdit";
|
|||||||
|
|
||||||
|
|
||||||
void gatherStrings(TSFile::Context & context, const PIValueTree & vt, const PIString & loc) {
|
void gatherStrings(TSFile::Context & context, const PIValueTree & vt, const PIString & loc) {
|
||||||
const static PIStringList attrs({Attribute::prefix, Attribute::suffix});
|
const static PIStringList attrs({Attribute::prefix, Attribute::suffix, Attribute::toolTip});
|
||||||
for (const auto & c: vt.children()) {
|
for (const auto & c: vt.children()) {
|
||||||
context.confirm(c.name(), loc);
|
context.confirm(c.name(), loc);
|
||||||
context.confirm(c.comment(), loc);
|
context.confirm(c.comment(), loc);
|
||||||
|
|||||||
Reference in New Issue
Block a user