File indexing completed on 2024-04-21 03:58:06

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     AppCommands();
0025     static AppCommands *m_instance;
0026 
0027 public:
0028     ~AppCommands() override;
0029     bool exec(KTextEditor::View *view, const QString &cmd, QString &msg, const KTextEditor::Range &range = KTextEditor::Range::invalid()) override;
0030     bool help(KTextEditor::View *view, const QString &cmd, QString &msg) override;
0031 
0032     static AppCommands *self()
0033     {
0034         if (m_instance == nullptr) {
0035             m_instance = new AppCommands();
0036         }
0037         return m_instance;
0038     }
0039 
0040 private:
0041     /**
0042      * @returns a view in the given \p window that does not share a split
0043      * view with the given \p view. If such view could not be found, then
0044      * nullptr is returned.
0045      */
0046     static KTextEditor::View *findViewInDifferentSplitView(KTextEditor::MainWindow *window, KTextEditor::View *view);
0047 
0048 private:
0049     void closeCurrentDocument();
0050     void closeDocuments(const QList<KTextEditor::Document *> &documents);
0051     void closeCurrentView();
0052     void closeCurrentSplitView();
0053     void closeOtherSplitViews();
0054     void quit();
0055 
0056 private:
0057     const QRegularExpression re_write;
0058     const QRegularExpression re_close;
0059     const QRegularExpression re_quit;
0060     const QRegularExpression re_exit;
0061     const QRegularExpression re_edit;
0062     const QRegularExpression re_tabedit;
0063     const QRegularExpression re_new;
0064     const QRegularExpression re_split;
0065     const QRegularExpression re_vsplit;
0066     const QRegularExpression re_vclose;
0067     const QRegularExpression re_only;
0068 };
0069 
0070 class BufferCommands : public KTextEditor::Command
0071 {
0072     BufferCommands();
0073     static BufferCommands *m_instance;
0074 
0075 public:
0076     ~BufferCommands() override;
0077     bool exec(KTextEditor::View *view, const QString &cmd, QString &msg, const KTextEditor::Range &range = KTextEditor::Range::invalid()) override;
0078     bool help(KTextEditor::View *view, const QString &cmd, QString &msg) override;
0079 
0080     static BufferCommands *self()
0081     {
0082         if (m_instance == nullptr) {
0083             m_instance = new BufferCommands();
0084         }
0085         return m_instance;
0086     }
0087 
0088 private:
0089     void switchDocument(KTextEditor::View *, const QString &doc);
0090     void prevBuffer(KTextEditor::View *);
0091     void nextBuffer(KTextEditor::View *);
0092     void firstBuffer(KTextEditor::View *);
0093     void lastBuffer(KTextEditor::View *);
0094     void prevTab(KTextEditor::View *);
0095     void nextTab(KTextEditor::View *);
0096     void firstTab(KTextEditor::View *);
0097     void lastTab(KTextEditor::View *);
0098 
0099     static void activateDocument(KTextEditor::View *, KTextEditor::Document *);
0100     static QList<KTextEditor::Document *> documents();
0101 };
0102 }
0103 
0104 #endif /* KATEVI_APP_COMMANDS_H */