summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2019-01-02 11:42:37 +0100
committerAleks Kissinger <aleks0@gmail.com>2019-01-02 11:43:00 +0100
commit0615dcb854da736e11665ad3387ecba0adbd8cd8 (patch)
tree7e692ba39bdfeff39abb05f2cf9012ee1f98f4b0
parentf68cf0d4ae6837b5cd95a43ab482b1f63c1ca54e (diff)
finished export dialog (closes #49)
-rw-r--r--src/gui/exportdialog.cpp64
-rw-r--r--src/gui/exportdialog.h7
-rw-r--r--src/gui/previewwindow.cpp18
3 files changed, 85 insertions, 4 deletions
diff --git a/src/gui/exportdialog.cpp b/src/gui/exportdialog.cpp
index b176c71..cc0be7b 100644
--- a/src/gui/exportdialog.cpp
+++ b/src/gui/exportdialog.cpp
@@ -5,11 +5,13 @@
#include <QFileDialog>
#include <QSettings>
+#include <QStandardPaths>
ExportDialog::ExportDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ExportDialog)
{
+ QSettings settings("tikzit", "tikzit");
ui->setupUi(this);
QIntValidator *v = new QIntValidator(this);
@@ -31,6 +33,32 @@ ExportDialog::ExportDialog(QWidget *parent) :
ui->width->blockSignals(false);
ui->height->blockSignals(false);
}
+
+ if (!settings.value("previous-export-file-format").isNull()) {
+ ui->fileFormat->setCurrentIndex(settings.value("previous-export-file-format").toInt());
+ }
+
+ // set a default export file
+ QString path = (!settings.value("previous-export-file-path").isNull()) ?
+ settings.value("previous-export-file-path").toString() :
+ QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
+
+ QString suffix;
+ switch (ui->fileFormat->currentIndex()) {
+ case PNG: suffix = ".png"; break;
+ case JPG: suffix = ".jpg"; break;
+ case PDF: suffix = ".pdf"; break;
+ }
+
+ QString fileName;
+ int i = 0;
+ bool exists = true;
+ while (exists) {
+ fileName = path + "/tikzit_image" + QString::number(i) + suffix;
+ exists = QFileInfo::exists(fileName);
+ ++i;
+ }
+ ui->filePath->setText(QDir::toNativeSeparators(fileName));
}
ExportDialog::~ExportDialog()
@@ -38,6 +66,31 @@ ExportDialog::~ExportDialog()
delete ui;
}
+QString ExportDialog::filePath()
+{
+ return ui->filePath->text();
+}
+
+QSize ExportDialog::size()
+{
+ return QSize(ui->width->text().toInt(),
+ ui->height->text().toInt());
+}
+
+ExportDialog::Format ExportDialog::fileFormat()
+{
+ return static_cast<Format>(ui->fileFormat->currentIndex());
+}
+
+void ExportDialog::accept()
+{
+ QSettings settings("tikzit", "tikzit");
+ QFileInfo fi(filePath());
+ settings.setValue("previous-export-file-path", fi.absolutePath());
+ settings.setValue("previous-export-file-format", fileFormat());
+ QDialog::accept();
+}
+
void ExportDialog::setHeightFromWidth()
{
if (ui->keepAspect->isChecked()) {
@@ -88,8 +141,14 @@ void ExportDialog::on_browseButton_clicked()
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setNameFilter(ui->fileFormat->currentText());
dialog.setFileMode(QFileDialog::AnyFile);
- if (!settings.value("previous-export-file-path").isNull())
- dialog.setDirectory(settings.value("previous-export-file-path").toString());
+ dialog.setLabelText(QFileDialog::Accept, "Select");
+
+ QFileInfo fi(ui->filePath->text());
+ if (!fi.absolutePath().isEmpty()) {
+ dialog.setDirectory(fi.absolutePath());
+ dialog.selectFile(fi.baseName());
+ }
+
dialog.setOption(QFileDialog::DontUseNativeDialog);
if (dialog.exec()) {
@@ -101,6 +160,7 @@ void ExportDialog::on_fileFormat_currentIndexChanged(int f)
{
ui->width->setEnabled(f != PDF);
ui->height->setEnabled(f != PDF);
+ ui->keepAspect->setEnabled(f != PDF);
QString path = ui->filePath->text();
if (!path.isEmpty()) {
diff --git a/src/gui/exportdialog.h b/src/gui/exportdialog.h
index 064c968..6788560 100644
--- a/src/gui/exportdialog.h
+++ b/src/gui/exportdialog.h
@@ -13,12 +13,17 @@ class ExportDialog : public QDialog
public:
explicit ExportDialog(QWidget *parent = nullptr);
- ~ExportDialog();
+ ~ExportDialog() override;
enum Format {
PNG = 0,
JPG = 1,
PDF = 2
};
+ QString filePath();
+ QSize size();
+ Format fileFormat();
+public slots:
+ void accept() override;
protected slots:
void setHeightFromWidth();
diff --git a/src/gui/previewwindow.cpp b/src/gui/previewwindow.cpp
index c27c1be..ec66f81 100644
--- a/src/gui/previewwindow.cpp
+++ b/src/gui/previewwindow.cpp
@@ -156,11 +156,27 @@ void PreviewWindow::render() {
void PreviewWindow::exportImage()
{
+ QSettings settings("tikzit", "tikzit");
if (_doc == nullptr) return;
ExportDialog *d = new ExportDialog(this);
int ret = d->exec();
if (ret == QDialog::Accepted) {
- qDebug() << "save accepted";
+ bool success;
+ if (d->fileFormat() == ExportDialog::PDF) {
+ success = _doc->exportPdf(d->filePath());
+ } else {
+ success = _doc->exportImage(
+ d->filePath(),
+ (d->fileFormat() == ExportDialog::PNG) ? "PNG" : "JPG",
+ d->size());
+ }
+
+ if (!success) {
+ QMessageBox::warning(this,
+ "Error",
+ "Could not write to: '" + d->filePath() +
+ "'. Check file permissions or choose a new location.");
+ }
}
}