diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2018-12-22 18:06:26 +0100 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2018-12-22 18:06:38 +0100 |
commit | c93f003ce683fca7896cbbadb6375b929d22fe6d (patch) | |
tree | 1c2067f77c29491d5ee08ad6f1954210cdb8b33b /src/gui | |
parent | 873316d120e185fcbc59b468961faebf33adf9af (diff) |
latex running feedback and better search for pdflatex
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/latexprocess.cpp | 30 | ||||
-rw-r--r-- | src/gui/previewwindow.cpp | 41 | ||||
-rw-r--r-- | src/gui/previewwindow.h | 11 | ||||
-rw-r--r-- | src/gui/previewwindow.ui | 34 |
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"> |