File indexing completed on 2024-05-05 16:18:35

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 */