File indexing completed on 2024-04-28 05:34:59

0001 /*
0002     SPDX-FileCopyrightText: 2009 Aaron Seigo <aseigo@kde.org>
0003     SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QDialog>
0011 #include <QPointer>
0012 
0013 #include <KIO/Job>
0014 
0015 class QSplitter;
0016 
0017 class QAction;
0018 class QFileDialog;
0019 class QMenu;
0020 class KTextEdit;
0021 class QTextBrowser;
0022 
0023 class ShellCorona;
0024 
0025 namespace KTextEditor
0026 {
0027 class Document;
0028 } // namespace KParts
0029 
0030 namespace Plasma
0031 {
0032 class Corona;
0033 } // namespace Plasma
0034 
0035 class InteractiveConsole : public QDialog
0036 {
0037     Q_OBJECT
0038 
0039 public:
0040     enum ConsoleMode {
0041         PlasmaConsole,
0042         KWinConsole,
0043     };
0044 
0045     explicit InteractiveConsole(ConsoleMode mode, QWidget *parent = nullptr);
0046     ~InteractiveConsole() override;
0047 
0048     void setMode(const QString &mode);
0049     QString mode() const;
0050 
0051     void setScriptInterface(QObject *obj);
0052     QObject *scriptEngine() const;
0053 
0054     void loadScript(const QString &path);
0055 
0056 Q_SIGNALS:
0057     void scriptEngineChanged();
0058     void modeChanged();
0059     void visibleChanged(bool);
0060 
0061 protected:
0062     void showEvent(QShowEvent *) override;
0063     void closeEvent(QCloseEvent *event) override;
0064 
0065 protected Q_SLOTS:
0066     void print(const QString &string);
0067     void reject() override;
0068 
0069 private Q_SLOTS:
0070     void openScriptFile();
0071     void saveScript();
0072     void scriptTextChanged();
0073     void evaluateScript();
0074     void clearEditor();
0075     void clearOutput();
0076     void scriptFileDataRecvd(KIO::Job *job, const QByteArray &data);
0077     void scriptFileDataReq(KIO::Job *job, QByteArray &data);
0078     void reenableEditor(KJob *job);
0079     void saveScriptUrlSelected(int result);
0080     void openScriptUrlSelected(int result);
0081     void loadScriptFromUrl(const QUrl &url);
0082     void populateTemplatesMenu();
0083     void loadTemplate(QAction *);
0084     void useTemplate(QAction *);
0085     void modeSelectionChanged();
0086 
0087 private:
0088     void saveScript(const QUrl &url);
0089 
0090     ShellCorona *m_corona;
0091     QSplitter *m_splitter;
0092     KTextEditor::Document *m_editorPart;
0093     KTextEdit *m_editor;
0094     QTextBrowser *m_output;
0095     QAction *m_loadAction;
0096     QAction *m_saveAction;
0097     QAction *m_clearAction;
0098     QAction *m_executeAction;
0099     QAction *m_plasmaAction;
0100     QAction *m_kwinAction;
0101     QMenu *m_snippetsMenu;
0102 
0103     QFileDialog *m_fileDialog;
0104     QPointer<KIO::Job> m_job;
0105     bool m_closeWhenCompleted;
0106     ConsoleMode m_mode;
0107     QPointer<QObject> m_scriptEngine;
0108 };