mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-27 16:54:15 +01:00
LP-313 fix uavobjectbrowser always showing metadata when filtering
This commit is contained in:
parent
52a9aa37c8
commit
4f3ae61da6
@ -50,7 +50,10 @@ UAVObjectBrowserWidget::UAVObjectBrowserWidget(QWidget *parent) : QWidget(parent
|
|||||||
m_viewoptions = new Ui_viewoptions();
|
m_viewoptions = new Ui_viewoptions();
|
||||||
m_viewoptions->setupUi(m_viewoptionsDialog);
|
m_viewoptions->setupUi(m_viewoptionsDialog);
|
||||||
|
|
||||||
m_model = new UAVObjectTreeModel(this);
|
m_model = new UAVObjectTreeModel(this,
|
||||||
|
m_viewoptions->cbCategorized->isChecked(),
|
||||||
|
m_viewoptions->cbMetaData->isChecked(),
|
||||||
|
m_viewoptions->cbScientific->isChecked());
|
||||||
|
|
||||||
m_modelProxy = new TreeSortFilterProxyModel(this);
|
m_modelProxy = new TreeSortFilterProxyModel(this);
|
||||||
m_modelProxy->setSourceModel(m_model);
|
m_modelProxy->setSourceModel(m_model);
|
||||||
@ -67,7 +70,6 @@ UAVObjectBrowserWidget::UAVObjectBrowserWidget(QWidget *parent) : QWidget(parent
|
|||||||
|
|
||||||
m_mustacheTemplate = loadFileIntoString(QString(":/uavobjectbrowser/resources/uavodescription.mustache"));
|
m_mustacheTemplate = loadFileIntoString(QString(":/uavobjectbrowser/resources/uavodescription.mustache"));
|
||||||
|
|
||||||
showMetaData(m_viewoptions->cbMetaData->isChecked());
|
|
||||||
showDescription(m_viewoptions->cbDescription->isChecked());
|
showDescription(m_viewoptions->cbDescription->isChecked());
|
||||||
|
|
||||||
connect(m_browser->treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)),
|
connect(m_browser->treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)),
|
||||||
@ -80,14 +82,11 @@ UAVObjectBrowserWidget::UAVObjectBrowserWidget(QWidget *parent) : QWidget(parent
|
|||||||
connect(m_browser->tbView, SIGNAL(clicked()), this, SLOT(viewSlot()));
|
connect(m_browser->tbView, SIGNAL(clicked()), this, SLOT(viewSlot()));
|
||||||
connect(m_browser->splitter, SIGNAL(splitterMoved(int, int)), this, SLOT(splitterMoved()));
|
connect(m_browser->splitter, SIGNAL(splitterMoved(int, int)), this, SLOT(splitterMoved()));
|
||||||
|
|
||||||
connect(m_viewoptions->cbMetaData, SIGNAL(toggled(bool)), this, SLOT(showMetaData(bool)));
|
|
||||||
connect(m_viewoptions->cbMetaData, SIGNAL(toggled(bool)), this, SLOT(viewOptionsChangedSlot()));
|
|
||||||
connect(m_viewoptions->cbCategorized, SIGNAL(toggled(bool)), this, SLOT(categorize(bool)));
|
|
||||||
connect(m_viewoptions->cbCategorized, SIGNAL(toggled(bool)), this, SLOT(viewOptionsChangedSlot()));
|
|
||||||
connect(m_viewoptions->cbDescription, SIGNAL(toggled(bool)), this, SLOT(showDescription(bool)));
|
connect(m_viewoptions->cbDescription, SIGNAL(toggled(bool)), this, SLOT(showDescription(bool)));
|
||||||
connect(m_viewoptions->cbDescription, SIGNAL(toggled(bool)), this, SLOT(viewOptionsChangedSlot()));
|
|
||||||
connect(m_viewoptions->cbScientific, SIGNAL(toggled(bool)), this, SLOT(useScientificNotation(bool)));
|
connect(m_viewoptions->cbCategorized, SIGNAL(toggled(bool)), this, SLOT(updateViewOptions()));
|
||||||
connect(m_viewoptions->cbScientific, SIGNAL(toggled(bool)), this, SLOT(viewOptionsChangedSlot()));
|
connect(m_viewoptions->cbMetaData, SIGNAL(toggled(bool)), this, SLOT(updateViewOptions()));
|
||||||
|
connect(m_viewoptions->cbScientific, SIGNAL(toggled(bool)), this, SLOT(updateViewOptions()));
|
||||||
|
|
||||||
// search field and button
|
// search field and button
|
||||||
connect(m_browser->searchLine, SIGNAL(textChanged(QString)), this, SLOT(searchLineChanged(QString)));
|
connect(m_browser->searchLine, SIGNAL(textChanged(QString)), this, SLOT(searchLineChanged(QString)));
|
||||||
@ -114,68 +113,13 @@ void UAVObjectBrowserWidget::setSplitterState(QByteArray state)
|
|||||||
m_browser->splitter->restoreState(state);
|
m_browser->splitter->restoreState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UAVObjectBrowserWidget::showMetaData(bool show)
|
|
||||||
{
|
|
||||||
// TODO update the model directly instead of hiding rows...
|
|
||||||
QList<QModelIndex> metaIndexes = m_model->getMetaDataIndexes();
|
|
||||||
foreach(QModelIndex modelIndex, metaIndexes) {
|
|
||||||
QModelIndex proxyModelIndex = m_modelProxy->mapFromSource(modelIndex);
|
|
||||||
|
|
||||||
m_browser->treeView->setRowHidden(proxyModelIndex.row(), proxyModelIndex.parent(), !show);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UAVObjectBrowserWidget::showDescription(bool show)
|
void UAVObjectBrowserWidget::showDescription(bool show)
|
||||||
{
|
{
|
||||||
m_browser->descriptionText->setVisible(show);
|
m_browser->descriptionText->setVisible(show);
|
||||||
}
|
|
||||||
|
|
||||||
void UAVObjectBrowserWidget::categorize(bool categorize)
|
// persist options
|
||||||
{
|
emit viewOptionsChanged(m_viewoptions->cbCategorized->isChecked(), m_viewoptions->cbScientific->isChecked(),
|
||||||
// TODO we should update the model instead of rebuilding it
|
m_viewoptions->cbMetaData->isChecked(), m_viewoptions->cbDescription->isChecked());
|
||||||
// a side effect of rebuilding is that some state is lost (expand state, ...)
|
|
||||||
UAVObjectTreeModel *model = new UAVObjectTreeModel(0, categorize, m_viewoptions->cbScientific->isChecked());
|
|
||||||
|
|
||||||
model->setRecentlyUpdatedColor(m_recentlyUpdatedColor);
|
|
||||||
model->setManuallyChangedColor(m_manuallyChangedColor);
|
|
||||||
model->setRecentlyUpdatedTimeout(m_recentlyUpdatedTimeout);
|
|
||||||
model->setOnlyHilightChangedValues(m_onlyHilightChangedValues);
|
|
||||||
model->setUnknowObjectColor(m_unknownObjectColor);
|
|
||||||
|
|
||||||
UAVObjectTreeModel *tmpModel = m_model;
|
|
||||||
m_model = model;
|
|
||||||
m_modelProxy->setSourceModel(m_model);
|
|
||||||
delete tmpModel;
|
|
||||||
|
|
||||||
showMetaData(m_viewoptions->cbMetaData->isChecked());
|
|
||||||
|
|
||||||
// force an expand all if search text is not empty
|
|
||||||
if (!m_browser->searchLine->text().isEmpty()) {
|
|
||||||
searchLineChanged(m_browser->searchLine->text());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UAVObjectBrowserWidget::useScientificNotation(bool scientific)
|
|
||||||
{
|
|
||||||
// TODO we should update the model instead of rebuilding it
|
|
||||||
// a side effect of rebuilding is that some state is lost (expand state, ...)
|
|
||||||
UAVObjectTreeModel *model = new UAVObjectTreeModel(0, m_viewoptions->cbCategorized->isChecked(), scientific);
|
|
||||||
|
|
||||||
model->setManuallyChangedColor(m_manuallyChangedColor);
|
|
||||||
model->setRecentlyUpdatedTimeout(m_recentlyUpdatedTimeout);
|
|
||||||
model->setUnknowObjectColor(m_unknownObjectColor);
|
|
||||||
|
|
||||||
UAVObjectTreeModel *tmpModel = m_model;
|
|
||||||
m_model = model;
|
|
||||||
m_modelProxy->setSourceModel(m_model);
|
|
||||||
delete tmpModel;
|
|
||||||
|
|
||||||
showMetaData(m_viewoptions->cbMetaData->isChecked());
|
|
||||||
|
|
||||||
// force an expand all if search text is not empty
|
|
||||||
if (!m_browser->searchLine->text().isEmpty()) {
|
|
||||||
searchLineChanged(m_browser->searchLine->text());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UAVObjectBrowserWidget::sendUpdate()
|
void UAVObjectBrowserWidget::sendUpdate()
|
||||||
@ -321,8 +265,30 @@ void UAVObjectBrowserWidget::viewSlot()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UAVObjectBrowserWidget::viewOptionsChangedSlot()
|
void UAVObjectBrowserWidget::updateViewOptions()
|
||||||
{
|
{
|
||||||
|
// TODO we should update the model instead of rebuilding it
|
||||||
|
// a side effect of rebuilding is that some state is lost (expand state, ...)
|
||||||
|
UAVObjectTreeModel *model = new UAVObjectTreeModel(this,
|
||||||
|
m_viewoptions->cbCategorized->isChecked(),
|
||||||
|
m_viewoptions->cbMetaData->isChecked(),
|
||||||
|
m_viewoptions->cbScientific->isChecked());
|
||||||
|
|
||||||
|
model->setManuallyChangedColor(m_manuallyChangedColor);
|
||||||
|
model->setRecentlyUpdatedTimeout(m_recentlyUpdatedTimeout);
|
||||||
|
model->setUnknowObjectColor(m_unknownObjectColor);
|
||||||
|
|
||||||
|
UAVObjectTreeModel *tmpModel = m_model;
|
||||||
|
m_model = model;
|
||||||
|
m_modelProxy->setSourceModel(m_model);
|
||||||
|
delete tmpModel;
|
||||||
|
|
||||||
|
// force an expand all if search text is not empty
|
||||||
|
if (!m_browser->searchLine->text().isEmpty()) {
|
||||||
|
searchLineChanged(m_browser->searchLine->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
// persist options
|
||||||
emit viewOptionsChanged(m_viewoptions->cbCategorized->isChecked(), m_viewoptions->cbScientific->isChecked(),
|
emit viewOptionsChanged(m_viewoptions->cbCategorized->isChecked(), m_viewoptions->cbScientific->isChecked(),
|
||||||
m_viewoptions->cbMetaData->isChecked(), m_viewoptions->cbDescription->isChecked());
|
m_viewoptions->cbMetaData->isChecked(), m_viewoptions->cbDescription->isChecked());
|
||||||
}
|
}
|
||||||
|
@ -90,10 +90,7 @@ public:
|
|||||||
void setSplitterState(QByteArray state);
|
void setSplitterState(QByteArray state);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void showMetaData(bool show);
|
|
||||||
void showDescription(bool show);
|
void showDescription(bool show);
|
||||||
void categorize(bool categorize);
|
|
||||||
void useScientificNotation(bool scientific);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void sendUpdate();
|
void sendUpdate();
|
||||||
@ -103,7 +100,7 @@ private slots:
|
|||||||
void eraseObject();
|
void eraseObject();
|
||||||
void currentChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
void currentChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
||||||
void viewSlot();
|
void viewSlot();
|
||||||
void viewOptionsChangedSlot();
|
void updateViewOptions();
|
||||||
void searchLineChanged(QString searchText);
|
void searchLineChanged(QString searchText);
|
||||||
void searchTextCleared();
|
void searchTextCleared();
|
||||||
void splitterMoved();
|
void splitterMoved();
|
||||||
|
@ -37,10 +37,11 @@
|
|||||||
#include <QtCore/QSignalMapper>
|
#include <QtCore/QSignalMapper>
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
UAVObjectTreeModel::UAVObjectTreeModel(QObject *parent, bool categorize, bool useScientificNotation) :
|
UAVObjectTreeModel::UAVObjectTreeModel(QObject *parent, bool categorize, bool showMetadata, bool useScientificNotation) :
|
||||||
QAbstractItemModel(parent),
|
QAbstractItemModel(parent),
|
||||||
m_useScientificFloatNotation(useScientificNotation),
|
|
||||||
m_categorize(categorize),
|
m_categorize(categorize),
|
||||||
|
m_showMetadata(showMetadata),
|
||||||
|
m_useScientificFloatNotation(useScientificNotation),
|
||||||
m_recentlyUpdatedTimeout(500), // ms
|
m_recentlyUpdatedTimeout(500), // ms
|
||||||
m_recentlyUpdatedColor(QColor(255, 230, 230)),
|
m_recentlyUpdatedColor(QColor(255, 230, 230)),
|
||||||
m_manuallyChangedColor(QColor(230, 230, 255)),
|
m_manuallyChangedColor(QColor(230, 230, 255)),
|
||||||
@ -124,9 +125,11 @@ void UAVObjectTreeModel::addDataObject(UAVDataObject *obj)
|
|||||||
connect(dataTreeItem, SIGNAL(updateIsKnown(TreeItem *)), this, SLOT(updateIsKnown(TreeItem *)));
|
connect(dataTreeItem, SIGNAL(updateIsKnown(TreeItem *)), this, SLOT(updateIsKnown(TreeItem *)));
|
||||||
parent->insertChild(dataTreeItem);
|
parent->insertChild(dataTreeItem);
|
||||||
root->addObjectTreeItem(obj->getObjID(), dataTreeItem);
|
root->addObjectTreeItem(obj->getObjID(), dataTreeItem);
|
||||||
|
if (m_showMetadata) {
|
||||||
UAVMetaObject *meta = obj->getMetaObject();
|
UAVMetaObject *meta = obj->getMetaObject();
|
||||||
MetaObjectTreeItem *metaTreeItem = addMetaObject(meta, dataTreeItem);
|
MetaObjectTreeItem *metaTreeItem = addMetaObject(meta, dataTreeItem);
|
||||||
root->addMetaObjectTreeItem(meta->getObjID(), metaTreeItem);
|
root->addMetaObjectTreeItem(meta->getObjID(), metaTreeItem);
|
||||||
|
}
|
||||||
addInstance(obj, dataTreeItem);
|
addInstance(obj, dataTreeItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,8 @@ class QTimer;
|
|||||||
class UAVObjectTreeModel : public QAbstractItemModel {
|
class UAVObjectTreeModel : public QAbstractItemModel {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit UAVObjectTreeModel(QObject *parent = 0, bool categorize = false, bool useScientificNotation = false);
|
explicit UAVObjectTreeModel(QObject *parent, bool categorize, bool showMetadata, bool useScientificNotation);
|
||||||
|
explicit UAVObjectTreeModel(bool categorize, bool showMetadata, bool useScientificNotation);
|
||||||
~UAVObjectTreeModel();
|
~UAVObjectTreeModel();
|
||||||
|
|
||||||
QVariant data(const QModelIndex &index, int role) const;
|
QVariant data(const QModelIndex &index, int role) const;
|
||||||
@ -116,8 +117,9 @@ private:
|
|||||||
TreeItem *m_rootItem;
|
TreeItem *m_rootItem;
|
||||||
TopTreeItem *m_settingsTree;
|
TopTreeItem *m_settingsTree;
|
||||||
TopTreeItem *m_nonSettingsTree;
|
TopTreeItem *m_nonSettingsTree;
|
||||||
bool m_useScientificFloatNotation;
|
|
||||||
bool m_categorize;
|
bool m_categorize;
|
||||||
|
bool m_showMetadata;
|
||||||
|
bool m_useScientificFloatNotation;
|
||||||
int m_recentlyUpdatedTimeout;
|
int m_recentlyUpdatedTimeout;
|
||||||
QColor m_recentlyUpdatedColor;
|
QColor m_recentlyUpdatedColor;
|
||||||
QColor m_manuallyChangedColor;
|
QColor m_manuallyChangedColor;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user