15 changed files with 29 additions and 524 deletions
@ -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 @@ |
|||||||
/*=====================================================================
|
|
||||||
|
|
||||||
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 @@ |
|||||||
/*=====================================================================
|
|
||||||
|
|
||||||
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 @@ |
|||||||
/*=====================================================================
|
|
||||||
|
|
||||||
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