15 changed files with 29 additions and 524 deletions
@ -1,126 +0,0 @@
@@ -1,126 +0,0 @@
|
||||
/*=====================================================================
|
||||
|
||||
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit |
||||
|
||||
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
|
||||
|
||||
This file is part of the PIXHAWK project |
||||
|
||||
PIXHAWK is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
PIXHAWK is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* @brief Implementation of class MainWindow |
||||
* @author Lorenz Meier <mavteam@student.ethz.ch> |
||||
* |
||||
*/ |
||||
|
||||
#include <QStringList> |
||||
|
||||
#include "ParamTreeItem.h" |
||||
|
||||
ParamTreeItem::ParamTreeItem(QString name, float value, ParamTreeItem* parent) |
||||
{ |
||||
parentItem = parent; |
||||
paramName = name; |
||||
paramValue = value; |
||||
// Initialize empty itemData
|
||||
itemData = QList<QVariant>(); |
||||
} |
||||
|
||||
ParamTreeItem::ParamTreeItem(const QList<QVariant> &data, ParamTreeItem *parent) |
||||
{ |
||||
parentItem = parent; |
||||
itemData = data; |
||||
} |
||||
|
||||
ParamTreeItem::~ParamTreeItem() |
||||
{ |
||||
qDeleteAll(childItems); |
||||
} |
||||
|
||||
void ParamTreeItem::appendChild(ParamTreeItem *item) |
||||
{ |
||||
childItems.append(item); |
||||
} |
||||
|
||||
ParamTreeItem *ParamTreeItem::child(int row) |
||||
{ |
||||
return childItems.value(row); |
||||
} |
||||
|
||||
int ParamTreeItem::childCount() const |
||||
{ |
||||
return childItems.count(); |
||||
} |
||||
|
||||
int ParamTreeItem::columnCount() const |
||||
{ |
||||
return 2;// itemData.count();
|
||||
} |
||||
|
||||
QString ParamTreeItem::getParamName() |
||||
{ |
||||
return paramName; |
||||
} |
||||
|
||||
float ParamTreeItem::getParamValue() |
||||
{ |
||||
return paramValue; |
||||
} |
||||
|
||||
QVariant ParamTreeItem::data(int column) const |
||||
{ |
||||
if (itemData.empty()) |
||||
{ |
||||
QVariant ret; |
||||
switch (column) |
||||
{ |
||||
case 0: |
||||
ret.setValue(paramName); |
||||
break; |
||||
case 1: |
||||
ret.setValue(paramValue); |
||||
break; |
||||
default: |
||||
ret.setValue(QString("")); |
||||
break; |
||||
} |
||||
return ret; |
||||
} |
||||
else |
||||
{ |
||||
return itemData.value(column, QVariant(QString(""))); |
||||
} |
||||
} |
||||
|
||||
ParamTreeItem *ParamTreeItem::parent() const |
||||
{ |
||||
return parentItem; |
||||
} |
||||
|
||||
const QList<ParamTreeItem*>* ParamTreeItem::children() const |
||||
{ |
||||
return &childItems; |
||||
} |
||||
|
||||
int ParamTreeItem::row() const |
||||
{ |
||||
if (parentItem) |
||||
return parentItem->childItems.indexOf(const_cast<ParamTreeItem*>(this)); |
||||
|
||||
return 0; |
||||
} |
@ -1,69 +0,0 @@
@@ -1,69 +0,0 @@
|
||||
/*=====================================================================
|
||||
|
||||
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit |
||||
|
||||
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
|
||||
|
||||
This file is part of the PIXHAWK project |
||||
|
||||
PIXHAWK is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
PIXHAWK is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* @brief Definition of class ParamTreeItem |
||||
* @author Lorenz Meier <mavteam@student.ethz.ch> |
||||
* |
||||
*/ |
||||
|
||||
#ifndef PARAMTREEITEM_H |
||||
#define PARAMTREEITEM_H |
||||
|
||||
#include <QList> |
||||
#include <QVariant> |
||||
|
||||
/**
|
||||
* @brief One item in the onboard parameter tree |
||||
*/ |
||||
class ParamTreeItem |
||||
{ |
||||
public: |
||||
ParamTreeItem(QString name, float value, ParamTreeItem* parent = 0); |
||||
ParamTreeItem(const QList<QVariant> &data, ParamTreeItem *parent = 0); |
||||
~ParamTreeItem(); |
||||
|
||||
void appendChild(ParamTreeItem *child); |
||||
QString getParamName(); |
||||
float getParamValue(); |
||||
|
||||
ParamTreeItem *child(int row); |
||||
int childCount() const; |
||||
int columnCount() const; |
||||
QVariant data(int column) const; |
||||
int row() const; |
||||
ParamTreeItem *parent() const; |
||||
const QList<ParamTreeItem*>* children() const; |
||||
|
||||
protected: |
||||
QString paramName; |
||||
float paramValue; |
||||
|
||||
private: |
||||
QList<ParamTreeItem*> childItems; |
||||
QList<QVariant> itemData; |
||||
ParamTreeItem *parentItem; |
||||
}; |
||||
|
||||
#endif // PARAMTREEITEM_H
|
@ -1,239 +0,0 @@
@@ -1,239 +0,0 @@
|
||||
/*=====================================================================
|
||||
|
||||
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit |
||||
|
||||
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
|
||||
|
||||
This file is part of the PIXHAWK project |
||||
|
||||
PIXHAWK is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
PIXHAWK is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* @brief Implementation of class ParamTreeModel |
||||
* @author Lorenz Meier <mavteam@student.ethz.ch> |
||||
* |
||||
*/ |
||||
|
||||
#include <QtGui> |
||||
|
||||
#include "ParamTreeItem.h" |
||||
#include "ParamTreeModel.h" |
||||
|
||||
ParamTreeModel::ParamTreeModel(QObject *parent) |
||||
: QAbstractItemModel(parent), |
||||
components() |
||||
{ |
||||
QList<QVariant> rootData; |
||||
rootData << tr("Parameter") << tr("Value"); |
||||
rootItem = new ParamTreeItem(rootData); |
||||
|
||||
//String data = "IMU\n ROLL_K_I\t1.255\n PITCH_K_P\t0.621\n PITCH_K_I\t2.5545\n";
|
||||
//setupModelData(data.split(QString("\n")), rootItem);
|
||||
} |
||||
|
||||
ParamTreeModel::ParamTreeModel(const QString &data, QObject *parent) |
||||
: QAbstractItemModel(parent), |
||||
components() |
||||
{ |
||||
QList<QVariant> rootData; |
||||
rootData << tr("Parameter") << tr("Value"); |
||||
rootItem = new ParamTreeItem(rootData); |
||||
setupModelData(data.split(QString("\n")), rootItem); |
||||
} |
||||
|
||||
ParamTreeModel::~ParamTreeModel() |
||||
{ |
||||
delete rootItem; |
||||
} |
||||
|
||||
int ParamTreeModel::columnCount(const QModelIndex &parent) const |
||||
{ |
||||
if (parent.isValid()) |
||||
return static_cast<ParamTreeItem*>(parent.internalPointer())->columnCount(); |
||||
else |
||||
return rootItem->columnCount(); |
||||
} |
||||
|
||||
QVariant ParamTreeModel::data(const QModelIndex &index, int role) const |
||||
{ |
||||
if (!index.isValid()) |
||||
return QVariant(); |
||||
|
||||
if (role != Qt::DisplayRole) |
||||
return QVariant(); |
||||
|
||||
ParamTreeItem *item = static_cast<ParamTreeItem*>(index.internalPointer()); |
||||
|
||||
return item->data(index.column()); |
||||
} |
||||
|
||||
bool ParamTreeModel::setData (const QModelIndex & index, const QVariant & value, int role) |
||||
{ |
||||
|
||||
} |
||||
|
||||
Qt::ItemFlags ParamTreeModel::flags(const QModelIndex &index) const |
||||
{ |
||||
if (!index.isValid()) |
||||
return 0; |
||||
|
||||
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; |
||||
} |
||||
|
||||
QVariant ParamTreeModel::headerData(int section, Qt::Orientation orientation, |
||||
int role) const |
||||
{ |
||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) |
||||
return rootItem->data(section); |
||||
|
||||
return QVariant(); |
||||
} |
||||
|
||||
QModelIndex ParamTreeModel::index(int row, int column, const QModelIndex &parent) |
||||
const |
||||
{ |
||||
if (!hasIndex(row, column, parent)) |
||||
return QModelIndex(); |
||||
|
||||
ParamTreeItem *parentItem; |
||||
|
||||
if (!parent.isValid()) |
||||
parentItem = rootItem; |
||||
else |
||||
parentItem = static_cast<ParamTreeItem*>(parent.internalPointer()); |
||||
|
||||
ParamTreeItem *childItem = parentItem->child(row); |
||||
if (childItem) |
||||
return createIndex(row, column, childItem); |
||||
else |
||||
return QModelIndex(); |
||||
} |
||||
|
||||
QModelIndex ParamTreeModel::parent(const QModelIndex &index) const |
||||
{ |
||||
if (!index.isValid()) |
||||
return QModelIndex(); |
||||
|
||||
ParamTreeItem *childItem = static_cast<ParamTreeItem*>(index.internalPointer()); |
||||
ParamTreeItem *parentItem = childItem->parent(); |
||||
|
||||
if (parentItem == rootItem) |
||||
return QModelIndex(); |
||||
|
||||
return createIndex(parentItem->row(), 0, parentItem); |
||||
} |
||||
|
||||
int ParamTreeModel::rowCount(const QModelIndex &parent) const |
||||
{ |
||||
ParamTreeItem *parentItem; |
||||
if (parent.column() > 0) |
||||
return 0; |
||||
|
||||
if (!parent.isValid()) |
||||
parentItem = rootItem; |
||||
else |
||||
parentItem = static_cast<ParamTreeItem*>(parent.internalPointer()); |
||||
|
||||
return parentItem->childCount(); |
||||
} |
||||
|
||||
ParamTreeItem* ParamTreeModel::getNodeForComponentId(int id) |
||||
{ |
||||
return components.value(id); |
||||
} |
||||
|
||||
void ParamTreeModel::appendComponent(int componentId, QString name) |
||||
{ |
||||
if (!components.contains(componentId)) |
||||
{ |
||||
ParamTreeItem* item = new ParamTreeItem(name + QString("(#") + QString::number(componentId) + QString(")"), 0, rootItem); |
||||
components.insert(componentId, item); |
||||
} |
||||
} |
||||
|
||||
void ParamTreeModel::appendComponent(int componentId) |
||||
{ |
||||
if (!components.contains(componentId)) |
||||
{ |
||||
ParamTreeItem* item = new ParamTreeItem(QString("Component #") + QString::number(componentId) + QString(""), 0, rootItem); |
||||
components.insert(componentId, item); |
||||
} |
||||
//emit dataChanged();
|
||||
} |
||||
|
||||
void ParamTreeModel::appendParam(int componentId, QString name, float value) |
||||
{ |
||||
// If component does not exist yet
|
||||
if (!components.contains(componentId)) |
||||
{ |
||||
appendComponent(componentId); |
||||
} |
||||
ParamTreeItem* comp = components.value(componentId); |
||||
// FIXME Children may be double here
|
||||
comp->appendChild(new ParamTreeItem(name, value, comp)); |
||||
qDebug() << __FILE__ << __LINE__ << "Added param" << name << value << "for component" << comp->getParamName(); |
||||
emit dataChanged(createIndex(0, 0, rootItem), createIndex(0, 0, rootItem)); |
||||
} |
||||
|
||||
void ParamTreeModel::setupModelData(const QStringList &lines, ParamTreeItem *parent) |
||||
{ |
||||
QList<ParamTreeItem*> parents; |
||||
QList<int> indentations; |
||||
parents << parent; |
||||
indentations << 0; |
||||
|
||||
int number = 0; |
||||
|
||||
while (number < lines.count()) { |
||||
int position = 0; |
||||
while (position < lines[number].length()) { |
||||
if (lines[number].mid(position, 1) != " ") |
||||
break; |
||||
position++; |
||||
} |
||||
|
||||
QString lineData = lines[number].mid(position).trimmed(); |
||||
|
||||
if (!lineData.isEmpty()) { |
||||
// Read the column data from the rest of the line.
|
||||
QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts); |
||||
QList<QVariant> columnData; |
||||
for (int column = 0; column < columnStrings.count(); ++column) |
||||
columnData << columnStrings[column]; |
||||
|
||||
if (position > indentations.last()) { |
||||
// The last child of the current parent is now the new parent
|
||||
// unless the current parent has no children.
|
||||
|
||||
if (parents.last()->childCount() > 0) { |
||||
parents << parents.last()->child(parents.last()->childCount()-1); |
||||
indentations << position; |
||||
} |
||||
} else { |
||||
while (position < indentations.last() && parents.count() > 0) { |
||||
parents.pop_back(); |
||||
indentations.pop_back(); |
||||
} |
||||
} |
||||
|
||||
// Append a new item to the current parent's list of children.
|
||||
parents.last()->appendChild(new ParamTreeItem(columnData, parents.last())); |
||||
} |
||||
|
||||
number++; |
||||
} |
||||
} |
@ -1,78 +0,0 @@
@@ -1,78 +0,0 @@
|
||||
/*=====================================================================
|
||||
|
||||
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit |
||||
|
||||
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
|
||||
|
||||
This file is part of the PIXHAWK project |
||||
|
||||
PIXHAWK is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
PIXHAWK is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
/**
|
||||
* @file |
||||
* @brief Definition of class ParamParamTreeModel |
||||
* @author Lorenz Meier <mavteam@student.ethz.ch> |
||||
* |
||||
*/ |
||||
|
||||
#ifndef PARAMTREEMODEL_H |
||||
#define PARAMTREEMODEL_H |
||||
|
||||
#include <QAbstractItemModel> |
||||
#include <QModelIndex> |
||||
#include <QVariant> |
||||
|
||||
class ParamTreeItem; |
||||
|
||||
class ParamTreeModel : public QAbstractItemModel |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
ParamTreeModel(QObject *parent = 0); |
||||
ParamTreeModel(const QString &data, QObject *parent = 0); |
||||
~ParamTreeModel(); |
||||
|
||||
QVariant data(const QModelIndex &index, int role) const; |
||||
bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ); |
||||
Qt::ItemFlags flags(const QModelIndex &index) const; |
||||
QVariant headerData(int section, Qt::Orientation orientation, |
||||
int role = Qt::DisplayRole) const; |
||||
QModelIndex index(int row, int column, |
||||
const QModelIndex &parent = QModelIndex()) const; |
||||
QModelIndex parent(const QModelIndex &index) const; |
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const; |
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const; |
||||
|
||||
public slots: |
||||
/** @brief Add a new parameter */ |
||||
void appendParam(int componentId, QString name, float value); |
||||
/** @brief Add a new component for this system */ |
||||
void appendComponent(int componentId, QString name); |
||||
/** @brief Add a new component for this system */ |
||||
void appendComponent(int componentId); |
||||
|
||||
protected: |
||||
ParamTreeItem* getNodeForComponentId(int id); |
||||
|
||||
QMap<int, ParamTreeItem*> components; |
||||
|
||||
private: |
||||
void setupModelData(const QStringList &lines, ParamTreeItem *parent); |
||||
|
||||
ParamTreeItem *rootItem; |
||||
}; |
||||
#endif // PARAMParamTreeModel_H
|
Loading…
Reference in new issue