File indexing completed on 2024-04-28 11:45:59

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