1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-28 05:34:47 +01:00

Margins widget refactoring

This commit is contained in:
Martin Tůma 2020-10-06 21:41:23 +02:00
parent a1be73fbba
commit 789f314ae8
9 changed files with 171 additions and 102 deletions

View File

@ -21,6 +21,7 @@ INCLUDEPATH += ./src
HEADERS += src/common/config.h \ HEADERS += src/common/config.h \
src/GUI/graphicsscene.h \ src/GUI/graphicsscene.h \
src/GUI/mapaction.h \ src/GUI/mapaction.h \
src/GUI/marginswidget.h \
src/GUI/popup.h \ src/GUI/popup.h \
src/common/garmin.h \ src/common/garmin.h \
src/common/staticassert.h \ src/common/staticassert.h \
@ -201,6 +202,7 @@ HEADERS += src/common/config.h \
src/GUI/pdfexportdialog.h \ src/GUI/pdfexportdialog.h \
src/GUI/pngexportdialog.h src/GUI/pngexportdialog.h
SOURCES += src/main.cpp \ SOURCES += src/main.cpp \
src/GUI/marginswidget.cpp \
src/GUI/popup.cpp \ src/GUI/popup.cpp \
src/common/coordinates.cpp \ src/common/coordinates.cpp \
src/common/rectc.cpp \ src/common/rectc.cpp \

View File

