TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
ItemFamily.h
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines