summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-12-22 18:06:26 +0100
committerAleks Kissinger <aleks0@gmail.com>2018-12-22 18:06:38 +0100
commitc93f003ce683fca7896cbbadb6375b929d22fe6d (patch)
tree1c2067f77c29491d5ee08ad6f1954210cdb8b33b /src/gui
parent873316d120e185fcbc59b468961faebf33adf9af (diff)
latex running feedback and better search for pdflatex
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/latexprocess.cpp30
-rw-r--r--src/gui/previewwindow.cpp41
-rw-r--r--src/gui/previewwindow.h11
-rw-r--r--src/gui/previewwindow.ui34
4 files changed, 108 insertions, 8 deletions
diff --git a/src/gui/latexprocess.cpp b/src/gui/latexprocess.cpp
index 20b22a4..82c1c5b 100644
--- a/src/gui/latexprocess.cpp
+++ b/src/gui/latexprocess.cpp
@@ -4,6 +4,7 @@
#include <QDebug>
#include <QStandardPaths>
#include <QTemporaryDir>
+#include <QStringList>
LatexProcess::LatexProcess(PreviewWindow *preview, QObject *parent) : QObject(parent)
{
@@ -23,6 +24,7 @@ LatexProcess::LatexProcess(PreviewWindow *preview, QObject *parent) : QObject(pa
void LatexProcess::makePreview(QString tikz)
{
+ _preview->setStatus(PreviewWindow::Running);
_output->clear();
if (!_workingDir.isValid()) {
@@ -38,8 +40,28 @@ void LatexProcess::makePreview(QString tikz)
QString pdflatex = QStandardPaths::findExecutable("pdflatex");
if (pdflatex.isEmpty()) {
- _output->appendPlainText("pdflatex NOT FOUND, ABORTING.\n");
- return;
+ // if pdflatex is not in PATH, we are probably on mac or windows, so try common
+ // install directories.
+ _output->appendPlainText("NOT FOUND IN PATH, TRYING:");
+
+ QStringList texDirs;
+ // common macOS tex directories:
+ texDirs << "/Library/TeX/texbin";
+ texDirs << "/usr/texbin";
+ texDirs << "/usr/local/bin";
+ texDirs << "/sw/bin";
+
+ // common windows tex directories
+ texDirs << "C:\\Program Files\\MiKTeX 2.9\\miktex\\bin";
+ texDirs << "C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64";
+
+ _output->appendPlainText(texDirs.join(":"));
+ pdflatex = QStandardPaths::findExecutable("pdflatex", texDirs);
+
+ if (pdflatex.isEmpty()) {
+ _output->appendPlainText("pdflatex NOT FOUND, ABORTING.\n");
+ return;
+ }
}
_output->appendPlainText("FOUND: " + pdflatex + "\n");
@@ -66,7 +88,7 @@ void LatexProcess::makePreview(QString tikz)
tex << "\n\n\\end{document}\n";
f.close();
- _proc->start(pdflatex, QStringList() << "preview.tex");
+ _proc->start(pdflatex, QStringList() << "-interaction=nonstopmode" << "preview.tex");
}
@@ -90,9 +112,11 @@ void LatexProcess::finished(int exitCode)
QString pdf = _workingDir.path() + "/preview.pdf";
_output->appendPlainText("\n\nSUCCESSFULLY GENERATED: " + pdf + "\n");
_preview->setPdf(pdf);
+ _preview->setStatus(PreviewWindow::Success);
emit previewFinished();
} else {
_output->appendPlainText("\n\npdflatex RETURNED AN ERROR\n");
+ _preview->setStatus(PreviewWindow::Failed);
emit previewFinished();
}
}
diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp
index 724a951..726ec8a 100644
--- a/src/gui/previewwindow.cpp
+++ b/src/gui/previewwindow.cpp
@@ -15,6 +15,7 @@
#include <QStandardPaths>
#include <QMessageBox>
#include <cmath>
+#include <QMovie>
PreviewWindow::PreviewWindow(QWidget *parent) :
QDialog(parent),
@@ -31,10 +32,15 @@ PreviewWindow::PreviewWindow(QWidget *parent) :
_doc = nullptr;
_page = nullptr;
- //setPdf("/home/aleks/ak-algebras.pdf");
- //qDebug() << "preview dir:" << preparePreview("foo");
+ _loader = new QLabel(this);
+ _loader->setMinimumSize(QSize(16,16));
+ _loader->setMaximumSize(QSize(16,16));
+ ui->tabWidget->tabBar()->setTabButton(1, QTabBar::RightSide, _loader);
+ connect(ui->tabWidget, SIGNAL(currentChanged(int)),
+ this, SLOT(render()));
+
render();
}
@@ -76,6 +82,37 @@ QPlainTextEdit *PreviewWindow::outputTextEdit()
return ui->output;
}
+void PreviewWindow::setStatus(PreviewWindow::Status status)
+{
+ QMovie *oldMovie = _loader->movie();
+ if (status == PreviewWindow::Running) {
+ // loader.gif and loader@2x.gif derived from:
+ // https://commons.wikimedia.org/wiki/Throbbers#/media/File:Linux_Ubuntu_Loader.gif
+ // licensed GNU Free Documentation License v1.2
+ QMovie *movie = new QMovie(
+ (devicePixelRatioF() > 1.0) ? ":images/loader@2x.gif" : ":images/loader.gif",
+ QByteArray(), _loader);
+ _loader->setPixmap(QPixmap());
+ _loader->setMovie(movie);
+ movie->start();
+ } else if (status == PreviewWindow::Success) {
+ _loader->setMovie(nullptr);
+ QPixmap accept(":images/dialog-accept.svg");
+ accept.setDevicePixelRatio(devicePixelRatio());
+ _loader->setPixmap(accept);
+ } else if (status == PreviewWindow::Failed) {
+ _loader->setMovie(nullptr);
+ QPixmap error(":images/dialog-error.svg");
+ error.setDevicePixelRatio(devicePixelRatio());
+ _loader->setPixmap(error);
+ }
+
+ if (oldMovie != nullptr) oldMovie->deleteLater();
+
+
+ _loader->repaint();
+}
+
void PreviewWindow::closeEvent(QCloseEvent *e) {
QSettings settings("tikzit", "tikzit");
settings.setValue("geometry-preview", saveGeometry());
diff --git a/src/gui/previewwindow.h b/src/gui/previewwindow.h
index c850ce9..a937263 100644
--- a/src/gui/previewwindow.h
+++ b/src/gui/previewwindow.h
@@ -1,7 +1,9 @@
#ifndef PREVIEWWINDOW_H
#define PREVIEWWINDOW_H
+
#include <QDialog>
+#include <QLabel>
#include <QPlainTextEdit>
#include <poppler/qt5/poppler-qt5.h>
@@ -14,11 +16,18 @@ class PreviewWindow : public QDialog
Q_OBJECT
public:
+ enum Status {
+ Running, Success, Failed
+ };
explicit PreviewWindow(QWidget *parent = nullptr);
~PreviewWindow();
void setPdf(QString file);
QString preparePreview(QString tikz);
QPlainTextEdit *outputTextEdit();
+ void setStatus(Status status);
+
+public slots:
+ void render();
protected:
void resizeEvent(QResizeEvent *e);
@@ -27,9 +36,9 @@ protected:
private:
Ui::PreviewWindow *ui;
- void render();
Poppler::Document *_doc;
Poppler::Page *_page;
+ QLabel *_loader;
};
#endif // PREVIEWWINDOW_H
diff --git a/src/gui/previewwindow.ui b/src/gui/previewwindow.ui
index 394fc41..7da886a 100644
--- a/src/gui/previewwindow.ui
+++ b/src/gui/previewwindow.ui
@@ -14,16 +14,46 @@
<string>Preview</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>3</number>
+ </property>
+ <property name="topMargin">
+ <number>3</number>
+ </property>
+ <property name="rightMargin">
+ <number>3</number>
+ </property>
+ <property name="bottomMargin">
+ <number>3</number>
+ </property>
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
+ <property name="documentMode">
+ <bool>false</bool>
+ </property>
+ <property name="tabsClosable">
+ <bool>false</bool>
+ </property>
<widget class="QWidget" name="pdfTab">
<attribute name="title">
<string>PDF</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="verticalScrollBarPolicy">
@@ -40,8 +70,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>561</width>
- <height>413</height>
+ <width>591</width>
+ <height>448</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">