diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp b/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp index 1a758c145..c2713898c 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp +++ b/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp @@ -39,6 +39,7 @@ TerminalStripItem::TerminalStripItem(QPointer strip, setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); setAcceptHoverEvents(true); setDefaultLayout(); + connectStrip(strip); } TerminalStripItem::TerminalStripItem(QGraphicsItem *parent) : @@ -50,21 +51,8 @@ TerminalStripItem::TerminalStripItem(QGraphicsItem *parent) : void TerminalStripItem::setTerminalStrip(TerminalStrip *strip) { - for (const auto &connection_ : std::as_const(m_strip_connections)) { - disconnect(connection_); - } - m_strip_connections.clear(); - m_strip = strip; - if (strip) - { - //Redraw as soon as the strip or one of its terminals changes - //(terminal strip editor applied, undo, redo...) - m_strip_connections << connect(strip, &TerminalStrip::orderChanged, this, &TerminalStripItem::stripChanged) - << connect(strip, &TerminalStrip::bridgeChanged, this, &TerminalStripItem::stripChanged) - << connect(strip, &TerminalStrip::bridgeColorChanged, this, &TerminalStripItem::stripChanged) - << connect(strip, &TerminalStrip::dataChanged, this, &TerminalStripItem::stripChanged); - } + connectStrip(strip); m_drawer.setStrip(QSharedPointer { new TerminalStripDrawer::TrueTerminalStrip { strip }}); m_pending_strip_uuid = QUuid(); @@ -271,6 +259,29 @@ TerminalStripLayoutPattern::DrawStyle TerminalStripItem::drawStyle() const { return m_drawer.drawStyle(); } +/** + * @brief TerminalStripItem::connectStrip + * Redraw this item as soon as @a strip or one of its terminals changes + * (terminal strip editor applied, undo, redo...). + * The connections to the previous strip are removed. + * @param strip + */ +void TerminalStripItem::connectStrip(TerminalStrip *strip) +{ + for (const auto &connection_ : std::as_const(m_strip_connections)) { + disconnect(connection_); + } + m_strip_connections.clear(); + + if (strip) + { + m_strip_connections << connect(strip, &TerminalStrip::orderChanged, this, &TerminalStripItem::stripChanged) + << connect(strip, &TerminalStrip::bridgeChanged, this, &TerminalStripItem::stripChanged) + << connect(strip, &TerminalStrip::bridgeColorChanged, this, &TerminalStripItem::stripChanged) + << connect(strip, &TerminalStrip::dataChanged, this, &TerminalStripItem::stripChanged); + } +} + /** * @brief TerminalStripItem::stripChanged * The strip or one of its terminals changed : the size of the drawing diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripitem.h b/sources/TerminalStrip/GraphicsItem/terminalstripitem.h index c77596aa3..eb762b888 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripitem.h +++ b/sources/TerminalStrip/GraphicsItem/terminalstripitem.h @@ -76,6 +76,7 @@ class TerminalStripItem : public QetGraphicsItem private: void setDefaultLayout(); QString xrefToolTip(const TerminalStripDrawer::hoverTerminal &terminal) const; + void connectStrip(TerminalStrip *strip); void stripChanged(); private: