subsurface/desktop-widgets/templateedit.cpp
Berthold Stoeger 0cbb448740 cleanup: make templateOptions and printOptions reference types
These two structs describe options used during printing.
They are passed through numerous classes as pointer. In this
case, reference semantics are preferred, as references:
 - can never be null
 - can not change during their lifetime
This not only helps the compiler, as it can optimize away null
checks, but also your fellow coder. Moreover, it prevents
unintentional creation of uninitialized references: one can't
create an instance of a class without initializing a reference
member. It does not prevent references from going dangling.
However, pointers have the same disadvantage.

Contains a few whitespace cleanups.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-12-17 13:03:56 -08:00

236 lines
8.2 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#include "templateedit.h"
#include "printoptions.h"
#include "printer.h"
#include "ui_templateedit.h"
#include <QMessageBox>
#include <QButtonGroup>
#include <QColorDialog>
TemplateEdit::TemplateEdit(QWidget *parent, const print_options &printOptions, template_options &templateOptions) :
QDialog(parent),
ui(new Ui::TemplateEdit),
printOptions(printOptions),
templateOptions(templateOptions)
{
ui->setupUi(this);
newTemplateOptions = templateOptions;
// restore the settings and init the UI
ui->fontSelection->setCurrentIndex(templateOptions.font_index);
ui->fontsize->setValue(lrint(templateOptions.font_size));
ui->colorpalette->setCurrentIndex(templateOptions.color_palette_index);
ui->linespacing->setValue(templateOptions.line_spacing);
ui->borderwidth->setValue(templateOptions.border_width);
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_borderwidth_valueChanged(double border_width)
{
newTemplateOptions.border_width = (int)border_width;
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) {
templateOptions = newTemplateOptions;
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();
}