-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathqdeclarativeprocess.h
161 lines (144 loc) · 5.56 KB
/
qdeclarativeprocess.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#ifndef QDECLARATIVEPROCESS_H
#define QDECLARATIVEPROCESS_H
// see https://github.com/marx1an/qt-components-hildon
#include <QProcess>
#include <QVariant>
class QQuickItem;
class QDeclarativeProcessEnums : public QObject
{
Q_OBJECT
Q_ENUMS(ExitStatus)
Q_ENUMS(ProcessChannel)
Q_ENUMS(ProcessChannelMode)
Q_ENUMS(ProcessError)
Q_ENUMS(ProcessState)
public:
enum ExitStatus {
NormalExit = QProcess::NormalExit,
CrashExit = QProcess::CrashExit
};
enum ProcessChannel {
StandardOutput = QProcess::StandardOutput,
StandardError = QProcess::StandardError
};
enum ProcessChannelMode {
SeparateChannels = QProcess::SeparateChannels,
MergedChannels = QProcess::MergedChannels,
ForwardedChannels = QProcess::ForwardedChannels
};
enum ProcessError {
FailedToStart = QProcess::FailedToStart,
Crashed = QProcess::Crashed,
Timedout = QProcess::Timedout,
WriteError = QProcess::WriteError,
ReadError = QProcess::ReadError,
UnknownError = QProcess::UnknownError
};
enum ProcessState {
NotRunning = QProcess::NotRunning,
Starting = QProcess::Starting,
Running = QProcess::Running
};
};
class QDeclarativeProcess : public QProcess
{
Q_OBJECT
Q_PROPERTY(QString command
READ command
WRITE setCommand
NOTIFY commandChanged)
Q_PROPERTY(QString workingDirectory
READ workingDirectory
WRITE setWorkingDirectory
NOTIFY workingDirectoryChanged)
Q_PROPERTY(uint pid
READ pid
NOTIFY pidChanged)
Q_PROPERTY(QDeclarativeProcessEnums::ProcessError error
READ error
NOTIFY errorChanged)
Q_PROPERTY(QDeclarativeProcessEnums::ProcessState state
READ state
NOTIFY stateChanged)
Q_PROPERTY(int exitCode
READ exitCode
NOTIFY exitCodeChanged)
Q_PROPERTY(QDeclarativeProcessEnums::ExitStatus exitStatus
READ exitStatus
NOTIFY exitStatusChanged)
Q_PROPERTY(QDeclarativeProcessEnums::ProcessChannelMode processChannelMode
READ processChannelMode
WRITE setProcessChannelMode)
Q_PROPERTY(QVariantMap processEnvironment
READ processEnvironment
WRITE setProcessEnvironment
NOTIFY processEnvironmentChanged)
Q_PROPERTY(QDeclarativeProcessEnums::ProcessChannel readChannel
READ readChannel
WRITE setReadChannel)
Q_PROPERTY(QString standardErrorFile
READ standardErrorFile
WRITE setStandardErrorFile)
Q_PROPERTY(QString standardInputFile
READ standardInputFile
WRITE setStandardInputFile)
Q_PROPERTY(QString standardOutputFile
READ standardOutputFile
WRITE setStandardOutputFile)
Q_PROPERTY(QDeclarativeProcess* standardOutputProcess
READ standardOutputProcess
WRITE setStandardOutputProcess)
public:
explicit QDeclarativeProcess(QQuickItem *parent = 0);
Q_INVOKABLE void closeReadChannel(QDeclarativeProcessEnums::ProcessChannel channel);
Q_INVOKABLE void closeWriteChannel();
Q_INVOKABLE QString readAllStandardError();
Q_INVOKABLE QString readAllStandardOutput();
Q_INVOKABLE void start();
Q_INVOKABLE void start(QString program, QStringList arguments);
Q_INVOKABLE void write(QString data);
inline QString command() const { return m_command; }
void setCommand(const QString &command);
inline QString standardErrorFile() const { return m_errorFile; }
void setStandardErrorFile(const QString &fileName);
inline QString standardInputFile() const { return m_inputFile; }
void setStandardInputFile(const QString &fileName);
inline QString standardOutputFile() const { return m_outputFile; }
void setStandardOutputFile(const QString &fileName);
inline QDeclarativeProcess* standardOutputProcess() const { return m_outputProcess; }
void setStandardOutputProcess(QDeclarativeProcess *destination);
QVariantMap processEnvironment();
void setProcessEnvironment(const QVariantMap &envMap);
void setWorkingDirectory(const QString &dir);
void setProcessChannelMode(QDeclarativeProcessEnums::ProcessChannelMode mode);
void setReadChannel(QDeclarativeProcessEnums::ProcessChannel channel);
QDeclarativeProcessEnums::ProcessError error() const;
QDeclarativeProcessEnums::ProcessChannel readChannel() const;
QDeclarativeProcessEnums::ProcessChannelMode processChannelMode() const;
QDeclarativeProcessEnums::ExitStatus exitStatus() const;
QDeclarativeProcessEnums::ProcessState state() const;
private slots:
void onStateChanged(QProcess::ProcessState state);
void onFinished(int exitCode, QProcess::ExitStatus exitStatus);
signals:
void pidChanged();
void errorChanged();
void stateChanged(QDeclarativeProcessEnums::ProcessState state);
void exitCodeChanged();
void exitStatusChanged();
void finished(int exitCode, QDeclarativeProcessEnums::ExitStatus exitStatus);
void processFinished();
void readyReadStandardError();
void readyReadStandardOutput();
void started();
void commandChanged();
void processEnvironmentChanged();
void workingDirectoryChanged();
private:
QString m_command;
QString m_errorFile;
QString m_inputFile;
QString m_outputFile;
QDeclarativeProcess* m_outputProcess;
};
#endif // QDECLARATIVEPROCESS_H