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