annotate hgrunner.h @ 111:151209bc5bd6

* Fixes to terminal lifecycle (only the first of a series of interactive commands was working before). Also switch from openpty to POSIX/Unix98 openpt
author Chris Cannam
date Fri, 26 Nov 2010 16:28:18 +0000
parents 0f039d3cc38e
children 5fc7b4fc77a8
rev   line source
Chris@57 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@57 2
Chris@57 3 /*
Chris@57 4 EasyMercurial
Chris@57 5
Chris@57 6 Based on HgExplorer by Jari Korhonen
Chris@57 7 Copyright (c) 2010 Jari Korhonen
Chris@57 8 Copyright (c) 2010 Chris Cannam
Chris@57 9 Copyright (c) 2010 Queen Mary, University of London
Chris@57 10
Chris@57 11 This program is free software; you can redistribute it and/or
Chris@57 12 modify it under the terms of the GNU General Public License as
Chris@57 13 published by the Free Software Foundation; either version 2 of the
Chris@57 14 License, or (at your option) any later version. See the file
Chris@57 15 COPYING included with this distribution for more information.
Chris@57 16 */
Chris@57 17
jtkorhonen@0 18 #ifndef HGRUNNER_H
jtkorhonen@0 19 #define HGRUNNER_H
jtkorhonen@0 20
Chris@109 21 #include "hgaction.h"
Chris@109 22
jtkorhonen@0 23 #include <QProgressBar>
jtkorhonen@0 24 #include <QProcess>
jtkorhonen@0 25 #include <QByteArray>
jtkorhonen@0 26 #include <QRect>
Chris@75 27 #include <QFile>
jtkorhonen@0 28
Chris@109 29 #include <deque>
Chris@109 30
jtkorhonen@0 31 class HgRunner : public QProgressBar
jtkorhonen@0 32 {
jtkorhonen@0 33 Q_OBJECT
jtkorhonen@0 34
Chris@62 35 public:
Chris@62 36 HgRunner(QWidget * parent = 0);
Chris@62 37 ~HgRunner();
jtkorhonen@0 38
Chris@109 39 void requestAction(HgAction action);
Chris@110 40 /*!!!
Chris@62 41 bool isCommandRunning();
Chris@62 42 void killCurrentCommand();
jtkorhonen@0 43
Chris@109 44 void hideProgBar();
Chris@109 45 */
Chris@109 46 signals:
Chris@109 47 void commandCompleted(HgAction action, QString stdout);
Chris@109 48 void commandFailed(HgAction action, QString stderr);
jtkorhonen@0 49
Chris@109 50 private slots:
Chris@109 51 void started();
Chris@109 52 void finished(int procExitCode, QProcess::ExitStatus procExitStatus);
Chris@110 53 void dataReadyStdout();
Chris@110 54 void dataReadyStderr();
Chris@62 55
Chris@62 56 private:
Chris@109 57 void checkQueue();
Chris@109 58 void startCommand(HgAction action);
Chris@62 59 QString getHgBinaryName();
Chris@84 60 void closeProcInput();
Chris@109 61 void killCurrentCommand();
Chris@75 62
Chris@84 63 void noteUsername(QString);
Chris@84 64 void noteRealm(QString);
Chris@84 65 void getUsername();
Chris@84 66 void getPassword();
Chris@84 67 void checkPrompts(QString);
Chris@84 68
Chris@111 69 void openTerminal();
Chris@111 70 void closeTerminal();
Chris@111 71
Chris@84 72 int m_ptyMasterFd;
Chris@84 73 int m_ptySlaveFd;
Chris@84 74 QString m_ptySlaveFilename;
Chris@84 75 QFile *m_procInput;
Chris@62 76
Chris@84 77 bool m_isRunning;
Chris@84 78 QProcess *m_proc;
Chris@110 79 QString m_stdout;
Chris@110 80 QString m_stderr;
Chris@84 81
Chris@84 82 QString m_userName;
Chris@84 83 QString m_realm;
Chris@62 84
Chris@109 85 typedef std::deque<HgAction> ActionQueue;
Chris@109 86 ActionQueue m_queue;
Chris@109 87 HgAction m_currentAction;
jtkorhonen@0 88 };
jtkorhonen@0 89
jtkorhonen@0 90 #endif // HGRUNNER_H