porymap/include/ui/gridsettings.h
2024-10-01 10:19:40 -04:00

99 lines
2.7 KiB
C++

#ifndef GRIDSETTINGS_H
#define GRIDSETTINGS_H
#include <QDialog>
#include <QAbstractButton>
class GridSettings {
public:
explicit GridSettings() {};
~GridSettings() {};
enum Style {
Solid,
LargeDashes,
SmallDashes,
Crosshairs,
Dots,
};
uint width = 16;
uint height = 16;
int offsetX = 0;
int offsetY = 0;
Style style = Style::Solid;
QColor color = Qt::black;
QVector<qreal> getHorizontalDashPattern() const { return this->getDashPattern(this->width); }
QVector<qreal> getVerticalDashPattern() const { return this->getDashPattern(this->height); }
static QString getStyleName(Style style);
static GridSettings::Style getStyleFromName(const QString &name);
private:
static const QMap<Style, QString> styleToName;
QVector<qreal> getCenteredDashPattern(uint length, qreal dashLength, qreal gapLength) const;
QVector<qreal> getDashPattern(uint length) const;
};
inline bool operator==(const GridSettings &a, const GridSettings &b) {
return a.width == b.width
&& a.height == b.height
&& a.offsetX == b.offsetX
&& a.offsetY == b.offsetY
&& a.style == b.style
&& a.color == b.color;
}
inline bool operator!=(const GridSettings &a, const GridSettings &b) {
return !(operator==(a, b));
}
namespace Ui {
class GridSettingsDialog;
}
class GridSettingsDialog : public QDialog {
Q_OBJECT
public:
explicit GridSettingsDialog(QWidget *parent = nullptr);
explicit GridSettingsDialog(GridSettings *settings, QWidget *parent = nullptr);
~GridSettingsDialog();
void setSettings(const GridSettings &settings);
GridSettings settings() const { return *m_settings; }
void setDefaultSettings(const GridSettings &settings);
GridSettings defaultSettings() const { return m_defaultSettings; }
signals:
void changedGridSettings();
private:
Ui::GridSettingsDialog *ui;
GridSettings *const m_settings;
const GridSettings m_originalSettings;
GridSettings m_defaultSettings;
bool m_dimensionsLinked = true;
bool m_offsetsLinked = true;
bool m_ownedSettings = false;
void init();
void updateInput();
void setWidth(int value);
void setHeight(int value);
void setOffsetX(int value);
void setOffsetY(int value);
private slots:
void dialogButtonClicked(QAbstractButton *button);
void on_spinBox_Width_valueChanged(int value);
void on_spinBox_Height_valueChanged(int value);
void on_spinBox_X_valueChanged(int value);
void on_spinBox_Y_valueChanged(int value);
void on_comboBox_Style_currentTextChanged(const QString &text);
void onColorChanged(QRgb color);
};
#endif // GRIDSETTINGS_H