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