Warning, file /graphics/glaxnimate/src/gui/style/property_delegate.hpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QtColorWidgets/ColorDelegate>
0010 
0011 #include "math/vector.hpp"
0012 #include "model/property/property.hpp"
0013 
0014 namespace glaxnimate::gui::style {
0015 
0016 class PropertyDelegate : public color_widgets::ColorDelegate
0017 {
0018 public:
0019     void set_forced_height(int height) { force_height = height; }
0020 
0021     QWidget* editor_from_property(model::BaseProperty* prop, QWidget* parent) const;
0022     void set_editor_data(QWidget* editor, model::BaseProperty* prop) const;
0023     bool set_property_data(QWidget* editor, model::BaseProperty* prop) const;
0024 
0025 protected:
0026     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0027 
0028     QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0029 
0030     void setEditorData ( QWidget * editor, const QModelIndex & index ) const override;
0031 
0032     void setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const override;
0033 
0034     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0035 
0036     QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const override;
0037 
0038 private:
0039     template<class T>
0040     void paint_xy(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
0041     {
0042         T value = index.data().value<T>();
0043         paint_plaintext(
0044             QString("%1 x %2")
0045             .arg(math::get(value, 0))
0046             .arg(math::get(value, 1)),
0047             painter,
0048             option,
0049             index
0050         );
0051     }
0052 
0053     void paint_plaintext(const QString& text, QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
0054 
0055     QVariant refprop(model::BaseProperty *prop, const model::PropertyTraits& traits) const;
0056     QWidget* create_editor_from_variant(const QVariant &data, int prop_flags, QWidget *parent, const QVariant& refprop, const QVariant& min, const QVariant& max) const;
0057     bool set_editor_data(QWidget *editor, const QVariant &data, int prop_flags, const QVariant &refprop) const;
0058     QVariant get_editor_data(QWidget *editor, const QVariant &data, int prop_flags, const QVariant &refprop, int& status) const;
0059 
0060     int force_height = 0;
0061 };
0062 
0063 } // namespace glaxnimate::gui::style