diff --git a/src/gui/treesitterinspector.cpp b/src/gui/treesitterinspector.cpp index 59a31eab..4391a6f3 100644 --- a/src/gui/treesitterinspector.cpp +++ b/src/gui/treesitterinspector.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -115,6 +116,11 @@ TreeSitterInspector::TreeSitterInspector(QWidget *parent) connect(ui->query, &QPlainTextEdit::textChanged, this, &TreeSitterInspector::changeQuery); + connect(ui->saveButton, &QPushButton::clicked, this, &TreeSitterInspector::saveToFile); + connect(ui->loadButton, &QPushButton::clicked, this, &TreeSitterInspector::loadFromFile); + + connect(ui->enableUnnamed, &QCheckBox::toggled, this, &TreeSitterInspector::showUnnamedChanged); + changeCurrentDocument(Core::Project::instance()->currentDocument()); } @@ -123,6 +129,49 @@ TreeSitterInspector::~TreeSitterInspector() delete ui; } +void TreeSitterInspector::saveToFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Query"), "", tr("Query Files (*.scm)")); + + QFile file(fileName); + // Note: at least on Linux, the file dialog will already warn if the file exists, so no need + // to do that manually. + + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::warning(this, tr("Error"), tr("Could not open file to write!")); + return; + } + + QTextStream out(&file); + out << ui->query->toPlainText() << Qt::flush; +} + +void TreeSitterInspector::loadFromFile() +{ + if (!ui->query->toPlainText().isEmpty()) { + auto result = + QMessageBox::warning(this, tr("Warning"), tr("Loading a query will overwrite the existing one, continue?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (result != QMessageBox::Ok) { + return; + } + } + + QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QString(), tr("Query Files (*.scm)")); + if (fileName.isNull()) { + return; + } + + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly)) { + QMessageBox::warning(this, tr("Error"), tr("Could not open file!")); + return; + } + + QTextStream in(&file); + ui->query->setPlainText(in.readAll()); +} + void TreeSitterInspector::changeQueryState() { if (m_treemodel.hasQuery()) { diff --git a/src/gui/treesitterinspector.h b/src/gui/treesitterinspector.h index 6063885d..79cc643d 100644 --- a/src/gui/treesitterinspector.h +++ b/src/gui/treesitterinspector.h @@ -54,6 +54,9 @@ class TreeSitterInspector : public QDialog ~TreeSitterInspector() override; private: + void saveToFile(); + void loadFromFile(); + void showUnnamedChanged(); void changeCurrentDocument(Core::Document *document); void setDocument(Core::CodeDocument *document); diff --git a/src/gui/treesitterinspector.ui b/src/gui/treesitterinspector.ui index 99528d8d..b5d52a3a 100644 --- a/src/gui/treesitterinspector.ui +++ b/src/gui/treesitterinspector.ui @@ -16,6 +16,12 @@ + + + 14 + true + + TreeSitter State @@ -32,10 +38,52 @@ - - - Query - + + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 14 + true + false + + + + Query + + + + + + + Save As... + + + + + + + Load... + + + +