From f0757f13715c71a422569c42a7328ffa050662f0 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Wed, 28 Jul 2021 22:03:56 +0200 Subject: [PATCH] UI: Add the ScriptEditor to the ScriptDocumentView and handle the open vvs/lua files --- src/UI/AbstractDocumentView.hh | 2 +- src/UI/MainWindow.cc | 65 ++++++++++++++++++---------------- src/UI/MainWindow.hh | 2 -- src/UI/ScriptDocumentView.cc | 16 +++++++-- src/UI/ScriptDocumentView.hh | 7 +++- 5 files changed, 55 insertions(+), 37 deletions(-) diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh index 43dc02e9..29d22aed 100644 --- a/src/UI/AbstractDocumentView.hh +++ b/src/UI/AbstractDocumentView.hh @@ -22,7 +22,7 @@ class AbstractDocumentView : public QMainWindow { public: enum class Type : quint64 { Vivy = Utils::toUnderlying(Utils::DocumentType::Vivy), - Script = Utils::toUnderlying(Utils::DocumentType::VivyScript), + Script = Utils::toUnderlying(Utils::DocumentType::VivyScript) }; public: diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc index 9a64c713..a375c4a4 100644 --- a/src/UI/MainWindow.cc +++ b/src/UI/MainWindow.cc @@ -119,24 +119,22 @@ MainWindow::MainWindow() noexcept } }; + { #define CONNECT_ENABLE(act, func) \ connect(documents, &QTabWidget::currentChanged, act, std::bind_front(func, act)); - connect(documents, &QTabWidget::currentChanged, this, - [this](int) noexcept -> void { documentViewActionsChanged(); }); + connect(documents, &QTabWidget::currentChanged, this, + [this](int) noexcept -> void { documentViewActionsChanged(); }); - CONNECT_ENABLE(saveFileAct, enableSaveOnDocument); - CONNECT_ENABLE(saveFileAsAct, enableSaveOnDocument); + CONNECT_ENABLE(saveFileAct, enableSaveOnDocument); + CONNECT_ENABLE(saveFileAsAct, enableSaveOnDocument); - CONNECT_ENABLE(loadSubDocumentAssAct, enableLoadSubOnDocument); - CONNECT_ENABLE(loadSubDocumentVideoAct, enableLoadSubOnDocument); - CONNECT_ENABLE(loadSubDocumentAudioAct, enableLoadSubOnDocument); + CONNECT_ENABLE(loadSubDocumentAssAct, enableLoadSubOnDocument); + CONNECT_ENABLE(loadSubDocumentVideoAct, enableLoadSubOnDocument); + CONNECT_ENABLE(loadSubDocumentAudioAct, enableLoadSubOnDocument); #undef CONNECT_ENABLE - - // Add a new empty document that will will be replaced if nothing is added - // to it. - newDocument(); + } // Main window has finished its construction statusBar()->showMessage("QSimulate has started"); @@ -279,16 +277,32 @@ MainWindow::openDocument() noexcept return; } - qDebug() << "Try to load document" << filename; - std::shared_ptr<VivyDocument> document = vivyApp->documentStore.loadDocument(filename); + // TODO: Better implementation + // Load script document + if (filename.endsWith(".lua") || filename.endsWith(".vvs")) { + qDebug() << "Try to load script" << filename; + try { + addTab(new ScriptDocumentView(filename, documents)); + } catch (const std::runtime_error &e) { + qCritical() << "Failed to load script" << filename << "with error:" << e.what(); + } + } - try { - qDebug() << "Add the view to the MainWindow for" << filename; - addTab(new VivyDocumentView(document)); - } catch (const std::runtime_error &e) { - qCritical() << "Failed to create the document view for" << QFileInfo(filename).baseName() - << "with path" << filename << "and error:" << e.what(); - vivyApp->documentStore.closeDocument(document->getUuid()); + // TODO: Better implementation + // Load Vivy document + else { + qDebug() << "Try to load document" << filename; + std::shared_ptr<VivyDocument> document = vivyApp->documentStore.loadDocument(filename); + + try { + qDebug() << "Add the view to the MainWindow for" << filename; + addTab(new VivyDocumentView(document)); + } catch (const std::runtime_error &e) { + qCritical() + << "Failed to create the document view for" << QFileInfo(filename).baseName() + << "with path" << filename << "and error:" << e.what(); + vivyApp->documentStore.closeDocument(document->getUuid()); + } } } @@ -327,17 +341,6 @@ MainWindow::loadSubDocumentAudio() noexcept void MainWindow::addTab(AbstractDocumentView *tab) -{ - const int index = documents->addTab(tab, tab->getDocumentTabIcon(), tab->getDocumentTabName()); - documents->setTabToolTip(index, tab->getDocumentTabToolTip()); - documents->setCurrentIndex(index); - connect(tab, &AbstractDocumentView::viewActionsChanged, this, - &MainWindow::documentViewActionsChanged); - documentViewActionsChanged(); -} - -void -MainWindow::addTab(VivyDocumentView *tab) { int index = -1; if (const int untouched_index = findFirstUntouchedDocument(); untouched_index >= 0) { diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh index 06a77a12..21b59e32 100644 --- a/src/UI/MainWindow.hh +++ b/src/UI/MainWindow.hh @@ -28,7 +28,6 @@ class MainWindow final : public QMainWindow { public: explicit MainWindow() noexcept; - ~MainWindow() noexcept = default; AbstractDocument *getCurrentDocument() const noexcept; template <class Document> Document *getCurrentDocument() const noexcept @@ -43,7 +42,6 @@ public: private: void addTab(AbstractDocumentView *); - void addTab(VivyDocumentView *); AbstractDocumentView *getTab(const int) const noexcept; AbstractDocumentView *getCurrentDocumentView() const; diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc index 661a1fbe..f529e4f0 100644 --- a/src/UI/ScriptDocumentView.cc +++ b/src/UI/ScriptDocumentView.cc @@ -1,10 +1,22 @@ #include "ScriptDocumentView.hh" +#include "ScriptViews/ScriptEditor.hh" +#include "../VivyApplication.hh" + +#include <QVBoxLayout> using namespace Vivy; -ScriptDocumentView::ScriptDocumentView(QWidget *parent) noexcept +ScriptDocumentView::ScriptDocumentView(const QString &path, QWidget *parent) : AbstractDocumentView(AbstractDocumentView::Type::Script, parent) + , editor(new ScriptEditor(this)) { + QFile textFile(path); + if (!textFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + throw std::runtime_error("Failed to open script file"); + } + + editor->setPlainText(textFile.readAll()); + setCentralWidget(editor); } void @@ -27,7 +39,7 @@ ScriptDocumentView::getDocumentTabToolTip() const noexcept QIcon ScriptDocumentView::getDocumentTabIcon() const noexcept { - return QIcon::fromTheme("text-x-script"); + return QIcon(VIVY_ICON_FILE); } void diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh index e1a6804b..530b9bfa 100644 --- a/src/UI/ScriptDocumentView.hh +++ b/src/UI/ScriptDocumentView.hh @@ -13,12 +13,14 @@ namespace Vivy { +class ScriptEditor; + class ScriptDocumentView final : public AbstractDocumentView { Q_OBJECT VIVY_UNMOVABLE_OBJECT(ScriptDocumentView) public: - explicit ScriptDocumentView(QWidget *parent = nullptr) noexcept; + explicit ScriptDocumentView(const QString &path, QWidget *parent = nullptr); void closeDocument() noexcept override; void openProperties() noexcept override; @@ -31,6 +33,9 @@ public: { return nullptr; } + +private: + ScriptEditor *editor{ nullptr }; }; } -- GitLab