Loading...
Searching...
No Matches
QmlProcess.hpp
1#pragma once
2#include <QProcess>
3#include <QQmlEngine>
4
5#include <verdigris>
6
7namespace JS
8{
9class QmlProcess : public QProcess
10{
11 W_OBJECT(QmlProcess)
12public:
13 explicit QmlProcess(QObject* parent = nullptr);
14 ~QmlProcess() override;
15
16 bool running() const { return state() == Running; }
17
18 QString standardOutput() const { return m_standardOutput; }
19 QString standardError() const { return m_standardError; }
20
21 // Invokable methods for QML
22 void start();
23 W_INVOKABLE(start);
24 void stop();
25 W_INVOKABLE(stop)
26 void clearOutput();
27 W_INVOKABLE(clearOutput);
28
29 void programChanged() W_SIGNAL(programChanged);
30 void argumentsChanged() W_SIGNAL(argumentsChanged);
31 void workingDirectoryChanged() W_SIGNAL(workingDirectoryChanged);
32 void processStateChanged() W_SIGNAL(processStateChanged);
33 void runningChanged() W_SIGNAL(runningChanged);
34 void processErrorChanged() W_SIGNAL(processErrorChanged);
35 void exitCodeChanged() W_SIGNAL(exitCodeChanged);
36 void exitStatusChanged() W_SIGNAL(exitStatusChanged);
37 void standardOutputChanged() W_SIGNAL(standardOutputChanged);
38 void standardErrorChanged() W_SIGNAL(standardErrorChanged);
39
40 void outputLineReceived(const QString& line) W_SIGNAL(outputLineReceived, line);
41 void errorLineReceived(const QString& line) W_SIGNAL(errorLineReceived, line);
42
43 void lineReceived(const QString& line, bool isError)
44 W_SIGNAL(lineReceived, line, isError);
45
46 void onReadyReadStandardOutput();
47 W_SLOT(onReadyReadStandardOutput);
48 void onReadyReadStandardError();
49 W_SLOT(onReadyReadStandardError);
50 void onStateChanged(QProcess::ProcessState newState);
51 W_SLOT(onStateChanged);
52 void onFinished(int code, QProcess::ExitStatus status);
53 W_SLOT(onFinished);
54 void onErrorOccurred(QProcess::ProcessError error);
55 W_SLOT(onErrorOccurred);
56
57 W_PROPERTY(QString, program READ program WRITE setProgram NOTIFY programChanged)
58 W_PROPERTY(
59 QStringList, arguments READ arguments WRITE setArguments NOTIFY argumentsChanged)
60 W_PROPERTY(
61 QString, workingDirectory READ workingDirectory WRITE setWorkingDirectory NOTIFY
62 workingDirectoryChanged)
63
64 // State
65 W_PROPERTY(ProcessState, processState READ state NOTIFY processStateChanged)
66 W_PROPERTY(bool, running READ running NOTIFY runningChanged)
67 W_PROPERTY(ProcessError, processError READ error NOTIFY processErrorChanged)
68 W_PROPERTY(int, exitCode READ exitCode NOTIFY exitCodeChanged)
69 W_PROPERTY(ExitStatus, exitStatus READ exitStatus NOTIFY exitStatusChanged)
70
71 // Accumulated output (convenience for QML bindings)
72 W_PROPERTY(QString, standardOutput READ standardOutput NOTIFY standardOutputChanged)
73 W_PROPERTY(QString, standardError READ standardError NOTIFY standardErrorChanged)
74
75private:
76 QString m_standardOutput;
77 QString m_standardError;
78 QByteArray m_stdoutBuffer;
79 QByteArray m_stderrBuffer;
80};
81}
82
83W_REGISTER_ARGTYPE(QProcess::ProcessError)
84W_REGISTER_ARGTYPE(QProcess::ExitStatus)
85W_REGISTER_ARGTYPE(QProcess::ProcessState)
Definition QmlProcess.hpp:10