Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 474f3786 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

UI: Enable the FakeVim by default!

parent 94300e11
Branches
Aucune étiquette associée trouvée
1 requête de fusion!19Fake vim
......@@ -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
{
......
......@@ -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;
};
}
......
#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
......
......@@ -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;
};
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter