summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/printoptions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/printoptions.cpp')
-rw-r--r--desktop-widgets/printoptions.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/desktop-widgets/printoptions.cpp b/desktop-widgets/printoptions.cpp
new file mode 100644
index 000000000..769c89ff4
--- /dev/null
+++ b/desktop-widgets/printoptions.cpp
@@ -0,0 +1,189 @@
+#include "printoptions.h"
+#include "templateedit.h"
+#include "helpers.h"
+
+#include <QDebug>
+#include <QFileDialog>
+#include <QMessageBox>
+
+PrintOptions::PrintOptions(QWidget *parent, struct print_options *printOpt, struct template_options *templateOpt)
+{
+ hasSetupSlots = false;
+ ui.setupUi(this);
+ if (parent)
+ setParent(parent);
+ if (!printOpt || !templateOpt)
+ return;
+ templateOptions = templateOpt;
+ printOptions = printOpt;
+ setup();
+}
+
+void PrintOptions::setup()
+{
+ // print type radio buttons
+ switch (printOptions->type) {
+ case print_options::DIVELIST:
+ ui.radioDiveListPrint->setChecked(true);
+ break;
+ case print_options::STATISTICS:
+ ui.radioStatisticsPrint->setChecked(true);
+ break;
+ }
+
+ setupTemplates();
+
+ // general print option checkboxes
+ if (printOptions->color_selected)
+ ui.printInColor->setChecked(true);
+ if (printOptions->print_selected)
+ ui.printSelected->setChecked(true);
+
+ // connect slots only once
+ if (hasSetupSlots)
+ return;
+
+ connect(ui.printInColor, SIGNAL(clicked(bool)), this, SLOT(printInColorClicked(bool)));
+ connect(ui.printSelected, SIGNAL(clicked(bool)), this, SLOT(printSelectedClicked(bool)));
+
+ hasSetupSlots = true;
+}
+
+void PrintOptions::setupTemplates()
+{
+ if (printOptions->type == print_options::DIVELIST) {
+ // insert dive list templates in the UI and select the current template
+ qSort(grantlee_templates);
+ int current_index = 0, index = 0;
+ for (QList<QString>::iterator i = grantlee_templates.begin(); i != grantlee_templates.end(); ++i) {
+ if ((*i).compare(printOptions->p_template) == 0) {
+ current_index = index;
+ break;
+ }
+ index++;
+ }
+ ui.printTemplate->clear();
+ for (QList<QString>::iterator i = grantlee_templates.begin(); i != grantlee_templates.end(); ++i) {
+ ui.printTemplate->addItem((*i).split('.')[0], QVariant::fromValue(*i));
+ }
+ ui.printTemplate->setCurrentIndex(current_index);
+ } else if (printOptions->type == print_options::STATISTICS) {
+ // insert statistics templates in the UI and select the current template
+ qSort(grantlee_statistics_templates);
+ int current_index = 0, index = 0;
+ for (QList<QString>::iterator i = grantlee_statistics_templates.begin(); i != grantlee_statistics_templates.end(); ++i) {
+ if ((*i).compare(printOptions->p_template) == 0) {
+ current_index = index;
+ break;
+ }
+ index++;
+ }
+ ui.printTemplate->clear();
+ for (QList<QString>::iterator i = grantlee_statistics_templates.begin(); i != grantlee_statistics_templates.end(); ++i) {
+ ui.printTemplate->addItem((*i).split('.')[0], QVariant::fromValue(*i));
+ }
+ ui.printTemplate->setCurrentIndex(current_index);
+ }
+}
+
+// print type radio buttons
+void PrintOptions::on_radioDiveListPrint_toggled(bool check)
+{
+ if (check) {
+ printOptions->type = print_options::DIVELIST;
+
+ // print options
+ ui.printSelected->setEnabled(true);
+
+ // print template
+ ui.deleteButton->setEnabled(true);
+ ui.exportButton->setEnabled(true);
+ ui.importButton->setEnabled(true);
+
+ setupTemplates();
+ }
+}
+
+void PrintOptions::on_radioStatisticsPrint_toggled(bool check)
+{
+ if (check) {
+ printOptions->type = print_options::STATISTICS;
+
+ // print options
+ ui.printSelected->setEnabled(false);
+
+ // print template
+ ui.deleteButton->setEnabled(false);
+ ui.exportButton->setEnabled(false);
+ ui.importButton->setEnabled(false);
+
+ setupTemplates();
+ }
+}
+
+// general print option checkboxes
+void PrintOptions::printInColorClicked(bool check)
+{
+ printOptions->color_selected = check;
+}
+
+void PrintOptions::printSelectedClicked(bool check)
+{
+ printOptions->print_selected = check;
+}
+
+
+void PrintOptions::on_printTemplate_currentIndexChanged(int index)
+{
+ printOptions->p_template = ui.printTemplate->itemData(index).toString();
+}
+
+void PrintOptions::on_editButton_clicked()
+{
+ TemplateEdit te(this, printOptions, templateOptions);
+ te.exec();
+ setup();
+}
+
+void PrintOptions::on_importButton_clicked()
+{
+ QString filename = QFileDialog::getOpenFileName(this, tr("Import template file"), "",
+ tr("HTML files (*.html)"));
+ if (filename.isEmpty())
+ return;
+ QFileInfo fileInfo(filename);
+ QFile::copy(filename, getPrintingTemplatePathUser() + QDir::separator() + fileInfo.fileName());
+ printOptions->p_template = fileInfo.fileName();
+ find_all_templates();
+ setup();
+}
+
+void PrintOptions::on_exportButton_clicked()
+{
+ QString filename = QFileDialog::getSaveFileName(this, tr("Export template files as"), "",
+ tr("HTML files (*.html)"));
+ if (filename.isEmpty())
+ return;
+ QFile::copy(getPrintingTemplatePathUser() + QDir::separator() + getSelectedTemplate(), filename);
+}
+
+void PrintOptions::on_deleteButton_clicked()
+{
+ QString templateName = getSelectedTemplate();
+ QMessageBox msgBox;
+ msgBox.setText(tr("This action cannot be undone!"));
+ msgBox.setInformativeText(tr("Delete template: %1?").arg(templateName));
+ msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
+ msgBox.setDefaultButton(QMessageBox::Cancel);
+ if (msgBox.exec() == QMessageBox::Ok) {
+ QFile f(getPrintingTemplatePathUser() + QDir::separator() + templateName);
+ f.remove();
+ find_all_templates();
+ setup();
+ }
+}
+
+QString PrintOptions::getSelectedTemplate()
+{
+ return ui.printTemplate->currentData().toString();
+}