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