1 /*
2     SPDX-FileCopyrightText: KDE Developers
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #ifndef KATE_VIMODE_MARKS_H
8 #define KATE_VIMODE_MARKS_H
9 
10 #include "KTextEditor/MarkInterface"
11 
12 #include <KConfigGroup>
13 
14 #include <QMap>
15 
16 namespace KTextEditor
17 {
18 class DocumentPrivate;
19 class Cursor;
20 class MovingCursor;
21 }
22 
23 namespace KateVi
24 {
25 class InputModeManager;
26 
27 class Marks : public QObject
28 {
29     Q_OBJECT
30 
31 public:
32     explicit Marks(InputModeManager *imm);
33 
34     /** JBOS == Just a Bunch Of Shortcuts **/
35     void setStartEditYanked(const KTextEditor::Cursor pos);
36     void setFinishEditYanked(const KTextEditor::Cursor pos);
37     void setLastChange(const KTextEditor::Cursor pos);
38     void setInsertStopped(const KTextEditor::Cursor pos);
39     void setSelectionStart(const KTextEditor::Cursor pos);
40     void setSelectionFinish(const KTextEditor::Cursor pos);
41     void setUserMark(const QChar &mark, const KTextEditor::Cursor pos);
42 
43     KTextEditor::Cursor getStartEditYanked() const;
44     KTextEditor::Cursor getFinishEditYanked() const;
45     KTextEditor::Cursor getLastChange() const;
46     KTextEditor::Cursor getInsertStopped() const;
47     KTextEditor::Cursor getSelectionStart() const;
48     KTextEditor::Cursor getSelectionFinish() const;
49     KTextEditor::Cursor getMarkPosition(const QChar &mark) const;
50 
51     void writeSessionConfig(KConfigGroup &config) const;
52     void readSessionConfig(const KConfigGroup &config);
53 
54     QString getMarksOnTheLine(int line) const;
55 
56 private:
57     void syncViMarksAndBookmarks();
58     bool isShowable(const QChar &mark);
59 
60     void setMark(const QChar &mark, const KTextEditor::Cursor pos);
61 
62 private Q_SLOTS:
63     void markChanged(KTextEditor::Document *doc, KTextEditor::Mark mark, KTextEditor::MarkInterface::MarkChangeAction action);
64 
65 private:
66     InputModeManager *m_inputModeManager;
67     KTextEditor::DocumentPrivate *m_doc;
68 
69     QMap<QChar, KTextEditor::MovingCursor *> m_marks;
70     bool m_settingMark;
71 };
72 }
73 
74 #endif // KATE_VIMODE_MARKS_H
75