Warning, file /plasma/libksysguard/processui/scripting.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     KSysGuard, the KDE System Guard
0003 
0004     SPDX-FileCopyrightText: 2009 John Tapsell <john.tapsell@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 
0008 */
0009 
0010 #ifndef KSYSGUARDSCRIPTING_H
0011 #define KSYSGUARDSCRIPTING_H
0012 
0013 #include "../config-ksysguard.h"
0014 #include "ProcessModel.h"
0015 #include <QList>
0016 #include <QString>
0017 #include <QWidget>
0018 #include <processcore/processes.h>
0019 
0020 class QAction;
0021 class ScriptingHtmlDialog; // Defined in scripting.cpp file
0022 class KSysGuardProcessList;
0023 class ProcessObject;
0024 class QWebChannel;
0025 
0026 class Scripting : public QWidget
0027 {
0028     Q_OBJECT
0029 public:
0030     /** Create a scripting object */
0031     Scripting(KSysGuardProcessList *parent);
0032     /** Run the script in the given path */
0033     void runScript(const QString &path, const QString &name);
0034     /** Read all the script .desktop files and create an action for each one */
0035     void loadContextMenu();
0036     /** List of context menu actions that are created by loadContextMenu() */
0037     QList<QAction *> actions()
0038     {
0039         return mActions;
0040     }
0041 
0042 public Q_SLOTS:
0043     /** Stop all scripts and delete the script engine */
0044     void stopAllScripts();
0045 private Q_SLOTS:
0046     /** Run the script associated with the QAction that called this slot */
0047     void runScriptSlot();
0048 #if WEBENGINE_SCRIPTING_ENABLED
0049     void setupJavascriptObjects();
0050     void refreshScript();
0051     void zoomIn();
0052     void zoomOut();
0053 #endif
0054 private:
0055     /** This is created on the fly as needed, and deleted when no longer used */
0056     ScriptingHtmlDialog *mScriptingHtmlDialog;
0057     /** Used to expose mProcessObject to the WebEnginePage */
0058     QWebChannel *mWebChannel;
0059     /** The parent process list to script for */
0060     KSysGuardProcessList *const mProcessList;
0061     /** List of context menu actions that are created by loadContextMenu() */
0062     QList<QAction *> mActions;
0063     QString mScriptPath;
0064     QString mScriptName;
0065     ProcessObject *mProcessObject;
0066 
0067     qlonglong mPid;
0068 };
0069 
0070 // QWebChannel only reloads properties on demand, so we need a signal.
0071 #define P_PROPERTY(x) Q_PROPERTY(x NOTIFY anythingChanged)
0072 #define PROPERTY(Type, Name)                                                                                                                                   \
0073     Type Name() const                                                                                                                                          \
0074     {                                                                                                                                                          \
0075         KSysGuard::Process *process = mModel->getProcess(mPid);                                                                                                \
0076         if (process)                                                                                                                                           \
0077             return process->Name();                                                                                                                            \
0078         else                                                                                                                                                   \
0079             return Type();                                                                                                                                     \
0080     }
0081 
0082 class ProcessObject : public QObject
0083 {
0084     Q_OBJECT
0085 public:
0086     // clang-format off
0087        P_PROPERTY(qlonglong pid READ pid WRITE setPid)                 /* Add functionality to 'set' the pid to change which process to read from */
0088        P_PROPERTY(qlonglong ppid READ parentPid)                       /* Map 'ppid' to 'parentPid' to give it a nicer scripting name */
0089        P_PROPERTY(QString name READ name)                              /* Defined below to return the first word of the name */
0090        P_PROPERTY(QString fullname READ fullname)                      /* Defined below to return 'name' */
0091        P_PROPERTY(qlonglong rss READ vmRSS)                            /* Map 'rss' to 'vmRSS' just to give it a nicer scripting name */
0092        P_PROPERTY(qlonglong urss READ vmURSS)                          /* Map 'urss' to 'vmURSS' just to give it a nicer scripting name */
0093        P_PROPERTY(int numThreads READ numThreads)                      PROPERTY(int, numThreads)
0094        P_PROPERTY(qlonglong fsgid READ fsgid)                          PROPERTY(qlonglong, fsgid)
0095        P_PROPERTY(qlonglong parentPid READ parentPid)                  PROPERTY(qlonglong, parentPid)
0096        P_PROPERTY(QString login READ login)                            PROPERTY(QString, login)
0097        P_PROPERTY(qlonglong uid READ uid)                              PROPERTY(qlonglong, uid)
0098        P_PROPERTY(qlonglong euid READ euid)                            PROPERTY(qlonglong, euid)
0099        P_PROPERTY(qlonglong suid READ suid)                            PROPERTY(qlonglong, suid)
0100        P_PROPERTY(qlonglong fsuid READ fsuid)                          PROPERTY(qlonglong, fsuid)
0101        P_PROPERTY(qlonglong gid READ gid)                              PROPERTY(qlonglong, gid)
0102        P_PROPERTY(qlonglong egid READ egid)                            PROPERTY(qlonglong, egid)
0103        P_PROPERTY(qlonglong sgid READ sgid)                            PROPERTY(qlonglong, sgid)
0104        P_PROPERTY(qlonglong tracerpid READ tracerpid)                  PROPERTY(qlonglong, tracerpid)
0105        P_PROPERTY(QByteArray tty READ tty)                             PROPERTY(QByteArray, tty)
0106        P_PROPERTY(qlonglong userTime READ userTime)                    PROPERTY(qlonglong, userTime)
0107        P_PROPERTY(qlonglong sysTime READ sysTime)                      PROPERTY(qlonglong, sysTime)
0108        P_PROPERTY(int userUsage READ userUsage)                        PROPERTY(int, userUsage)
0109        P_PROPERTY(int sysUsage READ sysUsage)                          PROPERTY(int, sysUsage)
0110        P_PROPERTY(int totalUserUsage READ totalUserUsage)              PROPERTY(int, totalUserUsage)
0111        P_PROPERTY(int totalSysUsage READ totalSysUsage)                PROPERTY(int, totalSysUsage)
0112        P_PROPERTY(int numChildren READ numChildren)                    PROPERTY(int, numChildren)
0113        P_PROPERTY(int niceLevel READ niceLevel)                        PROPERTY(int, niceLevel)
0114        P_PROPERTY(int scheduler READ scheduler)                        PROPERTY(int, scheduler)
0115        P_PROPERTY(int ioPriorityClass READ ioPriorityClass)            PROPERTY(int, ioPriorityClass)
0116        P_PROPERTY(int ioniceLevel READ ioniceLevel)                    PROPERTY(int, ioniceLevel)
0117        P_PROPERTY(qlonglong vmSize READ vmSize)                        PROPERTY(qlonglong, vmSize)
0118        P_PROPERTY(qlonglong vmRSS READ vmRSS)                          PROPERTY(qlonglong, vmRSS)
0119        P_PROPERTY(qlonglong vmURSS READ vmURSS)                        PROPERTY(qlonglong, vmURSS)
0120        P_PROPERTY(qlonglong pixmapBytes READ pixmapBytes)              PROPERTY(qlonglong, pixmapBytes)
0121        P_PROPERTY(bool hasManagedGuiWindow READ hasManagedGuiWindow)   PROPERTY(bool, hasManagedGuiWindow)
0122        P_PROPERTY(QString command READ command)                        PROPERTY(QString, command)
0123        P_PROPERTY(qlonglong status READ status)                        PROPERTY(qlonglong, status)
0124        P_PROPERTY(qlonglong ioCharactersRead READ ioCharactersRead)    PROPERTY(qlonglong, ioCharactersRead)
0125        P_PROPERTY(qlonglong ioCharactersWritten READ ioCharactersWritten)                  PROPERTY(qlonglong, ioCharactersWritten)
0126        P_PROPERTY(qlonglong ioReadSyscalls READ ioReadSyscalls)                            PROPERTY(qlonglong, ioReadSyscalls)
0127        P_PROPERTY(qlonglong ioWriteSyscalls READ ioWriteSyscalls)                          PROPERTY(qlonglong, ioWriteSyscalls)
0128        P_PROPERTY(qlonglong ioCharactersActuallyRead READ ioCharactersActuallyRead)        PROPERTY(qlonglong, ioCharactersActuallyRead)
0129        P_PROPERTY(qlonglong ioCharactersActuallyWritten READ ioCharactersActuallyWritten)  PROPERTY(qlonglong, ioCharactersActuallyWritten)
0130        P_PROPERTY(qlonglong ioCharactersReadRate READ ioCharactersReadRate)                PROPERTY(qlonglong, ioCharactersReadRate)
0131        P_PROPERTY(qlonglong ioCharactersWrittenRate READ ioCharactersWrittenRate)          PROPERTY(qlonglong, ioCharactersWrittenRate)
0132        P_PROPERTY(qlonglong ioReadSyscallsRate READ ioReadSyscallsRate)                    PROPERTY(qlonglong, ioReadSyscallsRate)
0133        P_PROPERTY(qlonglong ioWriteSyscallsRate READ ioWriteSyscallsRate)                  PROPERTY(qlonglong, ioWriteSyscallsRate)
0134        P_PROPERTY(qlonglong ioCharactersActuallyReadRate READ ioCharactersActuallyReadRate)        PROPERTY(qlonglong, ioCharactersActuallyReadRate)
0135        P_PROPERTY(qlonglong ioCharactersActuallyWrittenRate READ ioCharactersActuallyWrittenRate)  PROPERTY(qlonglong, ioCharactersActuallyWrittenRate)
0136         // clang-format off
0137 
0138         ProcessObject(ProcessModel * processModel, int pid);
0139         void update(KSysGuard::Process *process);
0140 
0141         int pid() const { return mPid; }
0142         void setPid(int pid) { mPid = pid; }
0143         QString name() const { KSysGuard::Process *process = mModel->getProcess(mPid); if(process) return process->name().section(QLatin1Char(' '), 0,0); else return QString(); }
0144         QString fullname() const { KSysGuard::Process *process = mModel->getProcess(mPid); if(process) return process->name(); else return QString(); }
0145 
0146         public Q_SLOTS:
0147         bool fileExists(const QString &filename);
0148         QString readFile(const QString &filename);
0149 
0150     Q_SIGNALS:
0151         void anythingChanged();
0152 
0153     private:
0154         int mPid;
0155         ProcessModel *mModel;
0156 };
0157 
0158 #endif