summaryrefslogtreecommitdiff
path: root/src
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
parent873316d120e185fcbc59b468961faebf33adf9af (diff)
latex running feedback and better search for pdflatex
Diffstat (limited to 'src')
-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
-rw-r--r--src/tikzit.cpp18
5 files changed, 117 insertions, 17 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">
diff --git a/src/tikzit.cpp b/src/tikzit.cpp
index 39a2924..e12053b 100644
--- a/src/tikzit.cpp
+++ b/src/tikzit.cpp
@@ -31,14 +31,13 @@
#include <QVersionNumber>
#include <QNetworkAccessManager>
-
// application-level instance of Tikzit
Tikzit *tikzit;
// font to use for node labels
QFont Tikzit::LABEL_FONT("Courrier", 9);
-Tikzit::Tikzit() : _styleFile("[no styles]"), _activeWindow(0)
+Tikzit::Tikzit() : _styleFile("[no styles]"), _activeWindow(nullptr)
{
}
@@ -116,7 +115,7 @@ void Tikzit::init()
QVariant check = settings.value("check-for-updates");
if (check.isNull()) {
- int resp = QMessageBox::question(0,
+ int resp = QMessageBox::question(nullptr,
tr("Check for updates"),
tr("Would you like TikZiT to check for updates automatically?"
" (You can always change this later in the Help menu.)"),
@@ -213,7 +212,7 @@ void Tikzit::newTikzStyles()
w->tikzScene()->reloadStyles();
}
} else {
- QMessageBox::warning(0,
+ QMessageBox::warning(nullptr,
"Could not write to style file.",
"Could not write to: '" + fileName + "'. Check file permissions or choose a new location.");
}
@@ -252,7 +251,7 @@ void Tikzit::removeWindow(MainWindow *w)
_windows.removeAll(w);
if (_activeWindow == w) {
if (_windows.isEmpty()) {
- _activeWindow = 0;
+ _activeWindow = nullptr;
// TODO: check if we should quit when last window closed
quit();
} else _activeWindow = _windows[0];
@@ -262,7 +261,7 @@ void Tikzit::removeWindow(MainWindow *w)
void Tikzit::open()
{
QSettings settings("tikzit", "tikzit");
- QString fileName = QFileDialog::getOpenFileName(0,
+ QString fileName = QFileDialog::getOpenFileName(nullptr,
tr("Open File"),
settings.value("previous-file-path").toString(),
tr("TiKZ Files (*.tikz)"),
@@ -293,7 +292,7 @@ void Tikzit::open(QString fileName)
void Tikzit::openTikzStyles() {
QSettings settings("tikzit", "tikzit");
- QString fileName = QFileDialog::getOpenFileName(0,
+ QString fileName = QFileDialog::getOpenFileName(nullptr,
tr("Open File"),
settings.value("previous-tikzstyles-path").toString(),
tr("TiKZ Style Files (*.tikzstyles)"),
@@ -326,7 +325,7 @@ bool Tikzit::loadStyles(QString fileName)
}
return true;
} else {
- QMessageBox::warning(0,
+ QMessageBox::warning(nullptr,
"Bad style file.",
"Bad style file: '" + fileName + "'. Check the file is properly formatted and try to load it again.");
return false;
@@ -334,7 +333,8 @@ bool Tikzit::loadStyles(QString fileName)
} else {
//settings.setValue("previous-tikzstyles-file", "");
- QMessageBox::warning(0, "Style file not found.", "Could not open style file: '" + fileName + "'.");
+ QMessageBox::warning(nullptr,
+ "Style file not found.", "Could not open style file: '" + fileName + "'.");
return false;
}
}