mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
OP-9 GCS/uavobjectbrowser: Support updates.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@502 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
bd853085c8
commit
412fb3abc3
@ -30,13 +30,15 @@
|
||||
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent) :
|
||||
m_data(data),
|
||||
m_parent(parent),
|
||||
m_highlight(false)
|
||||
m_highlight(false),
|
||||
m_changed(false)
|
||||
{
|
||||
}
|
||||
|
||||
TreeItem::TreeItem(const QVariant &data, TreeItem *parent) :
|
||||
m_parent(parent),
|
||||
m_highlight(false)
|
||||
m_highlight(false),
|
||||
m_changed(false)
|
||||
{
|
||||
m_data << data << "" << "";
|
||||
}
|
||||
|
@ -60,13 +60,13 @@ class TreeItem
|
||||
public:
|
||||
TreeItem(const QList<QVariant> &data, TreeItem *parent = 0);
|
||||
TreeItem(const QVariant &data, TreeItem *parent = 0);
|
||||
~TreeItem();
|
||||
virtual ~TreeItem();
|
||||
|
||||
void appendChild(TreeItem *child);
|
||||
void insert(int index, TreeItem *child);
|
||||
|
||||
TreeItem *child(int row);
|
||||
QList<TreeItem*> children() const { return m_children; }
|
||||
inline QList<TreeItem*> children() const { return m_children; }
|
||||
int childCount() const;
|
||||
int columnCount() const;
|
||||
QVariant data(int column = 1) const;
|
||||
@ -78,11 +78,17 @@ class TreeItem
|
||||
void setParent(TreeItem *parent) { m_parent = parent; }
|
||||
inline virtual bool isEditable() { return false; }
|
||||
virtual void update() {
|
||||
foreach(TreeItem *child, m_children)
|
||||
foreach(TreeItem *child, children())
|
||||
child->update();
|
||||
}
|
||||
virtual void setHighlight(bool highlight) { m_highlight = highlight; }
|
||||
inline virtual bool highlight() { return m_highlight; }
|
||||
virtual void apply() {
|
||||
foreach(TreeItem *child, children())
|
||||
child->apply();
|
||||
}
|
||||
inline bool highlighted() { return m_highlight; }
|
||||
inline void setHighlight(bool highlight) { m_highlight = highlight; m_changed = false; }
|
||||
inline bool changed() { return m_changed; }
|
||||
inline void setChanged(bool changed) { m_changed = changed; }
|
||||
|
||||
private:
|
||||
QList<TreeItem*> m_children;
|
||||
@ -90,6 +96,9 @@ class TreeItem
|
||||
QList<QVariant> m_data;
|
||||
TreeItem *m_parent;
|
||||
bool m_highlight;
|
||||
bool m_changed;
|
||||
public:
|
||||
static const int dataColumn = 1;
|
||||
};
|
||||
|
||||
class TopTreeItem : public TreeItem
|
||||
@ -113,12 +122,12 @@ private:
|
||||
QList<quint32> m_objIds;
|
||||
};
|
||||
|
||||
class DataObjectTreeItem : public TreeItem
|
||||
class ObjectTreeItem : public TreeItem
|
||||
{
|
||||
public:
|
||||
DataObjectTreeItem(const QList<QVariant> &data, TreeItem *parent = 0) :
|
||||
ObjectTreeItem(const QList<QVariant> &data, TreeItem *parent = 0) :
|
||||
TreeItem(data, parent), m_obj(0) { }
|
||||
DataObjectTreeItem(const QVariant &data, TreeItem *parent = 0) :
|
||||
ObjectTreeItem(const QVariant &data, TreeItem *parent = 0) :
|
||||
TreeItem(data, parent), m_obj(0) { }
|
||||
void setObject(UAVObject *obj) { m_obj = obj; }
|
||||
inline UAVObject *object() { return m_obj; }
|
||||
@ -126,12 +135,36 @@ private:
|
||||
UAVObject *m_obj;
|
||||
};
|
||||
|
||||
class MetaObjectTreeItem : public TreeItem
|
||||
class MetaObjectTreeItem : public ObjectTreeItem
|
||||
{
|
||||
public:
|
||||
MetaObjectTreeItem(const QList<QVariant> &data, TreeItem *parent = 0) : TreeItem(data, parent) { }
|
||||
MetaObjectTreeItem(const QVariant &data, TreeItem *parent = 0) : TreeItem(data, parent) { }
|
||||
void update() { }
|
||||
MetaObjectTreeItem(UAVObject *obj, const QList<QVariant> &data, TreeItem *parent = 0) :
|
||||
ObjectTreeItem(data, parent) { setObject(obj); }
|
||||
MetaObjectTreeItem(UAVObject *obj, const QVariant &data, TreeItem *parent = 0) :
|
||||
ObjectTreeItem(data, parent) { setObject(obj); }
|
||||
};
|
||||
|
||||
class DataObjectTreeItem : public ObjectTreeItem
|
||||
{
|
||||
public:
|
||||
DataObjectTreeItem(const QList<QVariant> &data, TreeItem *parent = 0) :
|
||||
ObjectTreeItem(data, parent) { }
|
||||
DataObjectTreeItem(const QVariant &data, TreeItem *parent = 0) :
|
||||
ObjectTreeItem(data, parent) { }
|
||||
virtual void apply() {
|
||||
foreach(TreeItem *child, children()) {
|
||||
MetaObjectTreeItem *metaChild = dynamic_cast<MetaObjectTreeItem*>(child);
|
||||
if (!metaChild)
|
||||
child->apply();
|
||||
}
|
||||
}
|
||||
virtual void update() {
|
||||
foreach(TreeItem *child, children()) {
|
||||
MetaObjectTreeItem *metaChild = dynamic_cast<MetaObjectTreeItem*>(child);
|
||||
if (!metaChild)
|
||||
child->update();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class InstanceTreeItem : public DataObjectTreeItem
|
||||
@ -141,6 +174,8 @@ public:
|
||||
DataObjectTreeItem(data, parent) { setObject(obj); }
|
||||
InstanceTreeItem(UAVObject *obj, const QVariant &data, TreeItem *parent = 0) :
|
||||
DataObjectTreeItem(data, parent) { setObject(obj); }
|
||||
virtual void apply() { TreeItem::apply(); }
|
||||
virtual void update() { TreeItem::update(); }
|
||||
};
|
||||
|
||||
class ArrayFieldTreeItem : public TreeItem
|
||||
@ -154,20 +189,16 @@ class FieldTreeItem : public TreeItem
|
||||
{
|
||||
public:
|
||||
FieldTreeItem(int index, const QList<QVariant> &data, TreeItem *parent = 0) :
|
||||
TreeItem(data, parent), m_index(index), m_changed(false) { }
|
||||
TreeItem(data, parent), m_index(index) { }
|
||||
FieldTreeItem(int index, const QVariant &data, TreeItem *parent = 0) :
|
||||
TreeItem(data, parent), m_index(index), m_changed(false) { }
|
||||
TreeItem(data, parent), m_index(index) { }
|
||||
bool isEditable() { return true; }
|
||||
bool isChanged() { return m_changed; }
|
||||
void setChanged(bool changed) { m_changed = changed; }
|
||||
virtual bool isIntType() { return false; }
|
||||
virtual bool isEnum() { return false; }
|
||||
virtual bool isFloatType() { return false; }
|
||||
virtual void apply(int column) { }
|
||||
virtual void apply() { }
|
||||
protected:
|
||||
int m_index;
|
||||
private:
|
||||
bool m_changed;
|
||||
};
|
||||
|
||||
class EnumFieldTreeItem : public FieldTreeItem
|
||||
@ -182,16 +213,15 @@ public:
|
||||
void setData(QVariant value, int column) {
|
||||
setChanged(m_field->getSelectedIndex(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
apply(column);
|
||||
}
|
||||
void apply(int column) {
|
||||
int value = data(column).toInt();
|
||||
void apply() {
|
||||
int value = data(dataColumn).toInt();
|
||||
m_field->setSelectedIndex(value, m_index);
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getSelectedIndex(m_index);
|
||||
if (data() != value) {
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
@ -228,8 +258,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
m_field->setValue(data(column).toInt());
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toInt());
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldInt8 *m_field;
|
||||
@ -246,8 +286,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
m_field->setValue(data(column).toInt());
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toInt());
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldInt16 *m_field;
|
||||
@ -264,9 +314,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
int value = data(column).toInt();
|
||||
m_field->setValue(value);
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toInt());
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldInt32 *m_field;
|
||||
@ -283,8 +342,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
m_field->setValue(data(column).toInt());
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toInt());
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldUInt8 *m_field;
|
||||
@ -301,8 +370,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
m_field->setValue(data(column).toInt());
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toInt());
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldUInt16 *m_field;
|
||||
@ -319,8 +398,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
m_field->setValue(data(column).toInt());
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toInt());
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
int value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldUInt32 *m_field;
|
||||
@ -339,8 +428,18 @@ public:
|
||||
setChanged(m_field->getValue(m_index) != value);
|
||||
TreeItem::setData(value, column);
|
||||
}
|
||||
void apply(int column) {
|
||||
m_field->setValue(data(column).toDouble(), m_index);
|
||||
void apply() {
|
||||
m_field->setValue(data(dataColumn).toDouble(), m_index);
|
||||
setChanged(false);
|
||||
}
|
||||
void update() {
|
||||
double value = m_field->getValue(m_index);
|
||||
if (data() != value || changed()) {
|
||||
setHighlight(true);
|
||||
TreeItem::setData(value);
|
||||
} else {
|
||||
setHighlight(false);
|
||||
}
|
||||
}
|
||||
private:
|
||||
UAVObjectFieldFloat *m_field;
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "uavobjectbrowserwidget.h"
|
||||
#include "uavobjecttreemodel.h"
|
||||
#include "browseritemdelegate.h"
|
||||
#include "treeitem.h"
|
||||
#include "ui_uavobjectbrowser.h"
|
||||
#include "uavobjects/uavobjectmanager.h"
|
||||
#include <QStringList>
|
||||
@ -51,9 +52,13 @@ UAVObjectBrowserWidget::UAVObjectBrowserWidget(QWidget *parent) : QWidget(parent
|
||||
m_browser->treeView->setEditTriggers(QAbstractItemView::AllEditTriggers);
|
||||
m_browser->treeView->setSelectionBehavior(QAbstractItemView::SelectItems);
|
||||
showMetaData(m_browser->metaCheckBox->isChecked());
|
||||
connect(m_browser->treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged(QModelIndex,QModelIndex)));
|
||||
connect(m_browser->metaCheckBox, SIGNAL(toggled(bool)), this, SLOT(showMetaData(bool)));
|
||||
connect(m_browser->saveSDButton, SIGNAL(clicked()), this, SLOT(saveSettings()));
|
||||
connect(m_browser->readSDButton, SIGNAL(clicked()), this, SLOT(readSettings()));
|
||||
connect(m_browser->sendButton, SIGNAL(clicked()), this, SLOT(sendUpdate()));
|
||||
connect(m_browser->requestButton, SIGNAL(clicked()), this, SLOT(requestUpdate()));
|
||||
enableSendRequest(false);
|
||||
}
|
||||
|
||||
UAVObjectBrowserWidget::~UAVObjectBrowserWidget()
|
||||
@ -75,12 +80,35 @@ void UAVObjectBrowserWidget::showMetaData(bool show)
|
||||
|
||||
void UAVObjectBrowserWidget::sendUpdate()
|
||||
{
|
||||
|
||||
ObjectTreeItem *objItem = findCurrentObjectTreeItem();
|
||||
Q_ASSERT(objItem);
|
||||
objItem->apply();
|
||||
UAVObject *obj = objItem->object();
|
||||
Q_ASSERT(obj);
|
||||
obj->updated();
|
||||
}
|
||||
|
||||
void UAVObjectBrowserWidget::requestUpdate()
|
||||
{
|
||||
ObjectTreeItem *objItem = findCurrentObjectTreeItem();
|
||||
Q_ASSERT(objItem);
|
||||
UAVObject *obj = objItem->object();
|
||||
Q_ASSERT(obj);
|
||||
obj->requestUpdate();
|
||||
}
|
||||
|
||||
ObjectTreeItem *UAVObjectBrowserWidget::findCurrentObjectTreeItem()
|
||||
{
|
||||
QModelIndex current = m_browser->treeView->currentIndex();
|
||||
TreeItem *item = static_cast<TreeItem*>(current.internalPointer());
|
||||
ObjectTreeItem *objItem = 0;
|
||||
while (item) {
|
||||
objItem = dynamic_cast<ObjectTreeItem*>(item);
|
||||
if (objItem)
|
||||
break;
|
||||
item = item->parent();
|
||||
}
|
||||
return objItem;
|
||||
}
|
||||
|
||||
void UAVObjectBrowserWidget::saveSettings()
|
||||
@ -107,3 +135,23 @@ void UAVObjectBrowserWidget::updateSettings(SettingsPersistence::OperationEnum o
|
||||
}
|
||||
}
|
||||
|
||||
void UAVObjectBrowserWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
||||
{
|
||||
TreeItem *item = static_cast<TreeItem*>(current.internalPointer());
|
||||
bool enable = true;
|
||||
if (current == QModelIndex())
|
||||
enable = false;
|
||||
TopTreeItem *top = dynamic_cast<TopTreeItem*>(item);
|
||||
ObjectTreeItem *data = dynamic_cast<ObjectTreeItem*>(item);
|
||||
if (top || (data && !data->object()))
|
||||
enable = false;
|
||||
enableSendRequest(enable);
|
||||
}
|
||||
|
||||
void UAVObjectBrowserWidget::enableSendRequest(bool enable)
|
||||
{
|
||||
m_browser->sendButton->setEnabled(enable);
|
||||
m_browser->requestButton->setEnabled(enable);
|
||||
}
|
||||
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "uavobjects/settingspersistence.h"
|
||||
|
||||
class QPushButton;
|
||||
class ObjectTreeItem;
|
||||
class Ui_UAVObjectBrowser;
|
||||
|
||||
|
||||
@ -42,23 +43,26 @@ class UAVObjectBrowserWidget : public QWidget
|
||||
|
||||
public:
|
||||
UAVObjectBrowserWidget(QWidget *parent = 0);
|
||||
~UAVObjectBrowserWidget();
|
||||
~UAVObjectBrowserWidget();
|
||||
|
||||
private slots:
|
||||
void sendUpdate();
|
||||
void requestUpdate();
|
||||
void showMetaData(bool show);
|
||||
void saveSettings();
|
||||
void readSettings();
|
||||
void sendUpdate();
|
||||
void requestUpdate();
|
||||
void showMetaData(bool show);
|
||||
void saveSettings();
|
||||
void readSettings();
|
||||
void currentChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
||||
|
||||
|
||||
private:
|
||||
QPushButton *m_requestUpdate;
|
||||
QPushButton *m_sendUpdate;
|
||||
Ui_UAVObjectBrowser *m_browser;
|
||||
QAbstractItemModel *m_model;
|
||||
QPushButton *m_requestUpdate;
|
||||
QPushButton *m_sendUpdate;
|
||||
Ui_UAVObjectBrowser *m_browser;
|
||||
QAbstractItemModel *m_model;
|
||||
|
||||
void updateSettings(SettingsPersistence::OperationEnum op);
|
||||
void updateSettings(SettingsPersistence::OperationEnum op);
|
||||
void enableSendRequest(bool enable);
|
||||
ObjectTreeItem *findCurrentObjectTreeItem();
|
||||
};
|
||||
|
||||
#endif /* UAVOBJECTBROWSERWIDGET_H_ */
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "uavobjects/uavobjectfields.h"
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include <QtGui/QColor>
|
||||
//#include <QtGui/QIcon>
|
||||
#include <QtCore/QTimer>
|
||||
#include <QtCore/QSignalMapper>
|
||||
#include <QtCore/QDebug>
|
||||
@ -100,7 +101,8 @@ void UAVObjectTreeModel::addDataObject(UAVDataObject *obj)
|
||||
|
||||
void UAVObjectTreeModel::addMetaObject(UAVMetaObject *obj, TreeItem *parent)
|
||||
{
|
||||
MetaObjectTreeItem *meta = new MetaObjectTreeItem(tr("Meta Data"));
|
||||
connect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(highlightUpdatedObject(UAVObject*)));
|
||||
MetaObjectTreeItem *meta = new MetaObjectTreeItem(obj, tr("Meta Data"));
|
||||
foreach (UAVObjectField *field, obj->getFields()) {
|
||||
if (field->getNumElements() > 1) {
|
||||
addArrayField(field, meta);
|
||||
@ -265,19 +267,21 @@ QVariant UAVObjectTreeModel::data(const QModelIndex &index, int role) const
|
||||
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
|
||||
return item->data(index.column());
|
||||
}
|
||||
// if (role == Qt::DecorationRole)
|
||||
// return QIcon(":/core/images/openpilot_logo_128.png");
|
||||
|
||||
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
|
||||
|
||||
if (index.column() == 0 && role == Qt::BackgroundRole) {
|
||||
DataObjectTreeItem *dataItem = dynamic_cast<DataObjectTreeItem*>(item);
|
||||
if (dataItem && dataItem->highlight())
|
||||
ObjectTreeItem *objItem = dynamic_cast<ObjectTreeItem*>(item);
|
||||
if (objItem && objItem->highlighted())
|
||||
return QVariant(m_recentlyUpdatedColor);
|
||||
}
|
||||
if (index.column() == 1 && role == Qt::BackgroundRole) {
|
||||
FieldTreeItem *fieldItem = dynamic_cast<FieldTreeItem*>(item);
|
||||
if (fieldItem && fieldItem->highlight())
|
||||
if (fieldItem && fieldItem->highlighted())
|
||||
return QVariant(m_recentlyUpdatedColor);
|
||||
if (fieldItem && fieldItem->isChanged())
|
||||
if (fieldItem && fieldItem->changed())
|
||||
return QVariant(m_manuallyChangedColor);
|
||||
}
|
||||
|
||||
@ -326,17 +330,14 @@ QVariant UAVObjectTreeModel::headerData(int section, Qt::Orientation orientation
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void UAVObjectTreeModel::highlightUpdatedObject(UAVObject *object)
|
||||
void UAVObjectTreeModel::highlightUpdatedObject(UAVObject *obj)
|
||||
{
|
||||
UAVDataObject *obj = qobject_cast<UAVDataObject*>(object);
|
||||
if (!obj)
|
||||
return;
|
||||
DataObjectTreeItem * dobj = findDataObjectTreeItem(obj);
|
||||
if (dobj) {
|
||||
dobj->setHighlight(true);
|
||||
dobj->update();
|
||||
emit dataChanged(QModelIndex(), QModelIndex());
|
||||
}
|
||||
Q_ASSERT(obj);
|
||||
ObjectTreeItem *item = findObjectTreeItem(obj);
|
||||
Q_ASSERT(item);
|
||||
item->setHighlight(true);
|
||||
item->update();
|
||||
emit dataChanged(QModelIndex(), QModelIndex());
|
||||
|
||||
// any updates while highlighted will not reset timer
|
||||
if (m_timerMap.contains(obj))
|
||||
@ -353,35 +354,58 @@ void UAVObjectTreeModel::highlightUpdatedObject(UAVObject *object)
|
||||
|
||||
void UAVObjectTreeModel::resetHighlightObject(QObject *object)
|
||||
{
|
||||
UAVDataObject *obj = qobject_cast<UAVDataObject*>(object);
|
||||
if (!obj)
|
||||
return;
|
||||
UAVObject *obj = qobject_cast<UAVObject*>(object);
|
||||
Q_ASSERT(obj);
|
||||
QTimer *timer = m_timerMap.value(obj);
|
||||
Q_ASSERT(timer);
|
||||
delete timer;
|
||||
m_timerMap.remove(obj);
|
||||
|
||||
DataObjectTreeItem * dobj = findDataObjectTreeItem(obj);
|
||||
if (dobj) {
|
||||
dobj->setHighlight(false);
|
||||
dobj->update();
|
||||
emit dataChanged(QModelIndex(), QModelIndex());
|
||||
}
|
||||
ObjectTreeItem *item = findObjectTreeItem(obj);
|
||||
Q_ASSERT(item);
|
||||
item->setHighlight(false);
|
||||
item->update();
|
||||
emit dataChanged(QModelIndex(), QModelIndex());
|
||||
}
|
||||
|
||||
DataObjectTreeItem *UAVObjectTreeModel::findDataObjectTreeItem(UAVDataObject *obj)
|
||||
ObjectTreeItem *UAVObjectTreeModel::findObjectTreeItem(UAVObject *object)
|
||||
{
|
||||
TopTreeItem *root = obj->isSettings() ? m_settingsTree : m_nonSettingsTree;
|
||||
UAVDataObject *dobj = qobject_cast<UAVDataObject*>(object);
|
||||
UAVMetaObject *mobj = qobject_cast<UAVMetaObject*>(object);
|
||||
Q_ASSERT(dobj || mobj);
|
||||
if (dobj) {
|
||||
return findDataObjectTreeItem(dobj);
|
||||
} else {
|
||||
dobj = qobject_cast<UAVDataObject*>(mobj->getParentObject());
|
||||
Q_ASSERT(dobj);
|
||||
DataObjectTreeItem *dItem = findDataObjectTreeItem(dobj);
|
||||
foreach (TreeItem *child, dItem->children()) {
|
||||
MetaObjectTreeItem *mItem = dynamic_cast<MetaObjectTreeItem*>(child);
|
||||
if (mItem && mItem->object()) {
|
||||
Q_ASSERT(mItem->object() == mobj);
|
||||
return mItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DataObjectTreeItem *UAVObjectTreeModel::findDataObjectTreeItem(UAVDataObject *object)
|
||||
{
|
||||
Q_ASSERT(object);
|
||||
TopTreeItem *root = object->isSettings() ? m_settingsTree : m_nonSettingsTree;
|
||||
foreach (TreeItem *child, root->children()) {
|
||||
DataObjectTreeItem *dobj = dynamic_cast<DataObjectTreeItem*>(child);
|
||||
if (dobj && dobj->object() && dobj->object()->isSingleInstance()) {
|
||||
if(dobj->object() == obj) {
|
||||
return dobj;
|
||||
DataObjectTreeItem *dItem = dynamic_cast<DataObjectTreeItem*>(child);
|
||||
if (dItem && dItem->object() && dItem->object()->isSingleInstance()) {
|
||||
if(dItem->object() == object) {
|
||||
return dItem;
|
||||
}
|
||||
} else {
|
||||
foreach (TreeItem *c, dobj->children()) {
|
||||
foreach (TreeItem *c, dItem->children()) {
|
||||
DataObjectTreeItem *d = dynamic_cast<DataObjectTreeItem*>(c);
|
||||
if (d && d->object() == obj)
|
||||
return dobj;
|
||||
if (d && d->object() == object)
|
||||
return dItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,6 +34,7 @@
|
||||
|
||||
class TreeItem;
|
||||
class TopTreeItem;
|
||||
class ObjectTreeItem;
|
||||
class DataObjectTreeItem;
|
||||
class UAVObject;
|
||||
class UAVDataObject;
|
||||
@ -80,6 +81,7 @@ private:
|
||||
void addInstance(UAVObject *obj, TreeItem *parent);
|
||||
QString updateMode(quint8 updateMode);
|
||||
void setupModelData(UAVObjectManager *objManager);
|
||||
ObjectTreeItem *findObjectTreeItem(UAVObject *obj);
|
||||
DataObjectTreeItem *findDataObjectTreeItem(UAVDataObject *obj);
|
||||
|
||||
TreeItem *m_rootItem;
|
||||
|
@ -79,8 +79,8 @@ void UAVObject::initializeFields(QList<UAVObjectField*>& fields, quint8* data, q
|
||||
*/
|
||||
void UAVObject::fieldUpdated(UAVObjectField* field)
|
||||
{
|
||||
emit objectUpdatedAuto(this); // trigger object updated event
|
||||
emit objectUpdated(this);
|
||||
// emit objectUpdatedAuto(this); // trigger object updated event
|
||||
// emit objectUpdated(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user