Skip to content
This repository has been archived by the owner on Jun 4, 2022. It is now read-only.

Commit

Permalink
settings persisted
Browse files Browse the repository at this point in the history
  • Loading branch information
yvt committed Feb 20, 2015
1 parent f23acea commit fdf0d9e
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 0 deletions.
4 changes: 4 additions & 0 deletions brushtool.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,8 @@ class BrushToolEdit
const BrushToolParameters& parameters() const { return params; }
};

Q_DECLARE_METATYPE(BrushType)
Q_DECLARE_METATYPE(BrushTipType)
Q_DECLARE_METATYPE(BrushPressureMode)

#endif // BRUSHTOOL_H
105 changes: 105 additions & 0 deletions brushtoolcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,107 @@
#include "brusheditor.h"
#include "brushtoolview.h"
#include "brushtool.h"
#include <QSettings>
#include <QDataStream>

QDataStream &operator<<(QDataStream &out, const BrushTipType &t)
{
QString name;
switch (t) {
case BrushTipType::Bell: name = "bell"; break;
case BrushTipType::Cone: name = "cone"; break;
case BrushTipType::Cylinder: name = "cylinder"; break;
case BrushTipType::Mountains: name = "mountains"; break;
case BrushTipType::Sphere: name = "sphere"; break;
case BrushTipType::Square: name = "square"; break;
}
return out << name;
}

QDataStream &operator>>(QDataStream &in, BrushTipType &t)
{
QString name;
in >> name;
if (name == "bell") {
t = BrushTipType::Bell;
} else if (name == "bell") {
t = BrushTipType::Bell;
} else if (name == "cone") {
t = BrushTipType::Cone;
} else if (name == "cylinder") {
t = BrushTipType::Cylinder;
} else if (name == "mountains") {
t = BrushTipType::Mountains;
} else if (name == "sphere") {
t = BrushTipType::Sphere;
} else if (name == "square") {
t = BrushTipType::Square;
}
return in;
}

QDataStream &operator<<(QDataStream &out, const BrushPressureMode &t)
{
QString name;
switch (t) {
case BrushPressureMode::Adjustable: name = "adjustable"; break;
case BrushPressureMode::AirBrush: name = "airbrush"; break;
case BrushPressureMode::Constant: name = "constant"; break;
}
return out << name;
}

QDataStream &operator>>(QDataStream &in, BrushPressureMode &t)
{
QString name;
in >> name;
if (name == "adjustable") {
t = BrushPressureMode::Adjustable;
} else if (name == "airbrush") {
t = BrushPressureMode::AirBrush;
} else if (name == "constant") {
t = BrushPressureMode::Constant;
}
return in;
}


BrushToolController::BrushToolController(BrushType type)
{
qRegisterMetaTypeStreamOperators<BrushTipType>("BrushTipType");
qRegisterMetaTypeStreamOperators<BrushPressureMode>("BrushPressureMode");

tool = QSharedPointer<BrushTool>::create(type);

QSettings settings;
settings.beginGroup(settingsGroupName());

auto params = tool->parameters();
params.tipType = settings.value("tip", QVariant::fromValue(params.tipType)).value<BrushTipType>();
params.strength = settings.value("strength", params.strength).value<float>();
params.size = settings.value("size", params.size).value<int>();
params.scale = settings.value("scale", params.scale).value<float>();
params.color = settings.value("color", params.color).value<quint32>();
params.pressureMode = settings.value("pressureMode", QVariant::fromValue(params.pressureMode)).value<BrushPressureMode>();
tool->setParameters(params);

settings.endGroup();
}

BrushToolController::~BrushToolController()
{
QSettings settings;
settings.beginGroup(settingsGroupName());

auto params = tool->parameters();
settings.setValue("tip", QVariant::fromValue(params.tipType));
settings.setValue("strength", params.strength);
settings.setValue("size", params.size);
settings.setValue("scale", params.scale);
settings.setValue("color", params.color);
settings.setValue("pressureMode", QVariant::fromValue(params.pressureMode));

settings.endGroup();
}

QWidget *BrushToolController::createEditor(Session *session)
Expand All @@ -32,6 +124,19 @@ QString BrushToolController::name()
case BrushType::Paint: return "Paint Brush";
case BrushType::Smoothen: return "Smoothen";
case BrushType::Blur: return "Blur";
default: Q_UNREACHABLE(); return QString();
}
}

QString BrushToolController::settingsGroupName()
{
switch (tool->type()) {
case BrushType::Raise: return "raisetool";
case BrushType::Lower: return "lowertool";
case BrushType::Paint: return "paintbrushtool";
case BrushType::Smoothen: return "smoothentool";
case BrushType::Blur: return "bluetool";
default: Q_UNREACHABLE(); return QString();
}
}

