1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-21 11:54:15 +01:00

OP-642 Added a checkbox in the UAVOBrowser widget to select if the objects should be shown in a categorized manner or not.

It is now possible to switch between categorized and 'classic' view.
This commit is contained in:
Fredrik Arvidsson 2012-07-01 09:58:55 +02:00
parent 32abd2e32f
commit 069b5dda44
5 changed files with 38 additions and 20 deletions

View File

@ -202,6 +202,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="categorizeCheckbox">
<property name="toolTip">
<string>Select to sort objects in to categories.</string>
</property>
<property name="text">
<string>Categorize Objects</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<spacer name="horizontalSpacer_3"> <spacer name="horizontalSpacer_3">
<property name="orientation"> <property name="orientation">

View File

@ -54,6 +54,7 @@ UAVObjectBrowserWidget::UAVObjectBrowserWidget(QWidget *parent) : QWidget(parent
showMetaData(m_browser->metaCheckBox->isChecked()); showMetaData(m_browser->metaCheckBox->isChecked());
connect(m_browser->treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged(QModelIndex,QModelIndex))); 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->metaCheckBox, SIGNAL(toggled(bool)), this, SLOT(showMetaData(bool)));
connect(m_browser->categorizeCheckbox, SIGNAL(toggled(bool)), this, SLOT(categorize(bool)));
connect(m_browser->saveSDButton, SIGNAL(clicked()), this, SLOT(saveObject())); connect(m_browser->saveSDButton, SIGNAL(clicked()), this, SLOT(saveObject()));
connect(m_browser->readSDButton, SIGNAL(clicked()), this, SLOT(loadObject())); connect(m_browser->readSDButton, SIGNAL(clicked()), this, SLOT(loadObject()));
connect(m_browser->eraseSDButton, SIGNAL(clicked()), this, SLOT(eraseObject())); connect(m_browser->eraseSDButton, SIGNAL(clicked()), this, SLOT(eraseObject()));
@ -69,16 +70,6 @@ UAVObjectBrowserWidget::~UAVObjectBrowserWidget()
void UAVObjectBrowserWidget::showMetaData(bool show) void UAVObjectBrowserWidget::showMetaData(bool show)
{ {
/*
int topRowCount = m_model->rowCount(QModelIndex());
for (int i = 0; i < topRowCount; ++i) {
QModelIndex index = m_model->index(i, 0, QModelIndex());
int subRowCount = m_model->rowCount(index);
for (int j = 0; j < subRowCount; ++j) {
m_browser->treeView->setRowHidden(0, index.child(j,0), !show);
}
}
*/
QList<QModelIndex> metaIndexes = m_model->getMetaDataIndexes(); QList<QModelIndex> metaIndexes = m_model->getMetaDataIndexes();
foreach(QModelIndex index , metaIndexes) foreach(QModelIndex index , metaIndexes)
{ {
@ -86,6 +77,20 @@ void UAVObjectBrowserWidget::showMetaData(bool show)
} }
} }
void UAVObjectBrowserWidget::categorize(bool categorize)
{
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
Q_ASSERT(pm);
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
Q_ASSERT(objManager);
UAVObjectTreeModel* tmpModel = m_model;
m_model = new UAVObjectTreeModel(0, categorize);
m_browser->treeView->setModel(m_model);
delete tmpModel;
}
void UAVObjectBrowserWidget::sendUpdate() void UAVObjectBrowserWidget::sendUpdate()
{ {
ObjectTreeItem *objItem = findCurrentObjectTreeItem(); ObjectTreeItem *objItem = findCurrentObjectTreeItem();

View File

@ -53,6 +53,7 @@ public:
public slots: public slots:
void showMetaData(bool show); void showMetaData(bool show);
void categorize(bool categorize);
private slots: private slots:
void sendUpdate(); void sendUpdate();

View File

@ -38,7 +38,7 @@
#include <QtCore/QSignalMapper> #include <QtCore/QSignalMapper>
#include <QtCore/QDebug> #include <QtCore/QDebug>
UAVObjectTreeModel::UAVObjectTreeModel(QObject *parent) : UAVObjectTreeModel::UAVObjectTreeModel(QObject *parent, bool categorize) :
QAbstractItemModel(parent), QAbstractItemModel(parent),
m_recentlyUpdatedTimeout(500), // ms m_recentlyUpdatedTimeout(500), // ms
m_recentlyUpdatedColor(QColor(255, 230, 230)), m_recentlyUpdatedColor(QColor(255, 230, 230)),
@ -53,7 +53,7 @@ UAVObjectTreeModel::UAVObjectTreeModel(QObject *parent) :
connect(objManager, SIGNAL(newInstance(UAVObject*)), this, SLOT(newObject(UAVObject*))); connect(objManager, SIGNAL(newInstance(UAVObject*)), this, SLOT(newObject(UAVObject*)));
TreeItem::setHighlightTime(m_recentlyUpdatedTimeout); TreeItem::setHighlightTime(m_recentlyUpdatedTimeout);
setupModelData(objManager); setupModelData(objManager, categorize);
} }
UAVObjectTreeModel::~UAVObjectTreeModel() UAVObjectTreeModel::~UAVObjectTreeModel()
@ -62,7 +62,7 @@ UAVObjectTreeModel::~UAVObjectTreeModel()
delete m_rootItem; delete m_rootItem;
} }
void UAVObjectTreeModel::setupModelData(UAVObjectManager *objManager) void UAVObjectTreeModel::setupModelData(UAVObjectManager *objManager, bool categorize)
{ {
// root // root
QList<QVariant> rootData; QList<QVariant> rootData;
@ -82,7 +82,7 @@ void UAVObjectTreeModel::setupModelData(UAVObjectManager *objManager)
QList< QList<UAVDataObject*> > objList = objManager->getDataObjects(); QList< QList<UAVDataObject*> > objList = objManager->getDataObjects();
foreach (QList<UAVDataObject*> list, objList) { foreach (QList<UAVDataObject*> list, objList) {
foreach (UAVDataObject* obj, list) { foreach (UAVDataObject* obj, list) {
addDataObject(obj); addDataObject(obj, categorize);
} }
} }
} }
@ -95,13 +95,13 @@ void UAVObjectTreeModel::newObject(UAVObject *obj)
} }
} }
void UAVObjectTreeModel::addDataObject(UAVDataObject *obj) void UAVObjectTreeModel::addDataObject(UAVDataObject *obj, bool categorize)
{ {
TopTreeItem *root = obj->isSettings() ? m_settingsTree : m_nonSettingsTree; TopTreeItem *root = obj->isSettings() ? m_settingsTree : m_nonSettingsTree;
TreeItem* parent = root; TreeItem* parent = root;
if(obj->getCategory() != 0 && !obj->getCategory().isEmpty()) { if(categorize && obj->getCategory() != 0 && !obj->getCategory().isEmpty()) {
QStringList categoryPath = obj->getCategory().split('/'); QStringList categoryPath = obj->getCategory().split('/');
parent = createCategoryItems(categoryPath, root); parent = createCategoryItems(categoryPath, root);
} }

View File

@ -49,7 +49,7 @@ class UAVObjectTreeModel : public QAbstractItemModel
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit UAVObjectTreeModel(QObject *parent = 0); explicit UAVObjectTreeModel(QObject *parent = 0, bool categorize=true);
~UAVObjectTreeModel(); ~UAVObjectTreeModel();
QVariant data(const QModelIndex &index, int role) const; QVariant data(const QModelIndex &index, int role) const;
@ -83,18 +83,17 @@ private slots:
void updateHighlight(TreeItem*); void updateHighlight(TreeItem*);
private: private:
void setupModelData(UAVObjectManager *objManager, bool categorize = true);
QModelIndex index(TreeItem *item); QModelIndex index(TreeItem *item);
void addDataObject(UAVDataObject *obj); void addDataObject(UAVDataObject *obj, bool categorize = true);
MetaObjectTreeItem *addMetaObject(UAVMetaObject *obj, TreeItem *parent); MetaObjectTreeItem *addMetaObject(UAVMetaObject *obj, TreeItem *parent);
void addArrayField(UAVObjectField *field, TreeItem *parent); void addArrayField(UAVObjectField *field, TreeItem *parent);
void addSingleField(int index, UAVObjectField *field, TreeItem *parent); void addSingleField(int index, UAVObjectField *field, TreeItem *parent);
void addInstance(UAVObject *obj, TreeItem *parent); void addInstance(UAVObject *obj, TreeItem *parent);
TreeItem *createCategoryItems(QStringList categoryPath, TreeItem *root); TreeItem *createCategoryItems(QStringList categoryPath, TreeItem *root);
QString updateMode(quint8 updateMode); QString updateMode(quint8 updateMode);
void setupModelData(UAVObjectManager *objManager);
ObjectTreeItem *findObjectTreeItem(UAVObject *obj); ObjectTreeItem *findObjectTreeItem(UAVObject *obj);
DataObjectTreeItem *findDataObjectTreeItem(UAVDataObject *obj); DataObjectTreeItem *findDataObjectTreeItem(UAVDataObject *obj);
MetaObjectTreeItem *findMetaObjectTreeItem(UAVMetaObject *obj); MetaObjectTreeItem *findMetaObjectTreeItem(UAVMetaObject *obj);