PIValueTreeEdit interaction control abilities

This commit is contained in:
2023-04-10 13:17:44 +03:00
parent 396b1bc309
commit 893049550b
2 changed files with 30 additions and 1 deletions

View File

@@ -411,6 +411,14 @@ PIValueTreeEdit * PIValueTreeEdit::addTreeEdit(const PIValueTree & vt) {
}
PIValueTreeEdit * PIValueTreeEdit::rootTreeEdit() {
PIValueTreeEdit * ret = this;
while (ret->parent_tree)
ret = ret->parent_tree;
return ret;
}
void PIValueTreeEdit::addValueEdit(const PIValueTree & vt) {
auto * ve = new PIVariantEdit();
applyVariantEdit(ve, vt);
@@ -458,7 +466,19 @@ void PIValueTreeEdit::createTabWidget() {
void PIValueTreeEdit::newRequest(NewType type) {
PIString nn = Q2PIString(QInputDialog::getText(nullptr, tr("New item"), tr("Input new name:")));
PIString nn;
if (rootTreeEdit()->allowed_names && (type == NewType::Value)) {
QStringList anl = PI2QStringList(rootTreeEdit()->allowed_names());
if (anl.isEmpty()) {
QMessageBox::warning(nullptr, tr("New item"), tr("No allowed names!"));
return;
}
bool ok = false;
nn = Q2PIString(QInputDialog::getItem(nullptr, tr("New item"), tr("Select new name:"), anl, 0, false, &ok));
if (!ok) return;
} else {
nn = Q2PIString(QInputDialog::getText(nullptr, tr("New item"), tr("Input new name:")));
}
if (nn.isEmpty()) return;
for (const auto & c: current.children()) {
if (c.name() == nn) {
@@ -469,6 +489,9 @@ void PIValueTreeEdit::newRequest(NewType type) {
PIValueTree vt;
vt.setName(nn);
if (type == NewType::Value) {
if (rootTreeEdit()->value_by_name) {
vt.setValue(rootTreeEdit()->value_by_name(nn));
}
if (!widget_params->showFor(vt)) return;
}
if (type == NewType::Array) {