![]() |
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 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