summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/templateedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/templateedit.cpp')
-rw-r--r--desktop-widgets/templateedit.cpp227
1 files changed, 227 insertions, 0 deletions
diff --git a/desktop-widgets/templateedit.cpp b/desktop-widgets/templateedit.cpp
new file mode 100644
index 000000000..4964016b9
--- /dev/null
+++ b/desktop-widgets/templateedit.cpp
@@ -0,0 +1,227 @@
+#include "templateedit.h"
+#include "printoptions.h"
+#include "printer.h"
+#include "ui_templateedit.h"
+
+#include <QMessageBox>
+#include <QColorDialog>
+
+TemplateEdit::TemplateEdit(QWidget *parent, struct print_options *printOptions, struct template_options *templateOptions) :
+ QDialog(parent),
+ ui(new Ui::TemplateEdit)
+{
+ ui->setupUi(this);
+ this->templateOptions = templateOptions;
+ newTemplateOptions = *templateOptions;
+ this->printOptions = printOptions;
+
+ // restore the settings and init the UI
+ ui->fontSelection->setCurrentIndex(templateOptions->font_index);
+ ui->fontsize->setValue(templateOptions->font_size);
+ ui->colorpalette->setCurrentIndex(templateOptions->color_palette_index);
+ ui->linespacing->setValue(templateOptions->line_spacing);
+
+ grantlee_template = TemplateLayout::readTemplate(printOptions->p_template);
+ if (printOptions->type == print_options::DIVELIST)
+ grantlee_template = TemplateLayout::readTemplate(printOptions->p_template);
+ else if (printOptions->type == print_options::STATISTICS)
+ grantlee_template = TemplateLayout::readTemplate(QString::fromUtf8("statistics") + QDir::separator() + printOptions->p_template);
+
+ // gui
+ btnGroup = new QButtonGroup;
+ btnGroup->addButton(ui->editButton1, 1);
+ btnGroup->addButton(ui->editButton2, 2);
+ btnGroup->addButton(ui->editButton3, 3);
+ btnGroup->addButton(ui->editButton4, 4);
+ btnGroup->addButton(ui->editButton5, 5);
+ btnGroup->addButton(ui->editButton6, 6);
+ connect(btnGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(colorSelect(QAbstractButton*)));
+
+ ui->plainTextEdit->setPlainText(grantlee_template);
+ editingCustomColors = false;
+ updatePreview();
+}
+
+TemplateEdit::~TemplateEdit()
+{
+ delete btnGroup;
+ delete ui;
+}
+
+void TemplateEdit::updatePreview()
+{
+ // update Qpixmap preview
+ int width = ui->label->width();
+ int height = ui->label->height();
+ QPixmap map(width * 2, height * 2);
+ map.fill(QColor::fromRgb(255, 255, 255));
+ Printer printer(&map, printOptions, &newTemplateOptions, Printer::PREVIEW);
+ printer.previewOnePage();
+ ui->label->setPixmap(map.scaled(width, height, Qt::IgnoreAspectRatio));
+
+ // update colors tab
+ ui->colorLable1->setStyleSheet("QLabel { background-color : \"" + newTemplateOptions.color_palette.color1.name() + "\";}");
+ ui->colorLable2->setStyleSheet("QLabel { background-color : \"" + newTemplateOptions.color_palette.color2.name() + "\";}");
+ ui->colorLable3->setStyleSheet("QLabel { background-color : \"" + newTemplateOptions.color_palette.color3.name() + "\";}");
+ ui->colorLable4->setStyleSheet("QLabel { background-color : \"" + newTemplateOptions.color_palette.color4.name() + "\";}");
+ ui->colorLable5->setStyleSheet("QLabel { background-color : \"" + newTemplateOptions.color_palette.color5.name() + "\";}");
+ ui->colorLable6->setStyleSheet("QLabel { background-color : \"" + newTemplateOptions.color_palette.color6.name() + "\";}");
+
+ ui->colorLable1->setText(newTemplateOptions.color_palette.color1.name());
+ ui->colorLable2->setText(newTemplateOptions.color_palette.color2.name());
+ ui->colorLable3->setText(newTemplateOptions.color_palette.color3.name());
+ ui->colorLable4->setText(newTemplateOptions.color_palette.color4.name());
+ ui->colorLable5->setText(newTemplateOptions.color_palette.color5.name());
+ ui->colorLable6->setText(newTemplateOptions.color_palette.color6.name());
+
+ // update critical UI elements
+ ui->colorpalette->setCurrentIndex(newTemplateOptions.color_palette_index);
+
+ // update grantlee template string
+ grantlee_template = TemplateLayout::readTemplate(printOptions->p_template);
+ if (printOptions->type == print_options::DIVELIST)
+ grantlee_template = TemplateLayout::readTemplate(printOptions->p_template);
+ else if (printOptions->type == print_options::STATISTICS)
+ grantlee_template = TemplateLayout::readTemplate(QString::fromUtf8("statistics") + QDir::separator() + printOptions->p_template);
+}
+
+void TemplateEdit::on_fontsize_valueChanged(int font_size)
+{
+ newTemplateOptions.font_size = font_size;
+ updatePreview();
+}
+
+void TemplateEdit::on_linespacing_valueChanged(double line_spacing)
+{
+ newTemplateOptions.line_spacing = line_spacing;
+ updatePreview();
+}
+
+void TemplateEdit::on_fontSelection_currentIndexChanged(int index)
+{
+ newTemplateOptions.font_index = index;
+ updatePreview();
+}
+
+void TemplateEdit::on_colorpalette_currentIndexChanged(int index)
+{
+ newTemplateOptions.color_palette_index = index;
+ switch (newTemplateOptions.color_palette_index) {
+ case SSRF_COLORS: // subsurface derived default colors
+ newTemplateOptions.color_palette = ssrf_colors;
+ break;
+ case ALMOND: // almond
+ newTemplateOptions.color_palette = almond_colors;
+ break;
+ case BLUESHADES: // blueshades
+ newTemplateOptions.color_palette = blueshades_colors;
+ break;
+ case CUSTOM: // custom
+ if (!editingCustomColors)
+ newTemplateOptions.color_palette = custom_colors;
+ else
+ editingCustomColors = false;
+ break;
+ }
+ updatePreview();
+}
+
+void TemplateEdit::saveSettings()
+{
+ if ((*templateOptions) != newTemplateOptions || grantlee_template.compare(ui->plainTextEdit->toPlainText())) {
+ QMessageBox msgBox(this);
+ QString message = tr("Do you want to save your changes?");
+ bool templateChanged = false;
+ if (grantlee_template.compare(ui->plainTextEdit->toPlainText()))
+ templateChanged = true;
+ msgBox.setText(message);
+ msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Cancel);
+ msgBox.setDefaultButton(QMessageBox::Cancel);
+ if (msgBox.exec() == QMessageBox::Save) {
+ memcpy(templateOptions, &newTemplateOptions, sizeof(struct template_options));
+ if (templateChanged) {
+ TemplateLayout::writeTemplate(printOptions->p_template, ui->plainTextEdit->toPlainText());
+ if (printOptions->type == print_options::DIVELIST)
+ TemplateLayout::writeTemplate(printOptions->p_template, ui->plainTextEdit->toPlainText());
+ else if (printOptions->type == print_options::STATISTICS)
+ TemplateLayout::writeTemplate(QString::fromUtf8("statistics") + QDir::separator() + printOptions->p_template, ui->plainTextEdit->toPlainText());
+ }
+ if (templateOptions->color_palette_index == CUSTOM)
+ custom_colors = templateOptions->color_palette;
+ }
+ }
+}
+
+void TemplateEdit::on_buttonBox_clicked(QAbstractButton *button)
+{
+ QDialogButtonBox::StandardButton standardButton = ui->buttonBox->standardButton(button);
+ switch (standardButton) {
+ case QDialogButtonBox::Ok:
+ saveSettings();
+ break;
+ case QDialogButtonBox::Cancel:
+ break;
+ case QDialogButtonBox::Apply:
+ saveSettings();
+ updatePreview();
+ break;
+ default:
+ ;
+ }
+}
+
+void TemplateEdit::colorSelect(QAbstractButton *button)
+{
+ editingCustomColors = true;
+ // reset custom colors palette
+ switch (newTemplateOptions.color_palette_index) {
+ case SSRF_COLORS: // subsurface derived default colors
+ newTemplateOptions.color_palette = ssrf_colors;
+ break;
+ case ALMOND: // almond
+ newTemplateOptions.color_palette = almond_colors;
+ break;
+ case BLUESHADES: // blueshades
+ newTemplateOptions.color_palette = blueshades_colors;
+ break;
+ default:
+ break;
+ }
+
+ //change selected color
+ QColor color;
+ switch (btnGroup->id(button)) {
+ case 1:
+ color = QColorDialog::getColor(newTemplateOptions.color_palette.color1, this);
+ if (color.isValid())
+ newTemplateOptions.color_palette.color1 = color;
+ break;
+ case 2:
+ color = QColorDialog::getColor(newTemplateOptions.color_palette.color2, this);
+ if (color.isValid())
+ newTemplateOptions.color_palette.color2 = color;
+ break;
+ case 3:
+ color = QColorDialog::getColor(newTemplateOptions.color_palette.color3, this);
+ if (color.isValid())
+ newTemplateOptions.color_palette.color3 = color;
+ break;
+ case 4:
+ color = QColorDialog::getColor(newTemplateOptions.color_palette.color4, this);
+ if (color.isValid())
+ newTemplateOptions.color_palette.color4 = color;
+ break;
+ case 5:
+ color = QColorDialog::getColor(newTemplateOptions.color_palette.color5, this);
+ if (color.isValid())
+ newTemplateOptions.color_palette.color5 = color;
+ break;
+ case 6:
+ color = QColorDialog::getColor(newTemplateOptions.color_palette.color6, this);
+ if (color.isValid())
+ newTemplateOptions.color_palette.color6 = color;
+ break;
+ }
+ newTemplateOptions.color_palette_index = CUSTOM;
+ updatePreview();
+}