Add LineSettings class to use as subcategory

This commit is contained in:
Dan Paulat 2024-09-19 23:16:54 -05:00
parent c8dc8ed630
commit cea2993665
3 changed files with 168 additions and 0 deletions

View file

@ -0,0 +1,121 @@
#include <scwx/qt/settings/line_settings.hpp>
#include <scwx/qt/util/color.hpp>
#include <boost/gil.hpp>
namespace scwx
{
namespace qt
{
namespace settings
{
static const std::string logPrefix_ = "scwx::qt::settings::line_settings";
static const boost::gil::rgba8_pixel_t kTransparentColor_ {0, 0, 0, 0};
static const std::string kTransparentColorString_ {
util::color::ToArgbString(kTransparentColor_)};
static const boost::gil::rgba8_pixel_t kBlackColor_ {0, 0, 0, 255};
static const std::string kBlackColorString_ {
util::color::ToArgbString(kBlackColor_)};
static const boost::gil::rgba8_pixel_t kWhiteColor_ {255, 255, 255, 255};
static const std::string kWhiteColorString_ {
util::color::ToArgbString(kWhiteColor_)};
class LineSettings::Impl
{
public:
explicit Impl()
{
lineColor_.SetDefault(kWhiteColorString_);
highlightColor_.SetDefault(kTransparentColorString_);
borderColor_.SetDefault(kBlackColorString_);
lineWidth_.SetDefault(3);
highlightWidth_.SetDefault(0);
borderWidth_.SetDefault(1);
lineWidth_.SetMinimum(1);
highlightWidth_.SetMinimum(0);
borderWidth_.SetMinimum(0);
lineWidth_.SetMaximum(9);
highlightWidth_.SetMaximum(9);
borderWidth_.SetMaximum(9);
lineColor_.SetValidator(&util::color::ValidateArgbString);
highlightColor_.SetValidator(&util::color::ValidateArgbString);
borderColor_.SetValidator(&util::color::ValidateArgbString);
}
~Impl() {}
SettingsVariable<std::string> lineColor_ {"line_color"};
SettingsVariable<std::string> highlightColor_ {"highlight_color"};
SettingsVariable<std::string> borderColor_ {"border_color"};
SettingsVariable<std::int64_t> lineWidth_ {"line_width"};
SettingsVariable<std::int64_t> highlightWidth_ {"highlight_width"};
SettingsVariable<std::int64_t> borderWidth_ {"border_width"};
};
LineSettings::LineSettings(const std::string& name) :
SettingsCategory(name), p(std::make_unique<Impl>())
{
RegisterVariables({&p->lineColor_,
&p->highlightColor_,
&p->borderColor_,
&p->lineWidth_,
&p->highlightWidth_,
&p->borderWidth_});
SetDefaults();
}
LineSettings::~LineSettings() = default;
LineSettings::LineSettings(LineSettings&&) noexcept = default;
LineSettings& LineSettings::operator=(LineSettings&&) noexcept = default;
SettingsVariable<std::string>& LineSettings::border_color() const
{
return p->borderColor_;
}
SettingsVariable<std::string>& LineSettings::highlight_color() const
{
return p->highlightColor_;
}
SettingsVariable<std::string>& LineSettings::line_color() const
{
return p->lineColor_;
}
SettingsVariable<std::int64_t>& LineSettings::border_width() const
{
return p->borderWidth_;
}
SettingsVariable<std::int64_t>& LineSettings::highlight_width() const
{
return p->highlightWidth_;
}
SettingsVariable<std::int64_t>& LineSettings::line_width() const
{
return p->lineWidth_;
}
bool operator==(const LineSettings& lhs, const LineSettings& rhs)
{
return (lhs.p->borderColor_ == rhs.p->borderColor_ &&
lhs.p->highlightColor_ == rhs.p->highlightColor_ &&
lhs.p->lineColor_ == rhs.p->lineColor_ &&
lhs.p->borderWidth_ == rhs.p->borderWidth_ &&
lhs.p->highlightWidth_ == rhs.p->highlightWidth_ &&
lhs.p->lineWidth_ == rhs.p->lineWidth_);
}
} // namespace settings
} // namespace qt
} // namespace scwx

View file

@ -0,0 +1,45 @@
#pragma once
#include <scwx/qt/settings/settings_category.hpp>
#include <scwx/qt/settings/settings_variable.hpp>
#include <memory>
#include <string>
namespace scwx
{
namespace qt
{
namespace settings
{
class LineSettings : public SettingsCategory
{
public:
explicit LineSettings(const std::string& name);
~LineSettings();
LineSettings(const LineSettings&) = delete;
LineSettings& operator=(const LineSettings&) = delete;
LineSettings(LineSettings&&) noexcept;
LineSettings& operator=(LineSettings&&) noexcept;
SettingsVariable<std::string>& border_color() const;
SettingsVariable<std::string>& highlight_color() const;
SettingsVariable<std::string>& line_color() const;
SettingsVariable<std::int64_t>& border_width() const;
SettingsVariable<std::int64_t>& highlight_width() const;
SettingsVariable<std::int64_t>& line_width() const;
friend bool operator==(const LineSettings& lhs, const LineSettings& rhs);
private:
class Impl;
std::unique_ptr<Impl> p;
};
} // namespace settings
} // namespace qt
} // namespace scwx