From 474f3786f81c7bcdc677511de4118821888e5a6b Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Wed, 25 Aug 2021 09:39:54 +0200 Subject: [PATCH] UI: Enable the FakeVim by default! --- src/UI/ScriptDocumentView.cc | 33 +++++++++++++++++++++++ src/UI/ScriptDocumentView.hh | 18 +++++++++++++ src/UI/ScriptViews/EditorProxy.cc | 45 +++++++++++-------------------- src/UI/ScriptViews/EditorProxy.hh | 15 +++++------ 4 files changed, 72 insertions(+), 39 deletions(-) diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc index eea78736..bd82c101 100644 --- a/src/UI/ScriptDocumentView.cc +++ b/src/UI/ScriptDocumentView.cc @@ -23,9 +23,42 @@ ScriptDocumentView::ScriptDocumentView(std::shared_ptr<ScriptDocument> ptr, QWid setCentralWidget(editor); editor->setFocus(Qt::OtherFocusReason); + // FakeVim + { + handler = new FakeVimHandler(editor, this); + proxy = EditorProxy::connectSignals(handler, editor); + connect(proxy, &EditorProxy::handleInput, handler, &FakeVimHandler::handleInput); + // connect(proxy, &EditorProxy::requestSave, document, &AbstractDocument::save); // TODO + // connect(proxy, &EditorProxy::requestSaveAndQuit, document, &AbstractDocument::save + &MainWindow::closeTab); // TODO + // connect(proxy, &EditorProxy::requestQuit, document, &MainWindow::closeTab); // TODO + initHandler(handler); + handler->handleCommand(QStringLiteral("set expandtab")); + handler->handleCommand(QStringLiteral("set shiftwidth=4")); + handler->handleCommand(QStringLiteral("set tabstop=4")); + handler->handleCommand(QStringLiteral("set autoindent")); + handler->handleCommand(QStringLiteral("set smartindent")); + clearUndoRedo(editor); + } + connect(this, &ScriptDocumentView::luaErrorFound, editor, &ScriptEditor::updateLastLuaError); } +void +ScriptDocumentView::initHandler(FakeVimHandler *handler) noexcept +{ + handler->handleCommand(QStringLiteral("set nopasskeys")); + handler->handleCommand(QStringLiteral("set nopasscontrolkey")); + handler->installEventFilter(); + handler->setupWidget(); +} + +void +ScriptDocumentView::clearUndoRedo(QPlainTextEdit *scriptEditor) noexcept +{ + scriptEditor->setUndoRedoEnabled(false); + scriptEditor->setUndoRedoEnabled(true); +} + void ScriptDocumentView::closeDocument() noexcept { diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh index 8e595086..7b01ce08 100644 --- a/src/UI/ScriptDocumentView.hh +++ b/src/UI/ScriptDocumentView.hh @@ -11,16 +11,29 @@ #include <QString> #include <memory> +class QPlainTextEdit; + +namespace FakeVim::Internal +{ +class FakeVimHandler; +} + namespace Vivy { class ScriptEditor; class ScriptHighlighter; class ScriptDocument; +class EditorProxy; +} +namespace Vivy +{ class ScriptDocumentView final : public AbstractDocumentView { Q_OBJECT VIVY_UNMOVABLE_OBJECT(ScriptDocumentView) + using FakeVimHandler = FakeVim::Internal::FakeVimHandler; + public: explicit ScriptDocumentView(std::shared_ptr<ScriptDocument>, QWidget *parent = nullptr); @@ -37,10 +50,15 @@ signals: private: ScriptEditor *editor{ nullptr }; + EditorProxy *proxy{ nullptr }; ScriptHighlighter *syntax{ nullptr }; + FakeVimHandler *handler{ nullptr }; std::shared_ptr<ScriptDocument> document{ nullptr }; QString lastLuaErrorMsg{}; int lastLuaErrorLine{ -1 }; + + static void initHandler(FakeVimHandler *handler) noexcept; + static void clearUndoRedo(QPlainTextEdit *editor) noexcept; }; } diff --git a/src/UI/ScriptViews/EditorProxy.cc b/src/UI/ScriptViews/EditorProxy.cc index 7187cb5c..aca744c0 100644 --- a/src/UI/ScriptViews/EditorProxy.cc +++ b/src/UI/ScriptViews/EditorProxy.cc @@ -1,6 +1,7 @@ #include "EditorProxy.hh" #include "../FakeVim/FakeVimHandler.hh" #include "../FakeVim/FakeVimActions.hh" +#include "../../VivyApplication.hh" #include <QMessageBox> #include <QStatusBar> @@ -9,26 +10,10 @@ using namespace Vivy; -void -Vivy::initHandler(FakeVimHandler *handler) -{ - handler->handleCommand(QStringLiteral("set nopasskeys")); - handler->handleCommand(QStringLiteral("set nopasscontrolkey")); - handler->installEventFilter(); - handler->setupWidget(); -} - -void -Vivy::clearUndoRedo(QPlainTextEdit *scriptEditor) -{ - scriptEditor->setUndoRedoEnabled(false); - scriptEditor->setUndoRedoEnabled(true); -} - Vivy::EditorProxy * -Vivy::connectSignals(FakeVimHandler *handler, QMainWindow *mainWindow, QPlainTextEdit *editor) +EditorProxy::connectSignals(FakeVimHandler *handler, QPlainTextEdit *editor) noexcept { - EditorProxy *proxy = new EditorProxy(editor, mainWindow, handler); + EditorProxy *proxy = new EditorProxy(editor, handler); handler->commandBufferChanged.connect([proxy](const QString &contents, int cursorPos, int /* anchorPos */, @@ -64,10 +49,9 @@ Vivy::connectSignals(FakeVimHandler *handler, QMainWindow *mainWindow, QPlainTex return proxy; } -EditorProxy::EditorProxy(QPlainTextEdit *widg, QMainWindow *mainWin, QObject *parent) noexcept +EditorProxy::EditorProxy(QPlainTextEdit *widg, QObject *parent) noexcept : QObject(parent) , widget(widg) - , mainWindow(mainWin) { } @@ -143,26 +127,28 @@ EditorProxy::changeExtraInformation(const QString &info) noexcept void EditorProxy::updateStatusBar() noexcept { - static constexpr int msgMaxSize = 80; - int slack = msgMaxSize - statusMessage.size() - statusData.size(); - QString msg = statusMessage + QString(slack, QLatin1Char(' ')) + statusData; - mainWindow->statusBar()->showMessage(msg); + vivyApp->getMainWindow()->statusBar()->showMessage(statusMessage); // + statusData } void EditorProxy::handleExCommand(bool *handled, const ExCommand &cmd) noexcept { + // :wq if (wantSaveAndQuit(cmd)) - emit requestSaveAndQuit(); // :wq + emit requestSaveAndQuit(); + // :w else if (wantSave(cmd)) - emit requestSave(); // :w + emit requestSave(); else if (wantQuit(cmd)) { + // :q! if (cmd.hasBang) - invalidate(); // :q! + invalidate(); + + // :q else - emit requestQuit(); // :q + emit requestQuit(); } else if (wantRun(cmd)) @@ -380,8 +366,7 @@ EditorProxy::cancel(const QString &fileName) noexcept void EditorProxy::invalidate() noexcept { - TODO(Use a Vivy thing here !) - QApplication::quit(); + TODO(Use a Vivy thing here : MainWindow->closeTab(this) !) } bool diff --git a/src/UI/ScriptViews/EditorProxy.hh b/src/UI/ScriptViews/EditorProxy.hh index 50a5b1e0..c088b268 100644 --- a/src/UI/ScriptViews/EditorProxy.hh +++ b/src/UI/ScriptViews/EditorProxy.hh @@ -24,10 +24,11 @@ using ExCommand = FakeVim::Internal::ExCommand; class EditorProxy : public QObject { Q_OBJECT + VIVY_UNMOVABLE_OBJECT(EditorProxy) + + explicit EditorProxy(QPlainTextEdit *widget, QObject *parent = nullptr) noexcept; public: - explicit EditorProxy(QPlainTextEdit *widget, QMainWindow *mw, - QObject *parent = nullptr) noexcept; void openFile(const QString &fileName) noexcept; bool save(const QString &fileName) noexcept; @@ -70,19 +71,15 @@ private: QString content() const noexcept; QPlainTextEdit *widget; - QMainWindow *mainWindow; QString statusMessage; QString statusData; QList<QTextEdit::ExtraSelection> searchSelection; QList<QTextEdit::ExtraSelection> clearSelection; QList<QTextEdit::ExtraSelection> blockSelection; -}; -QWidget *createEditorWidget(bool usePlainTextEdit); -void initHandler(FakeVimHandler *handler); -void clearUndoRedo(QPlainTextEdit *editor); -EditorProxy *connectSignals(FakeVimHandler *handler, QMainWindow *mainWindow, - QPlainTextEdit *editor); +public: + static EditorProxy *connectSignals(FakeVimHandler *handler, QPlainTextEdit *editor) noexcept; +}; } -- GitLab