![]() |
TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
|
00001 /**************************************************************************** 00002 00003 Copyright (c) 2008 Deepak Chandran 00004 Contact: Deepak Chandran (dchandran1@gmail.com) 00005 See COPYRIGHT.TXT 00006 00007 This is one of the main classes in Tinkercell 00008 This file defines the ItemFamily, NodeFamily, and ConnectionFamily classes. 00009 Each item in Tinkercell has an associated family. 00010 00011 00012 ****************************************************************************/ 00013 00014 #ifndef TINKERCELL_FAMILY_H 00015 #define TINKERCELL_FAMILY_H 00016 00017 #include <QColor> 00018 #include <QPair> 00019 #include <QList> 00020 #include <QStringList> 00021 #include <QHash> 00022 #include <QUndoCommand> 00023 #include <QGraphicsItem> 00024 00025 #ifndef TINKERCELLCOREEXPORT 00026 #ifdef Q_WS_WIN 00027 # if defined(TC_EXPORTS) || defined(TinkerCellCore_EXPORTS) 00028 # define TINKERCELLCOREEXPORT __declspec(dllexport) 00029 # else 00030 # define TINKERCELLCOREEXPORT __declspec(dllimport) 00031 # endif 00032 #else 00033 # define TINKERCELLCOREEXPORT 00034 #endif 00035 #endif 00036 00037 namespace Tinkercell 00038 { 00039 class Tool; 00040 class TextGraphicsItem; 00041 class ItemHandle; 00042 class NodeHandle; 00043 class ConnectionHandle; 00044 class NodeGraphicsItem; 00045 class ArrowHeadItem; 00046 class ConnectionGraphicsItem; 00047 class NodeFamily; 00048 class ConnectionFamily; 00049 00053 class TINKERCELLCOREEXPORT Unit 00054 { 00055 public: 00056 QString property; //e.g. "distance" 00057 QString name; //e.g. m in "km" 00058 Unit(); 00059 Unit(const QString& property, const QString& name); 00060 bool operator == (const Unit&) const; 00061 }; 00062 00069 class TINKERCELLCOREEXPORT ItemFamily 00070 { 00071 public: 00073 QString description; 00075 QStringList synonyms; 00077 QStringList restrictions; 00079 QList<Unit> measurementUnitOptions; 00081 Unit measurementUnit; 00083 QHash<QString,qreal> numericalAttributes; 00085 QHash<QString,QString> textAttributes; 00087 QList<QGraphicsItem*> graphicsItems; 00089 QPixmap pixmap; 00091 virtual QString name() const; 00093 virtual void setName(const QString&); 00095 virtual bool isA(const QString& ) const; 00097 virtual bool isA(const ItemFamily*) const; 00099 virtual bool isParentOf(const QString& ) const; 00101 virtual bool isParentOf(const ItemFamily*) const; 00103 virtual ItemFamily * root() const; 00105 virtual bool isRelatedTo(const ItemFamily *) const; 00107 virtual ItemFamily* parent() const; 00111 virtual int depth() const; 00113 virtual QList<ItemFamily*> parents() const; 00115 virtual QList<ItemFamily*> children() const; 00119 virtual QList<ItemFamily*> allChildren() const; 00121 virtual ~ItemFamily(); 00124 ItemFamily(const QString& name = QString()); 00125 protected: 00127 int type; 00129 virtual bool isA(int ID) const; 00131 QString _name; 00133 int ID; 00135 static QStringList ALLNAMES; 00137 static QList<const ItemFamily*> ALLFAMILIES; 00139 static QHash<QString,int> NAMETOID; 00140 00141 friend class NodeFamily; 00142 friend class ConnectionFamily; 00143 }; 00144 00150 class TINKERCELLCOREEXPORT NodeFamily: public ItemFamily 00151 { 00153 static int TYPE; 00154 public: 00156 static NodeFamily * cast(ItemFamily*); 00158 static QList<NodeFamily*> cast(const QList<ItemFamily*>&); 00160 virtual ItemFamily* parent() const; 00162 virtual QList<ItemFamily*> parents() const; 00164 virtual QList<ItemFamily*> children() const; 00166 virtual void setParent(NodeFamily*); 00168 virtual ~NodeFamily(); 00171 NodeFamily(const QString& name = QString()); 00173 virtual bool isA(const QString& ) const; 00175 virtual bool isA(const ItemFamily*) const; 00176 protected: 00178 virtual bool isA(int) const; 00180 QList<NodeFamily*> parentFamilies; 00182 QList<NodeFamily*> childFamilies; 00183 00184 friend class ConnectionFamily; 00185 }; 00186 00192 class TINKERCELLCOREEXPORT ConnectionFamily: public ItemFamily 00193 { 00195 static int TYPE; 00196 public: 00198 static ConnectionFamily * cast(ItemFamily*); 00200 static QList<ConnectionFamily*> cast(const QList<ItemFamily*>&); 00201 00203 virtual ItemFamily* parent() const; 00205 virtual QList<ItemFamily*> parents() const; 00207 virtual QList<ItemFamily*> children() const; 00209 virtual void setParent(ConnectionFamily*); 00211 virtual ~ConnectionFamily(); 00213 ConnectionFamily(const QString& name = QString()); 00215 virtual bool isA(const QString& ) const; 00217 virtual bool isA(const ItemFamily*) const; 00218 00225 virtual bool addParticipant(const QString& role, const QString& family); 00229 virtual QString participantFamily(const QString& role) const; 00232 virtual QStringList participantRoles() const; 00235 virtual QStringList participantTypes() const; 00236 00241 virtual bool isValidSet(const QList<NodeHandle*>& nodes, bool checkFull=true); 00246 virtual QList<ItemFamily*> findValidChildFamilies(const QList<NodeHandle*>&, bool checkFull=true); 00250 virtual int numberOfIdenticalNodesFamilies(ConnectionFamily *) const; 00254 virtual QStringList synonymsForRole(const QString& role) const; 00257 protected: 00259 virtual bool isA(int) const; 00261 static bool checkRestrictions(const QString & restriction, const QList<NodeHandle*>&, bool checkFull=true); 00263 QList<ConnectionFamily*> parentFamilies; 00265 QList<ConnectionFamily*> childFamilies; 00267 QList< QPair<int,int> > nodeRoles; 00269 static QHash<QString,int> ROLEID; 00271 static QStringList ALLROLENAMES; 00272 }; 00273 00274 } 00275 00276 #endif 00277