@ -2211,7 +2211,7 @@ void GUI::readSettings()
.toInt(); .toInt();
int mbi = settings.value(PNG_MARGIN_BOTTOM_SETTING, PNG_MARGIN_BOTTOM_DEFAULT) int mbi = settings.value(PNG_MARGIN_BOTTOM_SETTING, PNG_MARGIN_BOTTOM_DEFAULT)
.toInt(); .toInt();
_pngExport.margins = Margins(mli, mti, mri, mbi); _pngExport.margins = QMargins(mli, mti, mri, mbi);
_pngExport.antialiasing = settings.value(PNG_ANTIALIASING_SETTING, _pngExport.antialiasing = settings.value(PNG_ANTIALIASING_SETTING,
PNG_ANTIALIASING_DEFAULT).toBool(); PNG_ANTIALIASING_DEFAULT).toBool();
_pngExport.fileName = settings.value(PNG_FILENAME_SETTING, _pngExport.fileName = settings.value(PNG_FILENAME_SETTING,

View File

@ -4,27 +4,6 @@
#include <QtGlobal> #include <QtGlobal>
#include <QDebug> #include <QDebug>
class Margins
{
public:
Margins() {_left = 0; _top = 0; _right = 0; _bottom = 0;}
Margins(int left, int top, int right, int bottom)
{_left = left, _top = top; _right = right; _bottom = bottom;}
int left() const {return _left;}
int top() const {return _top;}
int right() const {return _right;}
int bottom() const {return _bottom;}
int &rleft() {return _left;}
int &rtop() {return _top;}
int &rright() {return _right;}
int &rbottom() {return _bottom;}
private:
int _left, _top, _right, _bottom;
};
class MarginsF class MarginsF
{ {
public: public:
@ -37,23 +16,23 @@ public:
qreal right() const {return _right;} qreal right() const {return _right;}
qreal bottom() const {return _bottom;} qreal bottom() const {return _bottom;}
qreal &rleft() {return _left;}
qreal &rtop() {return _top;}
qreal &rright() {return _right;}
qreal &rbottom() {return _bottom;}
private: private:
qreal _left, _top, _right, _bottom; qreal _left, _top, _right, _bottom;
}; };
#ifndef QT_NO_DEBUG inline MarginsF operator*(const MarginsF &margins, int factor)
inline QDebug operator<<(QDebug dbg, const Margins &margins)
{ {
dbg.nospace() << "Margins(" << margins.left() << ", " << margins.top() return MarginsF(margins.left() * factor, margins.top() * factor,
<< ", " << margins.right() << margins.bottom() << ")"; margins.right() * factor, margins.bottom() * factor);
return dbg.space();
} }
inline MarginsF operator/(const MarginsF &margins, int factor)
{
return MarginsF(margins.left() / factor, margins.top() / factor,
margins.right() / factor, margins.bottom() / factor);
}
#ifndef QT_NO_DEBUG
inline QDebug operator<<(QDebug dbg, const MarginsF &margins) inline QDebug operator<<(QDebug dbg, const MarginsF &margins)
{ {
dbg.nospace() << "MarginsF(" << margins.left() << ", " << margins.top() dbg.nospace() << "MarginsF(" << margins.left() << ", " << margins.top()

89
src/GUI/marginswidget.cpp Normal file
View File

@ -0,0 +1,89 @@
#include <QSpinBox>
#include <QGridLayout>
#include "units.h"
#include "marginswidget.h"
MarginsWidget::MarginsWidget(QWidget *parent) : QWidget(parent)
{
_top = new QSpinBox();
_bottom = new QSpinBox();
_left = new QSpinBox();
_right = new QSpinBox();
QGridLayout *layout = new QGridLayout();
layout->addWidget(_top, 0, 0, 1, 2, Qt::AlignCenter);
layout->addWidget(_left, 1, 0, 1, 1, Qt::AlignRight);
layout->addWidget(_right, 1, 1, 1, 1, Qt::AlignLeft);
layout->addWidget(_bottom, 2, 0, 1, 2, Qt::AlignCenter);
setLayout(layout);
}
void MarginsWidget::setValue(const QMargins &value)
{
_top->setValue(value.top());
_bottom->setValue(value.bottom());
_left->setValue(value.left());
_right->setValue(value.right());
}
void MarginsWidget::setUnits(const QString &units)
{
_top->setSuffix(UNIT_SPACE + units);
_bottom->setSuffix(UNIT_SPACE + units);
_left->setSuffix(UNIT_SPACE + units);
_right->setSuffix(UNIT_SPACE + units);
}
QMargins MarginsWidget::value() const
{
return QMargins(_left->value(), _top->value(), _right->value(),
_bottom->value());
}
MarginsFWidget::MarginsFWidget(QWidget *parent) : QWidget(parent)
{
_top = new QDoubleSpinBox();
_bottom = new QDoubleSpinBox();
_left = new QDoubleSpinBox();
_right = new QDoubleSpinBox();
QGridLayout *layout = new QGridLayout();
layout->addWidget(_top, 0, 0, 1, 2, Qt::AlignCenter);
layout->addWidget(_left, 1, 0, 1, 1, Qt::AlignRight);
layout->addWidget(_right, 1, 1, 1, 1, Qt::AlignLeft);
layout->addWidget(_bottom, 2, 0, 1, 2, Qt::AlignCenter);
setLayout(layout);
}
void MarginsFWidget::setValue(const MarginsF &value)
{
_top->setValue(value.top());
_bottom->setValue(value.bottom());
_left->setValue(value.left());
_right->setValue(value.right());
}
void MarginsFWidget::setUnits(const QString &units)
{
_top->setSuffix(UNIT_SPACE + units);
_bottom->setSuffix(UNIT_SPACE + units);
_left->setSuffix(UNIT_SPACE + units);
_right->setSuffix(UNIT_SPACE + units);
}
void MarginsFWidget::setSingleStep(qreal step)
{
_top->setSingleStep(step);
_bottom->setSingleStep(step);
_left->setSingleStep(step);
_right->setSingleStep(step);
}
MarginsF MarginsFWidget::value() const
{
return MarginsF(_left->value(), _top->value(), _right->value(),
_bottom->value());
}

48
src/GUI/marginswidget.h Normal file
View File

@ -0,0 +1,48 @@
#ifndef MARGINSWIDGET_H
#define MARGINSWIDGET_H
#include <QWidget>
#include <QMargins>
#include "margins.h"
class QSpinBox;
class QDoubleSpinBox;
class MarginsWidget : public QWidget
{
Q_OBJECT
public:
MarginsWidget(QWidget *parent = 0);
QMargins value() const;
void setValue(const QMargins &value);
void setUnits(const QString &units);
private:
QSpinBox *_top;
QSpinBox *_bottom;
QSpinBox *_left;
QSpinBox *_right;
};
class MarginsFWidget : public QWidget
{
Q_OBJECT
public:
MarginsFWidget(QWidget *parent = 0);
MarginsF value() const;
void setValue(const MarginsF &value);
void setUnits(const QString &units);
void setSingleStep(qreal step);
private:
QDoubleSpinBox *_top;
QDoubleSpinBox *_bottom;
QDoubleSpinBox *_left;
QDoubleSpinBox *_right;
};
#endif // MARGINSWIDGET_H

View File

@ -9,7 +9,7 @@
#include <QFileInfo> #include <QFileInfo>
#include <QMessageBox> #include <QMessageBox>
#include <QTabWidget> #include <QTabWidget>
#include <QDoubleSpinBox> #include "marginswidget.h"
#include "fileselectwidget.h" #include "fileselectwidget.h"
#include "units.h" #include "units.h"
#include "pdfexportdialog.h" #include "pdfexportdialog.h"
@ -58,36 +58,11 @@ PDFExportDialog::PDFExportDialog(PDFExport &exp, Units units, QWidget *parent)
else else
_landscape->setChecked(true); _landscape->setChecked(true);
_topMargin = new QDoubleSpinBox(); _margins = new MarginsFWidget();
_bottomMargin = new QDoubleSpinBox(); _margins->setUnits((units == Metric) ? tr("mm") : tr("in"));
_leftMargin = new QDoubleSpinBox(); _margins->setSingleStep(0.1);
_rightMargin = new QDoubleSpinBox(); _margins->setValue((units == Metric)
QString us = (units == Metric) ? tr("mm") : tr("in"); ? _export.margins : _export.margins * MM2IN);
_topMargin->setSuffix(UNIT_SPACE + us);
_bottomMargin->setSuffix(UNIT_SPACE + us);
_leftMargin->setSuffix(UNIT_SPACE + us);
_rightMargin->setSuffix(UNIT_SPACE + us);
if (units == Metric) {
_topMargin->setValue(_export.margins.top());
_bottomMargin->setValue(_export.margins.bottom());
_leftMargin->setValue(_export.margins.left());
_rightMargin->setValue(_export.margins.right());
} else {
_topMargin->setValue(_export.margins.top() * MM2IN);
_bottomMargin->setValue(_export.margins.bottom() * MM2IN);
_leftMargin->setValue(_export.margins.left() * MM2IN);
_rightMargin->setValue(_export.margins.right() * MM2IN);
_topMargin->setSingleStep(0.1);
_bottomMargin->setSingleStep(0.1);
_leftMargin->setSingleStep(0.1);
_rightMargin->setSingleStep(0.1);
}
QGridLayout *marginsLayout = new QGridLayout();
marginsLayout->addWidget(_topMargin, 0, 0, 1, 2, Qt::AlignCenter);
marginsLayout->addWidget(_leftMargin, 1, 0, 1, 1, Qt::AlignRight);
marginsLayout->addWidget(_rightMargin, 1, 1, 1, 1, Qt::AlignLeft);
marginsLayout->addWidget(_bottomMargin, 2, 0, 1, 2, Qt::AlignCenter);
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
QGroupBox *pageSetupBox = new QGroupBox(tr("Page Setup")); QGroupBox *pageSetupBox = new QGroupBox(tr("Page Setup"));
@ -96,7 +71,7 @@ PDFExportDialog::PDFExportDialog(PDFExport &exp, Units units, QWidget *parent)
pageSetupLayout->addRow(tr("Page size:"), _paperSize); pageSetupLayout->addRow(tr("Page size:"), _paperSize);
pageSetupLayout->addRow(tr("Resolution:"), _resolution); pageSetupLayout->addRow(tr("Resolution:"), _resolution);
pageSetupLayout->addRow(tr("Orientation:"), orientationLayout); pageSetupLayout->addRow(tr("Orientation:"), orientationLayout);
pageSetupLayout->addRow(tr("Margins:"), marginsLayout); pageSetupLayout->addRow(tr("Margins:"), _margins);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
QFrame *line = new QFrame(); QFrame *line = new QFrame();
line->setFrameShape(QFrame::HLine); line->setFrameShape(QFrame::HLine);
@ -153,13 +128,8 @@ void PDFExportDialog::accept()
_export.paperSize = paperSize; _export.paperSize = paperSize;
_export.resolution = resolution; _export.resolution = resolution;
_export.orientation = orientation; _export.orientation = orientation;
if (_units == Imperial) _export.margins = (_units == Imperial)
_export.margins = MarginsF(_leftMargin->value() / MM2IN, ? _margins->value() / MM2IN : _margins->value();
_topMargin->value() / MM2IN, _rightMargin->value() / MM2IN,
_bottomMargin->value() / MM2IN);
else
_export.margins = MarginsF(_leftMargin->value(), _topMargin->value(),
_rightMargin->value(), _bottomMargin->value());
QDialog::accept(); QDialog::accept();
} }

View File

@ -9,7 +9,7 @@
class QComboBox; class QComboBox;
class QRadioButton; class QRadioButton;
class FileSelectWidget; class FileSelectWidget;
class QDoubleSpinBox; class MarginsFWidget;
struct PDFExport struct PDFExport
{ {
@ -39,10 +39,7 @@ private:
QComboBox *_resolution; QComboBox *_resolution;
QRadioButton *_portrait; QRadioButton *_portrait;
QRadioButton *_landscape; QRadioButton *_landscape;
QDoubleSpinBox *_topMargin; MarginsFWidget *_margins;
QDoubleSpinBox *_bottomMargin;
QDoubleSpinBox *_leftMargin;
QDoubleSpinBox *_rightMargin;
}; };
#endif // PDFEXPORTDIALOG_H #endif // PDFEXPORTDIALOG_H

View File

@ -12,6 +12,7 @@
#include <QCheckBox> #include <QCheckBox>
#include "units.h" #include "units.h"
#include "fileselectwidget.h" #include "fileselectwidget.h"
#include "marginswidget.h"
#include "pngexportdialog.h" #include "pngexportdialog.h"
PNGExportDialog::PNGExportDialog(PNGExport &exp, QWidget *parent) PNGExportDialog::PNGExportDialog(PNGExport &exp, QWidget *parent)
@ -33,24 +34,9 @@ PNGExportDialog::PNGExportDialog(PNGExport &exp, QWidget *parent)
_height->setValue(_export.size.height()); _height->setValue(_export.size.height());
_height->setSuffix(UNIT_SPACE + tr("px")); _height->setSuffix(UNIT_SPACE + tr("px"));
_topMargin = new QSpinBox(); _margins = new MarginsWidget();
_bottomMargin = new QSpinBox(); _margins->setValue(_export.margins);
_leftMargin = new QSpinBox(); _margins->setUnits(tr("px"));
_rightMargin = new QSpinBox();
_topMargin->setSuffix(UNIT_SPACE + tr("px"));
_bottomMargin->setSuffix(UNIT_SPACE + tr("px"));
_leftMargin->setSuffix(UNIT_SPACE + tr("px"));
_rightMargin->setSuffix(UNIT_SPACE + tr("px"));
_topMargin->setValue(_export.margins.top());
_bottomMargin->setValue(_export.margins.bottom());
_leftMargin->setValue(_export.margins.left());
_rightMargin->setValue(_export.margins.right());
QGridLayout *marginsLayout = new QGridLayout();
marginsLayout->addWidget(_topMargin, 0, 0, 1, 2, Qt::AlignCenter);
marginsLayout->addWidget(_leftMargin, 1, 0, 1, 1, Qt::AlignRight);
marginsLayout->addWidget(_rightMargin, 1, 1, 1, 1, Qt::AlignLeft);
marginsLayout->addWidget(_bottomMargin, 2, 0, 1, 2, Qt::AlignCenter);
_antialiasing = new QCheckBox(tr("Use anti-aliasing")); _antialiasing = new QCheckBox(tr("Use anti-aliasing"));
_antialiasing->setChecked(_export.antialiasing); _antialiasing->setChecked(_export.antialiasing);
@ -61,7 +47,7 @@ PNGExportDialog::PNGExportDialog(PNGExport &exp, QWidget *parent)
QFormLayout *pageSetupLayout = new QFormLayout; QFormLayout *pageSetupLayout = new QFormLayout;
pageSetupLayout->addRow(tr("Image width:"), _width); pageSetupLayout->addRow(tr("Image width:"), _width);
pageSetupLayout->addRow(tr("Image height:"), _height); pageSetupLayout->addRow(tr("Image height:"), _height);
pageSetupLayout->addRow(tr("Margins:"), marginsLayout); pageSetupLayout->addRow(tr("Margins:"), _margins);
pageSetupLayout->addWidget(_antialiasing); pageSetupLayout->addWidget(_antialiasing);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
QFrame *line = new QFrame(); QFrame *line = new QFrame();
@ -111,8 +97,7 @@ void PNGExportDialog::accept()
_export.fileName = _fileSelect->file(); _export.fileName = _fileSelect->file();
_export.size = QSize(_width->value(), _height->value()); _export.size = QSize(_width->value(), _height->value());
_export.margins = Margins(_leftMargin->value(), _topMargin->value(), _export.margins = _margins->value();
_rightMargin->value(), _bottomMargin->value());
_export.antialiasing = _antialiasing->isChecked(); _export.antialiasing = _antialiasing->isChecked();
QDialog::accept(); QDialog::accept();

View File

@ -2,9 +2,11 @@
#define PNGEXPORTDIALOG_H #define PNGEXPORTDIALOG_H
#include <QDialog> #include <QDialog>
#include <QMargins>
#include "margins.h" #include "margins.h"
class FileSelectWidget; class FileSelectWidget;
class MarginsWidget;
class QSpinBox; class QSpinBox;
class QCheckBox; class QCheckBox;
@ -12,7 +14,7 @@ struct PNGExport
{ {
QString fileName; QString fileName;
QSize size; QSize size;
Margins margins; QMargins margins;
bool antialiasing; bool antialiasing;
}; };
@ -32,10 +34,7 @@ private:
FileSelectWidget *_fileSelect; FileSelectWidget *_fileSelect;
QSpinBox *_width; QSpinBox *_width;
QSpinBox *_height; QSpinBox *_height;
QSpinBox *_topMargin; MarginsWidget *_margins;
QSpinBox *_bottomMargin;
QSpinBox *_leftMargin;
QSpinBox *_rightMargin;
QCheckBox *_antialiasing; QCheckBox *_antialiasing;
}; };