CNodeItem.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "CNodeItem.h"
  2. #include "CRectItem.h"
  3. #include "CTextItem.h"
  4. #include <QAction>
  5. #include <QTextDocument>
  6. #include <QDebug>
  7. CNodeItem::CNodeItem(QObject *parent, int number, QPointF pos) : QObject(parent), m_number(number), m_pos(pos)
  8. {
  9. m_rectItem = new CRectItem();
  10. m_textItem = new CTextItem(m_rectItem);
  11. updateItemsGeometry();
  12. connectSignalsAndSlots();
  13. }
  14. int CNodeItem::number() const
  15. {
  16. return m_number;
  17. }
  18. void CNodeItem::setNumber(int n)
  19. {
  20. m_number = n;
  21. }
  22. QString CNodeItem::text() const
  23. {
  24. return m_textItem->toPlainText();
  25. }
  26. void CNodeItem::setText(const QString text)
  27. {
  28. m_textItem->document()->setPlainText(text);
  29. updateItemsGeometry();
  30. }
  31. CRectItem *CNodeItem::rectItem() const
  32. {
  33. return m_rectItem;
  34. }
  35. CTextItem *CNodeItem::textItem() const
  36. {
  37. return m_textItem;
  38. }
  39. QPointF CNodeItem::pos() const
  40. {
  41. return m_pos;
  42. }
  43. void CNodeItem::setPos(const QPointF pos)
  44. {
  45. m_pos = pos;
  46. updateItemsGeometry();
  47. }
  48. qreal CNodeItem::xMargin() const
  49. {
  50. return m_xMargin;
  51. }
  52. void CNodeItem::setXMargin(qreal x)
  53. {
  54. m_xMargin = x;
  55. updateItemsGeometry();
  56. }
  57. qreal CNodeItem::yMargin() const
  58. {
  59. return m_yMargin;
  60. }
  61. void CNodeItem::setYMargin(qreal y)
  62. {
  63. m_yMargin = y;
  64. updateItemsGeometry();
  65. }
  66. void CNodeItem::connectSignalsAndSlots()
  67. {
  68. connect(m_rectItem->selectAction(), &QAction::triggered, this, &CNodeItem::slotSelect);
  69. connect(m_rectItem->subNodeAction(), &QAction::triggered, this, &CNodeItem::slotSubNode);
  70. connect(m_rectItem->removeAction(), &QAction::triggered, this, &CNodeItem::slotRemove);
  71. }
  72. void CNodeItem::updateItemsGeometry()
  73. {
  74. QSizeF s = m_textItem->boundingRect().size() + QSizeF(m_xMargin * 2, m_yMargin * 2);
  75. m_rectItem->setRect(QRectF(m_pos, s));
  76. m_textItem->setPos(m_pos + QPointF(m_xMargin, m_yMargin));
  77. }
  78. void CNodeItem::slotSelect()
  79. {
  80. qDebug() << __FUNCTION__ << __LINE__ << endl;
  81. m_rectItem->setHighlighted(!m_rectItem->highlighted());
  82. }
  83. void CNodeItem::slotSubNode()
  84. {
  85. qDebug() << __FUNCTION__ << __LINE__ << endl;
  86. emit sigAddSubItem(m_number);
  87. }
  88. void CNodeItem::slotRemove()
  89. {
  90. qDebug() << __FUNCTION__ << __LINE__ << endl;
  91. emit sigRemoveItem(m_number);
  92. }