00001 #include "NodeLook.h" 00002 00003 #include <QGraphicsSceneMouseEvent> 00004 #include <QDebug> 00005 #include <QPainter> 00006 00007 #include "Point.h" 00008 namespace Elve { 00009 NodeLook::NodeLook(const Node &n) : mNode(n), mDraged(false) 00010 { 00011 00012 } 00013 00014 void NodeLook::onStateChange(const QVector2D& p, const QVector2D& speed) 00015 { 00016 if(mDraged) { 00017 QPointF np = pos(); 00018 setState({np.x(),np.y()},{0,0}); 00019 } else { 00020 setPos(p.toPointF()); 00021 } 00022 } 00023 00024 void NodeLook::mousePressEvent(QGraphicsSceneMouseEvent *event) 00025 { 00026 if(event->button() == Qt::MouseButton::LeftButton) { 00027 mDraged = true; 00028 mOffset = pos() - event->scenePos(); 00029 event->accept(); 00030 } 00031 } 00032 00033 void NodeLook::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 00034 { 00035 if(event->button() == Qt::MouseButton::LeftButton) { 00036 mDraged = false; 00037 QPointF delta = event->scenePos() - event->lastScenePos(); 00038 QPointF rpos = event->scenePos(); 00039 setState({rpos.x(),rpos.y()}, 00040 {delta.x(),delta.y()}); 00041 bool pinned = point()->pinned(); 00042 00043 if(event->modifiers().testFlag(Qt::ControlModifier)) { 00044 pinned ? point()->unpin() : point()->pin(); 00045 } else if(pinned) { 00046 point()->pin(); 00047 } 00048 event->accept(); 00049 } 00050 } 00051 00052 void NodeLook::color(const QColor& color) { 00053 mSelectionColor = color; 00054 color.isValid() ? onColorChange(color) : onColorReset(); 00055 } 00056 00057 const QColor& NodeLook::color() const { 00058 return mSelectionColor; 00059 } 00060 00061 void NodeLook::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 00062 { 00063 if(mDraged) { 00064 setState({event->scenePos().x()+mOffset.x(),event->scenePos().y()+mOffset.y()},{0,0}); 00065 setPos(event->scenePos()+mOffset); 00066 event->accept(); 00067 } 00068 } 00069 00070 QPointF NodeLook::inputPos(int index) const { 00071 return pos(); 00072 } 00073 00074 QPointF NodeLook::outputPos(int index) const { 00075 return pos(); 00076 } 00077 00078 const Node &NodeLook::node() const { 00079 return mNode; 00080 } 00081 }