File indexing completed on 2024-05-05 12:23:13
0001 /* 0002 SPDX-FileCopyrightText: 2009 Erlend Hamberg <ehamberg@gmail.com> 0003 SPDX-FileCopyrightText: 2011 Svyatoslav Kuzmich <svatoslav1@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef KATEVI_APP_COMMANDS_H 0009 #define KATEVI_APP_COMMANDS_H 0010 0011 #include <KTextEditor/Command> 0012 #include <QObject> 0013 #include <QRegularExpression> 0014 0015 namespace KTextEditor 0016 { 0017 class MainWindow; 0018 } 0019 0020 namespace KateVi 0021 { 0022 class AppCommands : public KTextEditor::Command 0023 { 0024 Q_OBJECT 0025 0026 AppCommands(); 0027 static AppCommands *m_instance; 0028 0029 public: 0030 ~AppCommands() override; 0031 bool exec(KTextEditor::View *view, const QString &cmd, QString &msg, const KTextEditor::Range &range = KTextEditor::Range::invalid()) override; 0032 bool help(KTextEditor::View *view, const QString &cmd, QString &msg) override; 0033 0034 static AppCommands *self() 0035 { 0036 if (m_instance == nullptr) { 0037 m_instance = new AppCommands(); 0038 } 0039 return m_instance; 0040 } 0041 0042 private: 0043 /** 0044 * @returns a view in the given \p window that does not share a split 0045 * view with the given \p view. If such view could not be found, then 0046 * nullptr is returned. 0047 */ 0048 static KTextEditor::View *findViewInDifferentSplitView(KTextEditor::MainWindow *window, KTextEditor::View *view); 0049 0050 private Q_SLOTS: 0051 void closeCurrentDocument(); 0052 void closeDocuments(const QList<KTextEditor::Document *> &documents); 0053 void closeCurrentView(); 0054 void closeCurrentSplitView(); 0055 void closeOtherSplitViews(); 0056 void quit(); 0057 0058 private: 0059 const QRegularExpression re_write; 0060 const QRegularExpression re_close; 0061 const QRegularExpression re_quit; 0062 const QRegularExpression re_exit; 0063 const QRegularExpression re_edit; 0064 const QRegularExpression re_tabedit; 0065 const QRegularExpression re_new; 0066 const QRegularExpression re_split; 0067 const QRegularExpression re_vsplit; 0068 const QRegularExpression re_vclose; 0069 const QRegularExpression re_only; 0070 }; 0071 0072 class BufferCommands : public KTextEditor::Command 0073 { 0074 Q_OBJECT 0075 0076 BufferCommands(); 0077 static BufferCommands *m_instance; 0078 0079 public: 0080 ~BufferCommands() override; 0081 bool exec(KTextEditor::View *view, const QString &cmd, QString &msg, const KTextEditor::Range &range = KTextEditor::Range::invalid()) override; 0082 bool help(KTextEditor::View *view, const QString &cmd, QString &msg) override; 0083 0084 static BufferCommands *self() 0085 { 0086 if (m_instance == nullptr) { 0087 m_instance = new BufferCommands(); 0088 } 0089 return m_instance; 0090 } 0091 0092 private: 0093 void switchDocument(KTextEditor::View *, const QString &doc); 0094 void prevBuffer(KTextEditor::View *); 0095 void nextBuffer(KTextEditor::View *); 0096 void firstBuffer(KTextEditor::View *); 0097 void lastBuffer(KTextEditor::View *); 0098 void prevTab(KTextEditor::View *); 0099 void nextTab(KTextEditor::View *); 0100 void firstTab(KTextEditor::View *); 0101 void lastTab(KTextEditor::View *); 0102 0103 static void activateDocument(KTextEditor::View *, KTextEditor::Document *); 0104 static QList<KTextEditor::Document *> documents(); 0105 }; 0106 0107 } 0108 0109 #endif /* KATEVI_APP_COMMANDS_H */