diff --git a/edge.cpp b/edge.cpp
index e602999..4b8535e 100644
--- a/edge.cpp
+++ b/edge.cpp
@@ -32,7 +32,10 @@ Node *Edge::destNode() const
return m_destNode;
}
-/// @note This is brute force. Isn't there a simple fv for this?
+/** @note This is brute force. Isn't there a simple fv for this?
+ * The precision is not the best either
+ */
+
QPointF firstNotContainedPoint(const QLineF &line,
const QRectF &rect,
bool reverse = false)
diff --git a/graphwidget.cpp b/graphwidget.cpp
index 6f65cf7..985f15e 100644
--- a/graphwidget.cpp
+++ b/graphwidget.cpp
@@ -8,7 +8,6 @@
GraphWidget::GraphWidget(QWidget *parent) :
QGraphicsView(parent),
- m_activeNode(0),
m_showingNodeNumbers(false)
{
qDebug() << __PRETTY_FUNCTION__;
@@ -59,14 +58,58 @@ GraphWidget::GraphWidget(QWidget *parent) :
node6->setPos(-10, 100);
m_nodeList.append(node6);
+ Node *node7 = new Node(this);
+ node7->setHtml(QString("node
important
shit"));
+ m_scene->addItem(node7);
+ node7->setPos(-200, 50);
+ m_nodeList.append(node7);
+
+ Node *node8 = new Node(this);
+ node8->setHtml(QString("more than\none lins"));
+ m_scene->addItem(node8);
+ node8->setPos(50, -80);
+ m_nodeList.append(node8);
+
+ Node *node9 = new Node(this);
+ node9->setHtml(QString("iam a bald and italian guy"));
+ m_scene->addItem(node9);
+ node9->setPos(50, 40);
+ m_nodeList.append(node9);
+
+ Node *node10 = new Node(this);
+ node10->setHtml(QString("no joke"));
+ m_scene->addItem(node10);
+ node10->setPos(-160, -10);
+ m_nodeList.append(node10);
+
+ Node *node11 = new Node(this);
+ node11->setHtml(QString("salalal"));
+ m_scene->addItem(node11);
+ node11->setPos(-120, -120);
+ m_nodeList.append(node11);
+
+ Node *node12 = new Node(this);
+ node12->setHtml(QString("lalalala"));
+ m_scene->addItem(node12);
+ node12->setPos(130, -10);
+ m_nodeList.append(node12);;
+
m_scene->addItem(new Edge(node1, node2));
m_scene->addItem(new Edge(node1, node3));
m_scene->addItem(new Edge(node3, node4));
m_scene->addItem(new Edge(node1, node5));
m_scene->addItem(new Edge(node5, node6));
+ m_scene->addItem(new Edge(node4, node11));
+ m_scene->addItem(new Edge(node2, node12));
+ m_scene->addItem(new Edge(node3, node10));
+ m_scene->addItem(new Edge(node10, node7));
+ m_scene->addItem(new Edge(node5, node7));
+ m_scene->addItem(new Edge(node2, node8));
+ m_scene->addItem(new Edge(node2, node9));
+
m_activeNode = m_nodeList.first();
- m_activeNode->setActive(true);
+ m_activeNode->setActive();
}
QGraphicsScene *GraphWidget::getScene()
@@ -77,7 +120,7 @@ QGraphicsScene *GraphWidget::getScene()
void GraphWidget::keyPressEvent(QKeyEvent *event)
{
qDebug() << __PRETTY_FUNCTION__;
-// qDebug() << event->key();
+ qDebug() << event->key();
switch (event->key()) {
case Qt::Key_Up:
@@ -99,12 +142,15 @@ void GraphWidget::keyPressEvent(QKeyEvent *event)
scaleView(1 / qreal(1.2));
break;
case Qt::Key_F:
- { // need brackets because of local variable
m_showingNodeNumbers = !m_showingNodeNumbers;
- int i =0;
- for (QList::const_iterator it = m_nodeList.begin(); it != m_nodeList.end(); it++, i++)
- dynamic_cast(*it)->showNumber(i,m_showingNodeNumbers);
- }
+ if (m_showingNodeNumbers)
+ m_followNumber.clear();
+
+ showingAllNodeNumbers(m_showingNodeNumbers);
+ break;
+
+ case Qt::Key_Insert:
+ insertNode();
break;
case Qt::Key_0:
@@ -117,11 +163,44 @@ void GraphWidget::keyPressEvent(QKeyEvent *event)
case Qt::Key_7:
case Qt::Key_8:
case Qt::Key_9:
+ if (!m_showingNodeNumbers)
+ break;
+
+ m_followNumber.append(QString::number(event->key()-48));
+ showingAllNodeNumbers(false);
+ showingNodeNumbersBeginWithNumber(m_followNumber.toInt(), true);
+
+ break;
- m_activeNode->setActive(false);
- m_activeNode = m_nodeList[3];
- m_activeNode->setActive(true);
+ case Qt::Key_Backspace:
+ if (!m_showingNodeNumbers)
+ break;
+ if (!m_followNumber.isEmpty())
+ {
+ m_followNumber.remove(m_followNumber.length()-1,1);
+ if (m_followNumber.isEmpty())
+ {
+ showingAllNodeNumbers(true);
+ }
+ else
+ {
+ showingAllNodeNumbers(false);
+ showingNodeNumbersBeginWithNumber(m_followNumber.toInt(), true);
+ }
+ }
+ break;
+
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ if (m_followNode)
+ {
+ showingAllNodeNumbers(false);
+ m_activeNode->setActive(false);
+ m_activeNode = m_followNode;
+ m_activeNode->setActive();
+ m_showingNodeNumbers = false;
+ }
break;
default:
@@ -158,7 +237,6 @@ void GraphWidget::scaleView(qreal scaleFactor)
scale(scaleFactor, scaleFactor);
}
-/// @note this == 0? how is it possible?
void GraphWidget::setActiveNode(Node *node)
{
qDebug() << __PRETTY_FUNCTION__;
@@ -167,5 +245,59 @@ void GraphWidget::setActiveNode(Node *node)
m_activeNode->setActive(false);
m_activeNode = node;
- m_activeNode->setActive(true);
+ m_activeNode->setActive();
+}
+
+void GraphWidget::insertNode()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+void GraphWidget::showingAllNodeNumbers(const bool &show)
+{
+ int i =0;
+ for (QList::const_iterator it = m_nodeList.begin(); it != m_nodeList.end(); it++, i++)
+ dynamic_cast(*it)->showNumber(i,show);
+}
+
+void GraphWidget::showingNodeNumbersBeginWithNumber(const int &number, const bool &show)
+{
+ int i(0);
+ int hit(0);
+ for (QList::const_iterator it = m_nodeList.begin(); it != m_nodeList.end(); it++, i++)
+ {
+ if (i == number)
+ {
+ hit++;
+ dynamic_cast(*it)->showNumber(i,show,true);
+ m_followNode = dynamic_cast(*it);
+ continue;
+ }
+ if (numberStartsWithNumber(i, number))
+ {
+ hit++;
+ dynamic_cast(*it)->showNumber(i,show);
+ }
+ }
+ if (hit==1)
+ {
+ qDebug() << "set active";
+ showingAllNodeNumbers(false);
+ m_activeNode->setActive(false);
+ m_activeNode = m_followNode;
+ m_activeNode->setActive();
+ m_showingNodeNumbers = false;
+ }
+
+ /// @bug handle this case
+// else if (hit == 0)
+// {
+
+
+// }
+}
+
+bool GraphWidget::numberStartsWithNumber(const int &number, const int &prefix)
+{
+ return (QString::number(number)).startsWith(QString::number(prefix));
}
diff --git a/graphwidget.h b/graphwidget.h
index f9cb66e..b420aed 100644
--- a/graphwidget.h
+++ b/graphwidget.h
@@ -17,6 +17,7 @@ public:
GraphWidget(QWidget *parent = 0);
QGraphicsScene *getScene();
void setActiveNode(Node *node);
+ void insertNode();
protected:
@@ -28,11 +29,16 @@ protected:
private:
+ void showingAllNodeNumbers(const bool &show = true);
+ void showingNodeNumbersBeginWithNumber(const int &number, const bool &show = true);
+ bool numberStartsWithNumber(const int &number, const int &prefix);
+
QList m_nodeList;
Node *m_activeNode;
QGraphicsScene *m_scene;
bool m_showingNodeNumbers;
-
+ QString m_followNumber;
+ Node *m_followNode;
};
diff --git a/mainwindow.ui b/mainwindow.ui
index 4485505..029f7d3 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -55,6 +55,9 @@
+
+ false
+
&New
@@ -63,6 +66,9 @@
+
+ false
+
&Open
@@ -71,6 +77,9 @@
+
+ false
+
&Save
@@ -92,6 +101,9 @@
+
+ false
+
&Close
diff --git a/node.cpp b/node.cpp
index 779e00a..a121c27 100644
--- a/node.cpp
+++ b/node.cpp
@@ -8,8 +8,9 @@
Node::Node(GraphWidget *parent) :
m_graph(parent),
m_isActive(false),
- m_activeEdge(0),
- m_number(-1)
+// m_activeEdge(0),
+ m_number(-1),
+ m_numberIsSpecial(false)
{
qDebug() << __PRETTY_FUNCTION__;
@@ -72,7 +73,13 @@ QVariant Node::itemChange(GraphicsItemChange change, const QVariant &value)
void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *w)
{
- qDebug() << __PRETTY_FUNCTION__;
+// qDebug() << __PRETTY_FUNCTION__;
+
+ if (m_number != -1)
+ {
+ painter->setBackground(m_numberIsSpecial ? Qt::green : Qt::yellow);
+ painter->setBackgroundMode(Qt::OpaqueMode);
+ }
QGraphicsTextItem::paint(painter, option, w);
@@ -82,12 +89,10 @@ void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWid
boundingRect().bottomRight().toPoint() -
QPoint(1,1)));
- qDebug() << m_number;
-
if (m_number != -1)
{
- painter->setPen(Qt::yellow);
- painter->setBackground(Qt::black);
+ painter->setPen(Qt::white);
+ painter->setBackground(Qt::red);
painter->setBackgroundMode(Qt::OpaqueMode);
painter->drawText(boundingRect().topLeft()+QPointF(0,11), QString("%1").arg(m_number));
}
@@ -102,18 +107,28 @@ void Node::setActive(const bool &active)
}
+/// @note who shall set active: press or release?
void Node::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << __PRETTY_FUNCTION__;
+ m_graph->setActiveNode(this);
+
QGraphicsItem::mousePressEvent(event);
}
-void Node::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void Node::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << __PRETTY_FUNCTION__;
- m_graph->setActiveNode(this);
+ m_graph->insertNode();
+
+ QGraphicsItem::mouseDoubleClickEvent(event);
+}
+
+void Node::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ qDebug() << __PRETTY_FUNCTION__;
QGraphicsItem::mouseReleaseEvent(event);
}
@@ -125,10 +140,11 @@ void Node::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
QGraphicsItem::mouseMoveEvent(event);
}
-void Node::showNumber(const int &number, const bool& show)
+void Node::showNumber(const int &number, const bool& show, const bool &numberIsSpecial)
{
- qDebug() << __PRETTY_FUNCTION__;
+// qDebug() << __PRETTY_FUNCTION__;
m_number = show ? number : -1;
+ m_numberIsSpecial = numberIsSpecial;
update();
}
diff --git a/node.h b/node.h
index 113cfe2..6068fad 100644
--- a/node.h
+++ b/node.h
@@ -16,8 +16,8 @@ public:
void addEdge(Edge *edge);
// QList edges() const;
- void setActive(const bool &active);
- void showNumber(const int &number, const bool& show);
+ void setActive(const bool &active = true);
+ void showNumber(const int &number, const bool& show = true, const bool &numberIsSpecial = false);
protected:
@@ -25,6 +25,7 @@ protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
@@ -33,8 +34,9 @@ private:
QList m_edgeList;
GraphWidget *m_graph;
bool m_isActive;
- Edge *m_activeEdge;
+// Edge *m_activeEdge;
int m_number;
+ bool m_numberIsSpecial;
};
#endif // NODE_H