1 change: 1 addition & 0 deletions brushtoolcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class BrushToolController : public ToolController
QString name() override;
private:
QSharedPointer<BrushTool> tool;
QString settingsGroupName();
};

#endif // BRUSHTOOLCONTROLLER_H
18 changes: 18 additions & 0 deletions erosioneffectcontroller.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,36 @@
#include "erosioneffectcontroller.h"
#include "erosioneffect.h"
#include "erosioneditor.h"
#include <QSettings>

ErosionEffectController::ErosionEffectController(QObject *parent) :
EffectController(parent)
{
fx.reset(new ErosionEffect());

QSettings settings;
settings.beginGroup("erosion");

auto params = fx->parameters();
params.density = settings.value("density", params.density).value<float>();
params.strength = settings.value("strength", params.strength).value<float>();
fx->setParameters(params);

settings.endGroup();

connect(fx.data(), SIGNAL(parameterChanged(ErosionParameters)), SLOT(preview()));
}

ErosionEffectController::~ErosionEffectController()
{
QSettings settings;
settings.beginGroup("erosion");

auto params = fx->parameters();
settings.setValue("density", params.density);
settings.setValue("strength", params.strength);

settings.endGroup();
}

QString ErosionEffectController::name()
Expand Down
32 changes: 32 additions & 0 deletions mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <QFile>
#include <QDir>
#include <QLabel>
#include <QSharedPointer>

#include "mainwindow.h"
#include "ui_mainwindow.h"
Expand Down Expand Up @@ -32,10 +33,41 @@ MainWindow::MainWindow(QWidget *parent) :
ui(new Ui::MainWindow),
currentToolEditor(nullptr),
modified(false),
settings(new QSettings()),
closeForced(false)
{
ui->setupUi(this);

// Application settings
ui->primaryColorView->setValue(settings->value("primaryColor", QColor(255, 255, 255)).value<QColor>());
connect(ui->primaryColorView, &ColorView::valueChanged, [&](QColor color) {
settings->setValue("primaryColor", color);
});

{
TerrainViewOptions options = ui->terrainView->viewOptions();
settings->beginGroup("terrainview");
options.ambientOcclusion = settings->value("ambientOcclusion", options.ambientOcclusion).value<bool>();
options.ambientOcclusionStrength =
settings->value("ambientOcclusionStrength", options.ambientOcclusionStrength).value<float>();
options.axises = settings->value("axises", options.axises).value<bool>();
options.colorizeAltitude = settings->value("colorizeAltitude", options.colorizeAltitude).value<bool>();
options.showEdges = settings->value("showEdges", options.showEdges).value<bool>();
settings->endGroup();
ui->terrainView->setViewOptions(options);

connect(ui->terrainView, &TerrainView::viewOptionsChanged, [&](TerrainViewOptions options) {
settings->beginGroup("terrainview");
settings->setValue("ambientOcclusion", options.ambientOcclusion);
settings->setValue("ambientOcclusionStrength", options.ambientOcclusionStrength);
settings->setValue("axises", options.axises);
settings->setValue("colorizeAltitude", options.colorizeAltitude);
settings->setValue("showEdges", options.showEdges);
settings->endGroup();
});
}


// Connect color picker's signal
connect(ui->primaryColorView, SIGNAL(clicked()),
SLOT(primaryColorClicked()));
Expand Down
3 changes: 3 additions & 0 deletions mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <QScopedPointer>
#include <QHash>
#include <QToolButton>
#include <QSettings>

class Session;
class ToolView;
Expand All @@ -32,6 +33,8 @@ class MainWindow : public QMainWindow
private:
Ui::MainWindow *ui;

QScopedPointer<QSettings> settings;

QSharedPointer<Session> session;
QString currentFilePath;

Expand Down
2 changes: 2 additions & 0 deletions terrainview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ void TerrainView::setViewOptions(const TerrainViewOptions &opt)
Q_D(TerrainView);
d->viewOptions = opt;
update();

emit viewOptionsChanged(opt);
}

const TerrainViewOptions &TerrainView::viewOptions()
Expand Down
1 change: 1 addition & 0 deletions terrainview.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class TerrainView : public QWidget
void clientEnter(QEvent *);
void clientLeave(QEvent *);
void terrainPaint(TerrainViewDrawingContext *);
void viewOptionsChanged(TerrainViewOptions);

public slots:
void showOptionsWindow();
Expand Down

0 comments on commit fdf0d9e

Please sign in to comment.