ELVE  1
ELVE Logic Visualization Explorer
/home/travis/build/stdgregwar/elve/Core/interfaces/NodeLook.cpp
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 }
 All Classes Functions