TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
ItemHandle.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 An Item Handle represents a single item in a network. The Handle can either
00008 be a Node or a Connection. Each Connection can be connected to multiple
00009 Nodes, with a relationship integer describing the role of the Node. -1 and 1 are
00010 reserved roles, indicating "in" and "out" nodes. 
00011 
00012 ****************************************************************************/
00013 
00014 #ifndef TINKERCELL_HANDLER_H
00015 #define TINKERCELL_HANDLER_H
00016 
00017 #include <QList>
00018 #include <QQueue>
00019 #include <QStack>
00020 #include <QHash>
00021 #include <QPair>
00022 #include <QUndoCommand>
00023 #include <QGraphicsItem>
00024 
00025 #include "DataTable.h"
00026 #include "ItemFamily.h"
00027 
00028 namespace Tinkercell
00029 {
00030         class Tool;
00031         class ItemHandle;
00032         class NodeHandle;
00033         class NetworkHandle;
00034         class ConnectionHandle;
00035         class NodeGraphicsItem;
00036         class ConnectionGraphicsItem;
00037         
00042         TINKERCELLCOREEXPORT QString RemoveDisallowedCharactersFromName(const QString&);
00043 
00050         class TINKERCELLCOREEXPORT ItemData
00051         {
00052                 friend class ItemHandle;
00053         private:
00055                 QHash<QString,NumericalDataTable > numericalData;
00057                 QHash<QString,TextDataTable > textData;
00059                 ItemData();
00061                 ItemData(const ItemData&);
00063                 virtual ItemData& operator = (const ItemData&);
00064         };
00065 
00083         class TINKERCELLCOREEXPORT ItemHandle: public QObject
00084         {
00085                 Q_OBJECT
00086         
00087         protected:
00090                 ItemData* data;
00091 
00092         public:
00095                 ItemHandle(const QString& name = QString());
00098                 ItemHandle(const ItemHandle&);
00099 
00101                 QString name;
00103                 QList<QGraphicsItem*> graphicsItems;
00105                 QList<Tool*> tools;
00106                 
00108                 NetworkHandle * network;
00110                 ItemHandle * parent;
00112                 QList<ItemHandle*> children;
00114                 int type;
00115 
00117                 virtual ItemHandle& operator = (const ItemHandle&);
00119                 virtual ~ItemHandle();
00121                 virtual ItemHandle * clone() const;
00123                 virtual ItemFamily* family() const;
00125                 virtual void setFamily(ItemFamily*, bool useCommand=true);
00128                 virtual bool isA(const ItemFamily* family) const;
00131                 virtual bool isA(const QString& family) const;
00134                 virtual QString fullName(const QString& sep = QString(".")) const;
00139                 virtual void setParent(ItemHandle * parent, bool useCommand=true);
00141                 virtual void rename(const QString&);
00143                 virtual void changeData(const QString& hashstring, const NumericalDataTable* newdata);
00145                 virtual void changeData(const QString& hashstring, const TextDataTable* newdata);               
00148                 virtual ItemHandle* root(const QString& family=QString("")) const;
00151                 virtual ItemHandle* parentOfFamily(const QString& family) const;
00155                 virtual bool isChildOf(ItemHandle * handle) const;
00159                 virtual int depth() const;
00162                 virtual QList<QGraphicsItem*> allGraphicsItems() const;
00165                 virtual QList<ItemHandle*> allChildren() const;
00168                 QStringList numericalDataNames() const;
00171                 QStringList textDataNames() const;
00175                 bool hasNumericalData(const QString& name) const;
00179                 bool hasTextData(const QString& name) const;
00185                 qreal numericalData(const QString& name, int row=0, int column=0) const;
00191                 qreal numericalData(const QString& name, const QString& row, const QString& column=QString()) const;
00197                 QString textData(const QString& name, int row=0, int column=0) const;
00203                 QString textData(const QString& name, const QString& row, const QString& column=QString()) const;
00209                 qreal& numericalData(const QString& name, int row=0, int column=0);
00215                 qreal& numericalData(const QString& name, const QString& row, const QString& column=QString());
00221                 QString& textData(const QString& name, int row=0, int column=0);
00227                 QString& textData(const QString& name, const QString& row, const QString& column=QString());
00231                 NumericalDataTable& numericalDataTable(const QString& name);
00235                 TextDataTable& textDataTable(const QString& name);
00238                 virtual void copyDataTablesFrom(ItemHandle*);
00239         };
00240 
00247         class TINKERCELLCOREEXPORT NodeHandle : public ItemHandle
00248         {
00249                 Q_OBJECT
00250 
00251         public:
00253                 static const int TYPE = 1;
00257                 virtual QList<ConnectionHandle*> connections() const;
00259                 NodeFamily* nodeFamily;
00261                 NodeHandle(const QString& name = QString(), NodeFamily * nodeFamily = 0);
00263                 NodeHandle(const NodeHandle & copy);
00265                 virtual NodeHandle& operator = (const NodeHandle&);
00270                 NodeHandle(NodeFamily * nodeFamily, NodeGraphicsItem * item);
00275                 NodeHandle(NodeFamily * nodeFamily, const QString& name = QString());
00278                 virtual ItemHandle * clone() const;
00281                 virtual ItemFamily* family() const;
00284                 virtual void setFamily(ItemFamily *, bool useCommand=true);
00288                 static NodeHandle* cast(ItemHandle *);
00292                 static QList<NodeHandle*> cast(const QList<ItemHandle*>&);
00293         };
00294 
00302         class TINKERCELLCOREEXPORT ConnectionHandle : public ItemHandle
00303         {
00304         public:
00306                 static const int TYPE = 2;
00309                 virtual QList<NodeHandle*> nodes(int role = 0) const;
00314                 virtual void addNode(NodeHandle*, int role=0);
00317                 virtual void clearNodes();
00324                 virtual QList<NodeHandle*> nodesIn() const;
00331                 virtual QList<NodeHandle*> nodesOut() const;
00333                 ConnectionFamily* connectionFamily;
00335                 ConnectionHandle(const QString& name = QString(), ConnectionFamily * family = 0);
00340                 ConnectionHandle(ConnectionFamily * family, const QString& name = QString());
00342                 ConnectionHandle(const ConnectionHandle&);
00344                 virtual ConnectionHandle& operator = (const ConnectionHandle&);
00348                 ConnectionHandle(ConnectionFamily * family, ConnectionGraphicsItem * item);
00351                 virtual void setFamily(ItemFamily * family, bool useCommand=true);
00354                 virtual ItemHandle * clone() const;
00357                 virtual ItemFamily* family() const;
00360                 virtual QList<ItemFamily*> findValidChildFamilies() const;
00364                 static ConnectionHandle * cast(ItemHandle *);
00368                 static QList<ConnectionHandle*> cast(const QList<ItemHandle*>&);
00373                 QList< QPair<NodeHandle*, int> > nodesWithRoles;
00374         };
00375 
00381         TINKERCELLCOREEXPORT ItemHandle * getHandle(QGraphicsItem*);
00388         TINKERCELLCOREEXPORT QList<ItemHandle*> getHandle(const QList<QGraphicsItem*>&, bool includeNull=true);
00394         TINKERCELLCOREEXPORT void setHandle(QGraphicsItem*, ItemHandle*);
00395 }
00396 
00397 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines