29#include <simgear/props/props.hxx>
37 _props->removeChangeListener(
this);
47 qWarning() <<
"Passed non-existant path to QmlPropertyModel:" <<
_rootPath;
50 _props->addChangeListener(
this);
54 const auto sz =
_props->nChildren();
56 for (
auto i = 0;
i < sz; ++
i) {
71 const auto nc =
p->nChildren();
72 for (
int i = 0;
i < nc; ++
i) {
88 return static_cast<int>(std::distance(
_roles.begin(), it)) + Qt::UserRole;
91 qDebug() << Q_FUNC_INFO <<
"adding" << QString::fromStdString(s);
93 return Qt::UserRole +
static_cast<int>(
_roles.size() - 1);
105 void doDataChanged(
const simgear::PropertyList::iterator& it, SGPropertyNode* node)
110 p->dataChanged(m, m, roles);
113 void childAdded(SGPropertyNode* parent, SGPropertyNode* child)
override
121 int insertRow = child->getIndex();
127 p->beginInsertRows(QModelIndex{}, insertRow, insertRow);
140 void childRemoved(SGPropertyNode* parent, SGPropertyNode* child)
override
150 SG_LOG(SG_GUI, SG_DEV_ALERT,
"Bug in QmlPropertyModel - child not found when removing:" << parent->getPath() <<
" - " << child->getNameString());
154 int row =
static_cast<int>(std::distance(
_directChildren.begin(), it));
155 p->beginRemoveRows(QModelIndex{}, row, row);
190 return d->_childName;
195 QHash<int, QByteArray> r;
196 for (
size_t i = 0;
i < d->_roles.size(); ++
i) {
197 r[
i] = QByteArray::fromStdString(d->_roles.at(
i));
204 auto node = d->_directChildren.at(m.row());
205 const int r = role - Qt::UserRole;
206 assert(r < d->_roles.size());
207 const auto& propName = d->_roles.at(r);
208 const auto prop = node->getChild(propName);
void doDataChanged(const simgear::PropertyList::iterator &it, SGPropertyNode *node)
int roleForNode(const std::string &s)
SGPropertyNode_ptr _props
simgear::PropertyList _directChildren
std::vector< std::string > _roles
void childRemoved(SGPropertyNode *parent, SGPropertyNode *child) override
void childAdded(SGPropertyNode *parent, SGPropertyNode *child) override
void valueChanged(SGPropertyNode *node) override
FGQmlPropertyModel(QObject *parent=nullptr)
void setRootPath(QString rootPath)
QVariant data(const QModelIndex &m, int role) const override
void setChildName(QString childName)
~FGQmlPropertyModel() override
void rootPathChanged(QString rootPath)
void childNameChanged(QString childName)
QHash< int, QByteArray > roleNames() const override
static QVariant propertyValueAsVariant(SGPropertyNode *p)
SGPropertyNode * fgGetNode(const char *path, bool create)
Get a property node.