//Copyright (C) 2006 Dominic Letourneau (Dominic.Letourneau@USherbrooke.ca) 

#ifndef _QTNODE_H
#define _QTNODE_H

#include <QGraphicsItem>
#include <QList>
#include <QGraphicsTextItem>
#include <QGraphicsSceneMouseEvent>
#include <string>
#include <vector>
#include <map>

#include "UINode.h"

namespace FD
{
    
    class QtLink;
    class QtNetwork;
    class QtTerminal;
    class UITerminal;
    class UINode;
    
    class QtNode : public QObject, public QGraphicsRectItem
    {
        
        Q_OBJECT;
        
        public:
        
        QtNode(QtNetwork *graphWidget, std::string name = "");
        
        QtNode(QtNetwork *graphWidget, UINode *uiNode);   
        
        void addQtLink(QtLink *edge);
        void removeQtLink(QtLink *edge);
        QList<QtLink *> edges() const;
        
        enum { Type = UserType + 1 };
        int type() const { return Type; }
        
        
        QtTerminal* addTerminal(UITerminal *terminal);
        void removeTerminal(QtTerminal* terminal);
        
        QtNetwork* getQtNetwork() { return graph;}   
        
        //QtTerminal* getQtTerminal(UITerminal *terminal);   
        
        signals:
        
        void positionChanged(float x, float y);
        
        protected:
        
        QVariant itemChange(GraphicsItemChange change, const QVariant &value);
        void mousePressEvent(QGraphicsSceneMouseEvent *event);
        void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
        void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
        void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event);
        
        
        UINode *m_uiNode;
        QGraphicsTextItem *nameItem;
        QList<QtLink *> edgeList;
        QPointF newPos;
        QtNetwork *graph;
        QtNode* m_virtualQtNode;
        QtLink* m_virtualQtLink;
        bool m_linking;
        //std::vector<QtTerminal*> m_inputQtTerminals;
        //std::vector<QtTerminal*> m_outputQtTerminals;
        std::map<UITerminal*,QtTerminal*> m_inputTerminalsMap;
        std::map<UITerminal*,QtTerminal*> m_outputTerminalsMap;
        
        
    };
    
}//namespace FD
#endif


syntax highlighted by Code2HTML, v. 0.9.1