1 /*
2 Description: stdout viewer
3
4 Author: Marco Costalba (C) 2006-2007
5
6 Copyright: See COPYING file that comes with this distribution
7
8 */
9 #include <QSettings>
10 #include <QStatusBar>
11 #include <QMessageBox>
12 #include "myprocess.h"
13 #include "git.h"
14 #include "consoleimpl.h"
15
ConsoleImpl(const QString & nm,Git * g)16 ConsoleImpl::ConsoleImpl(const QString& nm, Git* g) : git(g), actionName(nm) {
17
18 setAttribute(Qt::WA_DeleteOnClose);
19 setupUi(this);
20 textEditOutput->setFont(QGit::TYPE_WRITER_FONT);
21 QFont f = textLabelCmd->font();
22 f.setBold(true);
23 textLabelCmd->setFont(f);
24 setWindowTitle("\'" + actionName + "\' output window - QGit");
25 QGit::restoreGeometrySetting(QGit::CON_GEOM_KEY, this);
26 }
27
typeWriterFontChanged()28 void ConsoleImpl::typeWriterFontChanged() {
29
30 QTextEdit* te = textEditOutput;
31 te->setFont(QGit::TYPE_WRITER_FONT);
32 te->setPlainText(te->toPlainText());
33 te->moveCursor(QTextCursor::End);
34 }
35
pushButtonOk_clicked()36 void ConsoleImpl::pushButtonOk_clicked() {
37
38 close();
39 }
40
pushButtonTerminate_clicked()41 void ConsoleImpl::pushButtonTerminate_clicked() {
42
43 git->cancelProcess(proc);
44 procFinished();
45 }
46
closeEvent(QCloseEvent * ce)47 void ConsoleImpl::closeEvent(QCloseEvent* ce) {
48
49 if (proc && proc->state() == QProcess::Running)
50 if (QMessageBox::question(this, "Action output window - QGit",
51 "Action is still running.\nAre you sure you want to close "
52 "the window and leave the action running in background?",
53 "&Yes", "&No", QString(), 1, 1) == 1) {
54 ce->ignore();
55 return;
56 }
57 if (QApplication::overrideCursor())
58 QApplication::restoreOverrideCursor();
59
60 QGit::saveGeometrySetting(QGit::CON_GEOM_KEY, this);
61 QMainWindow::closeEvent(ce);
62 }
63
start(const QString & cmd)64 bool ConsoleImpl::start(const QString& cmd) {
65
66 statusBar()->showMessage("Executing \'" + actionName + "\' action...");
67 textLabelCmd->setText(cmd);
68 if (cmd.indexOf('\n') < 0)
69 proc = git->runAsync(cmd, this);
70 else
71 proc = git->runAsScript(cmd, this); // wrap multiline cmd in a script
72
73 if (proc.isNull())
74 deleteLater();
75 else
76 QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
77
78 return !proc.isNull();
79 }
80
procReadyRead(const QByteArray & data)81 void ConsoleImpl::procReadyRead(const QByteArray& data) {
82
83 QString newParagraph;
84 if (QGit::stripPartialParaghraps(data, &newParagraph, &inpBuf))
85 // QTextEdit::append() adds a new paragraph,
86 // i.e. inserts a LF if not already present.
87 textEditOutput->append(newParagraph);
88 }
89
procFinished()90 void ConsoleImpl::procFinished() {
91
92 textEditOutput->append(inpBuf);
93 inpBuf = "";
94 QApplication::restoreOverrideCursor();
95 statusBar()->showMessage("End of \'" + actionName + "\' execution.");
96 pushButtonTerminate->setEnabled(false);
97 emit customAction_exited(actionName);
98 }
99