00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef TARGET_MODELS_H
00025 #define TARGET_MODELS_H
00026
00027 #include <QAbstractTableModel>
00028 #include <QAbstractItemModel>
00029 #include <QVector>
00030 #include <QList>
00031 #include <QString>
00032 #include <QRegExp>
00033 #include "../compiler/compiler.h"
00034
00035
00036 namespace Aseba
00037 {
00040
00041 struct TargetDescription;
00042 class VariablesViewPlugin;
00043
00044 class TargetVariablesModel: public QAbstractItemModel
00045 {
00046 Q_OBJECT
00047
00048 public:
00049
00050 struct Variable
00051 {
00052 QString name;
00053 unsigned pos;
00054 VariablesDataVector value;
00055 };
00056
00057 public:
00058 TargetVariablesModel() { setSupportedDragActions(Qt::CopyAction); }
00059 virtual ~TargetVariablesModel();
00060
00061 int rowCount(const QModelIndex &parent = QModelIndex()) const;
00062 int columnCount(const QModelIndex &parent = QModelIndex()) const;
00063 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
00064 QModelIndex parent(const QModelIndex &index) const;
00065
00066 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
00067 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
00068 Qt::ItemFlags flags(const QModelIndex & index) const;
00069
00070 bool setData(const QModelIndex &index, const QVariant &value, int role);
00071
00072 QStringList mimeTypes () const;
00073 QMimeData * mimeData ( const QModelIndexList & indexes ) const;
00074
00075 const QList<Variable>& getVariables() { return variables; }
00076
00077 public slots:
00078 void updateVariablesStructure(const Compiler::VariablesMap *variablesMap);
00079 void setVariablesData(unsigned start, const VariablesDataVector &data);
00080 bool setVariableValues(const QString& name, const VariablesDataVector& values);
00081
00082 signals:
00084 void variableValuesChanged(unsigned index, const VariablesDataVector &values);
00085
00086 private:
00087 friend class VariablesViewPlugin;
00088 friend class LinearCameraViewPlugin;
00089
00090
00092 void unsubscribeViewPlugin(VariablesViewPlugin* plugin);
00094 bool subscribeToVariableOfInterest(VariablesViewPlugin* plugin, const QString& name);
00096 void unsubscribeToVariableOfInterest(VariablesViewPlugin* plugin, const QString& name);
00097
00098 private:
00099
00100 QList<Variable> variables;
00101
00102
00103 typedef QMap<VariablesViewPlugin*, QStringList> ViewPlugInToVariablesNameMap;
00104 ViewPlugInToVariablesNameMap viewPluginsMap;
00105 };
00106
00107 class TargetFunctionsModel: public QAbstractItemModel
00108 {
00109 Q_OBJECT
00110
00111 public:
00112 struct TreeItem;
00113
00114 public:
00115 TargetFunctionsModel(const TargetDescription *descriptionRead, QObject *parent = 0);
00116 ~TargetFunctionsModel();
00117
00118 int rowCount(const QModelIndex &parent = QModelIndex()) const;
00119 int columnCount(const QModelIndex &parent = QModelIndex()) const;
00120
00121 QModelIndex parent(const QModelIndex &index) const;
00122 QModelIndex index(int row, int column, const QModelIndex &parent) const;
00123
00124 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
00125 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
00126 Qt::ItemFlags flags(const QModelIndex & index) const;
00127
00128 QStringList mimeTypes () const;
00129 QMimeData * mimeData ( const QModelIndexList & indexes ) const;
00130
00131 public slots:
00132 void recreateTreeFromDescription(bool showHidden);
00133
00134 private:
00135 TreeItem *getItem(const QModelIndex &index) const;
00136 QString getToolTip(const TargetDescription::NativeFunction& function) const;
00137
00138 TreeItem* root;
00139 const TargetDescription *descriptionRead;
00140 QRegExp regExp;
00141 };
00142
00144 };
00145
00146 #endif