diff --git a/libs/piqt_utils/lang/piqt_utils_en.ts b/libs/piqt_utils/lang/piqt_utils_en.ts
index e493b64..4db122b 100644
--- a/libs/piqt_utils/lang/piqt_utils_en.ts
+++ b/libs/piqt_utils/lang/piqt_utils_en.ts
@@ -192,6 +192,14 @@
Select new name:
+
+ Paste
+
+
+
+ Name "%1" already exists, get new name:
+
+
PIValueTreeEditArray
diff --git a/libs/piqt_utils/lang/piqt_utils_ru.ts b/libs/piqt_utils/lang/piqt_utils_ru.ts
index cf8f5e7..0289ff1 100644
--- a/libs/piqt_utils/lang/piqt_utils_ru.ts
+++ b/libs/piqt_utils/lang/piqt_utils_ru.ts
@@ -192,6 +192,14 @@
Select new name:
Выберите новое имя:
+
+ Paste
+ Вставить
+
+
+ Name "%1" already exists, get new name:
+ Имя "%1" уже существует, задайте новое имя:
+
PIValueTreeEditArray
diff --git a/libs/piqt_utils/pivaluetree_edit.cpp b/libs/piqt_utils/pivaluetree_edit.cpp
index ae02018..61d4c78 100644
--- a/libs/piqt_utils/pivaluetree_edit.cpp
+++ b/libs/piqt_utils/pivaluetree_edit.cpp
@@ -442,10 +442,22 @@ void PIValueTreeEdit::actionCopy(QToolButton *, const PIString & vn) {
}
-void PIValueTreeEdit::actionPaste(QToolButton * button, const PIString & vn, int offset) {
+void PIValueTreeEdit::actionPaste(QToolButton *, const PIString & vn, int offset) {
PIString json = Q2PIString(QApplication::clipboard()->text());
if (json.isEmpty()) return;
+ while (current.contains(paste_name)) {
+ bool ok = false;
+ QString s = QInputDialog::getText(nullptr,
+ tr("Paste"),
+ tr("Name \"%1\" already exists, get new name:").arg(PI2QString(paste_name)),
+ QLineEdit::Normal,
+ PI2QString(paste_name),
+ &ok);
+ if (!ok) return;
+ paste_name = Q2PIString(s);
+ }
PIValueTree ins_val = PIValueTreeConversions::fromJSON(PIJSON::fromJSON(json));
+ ins_val.setName(paste_name);
// if (ins_val.name.isEmpty()) return;
PIValueTree cur_val = value();
cur_val.insertChild(cur_val.childIndex(vn) + offset, ins_val);
@@ -492,6 +504,7 @@ void PIValueTreeEdit::actionTriggered(QToolButton * button, const PIString & vn,
void PIValueTreeEdit::checkActions() {
+ paste_name.clear();
bool can_paste = true;
PIString str = Q2PIString(QApplication::clipboard()->text());
if (str.isEmpty() || !str.startsWith("{")) {
@@ -501,7 +514,7 @@ void PIValueTreeEdit::checkActions() {
if (!j.contains("name"))
can_paste = false;
else {
- if (current.contains(j["name"].value().toString())) can_paste = false;
+ paste_name = j["name"].value().toString();
}
}
widget_params->actionPasteBefore->setEnabled(can_paste);
diff --git a/libs/piqt_utils/pivaluetree_edit.h b/libs/piqt_utils/pivaluetree_edit.h
index 1b76f69..68cba29 100644
--- a/libs/piqt_utils/pivaluetree_edit.h
+++ b/libs/piqt_utils/pivaluetree_edit.h
@@ -174,6 +174,7 @@ private:
PIValueTreeEditParameters * widget_params;
PIValueTreeEditReorder * widget_reorder;
PIStringList root_path;
+ PIString paste_name;
PIVector array_edits;
PIMap value_edits;
PIMap tree_edits;
diff --git a/libs/piqt_utils/pivaluetree_edit_array.ui b/libs/piqt_utils/pivaluetree_edit_array.ui
index 15e9dc6..93d32ab 100644
--- a/libs/piqt_utils/pivaluetree_edit_array.ui
+++ b/libs/piqt_utils/pivaluetree_edit_array.ui
@@ -89,12 +89,21 @@
0
+ -
+
+
+
+
+ PIValueTreeEdit
+ QWidget
+
+
+
-