14class ArrangerObjectColor :
public QObject
17 Q_PROPERTY (
bool useColor READ useColor NOTIFY useColorChanged)
18 Q_PROPERTY (QColor color READ color WRITE setColor NOTIFY colorChanged)
23 ArrangerObjectColor (QObject * parent =
nullptr) noexcept : QObject (parent)
26 ~ArrangerObjectColor ()
noexcept override =
default;
27 Z_DISABLE_COPY_MOVE (ArrangerObjectColor)
35 bool useColor ()
const {
return color_.has_value (); }
41 return color_->to_qcolor ();
45 void setColor (QColor color)
47 if (useColor () && color_.value ().to_qcolor () == color)
50 if (!color.isValid ())
53 const bool emit_use_color_changed = !useColor ();
55 Q_EMIT colorChanged (color);
56 if (emit_use_color_changed)
57 Q_EMIT useColorChanged (
true);
60 Q_INVOKABLE
void unsetColor ()
63 Q_EMIT useColorChanged (
false);
66 Q_SIGNAL
void colorChanged (QColor color);
67 Q_SIGNAL
void useColorChanged (
bool use_color);
72 friend void init_from (
73 ArrangerObjectColor &obj,
74 const ArrangerObjectColor &other,
77 obj.color_ = other.color_;
80 static constexpr std::string_view kColorKey =
"color";
81 friend void to_json (nlohmann::json &j,
const ArrangerObjectColor &obj)
83 j[kColorKey] = obj.color_;
85 friend void from_json (
const nlohmann::json &j, ArrangerObjectColor &obj)
87 j.at (kColorKey).get_to (obj.color_);
96 std::optional<Color> color_;
98 BOOST_DESCRIBE_CLASS (ArrangerObjectColor, (), (), (), (color_))