orca-robotics INTRODUCTION Overview Download and Install Quick Start Documentation Publications REPOSITORY Interfaces Components Libraries Utilities Software Map DEVELOPER Tutorials Examples Dev Guide Dashboard Wiki login/pass: orca/orca PEOPLE Contributors Users Project Download Mailing lists
|
ocmmodel.h00001 /* 00002 * Orca-Robotics Project: Components for robotics 00003 * http://orca-robotics.sf.net/ 00004 * Copyright (c) 2004-2008 Alex Brooks, Alexei Makarenko, Tobias Kaupp 00005 * 00006 * This copy of Orca is licensed to you under the terms described in 00007 * the LICENSE file included in this distribution. 00008 * 00009 */ 00010 00011 #ifndef ORCA_OCM_MODEL_H 00012 #define ORCA_OCM_MODEL_H 00013 00014 #include <QAbstractItemModel> 00015 #include <QDateTime> 00016 #include <QStringList> 00017 #include <QIcon> 00018 00019 namespace orcaqcm 00020 { 00021 00022 class OcmIconProvider 00023 { 00024 public: 00025 OcmIconProvider(); 00026 enum IconType { Registry, Platform, Component, Provided, Required, Operation, Result }; 00027 QIcon icon(IconType type) const; 00028 00029 private: 00030 QIcon registry; 00031 QIcon platform; 00032 QIcon component; 00033 QIcon provided; 00034 QIcon required; 00035 QIcon operation; 00036 QIcon result; 00037 }; 00038 00045 class OcmModel : public QAbstractItemModel 00046 { 00047 Q_OBJECT 00048 00049 public: 00050 enum Roles { 00051 StatusIconRole = Qt::DecorationRole, 00052 TypeRole = Qt::UserRole + 1, 00053 ConnectionRole, 00054 SummaryRole, 00055 DetailRole 00056 }; 00057 00058 explicit OcmModel(QObject *parent = 0); 00059 00060 // from QAbstractItemModel 00061 virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; 00062 virtual QModelIndex parent(const QModelIndex &child) const; 00063 virtual int rowCount(const QModelIndex &parent) const; 00064 virtual int columnCount(const QModelIndex &parent) const; 00065 virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; 00066 //bool setData(const QModelIndex &index, const QVariant &value, int role); 00067 virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; 00068 virtual bool hasChildren(const QModelIndex &index) const; 00069 00070 // from QObject 00072 virtual void customEvent( QEvent* e ); 00073 00074 // OcmModel specific API 00075 00077 QModelIndex registryIndex( const QString& registry, bool create=false ); 00078 00081 QModelIndex platformIndex( const QString& registry, const QString &platform, bool create=false ); 00082 00085 QModelIndex componentIndex( const QString& registry, const QString& platform, 00086 const QString& component, bool create=false ); 00087 00090 QModelIndex interfaceIndex( const QString& registry, const QString& platform, 00091 const QString& component, const QString& interface, bool create=false ); 00092 00095 QModelIndex operationIndex( const QString& registry, const QString& platform, const QString& component, 00096 const QString& interface, const QString& operation, bool create=false ); 00097 00100 QModelIndex resultIndex( const QString& registry, const QString& platform, const QString& component, 00101 const QString& interface, const QString& operation, const QString& result, bool create=false ); 00102 00104 void setRegistry( const QString& registry, const QString& regAddress, bool connected ); 00105 00107 void setPlatform( const QString& registry, 00108 const QString &platform ); 00109 00111 void setComponent( const QString& registry, const QString& platform, 00112 const QString& component, const QString& compAddress, bool connected, int timeUp ); 00113 00115 void setInterface( const QString& registry, const QString& platform, const QString& component, 00116 const QString& interface, const bool isProvided, const QString& ids, bool isEnabled ); 00117 00119 void setOperation( const QString& registry, const QString& platform, const QString& component, 00120 const QString& interface, 00121 const QString& operation, const QString& signature ); 00122 00124 void setResult( const QString& registry, const QString& platform, const QString& component, 00125 const QString& interface, const QString& operation, 00126 const QString& result, const QString& text ); 00127 00131 int interfaceData( const QModelIndex& ind, 00132 QString& registry, QString& platform, QString& component, 00133 QString& interface, QString& id ); 00134 00138 int interfacesOnPlatform( const QModelIndex& ind, 00139 QStringList& registries, QStringList& platforms, QStringList& components, 00140 QStringList& interfaces, QStringList& ids ); 00141 00143 int interfacesOnComponent( const QModelIndex& ind, 00144 QStringList& registries, QStringList& platforms, QStringList& components, 00145 QStringList& interfaces, QStringList& ids ); 00146 00147 // OBSOLETE OcmModel specific API 00148 00149 void setPlatform( const QString& registry, const QString& regAddress, const QString &platform ) 00150 { setPlatformPrivate( registry, regAddress, platform ); }; 00151 00152 void setComponent( const QString& registry, const QString& regAddress, const QString& platform, 00153 const QString& component, const QString& compAddress, bool connected, int timeUp ) 00154 { setComponentPrivate( registry, regAddress, platform, component, compAddress, connected, timeUp ); }; 00155 00156 void setInterface( const QString& registry, const QString& regAddress, 00157 const QString& platform, const QString& component, 00158 const QString& interface, const bool isProvided, 00159 const QString& compAddress, const QString& ids, 00160 bool connected, int timeUp ) 00161 { setInterfacePrivate( registry, regAddress, platform, component, interface, 00162 isProvided, compAddress, ids, connected, timeUp ); }; 00163 00164 public slots: 00166 void clear(); 00167 00168 private: 00169 00170 enum NodeType 00171 { 00172 RegistryType, 00173 PlatformType, 00174 ComponentType, 00175 InterfaceType, 00176 OperationType, 00177 ResultType 00178 }; 00179 00180 enum InterfaceSubtype 00181 { 00182 ProvidedInterfaceSubtype, 00183 RequiredInterfaceSubtype 00184 }; 00185 00186 class Node 00187 { 00188 public: 00189 virtual ~Node() {}; 00190 virtual NodeType type()=0; 00191 }; 00192 00193 class RegistryNode; 00194 class PlatformNode; 00195 class ComponentNode; 00196 class InterfaceNode; 00197 class OperationNode; 00198 class ResultNode; 00199 00200 class ResultNode : public Node 00201 { 00202 public: 00203 ResultNode( const QString &n, OperationNode* o ) 00204 : name(n), operation(o) {}; 00205 // to be used in list search, name is sufficient 00206 bool operator==( const ResultNode& other ) const 00207 { 00208 return name==other.name; 00209 } 00210 QString name; 00211 OperationNode* operation; 00212 QString result; 00213 virtual NodeType type() { return ResultType; }; 00214 }; 00215 00216 class OperationNode : public Node 00217 { 00218 public: 00219 OperationNode( const QString &n, InterfaceNode* i ) 00220 : name(n), interface(i) {}; 00221 // to be used in list search, name is sufficient 00222 bool operator==( const OperationNode& other ) const 00223 { 00224 return name==other.name; 00225 } 00226 QString name; 00227 QString signature; 00228 InterfaceNode* interface; 00229 QList<ResultNode> results; 00230 virtual NodeType type() { return OperationType; }; 00231 }; 00232 00233 class InterfaceNode : public Node 00234 { 00235 public: 00236 InterfaceNode( const QString &n, ComponentNode* c ) 00237 : name(n), component(c) {}; 00238 // to be used in list search, name is sufficient 00239 bool operator==( const InterfaceNode& other ) const 00240 { 00241 return name==other.name; 00242 } 00243 QString name; 00244 ComponentNode* component; 00245 InterfaceSubtype subtype; 00246 // not very clean: only provided interfaces can have operations 00247 QList<OperationNode> operations; 00248 QString ids; 00249 bool isEnabled; 00250 virtual NodeType type() { return InterfaceType; }; 00251 }; 00252 00253 class ComponentNode : public Node 00254 { 00255 public: 00256 ComponentNode( const QString &n, PlatformNode* p, 00257 const QString &a="", bool connected=true, int t=0 ); 00258 // to be used in list search, name is sufficient 00259 bool operator==( const ComponentNode& other ) const 00260 { 00261 return name==other.name; 00262 } 00263 QString name; 00264 PlatformNode* platform; 00265 QList<InterfaceNode> interfaces; 00266 QString address; 00267 bool isEnabled; 00268 int daysUp; 00269 QTime timeUp; 00270 virtual NodeType type() { return ComponentType; }; 00271 }; 00272 00273 class PlatformNode : public Node 00274 { 00275 public: 00276 PlatformNode( const QString &n, RegistryNode* r ) 00277 : name(n), registry(r) {}; 00278 // to be used in list search, name is sufficient 00279 bool operator==( const PlatformNode& other ) const 00280 { 00281 return name==other.name; 00282 } 00283 QString name; 00284 RegistryNode* registry; 00285 QList<ComponentNode> components; 00286 bool isEnabled; 00287 virtual NodeType type() { return PlatformType; }; 00288 }; 00289 00290 class RegistryNode : public Node 00291 { 00292 public: 00293 RegistryNode( const QString &n, const QString &a="", bool connected=true ) 00294 : name(n), address(a), isEnabled(connected) {}; 00295 // to be used in list search, name is sufficient 00296 bool operator==( const RegistryNode& other ) const 00297 { 00298 return name==other.name; 00299 } 00300 QString name; 00301 QList<PlatformNode> platforms; 00302 QString address; 00303 bool isEnabled; 00304 virtual NodeType type() { return RegistryType; }; 00305 }; 00306 00307 // top level of data storage 00308 QList<RegistryNode> registries_; 00309 00310 QStringList headers_; 00311 00312 OcmIconProvider iconProvider_; 00313 00314 // OBSOLETE 00315 QModelIndex setPlatformPrivate( const QString& registry, const QString& regAddress, 00316 const QString &platform ); 00317 00318 QModelIndex setComponentPrivate( const QString& registry, const QString& regAddress, 00319 const QString& platform, const QString& component, 00320 const QString& compAddress, bool connected, int timeUp ); 00321 00322 QModelIndex setInterfacePrivate( const QString& registry, const QString& regAddress, 00323 const QString& platform, const QString& component, const QString& interface, 00324 const bool isProvided, const QString& compAddress, const QString& ids, 00325 bool connected, int timeUp ); 00326 00327 }; 00328 00329 } // namespace 00330 00331 #endif |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)