CMindView.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "CMindView.h"
  2. #include "CRectItem.h"
  3. #include "CLineItem.h"
  4. #include "CTextItem.h"
  5. #include "CMind.h"
  6. #include "CNodeItem.h"
  7. #include <QMenu>
  8. #include <QContextMenuEvent>
  9. #include <QDebug>
  10. CMindView::CMindView(QWidget *parent) : QGraphicsView(new QGraphicsScene(), parent)
  11. {
  12. m_mind = new CMind(this);
  13. setRenderHints(QPainter::Antialiasing); // 抗锯齿
  14. }
  15. CMind *CMindView::mind() const
  16. {
  17. return m_mind;
  18. }
  19. void CMindView::setNodeList(QList<CNodeData> list)
  20. {
  21. clear();
  22. m_mind->setNodeList(list);
  23. m_root = new CNodeItem(m_mind->root());
  24. refreshItems();
  25. }
  26. void CMindView::addNode(CNodeData n)
  27. {
  28. m_mind->addNode(n);
  29. CNodeItem *item = new CNodeItem(n);
  30. connect(item, &CNodeItem::sigAddSubItem, this, &CMindView::createSubNode);
  31. connect(item, &CNodeItem::sigRemoveItem, this, &CMindView::removeNode);
  32. if (m_root == nullptr) {
  33. m_root = item;
  34. } else {
  35. m_root->addSubNode(item);
  36. }
  37. refreshItems();
  38. }
  39. void CMindView::createSubNode(int pNumber)
  40. {
  41. if (pNumber < 0) {
  42. return;
  43. }
  44. CNodeData data = root()->data();
  45. CNodeData n = CNodeData(data.projectId, data.evalType, 0, data.number);
  46. addNode(n);
  47. }
  48. void CMindView::removeNode(int number)
  49. {
  50. qDebug() << __FUNCTION__ << __LINE__ << endl;
  51. m_mind->removeNode(number);
  52. if (number == m_root->data().number) {
  53. clear();
  54. qDebug() << __FUNCTION__ << __LINE__ << endl;
  55. } else {
  56. m_root->removeNode(number);
  57. }
  58. refreshItems();
  59. }
  60. void CMindView::clear()
  61. {
  62. m_mind->nodeList().clear();
  63. delete m_root;
  64. m_root = nullptr;
  65. refreshItems();
  66. }
  67. void CMindView::refreshItems()
  68. {
  69. for (QGraphicsItem *item : m_items) {
  70. scene()->removeItem(item);
  71. }
  72. m_items.clear();
  73. collectItems(m_root);
  74. for (QGraphicsItem *item : m_items) {
  75. scene()->addItem(item);
  76. }
  77. }
  78. void CMindView::collectItems(CNodeItem *node)
  79. {
  80. m_items.clear();
  81. if (node == nullptr) {
  82. return;
  83. }
  84. m_items.append(node->rectItem());
  85. for (QObject *o : node->children()) {
  86. CNodeItem *n = dynamic_cast<CNodeItem *>(o);
  87. collectItems(n);
  88. }
  89. }
  90. qreal CMindView::hNodeSpace() const
  91. {
  92. return m_hNodeSpace;
  93. }
  94. void CMindView::setHNodeSpace(qreal h)
  95. {
  96. m_hNodeSpace = h;
  97. }
  98. qreal CMindView::vNodeSpace() const
  99. {
  100. return m_vNodeSpace;
  101. }
  102. void CMindView::setVNodeSpace(qreal v)
  103. {
  104. m_vNodeSpace = v;
  105. }
  106. void CMindView::setALignment(CMindView::Alignment align)
  107. {
  108. m_align = align;
  109. }
  110. CNodeItem *CMindView::root() const
  111. {
  112. return m_root;
  113. }