|
@@ -13,79 +13,121 @@
|
|
|
|
|
|
CMindView::CMindView(QWidget *parent) : QGraphicsView(new QGraphicsScene(), parent)
|
|
|
{
|
|
|
- setRenderHints(QPainter::Antialiasing); // 抗锯齿
|
|
|
m_mind = new CMind(this);
|
|
|
+ setRenderHints(QPainter::Antialiasing); // 抗锯齿
|
|
|
}
|
|
|
|
|
|
-void CMindView::connectSignalsAndSlots() { }
|
|
|
-
|
|
|
CMind *CMindView::mind() const
|
|
|
{
|
|
|
return m_mind;
|
|
|
}
|
|
|
|
|
|
-void CMindView::setMind(CMind *mind)
|
|
|
+void CMindView::setNodeList(QList<CNodeData> list)
|
|
|
+{
|
|
|
+ clear();
|
|
|
+ m_mind->setNodeList(list);
|
|
|
+ m_root = new CNodeItem(m_mind->root());
|
|
|
+ refreshItems();
|
|
|
+}
|
|
|
+
|
|
|
+void CMindView::addNode(CNodeData n)
|
|
|
+{
|
|
|
+ m_mind->addNode(n);
|
|
|
+ CNodeItem *item = new CNodeItem(n);
|
|
|
+ connect(item, &CNodeItem::sigAddSubItem, this, &CMindView::createSubNode);
|
|
|
+ connect(item, &CNodeItem::sigRemoveItem, this, &CMindView::removeNode);
|
|
|
+
|
|
|
+ if (m_root == nullptr) {
|
|
|
+ m_root = item;
|
|
|
+ } else {
|
|
|
+ m_root->addSubNode(item);
|
|
|
+ }
|
|
|
+ refreshItems();
|
|
|
+}
|
|
|
+
|
|
|
+void CMindView::createSubNode(int pNumber)
|
|
|
{
|
|
|
- m_mind = mind;
|
|
|
- refresh();
|
|
|
+ if (pNumber < 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ CNodeData data = root()->data();
|
|
|
+ CNodeData n = CNodeData(data.projectId, data.evalType, 0, data.number);
|
|
|
+ addNode(n);
|
|
|
}
|
|
|
|
|
|
-void CMindView::refresh()
|
|
|
+void CMindView::removeNode(int number)
|
|
|
{
|
|
|
- for (CNodeItem *item : m_itemList) {
|
|
|
- scene()->removeItem(item->rectItem());
|
|
|
- delete item;
|
|
|
+ qDebug() << __FUNCTION__ << __LINE__ << endl;
|
|
|
+ m_mind->removeNode(number);
|
|
|
+ if (number == m_root->data().number) {
|
|
|
+ clear();
|
|
|
+ qDebug() << __FUNCTION__ << __LINE__ << endl;
|
|
|
+ } else {
|
|
|
+ m_root->removeNode(number);
|
|
|
}
|
|
|
- m_itemList.clear();
|
|
|
+ refreshItems();
|
|
|
+}
|
|
|
|
|
|
- for (CNodeData n : m_mind->nodeList()) {
|
|
|
- CNodeItem *item = new CNodeItem(this, n.number);
|
|
|
- item->setText(n.name);
|
|
|
- m_itemList.append(item);
|
|
|
+void CMindView::clear()
|
|
|
+{
|
|
|
+ m_mind->nodeList().clear();
|
|
|
+ delete m_root;
|
|
|
+ m_root = nullptr;
|
|
|
+ refreshItems();
|
|
|
+}
|
|
|
|
|
|
- scene()->addItem(item->rectItem());
|
|
|
+void CMindView::refreshItems()
|
|
|
+{
|
|
|
+ for (QGraphicsItem *item : m_items) {
|
|
|
+ scene()->removeItem(item);
|
|
|
+ }
|
|
|
+ m_items.clear();
|
|
|
|
|
|
- connect(item, &CNodeItem::sigAddSubItem, this, &CMindView::addSubNode);
|
|
|
- connect(item, &CNodeItem::sigRemoveItem, this, &CMindView::removeNode);
|
|
|
+ collectItems(m_root);
|
|
|
+ for (QGraphicsItem *item : m_items) {
|
|
|
+ scene()->addItem(item);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void CMindView::setALignment(CMindView::Alignment align)
|
|
|
+void CMindView::collectItems(CNodeItem *node)
|
|
|
{
|
|
|
- m_align = align;
|
|
|
+ m_items.clear();
|
|
|
+ if (node == nullptr) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ m_items.append(node->rectItem());
|
|
|
+ for (QObject *o : node->children()) {
|
|
|
+ CNodeItem *n = dynamic_cast<CNodeItem *>(o);
|
|
|
+ collectItems(n);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void CMindView::addNode(CNodeData n)
|
|
|
+qreal CMindView::hNodeSpace() const
|
|
|
{
|
|
|
- m_mind->addNode(n);
|
|
|
- refresh();
|
|
|
+ return m_hNodeSpace;
|
|
|
}
|
|
|
|
|
|
-void CMindView::removeNode(int number)
|
|
|
+void CMindView::setHNodeSpace(qreal h)
|
|
|
{
|
|
|
- qDebug() << __FUNCTION__ << __LINE__ << number << endl;
|
|
|
- m_mind->removeNode(number);
|
|
|
- refresh();
|
|
|
+ m_hNodeSpace = h;
|
|
|
}
|
|
|
|
|
|
-void CMindView::addSubNode(int pNumber)
|
|
|
+qreal CMindView::vNodeSpace() const
|
|
|
{
|
|
|
- qDebug() << __FUNCTION__ << __LINE__ << pNumber << endl;
|
|
|
- CNodeData root = m_mind->root();
|
|
|
- CNodeData n = CNodeData(root.projectId, root.evalType, m_mind->maxNumber() + 1, pNumber);
|
|
|
- addNode(n);
|
|
|
+ return m_vNodeSpace;
|
|
|
}
|
|
|
|
|
|
-void CMindView::testItems()
|
|
|
+void CMindView::setVNodeSpace(qreal v)
|
|
|
{
|
|
|
- CRectItem *r = new CRectItem(QRectF(0, 0, 100, 100));
|
|
|
- scene()->addItem(r);
|
|
|
+ m_vNodeSpace = v;
|
|
|
+}
|
|
|
|
|
|
- CLineItem *l = new CLineItem(QPointF(-100, -100), QPointF(50, 50));
|
|
|
- scene()->addItem(l);
|
|
|
- l->setFlags(QGraphicsItem::ItemIsMovable);
|
|
|
- l->setLineType(CLineItem::CurveToLine);
|
|
|
+void CMindView::setALignment(CMindView::Alignment align)
|
|
|
+{
|
|
|
+ m_align = align;
|
|
|
+}
|
|
|
|
|
|
- CTextItem *t = new CTextItem("test", QPoint(0, 0));
|
|
|
- scene()->addItem(t);
|
|
|
+CNodeItem *CMindView::root() const
|
|
|
+{
|
|
|
+ return m_root;
|
|
|
}
|