annotate src/mainwindow.cpp @ 50:36ee5dd46fd3

Add GUI New Mainwindow that allows to set output formats and input files through a GUI.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 19 Jul 2016 12:19:45 +0200
parents
children a43d8cf2fa95
rev   line source
50
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2016 by ETH Zürich
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
3 *
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
6 * See LICENSE.txt for details.
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
7 */
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
8
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
9 /** @file See mainwindow.h */
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
10 #include "mainwindow.h"
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
11
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
12 #include "constants.h"
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
13 #include "converter.h"
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
14 #include "filenamerequester.h"
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
15
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
16 #include <QApplication>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
17 #include <QCheckBox>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
18 #include <QDebug>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
19 #include <QDialogButtonBox>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
20 #include <QDesktopServices>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
21 #include <QDir>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
22 #include <QGroupBox>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
23 #include <QHBoxLayout>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
24 #include <QLabel>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
25 #include <QLineEdit>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
26 #include <QMessageBox>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
27 #include <QMimeData>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
28 #include <QPushButton>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
29 #include <QUrl>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
30 #include <QStandardPaths>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
31 #include <QStyle>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
32 #include <QVBoxLayout>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
33 #include <QWidget>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
34 #include <QGridLayout>
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
35
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
36 MainWindow::MainWindow() {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
37 setupGUI();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
38 readSettings();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
39 #ifndef Q_OS_WIN
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
40 QIcon windowIcon = QIcon(ICON_NAME);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
41 setWindowIcon(windowIcon);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
42 setWindowTitle(QStringLiteral(APPNAME));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
43 #endif
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
44 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
45
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
46 void MainWindow::setupGUI() {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
47 auto vLay = new QVBoxLayout;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
48 auto inoutLay = new QGridLayout;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
49 auto inputLabel = new QLabel(tr("Input File:"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
50 inoutLay->addWidget(inputLabel, 0, 0);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
51 mInputRequester = new FileNameRequester(QDir::Files);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
52 mInputRequester->setExistingOnly(true);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
53 inputLabel->setBuddy(mInputRequester);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
54
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
55 inoutLay->addWidget(mInputRequester, 0, 1);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
56
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
57 auto outLabel = new QLabel(tr("Export Folder:"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
58 inoutLay->addWidget(outLabel, 1, 0);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
59 mOutRequester = new FileNameRequester(QDir::Dirs);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
60 mOutRequester->setExistingOnly(false);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
61 inoutLay->addWidget(mOutRequester, 1, 1);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
62 outLabel->setBuddy(mOutRequester);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
63
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
64 vLay->addLayout(inoutLay);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
65
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
66 auto optionsGrp = new QGroupBox("Export Options:");
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
67 auto optionsLay = new QVBoxLayout;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
68 mPdfChk = new QCheckBox(tr("PDF"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
69 mPdfChk->setToolTip(tr("Convert into PDF Format."));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
70 mHtmlChk = new QCheckBox(tr("HTML"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
71 mHtmlChk->setToolTip(tr("Convert into HTML Format."));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
72 mXlsxChk = new QCheckBox(tr("XLSX"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
73 mXlsxChk->setToolTip(tr("Convert into XLSX Format."));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
74
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
75 optionsLay->addWidget(mPdfChk);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
76 optionsLay->addWidget(mHtmlChk);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
77 optionsLay->addWidget(mXlsxChk);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
78 optionsGrp->setLayout(optionsLay);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
79 vLay->addWidget(optionsGrp);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
80
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
81 mTitleEdit = new QLineEdit;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
82 auto titleLay = new QHBoxLayout;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
83 auto titleLabel = new QLabel(QStringLiteral("<small>") + tr("mandatory") +
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
84 QStringLiteral("</small>"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
85 mTitleEdit->setPlaceholderText(tr("Title (e.g. Feedback Questions SS2016)"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
86 titleLay->addWidget(mTitleEdit);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
87 titleLay->addWidget(titleLabel);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
88 vLay->addLayout(titleLay);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
89 vLay->addStretch(1);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
90 auto btns = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Close);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
91 mConvertBtn = btns->button(QDialogButtonBox::Ok);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
92 mConvertBtn->setText(tr("Convert"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
93 vLay->addWidget(btns);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
94
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
95 auto widget = new QWidget;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
96 widget->setLayout(vLay);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
97 setCentralWidget(widget);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
98 checkCompleted();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
99
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
100 connect(mConvertBtn, &QPushButton::clicked, this, &MainWindow::doConvert);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
101 connect(mPdfChk, &QCheckBox::stateChanged, this, &MainWindow::checkCompleted);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
102 connect(mHtmlChk, &QCheckBox::stateChanged, this, &MainWindow::checkCompleted);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
103 connect(mXlsxChk, &QCheckBox::stateChanged, this, &MainWindow::checkCompleted);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
104 connect(mTitleEdit, &QLineEdit::textChanged, this, &MainWindow::checkCompleted);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
105 connect(mInputRequester, &FileNameRequester::fileNameChanged, this, &MainWindow::checkCompleted);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
106 connect(mOutRequester, &FileNameRequester::fileNameChanged, this, &MainWindow::checkCompleted);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
107 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
108
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
109 void MainWindow::showErrorMessage(const QString& errMsg) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
110 QMessageBox::warning(this, tr("Error!"), errMsg);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
111 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
112
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
113 void MainWindow::closeEvent(QCloseEvent *event) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
114 mSettings.setValue("geometry", saveGeometry());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
115 mSettings.setValue("windowState", saveState());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
116 QMainWindow::closeEvent(event);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
117 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
118
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
119 void MainWindow::readSettings() {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
120 if (mSettings.contains("geometry")) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
121 restoreGeometry(mSettings.value("geometry").toByteArray());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
122 restoreState(mSettings.value("windowState").toByteArray());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
123 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
124
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
125 setInputFile(mSettings.value("lastInput",
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
126 QStandardPaths::writableLocation(DEFAULT_DIR)).toString());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
127 mOutRequester->setFileName(mSettings.value("lastOutput",
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
128 QStandardPaths::writableLocation(DEFAULT_DIR)).toString());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
129
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
130 mPdfChk->setChecked(mSettings.value("pdfChk", true).toBool());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
131 mHtmlChk->setChecked(mSettings.value("htmlChk", false).toBool());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
132 mXlsxChk->setChecked(mSettings.value("xlsxChk", false).toBool());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
133 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
134
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
135 void MainWindow::setInputFile(const QString& file)
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
136 {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
137 mInputRequester->setFileName(file);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
138 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
139
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
140 void MainWindow::setTitle(const QString& title) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
141 mTitleEdit->setText(title);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
142 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
143
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
144 void MainWindow::checkCompleted() {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
145 if (!mTitleEdit->text().isEmpty() &&
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
146 (mPdfChk->isChecked() || mXlsxChk->isChecked() || mHtmlChk->isChecked())) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
147 mConvertBtn->setEnabled(true);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
148 } else {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
149 mConvertBtn->setEnabled(false);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
150 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
151 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
152
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
153 void MainWindow::doConvert() {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
154 /* Construct output names */
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
155 QStringList outNames;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
156
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
157 QDir outDir(mOutRequester->fileName());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
158 if (!outDir.exists() && !outDir.mkpath(mOutRequester->fileName())) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
159 showErrorMessage(tr("Failed to create output directory."));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
160 return;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
161 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
162
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
163 const QFileInfo fi(mInputRequester->fileName());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
164 if (!fi.exists() || !fi.isReadable()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
165 showErrorMessage(tr("Failed to open \"%1\" for reading.").arg(mInputRequester->fileName()));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
166 return;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
167 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
168 if (mPdfChk->isChecked()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
169 outNames << outDir.absoluteFilePath(fi.baseName() + QStringLiteral(".pdf"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
170 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
171 if (mHtmlChk->isChecked()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
172 outNames << outDir.absoluteFilePath(fi.baseName() + QStringLiteral(".html"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
173 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
174 if (mXlsxChk->isChecked()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
175 outNames << outDir.absoluteFilePath(fi.baseName() + QStringLiteral(".xslx"));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
176 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
177
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
178 QStringList cleanedNames;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
179 foreach (const QString &name, outNames) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
180 const QFileInfo fi2(name);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
181 if (!fi2.exists()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
182 cleanedNames << name;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
183 continue;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
184 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
185 /* File exists. Lets try a number. */
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
186 bool replacementFound = false;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
187 for (int i = 1; i < MAX_FILENAME_COUNT; i++) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
188 const QString newName = outDir.absoluteFilePath(QStringLiteral("%1_%2.%3").arg(
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
189 fi2.baseName()).arg(i).arg(fi2.suffix()));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
190 const QFileInfo fi3(newName);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
191 if (!fi3.exists()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
192 qDebug() << "Using " << newName << " as replacement because other files exist.";
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
193 cleanedNames << newName;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
194 replacementFound = true;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
195 break;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
196 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
197 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
198 if (!replacementFound) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
199 showErrorMessage(tr("Failed to find an available free name for \"%1\" please choose another folder.").arg(name));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
200 return;
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
201 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
202 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
203
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
204 mSettings.setValue("lastInput", mInputRequester->fileName());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
205 mSettings.setValue("lastOutput", mOutRequester->fileName());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
206 mSettings.setValue("pdfChk", mPdfChk->isChecked());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
207 mSettings.setValue("xlsxChk", mXlsxChk->isChecked());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
208 mSettings.setValue("htmlChk", mHtmlChk->isChecked());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
209
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
210 /* Convert away */
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
211 Converter conv(mInputRequester->fileName(), cleanedNames, mTitleEdit->text());
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
212
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
213 conv.start();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
214 hide();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
215 qDebug() << "Waiting for conversion.";
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
216 conv.wait();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
217 qDebug() << "Conversion done.";
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
218 const QStringList errors = conv.errors();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
219 if (!errors.isEmpty()) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
220 Q_FOREACH (const QString err, errors) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
221 showErrorMessage(err);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
222 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
223 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
224
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
225 if (cleanedNames.size() == 1) {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
226 qDebug() << "Opening: " << QUrl(QStringLiteral("file:///%1").arg(cleanedNames[0]), QUrl::TolerantMode);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
227 QDesktopServices::openUrl(QUrl(QStringLiteral("file:///%1").arg(cleanedNames[0]), QUrl::TolerantMode));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
228 } else {
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
229 qDebug() << "Opening: " << QUrl(QStringLiteral("file:///%1").arg(outDir.path()), QUrl::TolerantMode);
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
230 QDesktopServices::openUrl(QUrl(QStringLiteral("file:///%1").arg(outDir.path()), QUrl::TolerantMode));
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
231 }
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
232
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
233 close();
36ee5dd46fd3 Add GUI
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
234 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)