1 #include "mathassistant.h"
2 #include "smallUsefulFunctions.h"
3 #include <QMutex>
4 
5 MathAssistant *MathAssistant::m_Instance = nullptr;
6 
MathAssistant()7 MathAssistant::MathAssistant() :
8 	QObject()
9 {
10 	connect(&process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError)));
11 	connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(processFinished(int, QProcess::ExitStatus)));
12 }
13 
exec()14 void MathAssistant::exec()
15 {
16 	if (process.state() == QProcess::Running) return;
17 
18 	// return value of TexTablet is always zero, so we have to decide on the clipboard contents, if TexTablet was aborted
19 	lastClipboardText = QApplication::clipboard()->text();
20 	QApplication::clipboard()->clear();
21 
22 	//TODO This is the default installation path of TexTablet. Make it configurabe.
23 	QString texTablet = QCoreApplication::applicationDirPath() + "/TexTablet/TeXTablet.exe";
24 	if (!QFileInfo(texTablet).exists()) {
25 		QString msg = QString(tr("TexTablet not found."));
26 		QMessageBox msgBox;
27 		msgBox.setWindowTitle(tr("Math Assistant"));
28 		msgBox.setTextFormat(Qt::RichText);
29 		msgBox.setText(msg);
30 		msgBox.setStandardButtons(QMessageBox::Ok);
31 		msgBox.exec();
32 		return;
33 	}
34 	process.setWorkingDirectory(QFileInfo(texTablet).absolutePath());
35     process.start("\"" + texTablet + "\"",QStringList());
36 }
37 
processError(QProcess::ProcessError err)38 void MathAssistant::processError(QProcess::ProcessError err)
39 {
40 	switch (err) {
41 	case QProcess::FailedToStart:
42         QMessageBox::information(nullptr, "FailedToStart", "FailedToStart");
43 		break;
44 	case QProcess::Crashed:
45         QMessageBox::information(nullptr, "Crashed", "Crashed");
46 		break;
47 	case QProcess::Timedout:
48         QMessageBox::information(nullptr, "Timedout", "Timedout");
49 		break;
50 	case QProcess::WriteError:
51         QMessageBox::information(nullptr, "WriteError", "WriteError");
52 		break;
53 	case QProcess::ReadError:
54         QMessageBox::information(nullptr, "ReadError", "ReadError");
55 		break;
56 	case QProcess::UnknownError:
57         QMessageBox::information(nullptr, "UnknownError", "UnknownError");
58 		break;
59 	default:
60         QMessageBox::information(nullptr, "default", "default");
61 		break;
62 	}
63 }
64 
processFinished(int exitCode,QProcess::ExitStatus exitStatus)65 void MathAssistant::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
66 {
67 	Q_UNUSED(exitCode)
68 	if (exitStatus != QProcess::NormalExit) {
69 		UtilsUi::txsCritical(tr("TexTablet crashed."));
70 	}
71 	// exit code is always zero for TexTablet
72 
73 	QString text = QApplication::clipboard()->text();
74 	if (text.startsWith("$"))
75 		emit formulaReceived(text);
76 	QApplication::clipboard()->setText(lastClipboardText);
77 }
78 
instance()79 MathAssistant *MathAssistant::instance()
80 {
81 	static QMutex mutex;
82 	mutex.lock();
83 	if (!m_Instance)
84 		m_Instance = new MathAssistant();
85 	mutex.unlock();
86 	return m_Instance;
87 }
88