summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-12-17 12:37:15 +0100
committerAleks Kissinger <aleks0@gmail.com>2018-12-17 12:37:15 +0100
commit6121b486e168334db70cbbe7a67afe56c0272748 (patch)
tree6e56022a7ae72eae7542ac4b420b10d2b37f4c08 /src/gui
parent2802488b5928ed1d9886e393d06938db0e825a32 (diff)
preview almost works
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/latexprocess.cpp98
-rw-r--r--src/gui/latexprocess.h33
-rw-r--r--src/gui/mainmenu.cpp5
-rw-r--r--src/gui/mainmenu.h1
-rw-r--r--src/gui/mainmenu.ui9
-rw-r--r--src/gui/previewwindow.cpp37
-rw-r--r--src/gui/previewwindow.h6
-rw-r--r--src/gui/previewwindow.ui8
8 files changed, 188 insertions, 9 deletions
diff --git a/src/gui/latexprocess.cpp b/src/gui/latexprocess.cpp
new file mode 100644
index 0000000..f81e883
--- /dev/null
+++ b/src/gui/latexprocess.cpp
@@ -0,0 +1,98 @@
+#include "latexprocess.h"
+#include "tikzit.h"
+
+#include <QDebug>
+#include <QStandardPaths>
+#include <QTemporaryDir>
+
+LatexProcess::LatexProcess(PreviewWindow *preview, QObject *parent) : QObject(parent)
+{
+ _preview = preview;
+ _output = preview->outputTextEdit();
+
+ _proc = new QProcess(this);
+ _proc->setProcessChannelMode(QProcess::MergedChannels);
+ _proc->setWorkingDirectory(_workingDir.path());
+
+ connect(_proc, SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutput()));
+ connect(_proc, SIGNAL(finished(int)), this, SLOT(finished(int)));
+
+ // for debug purposes
+ _workingDir.setAutoRemove(false);
+}
+
+void LatexProcess::makePreview(QString tikz)
+{
+ _output->clear();
+
+ if (!_workingDir.isValid()) {
+ _output->appendPlainText("COULD NOT WRITE TO TEMP DIR: " + _workingDir.path() + "\n");
+ return;
+ }
+
+ _output->appendPlainText("USING TEMP DIR: " + _workingDir.path() + "\n");
+ _output->appendPlainText("SEARCHING FOR pdflatex IN:");
+ _output->appendPlainText(qgetenv("PATH"));
+ _output->appendPlainText("\n");
+
+
+ QString pdflatex = QStandardPaths::findExecutable("pdflatex");
+ if (pdflatex.isEmpty()) {
+ _output->appendPlainText("pdflatex NOT FOUND, ABORTING.\n");
+ return;
+ }
+
+ _output->appendPlainText("FOUND: " + pdflatex + "\n");
+
+ // copy active *.tikzstyles file to preview dir
+ if (!tikzit->styleFile().isEmpty() && QFile::exists(tikzit->styleFilePath())) {
+ QFile::copy(tikzit->styleFilePath(), _workingDir.path() + "/" + tikzit->styleFile());
+ }
+
+ // copy tikzit.sty to preview dir
+ QFile::copy(":/tex/sample/tikzit.sty", _workingDir.path() + "/tikzit.sty");
+
+ // write out the file containing the tikz picture
+ QFile f(_workingDir.path() + "/preview.tex");
+ f.open(QIODevice::WriteOnly);
+ QTextStream tex(&f);
+ tex << "\\documentclass{article}\n";
+ tex << "\\usepackage[active,tightpage]{preview}\n";
+ tex << "\\PreviewEnvironment{tikzpicture}\n";
+ tex << "\\usepackage{tikzit}\n";
+ tex << "\\input{" + tikzit->styleFile() + "}\n";
+ tex << "\\begin{document}\n\n";
+ tex << tikz;
+ tex << "\n\n\\end{document}\n";
+
+ f.close();
+ _proc->start(pdflatex, QStringList() << "preview.tex");
+
+}
+
+void LatexProcess::kill()
+{
+ if (_proc->state() == QProcess::Running) _proc->kill();
+}
+
+void LatexProcess::readyReadStandardOutput()
+{
+ QByteArray s = _proc->readAllStandardOutput();
+ _output->appendPlainText(s);
+}
+
+void LatexProcess::finished(int exitCode)
+{
+ QByteArray s = _proc->readAllStandardOutput();
+ _output->appendPlainText(s);
+
+ if (exitCode == 0) {
+ QString pdf = _workingDir.path() + "/preview.pdf";
+ _output->appendPlainText("\n\nSUCCESSFULLY GENERATED: " + pdf + "\n");
+ //_preview->setPdf(pdf);
+ emit previewFinished();
+ } else {
+ _output->appendPlainText("\n\npdflatex RETURNED AN ERROR\n");
+ emit previewFinished();
+ }
+}
diff --git a/src/gui/latexprocess.h b/src/gui/latexprocess.h
new file mode 100644
index 0000000..dc815f2
--- /dev/null
+++ b/src/gui/latexprocess.h
@@ -0,0 +1,33 @@
+#ifndef LATEXPROCESS_H
+#define LATEXPROCESS_H
+
+#include "previewwindow.h"
+
+#include <QObject>
+#include <QProcess>
+#include <QTemporaryDir>
+#include <QPlainTextEdit>
+
+class LatexProcess : public QObject
+{
+ Q_OBJECT
+public:
+ explicit LatexProcess(PreviewWindow *preview, QObject *parent = nullptr);
+ void makePreview(QString tikz);
+ void kill();
+
+private:
+ QTemporaryDir _workingDir;
+ PreviewWindow *_preview;
+ QPlainTextEdit *_output;
+ QProcess *_proc;
+
+public slots:
+ void readyReadStandardOutput();
+ void finished(int exitCode);
+
+signals:
+ void previewFinished();
+};
+
+#endif // LATEXPROCESS_H
diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp
index 8166c59..ab1b898 100644
--- a/src/gui/mainmenu.cpp
+++ b/src/gui/mainmenu.cpp
@@ -228,6 +228,11 @@ void MainMenu::on_actionJump_to_Selection_triggered()
}
}
+void MainMenu::on_actionRun_LaTeX_triggered()
+{
+ tikzit->makePreview();
+}
+
// View
void MainMenu::on_actionZoom_In_triggered()
diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h
index c14a284..e1477b4 100644
--- a/src/gui/mainmenu.h
+++ b/src/gui/mainmenu.h
@@ -67,6 +67,7 @@ public slots:
void on_actionParse_triggered();
void on_actionRevert_triggered();
void on_actionJump_to_Selection_triggered();
+ void on_actionRun_LaTeX_triggered();
// View
void on_actionZoom_In_triggered();
diff --git a/src/gui/mainmenu.ui b/src/gui/mainmenu.ui
index 0481c1d..58a2ff0 100644
--- a/src/gui/mainmenu.ui
+++ b/src/gui/mainmenu.ui
@@ -74,6 +74,7 @@
<addaction name="actionParse"/>
<addaction name="actionRevert"/>
<addaction name="actionJump_to_Selection"/>
+ <addaction name="actionRun_LaTeX"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
@@ -335,6 +336,14 @@
<string>About</string>
</property>
</action>
+ <action name="actionRun_LaTeX">
+ <property name="text">
+ <string>Run LaTeX</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+R</string>
+ </property>
+ </action>
<addaction name="menuFile"/>
<addaction name="menuEdit"/>
<addaction name="menuView"/>
diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp
index bca28e3..0a37e1b 100644
--- a/src/gui/previewwindow.cpp
+++ b/src/gui/previewwindow.cpp
@@ -1,12 +1,18 @@
#include "previewwindow.h"
#include "ui_previewwindow.h"
+#include "tikzit.h"
+#include "latexprocess.h"
+
#include <QLabel>
#include <QImage>
#include <QPixmap>
#include <QDebug>
-#include <QRegion>
#include <QSettings>
+#include <QTemporaryDir>
+#include <QFile>
+#include <QTextStream>
+#include <QStandardPaths>
#include <cmath>
PreviewWindow::PreviewWindow(QWidget *parent) :
@@ -22,23 +28,42 @@ PreviewWindow::PreviewWindow(QWidget *parent) :
restoreGeometry(geom.toByteArray());
}
- _doc = Poppler::Document::load("/home/aleks/ak-algebras.pdf");
+ _doc = nullptr;
+ _page = nullptr;
+ //setPdf("/home/aleks/ak-algebras.pdf");
+
+ //qDebug() << "preview dir:" << preparePreview("foo");
+
+ render();
+}
+
+PreviewWindow::~PreviewWindow()
+{
+ delete ui;
+}
+
+void PreviewWindow::setPdf(QString file)
+{
+ Poppler::Document *oldDoc = _doc;
+ _doc = Poppler::Document::load(file);
_doc->setRenderHint(Poppler::Document::Antialiasing);
_doc->setRenderHint(Poppler::Document::TextAntialiasing);
_doc->setRenderHint(Poppler::Document::TextHinting );
_page = _doc->page(0);
-
render();
+
+ if (oldDoc != nullptr) delete oldDoc;
}
-PreviewWindow::~PreviewWindow()
+QPlainTextEdit *PreviewWindow::outputTextEdit()
{
- delete ui;
+ return ui->output;
}
void PreviewWindow::closeEvent(QCloseEvent *e) {
QSettings settings("tikzit", "tikzit");
settings.setValue("geometry-preview", saveGeometry());
+ QDialog::closeEvent(e);
}
void PreviewWindow::resizeEvent(QResizeEvent *e) {
@@ -52,6 +77,8 @@ void PreviewWindow::showEvent(QShowEvent *e) {
}
void PreviewWindow::render() {
+ if (_page == nullptr) return;
+
QSizeF size = _page->pageSizeF();
QRect rect = ui->scrollArea->visibleRegion().boundingRect();
diff --git a/src/gui/previewwindow.h b/src/gui/previewwindow.h
index f2366d6..c850ce9 100644
--- a/src/gui/previewwindow.h
+++ b/src/gui/previewwindow.h
@@ -2,6 +2,7 @@
#define PREVIEWWINDOW_H
#include <QDialog>
+#include <QPlainTextEdit>
#include <poppler/qt5/poppler-qt5.h>
namespace Ui {
@@ -15,6 +16,11 @@ class PreviewWindow : public QDialog
public:
explicit PreviewWindow(QWidget *parent = nullptr);
~PreviewWindow();
+ void setPdf(QString file);
+ QString preparePreview(QString tikz);
+ QPlainTextEdit *outputTextEdit();
+
+protected:
void resizeEvent(QResizeEvent *e);
void showEvent(QShowEvent *e);
void closeEvent(QCloseEvent *e);
diff --git a/src/gui/previewwindow.ui b/src/gui/previewwindow.ui
index 6bb993a..394fc41 100644
--- a/src/gui/previewwindow.ui
+++ b/src/gui/previewwindow.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>300</height>
+ <width>603</width>
+ <height>480</height>
</rect>
</property>
<property name="windowTitle">
@@ -40,8 +40,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>358</width>
- <height>233</height>
+ <width>561</width>
+ <height>413</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">