1 #pragma once 2 3 #include <QObject> 4 #include <QTextEdit> 5 #include "plain_text_edit.h" 6 7 class QMainWindow; 8 class QTextDocument; 9 class QString; 10 class QWidget; 11 class QTextCursor; 12 13 class Proxy; 14 15 namespace FakeVim { 16 namespace Internal { 17 class FakeVimHandler; 18 struct ExCommand; 19 } // namespace Internal 20 } // namespace FakeVim 21 22 PlainTextEdit *createEditorWidget(QWidget *parent = 0); 23 void initHandler(FakeVim::Internal::FakeVimHandler *handler); 24 void clearUndoRedo(QWidget *editor); 25 Proxy *connectSignals( FakeVim::Internal::FakeVimHandler *handler, QMainWindow *mainWindow, QWidget *editor); 26 27 class Proxy : public QObject 28 { 29 Q_OBJECT 30 31 public: 32 explicit Proxy(QWidget *widget, QMainWindow *mw, QObject *parent = nullptr); 33 void openFile(const QString &fileName); 34 35 signals: 36 void handleInput(const QString &keys); 37 38 void requestRead(const QString &path); 39 40 void requestSave(); 41 void requestSaveAndQuit(); 42 43 void requestSave(const QString &path); 44 void requestSaveAndQuit(const QString &path); 45 46 void requestQuit(); 47 void requestRun(); 48 49 public slots: 50 void changeStatusData(const QString &info); 51 void highlightMatches(const QString &pattern); 52 void changeStatusMessage(const QString &contents, int cursorPos); 53 void changeExtraInformation(const QString &info); 54 void updateStatusBar(); 55 void handleExCommand(bool *handled, const FakeVim::Internal::ExCommand &cmd); 56 void requestSetBlockSelection(const QTextCursor &tc); 57 void requestDisableBlockSelection(); 58 void updateBlockSelection(); 59 void requestHasBlockSelection(bool *on); 60 void indentRegion(int beginBlock, int endBlock, QChar typedChar); 61 void checkForElectricCharacter(bool *result, QChar c); 62 63 private: 64 static int firstNonSpace(const QString &text); 65 66 void updateExtraSelections(); 67 bool wantRead(const FakeVim::Internal::ExCommand &cmd); 68 bool wantSaveAndQuit(const FakeVim::Internal::ExCommand &cmd); 69 bool wantSave(const FakeVim::Internal::ExCommand &cmd); 70 bool wantQuit(const FakeVim::Internal::ExCommand &cmd); 71 bool wantRun(const FakeVim::Internal::ExCommand &cmd); 72 73 void invalidate(); 74 bool hasChanges(const QString &fileName); 75 76 QTextDocument *document() const; 77 QString content() const; 78 79 QWidget *m_widget; 80 QMainWindow *m_mainWindow; 81 QString m_statusMessage; 82 QString m_statusData; 83 84 QList<QTextEdit::ExtraSelection> m_searchSelection; 85 QList<QTextEdit::ExtraSelection> m_clearSelection; 86 QList<QTextEdit::ExtraSelection> m_blockSelection; 87 }; 88