39 void add(QObject& referrer);
41 std::vector<QObject*> referrers(
const QObject& target)
const;
42 std::vector<QObject*> targets(
const QObject& referrer)
const;
50 std::vector<Broken> broken()
const;
54 void refresh(
const QObject& target);
56 void recover(const ::State::Address& published);
57 void unpublished(
const QObject* target);
59 void changed() E_SIGNAL(SCORE_PLUGIN_ENGINE_EXPORT, changed)
62 using Mapping =
std::function<
std::optional<::
State::AddressAccessor>(
63 const ::
State::AddressAccessor&)>;
65 void rewrite(QObject& referrer, const Mapping& map);
68 void update(QObject& referrer);
69 void remove(QObject* referrer);
71 void notify(QObject* referrer);
74 void unlink(const QObject* target, QObject* referrer);
75 void unlinkAddress(const ::
State::Address& address, QObject* referrer);
76 void unlinkDevice(const QString& device, QObject* referrer);
78 void explorerChanged(const QString& device);
80 void explorerDevicesChanged();
82 bool namesOther(const ::
State::Address& a, const QObject* target) const;
87 QPointer<QObject> target;
94 bool dangling() const noexcept {
return local && !target; }
98 std::vector<Ref> refs;
101 DocumentPlugin& m_tree;
102 ossia::hash_map<QObject*, Entry> m_entries;
103 ossia::hash_map<const QObject*, std::vector<QObject*>> m_byTarget;
104 ossia::hash_set<const QObject*> m_watched;
106 ossia::hash_map<::State::Address, ossia::hash_set<QObject*>, std::hash<::State::Address>>
108 ossia::hash_map<QString, ossia::hash_set<QObject*>> m_byDevice;
109 ossia::hash_set<QString> m_changedDevices;
110 bool m_allDevicesChanged{};
111 bool m_missingDevicesChanged{};
112 QTimer m_explorerChanges;
113 ossia::hash_set<QObject*> m_pending;