File indexing completed on 2024-05-12 13:40:54
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 };