]> git.lyx.org Git - lyx.git/blobdiff - src/support/SystemcallPrivate.h
cleanup error messages
[lyx.git] / src / support / SystemcallPrivate.h
index 93918ac71213a946e26b6fcd7aea0710380bd7b8..4151940278386b7794e7f31041d69180a4725d67 100644 (file)
 
 #include <QObject>
 
-class QProcess;
+#include <QProcess>
 
 namespace lyx {
 namespace support {
 
+class Systemcall;
+
 /**
  * Outputs to the console terminal the line buffered standard output and
  * error of a spawned process when there is a controlling terminal and 
  * stdout/stderr have not been redirected.
  */
-class ConOut : public QObject
+class SystemcallPrivate : public QObject
 {
        Q_OBJECT
 public:
-       ConOut(QProcess * proc);
-       ~ConOut();
+       SystemcallPrivate(const std::string& outfile);
+       ~SystemcallPrivate();
 
        /// Should the standard output be displayed?
        void showout() { showout_ = true; }
@@ -37,6 +39,28 @@ public:
        /// Should the standard error be displayed?
        void showerr() { showerr_ = true; }
 
+       enum State {
+               Starting,
+               Running,
+               Finished,
+               Error
+       };
+       State state;
+
+       bool waitWhile(State, bool processEvents, int timeout = -1);
+       void startProcess(const QString& cmd);
+       
+       int exitCode();
+
+       QString errorMessage() const;
+       QString exitStatusMessage() const;
+
+       void flush();
+
+       QProcess* releaseProcess();
+       
+       static void killProcess(QProcess * p);
+
 private:
        /// Pointer to the process to monitor.
        QProcess * proc_;
@@ -44,6 +68,8 @@ private:
        size_t outindex_;
        /// Index to the standard error buffer.
        size_t errindex_;
+       ///
+       std::string outfile;
        /// Size of buffers.
        static size_t const bufsize_ = 200;
        /// Standard output buffer.
@@ -54,10 +80,20 @@ private:
        bool showout_;
        /// 
        bool showerr_;
+       bool process_events;
+
+       void waitAndProcessEvents();
+       void processEvents();
+
+       void killProcess();
 
 public Q_SLOTS:
        void stdOut();
        void stdErr();
+       void processError(QProcess::ProcessError);
+       void processStarted();
+       void processFinished(int, QProcess::ExitStatus status);
+
 };
 
 } // namespace support