File indexing completed on 2024-04-28 07:47:07

0001 /*
0002     SPDX-FileCopyrightText: KDE Developers
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KATE_VIMODE_MARKS_H
0008 #define KATE_VIMODE_MARKS_H
0009 
0010 #include <KConfigGroup>
0011 #include <KTextEditor/Document>
0012 
0013 #include <QMap>
0014 
0015 namespace KTextEditor
0016 {
0017 class DocumentPrivate;
0018 class Cursor;
0019 class MovingCursor;
0020 }
0021 
0022 namespace KateVi
0023 {
0024 class InputModeManager;
0025 
0026 class Marks : public QObject
0027 {
0028 public:
0029     explicit Marks(InputModeManager *imm);
0030 
0031     /** JBOS == Just a Bunch Of Shortcuts **/
0032     void setStartEditYanked(const KTextEditor::Cursor pos);
0033     void setFinishEditYanked(const KTextEditor::Cursor pos);
0034     void setLastChange(const KTextEditor::Cursor pos);
0035     void setInsertStopped(const KTextEditor::Cursor pos);
0036     void setSelectionStart(const KTextEditor::Cursor pos);
0037     void setSelectionFinish(const KTextEditor::Cursor pos);
0038     void setUserMark(const QChar &mark, const KTextEditor::Cursor pos);
0039 
0040     KTextEditor::Cursor getStartEditYanked() const;
0041     KTextEditor::Cursor getFinishEditYanked() const;
0042     KTextEditor::Cursor getLastChange() const;
0043     KTextEditor::Cursor getInsertStopped() const;
0044     KTextEditor::Cursor getSelectionStart() const;
0045     KTextEditor::Cursor getSelectionFinish() const;
0046     KTextEditor::Cursor getMarkPosition(const QChar &mark) const;
0047 
0048     void writeSessionConfig(KConfigGroup &config) const;
0049     void readSessionConfig(const KConfigGroup &config);
0050 
0051     QString getMarksOnTheLine(int line) const;
0052 
0053 private:
0054     void syncViMarksAndBookmarks();
0055     static bool isShowable(const QChar &mark);
0056 
0057     void setMark(const QChar &mark, const KTextEditor::Cursor pos);
0058 
0059 private:
0060     void markChanged(KTextEditor::Document *doc, KTextEditor::Mark mark, KTextEditor::Document::MarkChangeAction action);
0061 
0062 private:
0063     InputModeManager *m_inputModeManager;
0064     KTextEditor::DocumentPrivate *m_doc;
0065 
0066     QMap<QChar, KTextEditor::MovingCursor *> m_marks;
0067     bool m_settingMark;
0068 };
0069 }
0070 
0071 #endif // KATE_VIMODE_MARKS_H