Warning, file /graphics/glaxnimate/src/gui/item_models/property_model_private.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 #include "property_model_base.hpp" 0009 0010 #include <unordered_map> 0011 0012 #include <QFont> 0013 #include <QPalette> 0014 0015 #include "model/property/option_list_property.hpp" 0016 0017 #include "app/application.hpp" 0018 0019 #include "widgets/enum_combo.hpp" 0020 0021 0022 class glaxnimate::gui::item_models::PropertyModelBase::Private 0023 { 0024 public: 0025 using id_type = quintptr; 0026 0027 struct Subtree 0028 { 0029 Subtree(model::Object* object, id_type parent) 0030 : object{object}, parent{parent}, visual_node{object->cast<model::VisualNode>()} 0031 {} 0032 0033 Subtree(model::BaseProperty* prop, id_type parent) 0034 : prop{prop}, parent{parent} 0035 {} 0036 0037 int child_index(Subtree* child) const 0038 { 0039 for ( int i = 0; i < int(children.size()); i++ ) 0040 if ( children[i] == child ) 0041 return i; 0042 return -1; 0043 } 0044 0045 model::Object* object = nullptr; 0046 model::BaseProperty* prop = nullptr; 0047 id_type parent = 0; 0048 std::vector<Subtree*> children; 0049 id_type id = 0; 0050 model::VisualNode* visual_node = nullptr; 0051 bool expand_referenced = false; 0052 /// When showing children directly, offset by this much 0053 int merged_children_offset = 0; 0054 }; 0055 0056 using ReferencedPropertiesMap = std::unordered_map<model::BaseProperty*, std::vector<id_type>>; 0057 0058 explicit Private(PropertyModelBase* parent) 0059 : model(parent) 0060 { 0061 } 0062 0063 virtual ~Private() {} 0064 0065 0066 void add_object(model::Object* object, Subtree* parent, bool insert_row, int index = -1); 0067 0068 Subtree* do_add_node(Subtree st, Subtree* parent, int index); 0069 0070 Subtree* add_node(Subtree st); 0071 0072 void clear(); 0073 0074 Subtree* node_from_index(const QModelIndex& index); 0075 0076 Subtree* node(id_type id); 0077 0078 QVariant data_name(Subtree* tree, int role); 0079 0080 QVariant data_value(Subtree* tree, int role); 0081 QVariant data_value(model::BaseProperty* prop, model::Object* object, int role); 0082 0083 virtual void on_connect(model::Object* object, Subtree* tree, bool insert_row, ReferencedPropertiesMap* referenced) = 0; 0084 0085 void connect_recursive(Subtree* this_node, bool insert_row); 0086 0087 void connect_subobject(model::Object* object, Subtree* this_node, bool insert_row); 0088 0089 void disconnect_recursive(Subtree* node); 0090 0091 Subtree* object_tree(model::Object* obj); 0092 0093 void on_delete_object(model::Object* obj); 0094 0095 Subtree* visual_node_parent(Subtree* tree); 0096 0097 QModelIndex node_index(model::DocumentNode* node); 0098 0099 QModelIndex subtree_index(id_type id); 0100 0101 QModelIndex subtree_index(Subtree* tree); 0102 0103 bool set_prop_data(Subtree* tree, const QVariant& value, int role); 0104 bool set_prop_data(model::BaseProperty* prop, const QVariant& value, int role); 0105 0106 void property_changed(const model::BaseProperty* prop, const QVariant& value); 0107 void on_property_changed(id_type prop_node_id, const model::BaseProperty* prop, const QVariant& value); 0108 void clean_object_references(const QModelIndex& index, Private::Subtree* prop_node); 0109 0110 void begin_insert_row(Subtree* row_tree, int index); 0111 void end_insert_row(); 0112 Subtree* add_property(model::BaseProperty* prop, id_type parent, bool insert_row, ReferencedPropertiesMap* referenced); 0113 0114 void clean_subtree(Subtree* node); 0115 0116 model::AnimatableBase* animatable(Subtree* node); 0117 0118 model::Document* document = nullptr; 0119 std::vector<Subtree*> roots; 0120 id_type next_id = 1; 0121 std::unordered_map<id_type, Subtree> nodes; 0122 std::unordered_map<model::Object*, id_type> objects; 0123 std::unordered_map<model::BaseProperty*, id_type> properties; 0124 std::unordered_map<model::Object*, ReferencedPropertiesMap> referenced_properties; 0125 bool animation_only; 0126 PropertyModelBase* model = nullptr; 0127 };