diff --git a/libs/piqt_widgets/pivaluetree_edit.cpp b/libs/piqt_widgets/pivaluetree_edit.cpp index f327357..c488022 100644 --- a/libs/piqt_widgets/pivaluetree_edit.cpp +++ b/libs/piqt_widgets/pivaluetree_edit.cpp @@ -49,12 +49,14 @@ PIValueTree PIValueTreeEdit::value() const { void PIValueTreeEdit::setGroupingEnabled(bool yes) { + applyValues(); is_grouping = yes; build(); } void PIValueTreeEdit::setFullEditMode(bool yes) { + applyValues(); is_full_edit = yes; build(); } @@ -121,12 +123,12 @@ void PIValueTreeEdit::build() { grid->create_edit_buttons = false; removeAll(); // piCout << source.attributes().value(Attribute::arrayType) << array_type; + grid->button_add->hide(); if (current.isArray()) { widget_array = new QWidget(); ui_array->setupUi(widget_array); applyArrayAttributes(); ui_array->layoutArray->addWidget(grid); - grid->button_add->hide(); grid->show(); uint array_type = PIVariant::typeIDFromName(current.attribute(Attribute::arrayType).toString()); int index = 0; diff --git a/libs/piqt_widgets/pivariant_edit_widgets.cpp b/libs/piqt_widgets/pivariant_edit_widgets.cpp index 3c857dc..3de5aba 100644 --- a/libs/piqt_widgets/pivariant_edit_widgets.cpp +++ b/libs/piqt_widgets/pivariant_edit_widgets.cpp @@ -6,7 +6,7 @@ #include #include -#include > +#include #include #include @@ -349,6 +349,7 @@ void PIVariantEditors::FileBase::setFullEditMode(bool on) { edit_widget->setVisible(on); } + void PIVariantEditors::FileBase::createMenu() { act_abs = edit_menu.addAction(tr("Absolute path"), this, [this](bool on) { is_abs = on; }); act_abs->setCheckable(true); diff --git a/utils/blockeditor/blockeditor_main.cpp b/utils/blockeditor/blockeditor_main.cpp index 3bf3b37..05f04c5 100644 --- a/utils/blockeditor/blockeditor_main.cpp +++ b/utils/blockeditor/blockeditor_main.cpp @@ -1,12 +1,14 @@ #include "blockeditor.h" +#include "qad_locations.h" #include int main(int argc, char * argv[]) { QApplication a(argc, argv); - enableHighDPI(); a.setWindowIcon(QIcon(":/icons/blockview.png")); + enableHighDPI(); + QAD::loadTranslations(); BlockEditor w; if (a.arguments().size() > 1) w.loadFile(a.arguments().back()); w.show(); diff --git a/utils/piconnedit/piconnedit_main.cpp b/utils/piconnedit/piconnedit_main.cpp index 8a9db7e..43eee53 100644 --- a/utils/piconnedit/piconnedit_main.cpp +++ b/utils/piconnedit/piconnedit_main.cpp @@ -1,105 +1,33 @@ -#include "pifile.h" -#include "pijson.h" #include "piqt_connection_edit.h" -#include "pivaluetree_conversions.h" -#include "pivaluetree_edit.h" #include #include -#include -#include -#include -#include #include #include #include int main(int argc, char * argv[]) { - QApplication a(argc, argv); - - PIValueTree root, group, array; - root.addChild({"bool", false}); - root.addChild({ - "integer", - 256, - {{PIValueTree::Attribute::minimum, -100}, {PIValueTree::Attribute::maximum, 200}, {PIValueTree::Attribute::singleStep, 5}} - }); - root.addChild({"Label here", PIVariant(), {{PIValueTree::Attribute::isLabel, true}}}); - root.addChild({"string", "str"}); - group.addChild({"substr", "str2"}); - group.addChild({"real", 12.3}); - group.setName("group"); - array.setAttribute(PIValueTree::Attribute::arrayType, "string"); - array.setAttribute(PIValueTree::Attribute::arrayResize, true); - array.setAttribute(PIValueTree::Attribute::arrayMinCount, 0); - array.setAttribute(PIValueTree::Attribute::arrayMaxCount, 10); - array.setName("array"); - array.addChild({"0", "1E+2"}); - array.addChild({"1", -5}); - array.addChild({"3", 0.1}); - root.addChild(group); - root.addChild(array); - PIString json = PIValueTreeConversions::toJSON(root).toJSON(PIJSON::Tree); - // piCout << PIValueTreeConversions::fromJSON(PIJSON::fromJSON(json)); - - PIFile f("C:/work/config.conf", PIIODevice::ReadOnly); - auto vt = PIValueTreeConversions::fromText(&f); - PIVariantTypes::Enum en; - en << "first" - << "second"; - en << PIVariantTypes::Enumerator(10, "TEN"); - en.selectValue(1); - vt.addChild({"Enum", en}); - // piCout << PIValueTreeConversions::toText(vt); - - QScrollArea area; - area.setWidgetResizable(true); - PIValueTreeEdit e; - e.setGroupingEnabled(true); - e.setFullEditMode(true); - e.setGeometry(500, 400, 100, 50); - // e.setValue(PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIValueTreeConversions::toJSON(vt).toJSON()))); - e.setValue(vt); - area.setWidget(&e); - area.show(); - // piCout << PIValueTreeConversions::toText(e.value()); //.toJSON(PIJSON::Tree); - - QTimer timer; - QObject::connect(&timer, &QTimer::timeout, [&]() { e.rollback(); }); - // timer.start(5); - QTimer::singleShot(1000, [&e]() { - auto * qtr = new QTranslator(); - qtr->load("c:/work/test_ru.qm"); - qApp->installTranslator(qtr); - }); - // QTimer::singleShot(2000, [&e, vt]() { - // e.setValue(PIValueTreeConversions::fromText(PIValueTreeConversions::toText(vt) + "\n[]\nAHAHA = 123\n")); - //}); - // QTimer::singleShot(3000, [&e]() { e.setFullEditMode(false); }); - return a.exec(); - - /* PIINTROSPECTION_START(piconnedit) QApplication a(argc, argv); enableHighDPI(); ConnectionEdit w; if (a.arguments().size() > 1) { - QPIConfig cfg(a.arguments()[1]); - QByteArray model = cfg.getValue("connectionmodel").toByteArray(); - if (!model.isEmpty()) w.setModel(model); + QPIConfig cfg(a.arguments()[1]); + QByteArray model = cfg.getValue("connectionmodel").toByteArray(); + if (!model.isEmpty()) w.setModel(model); } else - w.recreateConnection(); + w.recreateConnection(); if (w.exec() == QDialog::Accepted) { - QString c = QFileDialog::getSaveFileName(&w, "Save config to file", a.applicationDirPath(), "*.conf"); - if (!c.isEmpty()) { - QFile f(c); - if (f.open(QIODevice::WriteOnly)) { - QTextStream ts(&f); - ts << w.configuration(); - ts << "connectionmodel = " << QByteArray2QString(w.model()) << "\n"; - f.close(); - } - } + QString c = QFileDialog::getSaveFileName(&w, "Save config to file", a.applicationDirPath(), "*.conf"); + if (!c.isEmpty()) { + QFile f(c); + if (f.open(QIODevice::WriteOnly)) { + QTextStream ts(&f); + ts << w.configuration(); + ts << "connectionmodel = " << QByteArray2QString(w.model()) << "\n"; + f.close(); + } + } } - return 0;*/ + return 0; } diff --git a/utils/qpicalculator/mainwindow.cpp b/utils/qpicalculator/mainwindow.cpp index 32f4601..b5446b6 100644 --- a/utils/qpicalculator/mainwindow.cpp +++ b/utils/qpicalculator/mainwindow.cpp @@ -1,4 +1,5 @@ #include "mainwindow.h" + #include "piqt.h" #include "qad_locations.h" @@ -16,8 +17,8 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow() #endif npal = epal = lineInput->palette(); epal.setColor(lineInput->backgroundRole(), QColor(Qt::red).lighter(150)); - connect(&session, SIGNAL(loading(QPIConfig & )), this, SLOT(loading(QPIConfig & ))); - connect(&session, SIGNAL(saving(QPIConfig & )), this, SLOT(saving(QPIConfig & ))); + connect(&session, SIGNAL(loading(QPIConfig &)), this, SLOT(loading(QPIConfig &))); + connect(&session, SIGNAL(saving(QPIConfig &)), this, SLOT(saving(QPIConfig &))); session.setFile(QAD::userPath(QAD::ltConfig, "session_qpicalc")); session.addEntry(this); session.addEntry(lineInput); @@ -28,18 +29,16 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow() } -MainWindow::~MainWindow() {session.save(); +MainWindow::~MainWindow() { + session.save(); } void MainWindow::changeEvent(QEvent * e) { QMainWindow::changeEvent(e); switch (e->type()) { - case QEvent::LanguageChange: - retranslateUi(this); - break; - default: - break; + case QEvent::LanguageChange: retranslateUi(this); break; + default: break; } } @@ -82,9 +81,9 @@ void MainWindow::redrawGraphics() { void MainWindow::loading(QPIConfig & conf) { - active_ = false; + active_ = false; QStringList vars = conf.getValue("variables").toStringList(); - int vc = vars.size() / 2; + int vc = vars.size() / 2; for (int i = 0; i < vc; ++i) { QTreeWidgetItem * ti = new QTreeWidgetItem(treeVariables); ti->setText(0, vars[i * 2]); @@ -110,8 +109,7 @@ void MainWindow::loading(QPIConfig & conf) { buttonGraphicClear->setEnabled(treeGraphics->topLevelItemCount() > 0); graphic->setVisualRect(conf.getValue("graphicRect", QRectF(-1., -1., 2., 2.)).toRectF()); ba = conf.getValue("graphic_state").toByteArray(); - if (!ba.isEmpty()) - graphic->load(ba); + if (!ba.isEmpty()) graphic->load(ba); on_tabWidget_currentChanged(0); redrawGraphics(); active_ = true; @@ -133,7 +131,8 @@ void MainWindow::saving(QPIConfig & conf) { QTreeWidgetItem * ti = treeGraphics->topLevelItem(i); vars << QString::number(ti->background(1).color().rgb()) << ti->text(2); } - QByteArray ba; QDataStream s(&ba, QIODevice::WriteOnly); + QByteArray ba; + QDataStream s(&ba, QIODevice::WriteOnly); s << graphic->allGraphics(); conf.setValue("graphics", QByteArray2QString(ba)); conf.setValue("graphicRect", graphic->visualRect()); @@ -142,8 +141,10 @@ void MainWindow::saving(QPIConfig & conf) { void MainWindow::on_lineInput_textChanged(QString text) { - if (evaluator.check(Q2PIString(text))) lineInput->setPalette(npal); - else lineInput->setPalette(epal); + if (evaluator.check(Q2PIString(text))) + lineInput->setPalette(npal); + else + lineInput->setPalette(epal); labelParsed->setText(PI2QString(evaluator.expression())); labelError->setText(PI2QString(evaluator.error())); } @@ -151,36 +152,37 @@ void MainWindow::on_lineInput_textChanged(QString text) { void MainWindow::on_lineInput_returnPressed() { bool ret = evaluator.check(Q2PIString(lineInput->text())); - if (ret) lineInput->setPalette(npal); - else lineInput->setPalette(epal); + if (ret) + lineInput->setPalette(npal); + else + lineInput->setPalette(epal); labelParsed->setText(PI2QString(evaluator.expression())); labelError->setText(PI2QString(evaluator.error())); if (!ret) return; complexd val = evaluator.evaluate(); evaluator.setVariable(ans, val); - if (val.imag() == 0) labelResult->setText(QString::number(val.real())); + if (val.imag() == 0) + labelResult->setText(QString::number(val.real())); else { - if (val.real() == 0) labelResult->setText(QString::number(val.imag()) + "i"); + if (val.real() == 0) + labelResult->setText(QString::number(val.imag()) + "i"); else { - if (val.imag() > 0) labelResult->setText(QString::number(val.real()) - + " + " + QString::number(val.imag()) + "i"); - else labelResult->setText(QString::number(val.real()) - + " - " + QString::number(fabs(val.imag())) + "i"); + if (val.imag() > 0) + labelResult->setText(QString::number(val.real()) + " + " + QString::number(val.imag()) + "i"); + else + labelResult->setText(QString::number(val.real()) + " - " + QString::number(fabs(val.imag())) + "i"); } } if (lineInput->text().trimmed().isEmpty()) return; - QTreeWidgetItem * ti = 0, * pti = 0; - if (treeHistory->topLevelItemCount() > 0) - pti = treeHistory->topLevelItem(treeHistory->topLevelItemCount() - 1); + QTreeWidgetItem *ti = 0, *pti = 0; + if (treeHistory->topLevelItemCount() > 0) pti = treeHistory->topLevelItem(treeHistory->topLevelItemCount() - 1); if (pti != 0) - if (pti->text(0) == lineInput->text()) - return; + if (pti->text(0) == lineInput->text()) return; ti = new QTreeWidgetItem(treeHistory); ti->setText(0, lineInput->text()); ti->setText(1, labelResult->text()); treeHistory->addTopLevelItem(ti); - if (treeHistory->verticalScrollBar()->value() == treeHistory->verticalScrollBar()->maximum()) - treeHistory->scrollToBottom(); + if (treeHistory->verticalScrollBar()->value() == treeHistory->verticalScrollBar()->maximum()) treeHistory->scrollToBottom(); } @@ -196,11 +198,16 @@ void MainWindow::on_treeGraphics_itemSelectionChanged() { void MainWindow::on_treeGraphics_itemDoubleClicked(QTreeWidgetItem * item, int column) { Qt::ItemFlags f = item->flags(); - if (column != 1) f &= ~Qt::ItemIsEditable; - else f |= Qt::ItemIsEditable; + if (column != 1) + f &= ~Qt::ItemIsEditable; + else + f |= Qt::ItemIsEditable; item->setFlags(f); if (column != 0) return; - QColor col = QColorDialog::getColor(item->data(0, Qt::DecorationRole).value(), this, "Select color for graphic", QColorDialog::ShowAlphaChannel); + QColor col = QColorDialog::getColor(item->data(0, Qt::DecorationRole).value(), + this, + "Select color for graphic", + QColorDialog::ShowAlphaChannel); if (!col.isValid()) return; item->setData(0, Qt::DecorationRole, col); updateGraphics(); @@ -219,8 +226,8 @@ void MainWindow::on_buttonVarAdd_clicked() { void MainWindow::on_buttonVarDel_clicked() { - QList si = treeVariables->selectedItems(); - foreach (QTreeWidgetItem * i, si) + QList si = treeVariables->selectedItems(); + foreach(QTreeWidgetItem * i, si) delete i; buttonVarClear->setEnabled(treeVariables->topLevelItemCount() > 0); } @@ -243,8 +250,8 @@ void MainWindow::on_buttonGraphicAdd_clicked() { void MainWindow::on_buttonGraphicDel_clicked() { - QList si = treeGraphics->selectedItems(); - foreach (QTreeWidgetItem * i, si) + QList si = treeGraphics->selectedItems(); + foreach(QTreeWidgetItem * i, si) delete i; buttonGraphicClear->setEnabled(treeGraphics->topLevelItemCount() > 0); updateGraphics(); diff --git a/utils/valuetreeeditor/CMakeLists.txt b/utils/valuetreeeditor/CMakeLists.txt new file mode 100644 index 0000000..d51de14 --- /dev/null +++ b/utils/valuetreeeditor/CMakeLists.txt @@ -0,0 +1,19 @@ +project(valuetreeeditor) +if(APPLE) + set(APP_ICON "") +elseif(WIN32) + set(APP_ICON "icons/valuetreeeditor.ico") +else() + set(APP_ICON "icons/valuetreeeditor.png") +endif() +set(APP_INFO "Editor for PIValueTree") +qad_application(${PROJECT_NAME} "Gui;Widgets" "qad_utils;qad_widgets;qad_application;qad_piqt_utils") +if (NOT DEFINED ANDROID_PLATFORM) + foreach (_qv_ IN ITEMS 5 6) + if (${LOCAL_FOUND${_qv_}}) + import_version(${PROJECT_NAME}${_qv_} ${PROJECT_NAME}) + import_deploy_properties(${PROJECT_NAME}${_qv_} ${PROJECT_NAME}) + deploy_target(${PROJECT_NAME}${_qv_} DEPLOY_DIR ${CMAKE_CURRENT_BINARY_DIR} DESTINATION ${ROOT_DIR}/release ADD_MANIFEST) + endif() + endforeach() +endif() diff --git a/utils/valuetreeeditor/icons/valuetreeeditor.ico b/utils/valuetreeeditor/icons/valuetreeeditor.ico new file mode 100644 index 0000000..831b3c2 Binary files /dev/null and b/utils/valuetreeeditor/icons/valuetreeeditor.ico differ diff --git a/utils/valuetreeeditor/icons/valuetreeeditor.png b/utils/valuetreeeditor/icons/valuetreeeditor.png new file mode 100644 index 0000000..1dc3065 Binary files /dev/null and b/utils/valuetreeeditor/icons/valuetreeeditor.png differ diff --git a/utils/valuetreeeditor/mainwindow.cpp b/utils/valuetreeeditor/mainwindow.cpp new file mode 100644 index 0000000..3fb506d --- /dev/null +++ b/utils/valuetreeeditor/mainwindow.cpp @@ -0,0 +1,90 @@ +#include "mainwindow.h" + +#include "piqt.h" +#include "qad_locations.h" + +#include +#include +#include +#include +#include + + +MainWindow::MainWindow(QWidget * parent): EMainWindow(parent), Ui::MainWindow() { + setupUi(this); + session.setFile(QAD::userPath(QAD::ltConfig, "session_valuetreeeditor")); + session.addEntry(this); + session.load(); + widget->setGroupingEnabled(actionGrouping->isChecked()); + widget->setFullEditMode(actionFull_edit_mode->isChecked()); +} + + +MainWindow::~MainWindow() { + session.save(); + session.clear(true); +} + + +void MainWindow::reset(bool) { + widget->setValue(PIValueTree()); + setWindowTitle(tr("PIValueTree Editor")); +} + + +bool MainWindow::load(const QString & path) { + PIFile f(Q2PIString(path), PIIODevice::ReadOnly); + if (!f.isOpened()) return false; + PIString ext = PIFile::FileInfo(f.path()).extension().toLowerCase(); + PIValueTree v; + if (ext == "conf" || ext == "ini") + v = PIValueTreeConversions::fromText(&f); + else if (ext == "json") + v = PIValueTreeConversions::fromJSON(PIJSON::fromJSON(PIString::fromUTF8(f.readAll()))); + else if (ext == "bin") + v = piDeserialize(f.readAll()); + widget->setValue(v); + setWindowTitle(tr("PIValueTree Editor - %1").arg(QFileInfo(path).fileName())); + return true; +} + + +bool MainWindow::save(const QString & path) { + PIFile f(Q2PIString(path), PIIODevice::ReadWrite); + if (!f.isOpened()) return false; + f.clear(); + PIString ext = PIFile::FileInfo(f.path()).extension().toLowerCase(); + auto v = widget->value(); + if (ext == "conf" || ext == "ini") + f.write(PIValueTreeConversions::toText(v).toUTF8()); + else if (ext == "json") + f.write(PIValueTreeConversions::toJSON(v).toJSON(PIJSON::Tree, false).toUTF8()); + else if (ext == "bin") + f.write(piSerialize(v)); + setWindowTitle(tr("PIValueTree Editor - %1").arg(QFileInfo(path).fileName())); + return true; +} + + +void MainWindow::changeEvent(QEvent * e) { + QMainWindow::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: retranslateUi(this); break; + default: break; + } +} + + +QString MainWindow::loadFilter() { + return "All types(*.conf *.ini *.json *.bin);;INI format(*.conf *.ini);;JSON(*.json);;Binary(*.bin)"; +} + + +void MainWindow::on_actionGrouping_toggled(bool on) { + widget->setGroupingEnabled(on); +} + + +void MainWindow::on_actionFull_edit_mode_toggled(bool on) { + widget->setFullEditMode(on); +} diff --git a/utils/valuetreeeditor/mainwindow.h b/utils/valuetreeeditor/mainwindow.h new file mode 100644 index 0000000..b7651f9 --- /dev/null +++ b/utils/valuetreeeditor/mainwindow.h @@ -0,0 +1,32 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include "emainwindow.h" +#include "ui_mainwindow.h" + + +class MainWindow + : public EMainWindow + , private Ui::MainWindow { + Q_OBJECT + +public: + MainWindow(QWidget * parent = 0); + ~MainWindow(); + + void reset(bool full = false) override; + bool load(const QString & path) override; + bool save(const QString & path) override; + +protected: + void changeEvent(QEvent * e); + + QString loadFilter() override; + QString saveFilter() override { return loadFilter(); } + +private slots: + void on_actionGrouping_toggled(bool on); + void on_actionFull_edit_mode_toggled(bool on); +}; + +#endif // MAINWINDOW_H diff --git a/utils/valuetreeeditor/mainwindow.ui b/utils/valuetreeeditor/mainwindow.ui new file mode 100644 index 0000000..993e8f8 --- /dev/null +++ b/utils/valuetreeeditor/mainwindow.ui @@ -0,0 +1,266 @@ + + + MainWindow + + + + 0 + 0 + 780 + 521 + + + + PIValueTree Editor + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + true + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + 0 + 0 + 780 + 446 + + + + + + + + + + + + + + + File + + + TopToolBarArea + + + false + + + + + + + + + + 0 + 0 + 780 + 31 + + + + + File + + + + + + + + + View + + + + + + + + + + + :/icons/document-open.png:/icons/document-open.png + + + Open... + + + Ctrl+O + + + + + + :/icons/document-save.png:/icons/document-save.png + + + Save + + + Ctrl+S + + + + + + :/icons/document-save-as.png:/icons/document-save-as.png + + + Save As... + + + Alt+Shift+S + + + + + + :/icons/document-new.png:/icons/document-new.png + + + New + + + Ctrl+N + + + + + + :/icons/dialog-information.png:/icons/dialog-information.png + + + About ... + + + + + true + + + Grouping + + + + + true + + + true + + + Full edit mode + + + + + + + PIValueTreeEdit + QWidget +
pivaluetree_edit.h
+ 1 +
+
+ + + + + + + + actionNew + triggered() + MainWindow + newFile() + + + -1 + -1 + + + 389 + 260 + + + + + actionOpen + triggered() + MainWindow + openFile() + + + -1 + -1 + + + 389 + 260 + + + + + actionSaveAs + triggered() + MainWindow + saveAsFile() + + + -1 + -1 + + + 389 + 260 + + + + + actionSave + triggered() + MainWindow + saveFile() + + + -1 + -1 + + + 389 + 260 + + + + + + newFile() + openFile() + saveFile() + saveAsFile() + +
diff --git a/utils/valuetreeeditor/valuetreeeditor.qrc b/utils/valuetreeeditor/valuetreeeditor.qrc new file mode 100644 index 0000000..c0abf17 --- /dev/null +++ b/utils/valuetreeeditor/valuetreeeditor.qrc @@ -0,0 +1,5 @@ + + + icons/valuetreeeditor.png + + diff --git a/utils/valuetreeeditor/valuetreeeditor_main.cpp b/utils/valuetreeeditor/valuetreeeditor_main.cpp new file mode 100644 index 0000000..aa682b1 --- /dev/null +++ b/utils/valuetreeeditor/valuetreeeditor_main.cpp @@ -0,0 +1,17 @@ +#include "mainwindow.h" +#include "qad_locations.h" +#include "qad_types.h" + +#include + + +int main(int argc, char * argv[]) { + QApplication a(argc, argv); + a.setWindowIcon(QIcon(":/icons/valuetreeeditor.png")); + enableHighDPI(); + QAD::loadTranslations(); + MainWindow w; + if (a.arguments().size() > 1) w.load(a.arguments().back()); + w.show(); + return a.exec(); +}