From 8ca1e0487efb2904f44d2eb7caa6456f0c87d4d2 Mon Sep 17 00:00:00 2001 From: joshua Date: Wed, 28 Jun 2023 21:56:03 +0200 Subject: [PATCH] Add demo terminal strip class Not available for user now. --- .../GraphicsItem/demoterminalstrip.cpp | 142 ++++++++++++++++++ .../GraphicsItem/demoterminalstrip.h | 50 ++++++ .../GraphicsItem/terminalstripdrawer.cpp | 12 +- .../GraphicsItem/terminalstripdrawer.h | 7 +- .../GraphicsItem/terminalstripitem.cpp | 20 ++- .../GraphicsItem/trueterminalstrip.cpp | 10 +- .../GraphicsItem/trueterminalstrip.h | 3 +- 7 files changed, 220 insertions(+), 24 deletions(-) create mode 100644 sources/TerminalStrip/GraphicsItem/demoterminalstrip.cpp create mode 100644 sources/TerminalStrip/GraphicsItem/demoterminalstrip.h diff --git a/sources/TerminalStrip/GraphicsItem/demoterminalstrip.cpp b/sources/TerminalStrip/GraphicsItem/demoterminalstrip.cpp new file mode 100644 index 000000000..958e8bf7e --- /dev/null +++ b/sources/TerminalStrip/GraphicsItem/demoterminalstrip.cpp @@ -0,0 +1,142 @@ +/* + Copyright 2006-2023 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see . +*/ +#include "demoterminalstrip.h" + +namespace TerminalStripDrawer +{ + +/*========= DemoBridge =========*/ + class DemoBridge : public AbstractBridgeInterface + { + public: + DemoBridge(const QUuid &uuid) : + m_uuid { uuid } {} + + QUuid uuid() const override { + return m_uuid; + } + + private: + const QUuid m_uuid; + }; + + class DemoRealTerminal : public AbstractRealTerminalInterface + { + public: + DemoRealTerminal(const QString &label, const QUuid &bridge) : + m_label { label }, + m_bridge { bridge } + {} + + QString label() const override { + return m_label; + } + + bool isBridged() const override { + return true; + } + + DemoBridge *bridge() const override { + return new DemoBridge { m_bridge }; + } + + private: + QString m_label; + QUuid m_bridge; + }; + + class DemoPhysicalTerminal : public AbstractPhysicalTerminalInterface + { + public: + DemoPhysicalTerminal(QVector> real_terminals) : + m_real_terminals { real_terminals} + {} + + QVector> realTerminals() const override { + return m_real_terminals; + } + + private: + QVector> m_real_terminals; + }; + + + +/*========= DemoTerminalStrip =========*/ + + /** + * @brief DemoTerminalStrip::DemoTerminalStrip + */ + DemoTerminalStrip::DemoTerminalStrip() + { + build(); + } + + QVector > DemoTerminalStrip::physicalTerminal() const + { + return m_physical_terminal; + } + + void DemoTerminalStrip::build() + { + QUuid lvl_1 = QUuid::createUuid(); + QUuid lvl_2 = QUuid::createUuid(); + QUuid lvl_3 = QUuid::createUuid(); + + QVector > real_terminals_vector; + + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("24vdc"), + lvl_1)}; + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("0vdc"), + lvl_2)}; + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("signal"), + lvl_3)}; + m_physical_terminal << QSharedPointer { + new DemoPhysicalTerminal {real_terminals_vector}}; + + real_terminals_vector.clear(); + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("24vdc"), + lvl_1)}; + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("0vdc"), + lvl_2)}; + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("signal"), + lvl_3)}; + m_physical_terminal << QSharedPointer { + new DemoPhysicalTerminal {real_terminals_vector}}; + + real_terminals_vector.clear(); + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("24vdc"), + lvl_1)}; + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("0vdc"), + lvl_2)}; + real_terminals_vector << QSharedPointer { + new DemoRealTerminal( QStringLiteral("signal"), + lvl_3)}; + m_physical_terminal << QSharedPointer { + new DemoPhysicalTerminal {real_terminals_vector}}; + } + +} diff --git a/sources/TerminalStrip/GraphicsItem/demoterminalstrip.h b/sources/TerminalStrip/GraphicsItem/demoterminalstrip.h new file mode 100644 index 000000000..ea8bd069d --- /dev/null +++ b/sources/TerminalStrip/GraphicsItem/demoterminalstrip.h @@ -0,0 +1,50 @@ +/* + Copyright 2006-2023 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see . +*/ +#ifndef DEMOTERMINALSTRIP_H +#define DEMOTERMINALSTRIP_H + +#include "terminalstripdrawer.h" + +namespace TerminalStripDrawer { + +class DemoTerminalStrip : public AbstractTerminalStripInterface +{ + public: + DemoTerminalStrip(); + + QString installation() const override { + return QStringLiteral("=INST"); + } + QString location() const override { + return QStringLiteral("+LOC" ); + } + QString name() const override { + return QStringLiteral("X1"); + } + QVector> physicalTerminal() const override; + + private: + void build(); + + private: + QVector> m_physical_terminal; +}; + +} //End namespace TerminalStripDrawer + +#endif // DEMOTERMINALSTRIP_H diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp index 8448cecfa..ace229a36 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp +++ b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp @@ -1,5 +1,5 @@ /* - Copyright 2006-2022 The QElectroTech Team + Copyright 2006-2023 The QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: you can redistribute it and/or modify @@ -31,15 +31,15 @@ namespace TerminalStripDrawer { * @param strip * @param pattern */ -TerminalStripDrawer::TerminalStripDrawer(QPointer strip, +TerminalStripDrawer::TerminalStripDrawer(QSharedPointer strip, QSharedPointer layout) : - m_strip{new TrueTerminalStrip{strip.data()}}, - m_pattern(layout) + m_strip { strip }, + m_pattern { layout } {} -void TerminalStripDrawer::setStrip(TerminalStrip *strip) +void TerminalStripDrawer::setStrip(QSharedPointer strip) { - m_strip.reset(new TrueTerminalStrip{strip}); + m_strip = strip; } /** diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.h b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.h index d32f434e8..fbb00cefe 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.h +++ b/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.h @@ -62,16 +62,15 @@ namespace TerminalStripDrawer virtual QString location() const = 0; virtual QString name() const = 0; virtual QVector> physicalTerminal() const = 0; - virtual bool operator()() = 0; }; class TerminalStripDrawer { public: - TerminalStripDrawer(QPointer strip = QPointer(), + TerminalStripDrawer(QSharedPointer strip = QSharedPointer { nullptr }, QSharedPointer layout = QSharedPointer()); - void setStrip(TerminalStrip *strip); + void setStrip(QSharedPointer strip); void paint(QPainter *painter); QRectF boundingRect() const; @@ -83,7 +82,7 @@ namespace TerminalStripDrawer int width() const; private: - QScopedPointer m_strip; + QSharedPointer m_strip; QSharedPointer m_pattern; bool m_debug_draw { false }; }; diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp b/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp index c6e2c344b..77f28adee 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp +++ b/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp @@ -17,16 +17,21 @@ */ #include "terminalstripitem.h" + #include "../diagram.h" -#include "../terminalstrip.h" -#include "../ui/terminalstripeditorwindow.h" #include "../../project/projectpropertieshandler.h" #include "../../qetgraphicsitem/qgraphicsitemutility.h" +#include "../terminalstrip.h" +#include "../ui/terminalstripeditorwindow.h" +#include "trueterminalstrip.h" -TerminalStripItem::TerminalStripItem(QPointer strip, QGraphicsItem *parent) : - QetGraphicsItem{parent}, - m_strip{strip}, - m_drawer{strip} +TerminalStripItem::TerminalStripItem(QPointer strip, + QGraphicsItem *parent) : + QetGraphicsItem { parent }, + m_strip { strip }, + m_drawer { QSharedPointer { + new TerminalStripDrawer::TrueTerminalStrip { strip }} + } { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); setAcceptHoverEvents(true); @@ -43,7 +48,8 @@ TerminalStripItem::TerminalStripItem(QGraphicsItem *parent) : void TerminalStripItem::setTerminalStrip(TerminalStrip *strip) { m_strip = strip; - m_drawer.setStrip(strip); + m_drawer.setStrip(QSharedPointer { + new TerminalStripDrawer::TrueTerminalStrip { strip }}); m_pending_strip_uuid = QUuid(); if (!m_drawer.haveLayout()) { diff --git a/sources/TerminalStrip/GraphicsItem/trueterminalstrip.cpp b/sources/TerminalStrip/GraphicsItem/trueterminalstrip.cpp index 612f01425..15273e4c1 100644 --- a/sources/TerminalStrip/GraphicsItem/trueterminalstrip.cpp +++ b/sources/TerminalStrip/GraphicsItem/trueterminalstrip.cpp @@ -25,6 +25,11 @@ namespace TerminalStripDrawer { + /** + * @brief TrueTerminalStrip::TrueTerminalStrip + * Constructor, this class don't take ownership of @a strip + * @param strip + */ TrueTerminalStrip::TrueTerminalStrip(TerminalStrip *strip) : m_strip { strip } {} @@ -69,11 +74,6 @@ namespace TerminalStripDrawer return vector_; } - bool TrueTerminalStrip::operator()() - { - return m_strip; - } - TruePhysicalTerminal::TruePhysicalTerminal(QSharedPointer physical) : m_physical { physical } {} diff --git a/sources/TerminalStrip/GraphicsItem/trueterminalstrip.h b/sources/TerminalStrip/GraphicsItem/trueterminalstrip.h index 9853304f7..10b3775fa 100644 --- a/sources/TerminalStrip/GraphicsItem/trueterminalstrip.h +++ b/sources/TerminalStrip/GraphicsItem/trueterminalstrip.h @@ -35,8 +35,7 @@ namespace TerminalStripDrawer QString installation() const override; QString location() const override; QString name() const override; - QVector> physicalTerminal() const override; - bool operator()() override; + QVector> physicalTerminal() const override; private: QPointer m_strip;