Revamp terminalStrip feature code

Move RealTerminal class in a new file
Move PhysicalTerminal class in a new file.
Remove the use of QWeakPointer and use instead QSharedPointer
in a big part of the revamp.
This commit is contained in:
joshua
2021-12-26 17:26:00 +01:00
parent 2ea9f8a2c6
commit 5709f469fc
13 changed files with 844 additions and 799 deletions

View File

@@ -40,97 +40,6 @@ struct TerminalStripBridge
QUuid uuid_ = QUuid::createUuid();
};
/**
* @brief The RealTerminal class
* Represent a real terminal.
* A real terminal can be a drawed terminal in a folio
* or a terminal set by user but not present
* on any folio (for example a reserved terminal).
*
* When create a new instance of RealTerminal you must
* call sharedRef() and only use the returned QSharedPointer
* instead of the raw pointer
*/
class RealTerminal
{
friend class TerminalStrip;
friend class PhysicalTerminal;
private:
RealTerminal(TerminalStrip *strip, Element *element = nullptr);
QSharedPointer<RealTerminal> sharedRef();
QWeakPointer<RealTerminal> weakRef();
bool fromXml(QDomElement xml_element, const QVector<TerminalElement *> &terminal_vector);
QDomElement toXml(QDomDocument &parent_document) const;
public:
TerminalStrip *parentStrip() const;
int level() const;
QString label() const;
QString Xref() const;
QString cable() const;
QString cableWire() const;
QString conductor() const;
ElementData::TerminalType type() const;
ElementData::TerminalFunction function() const;
bool isLed() const;
bool isElement() const;
bool isBridged() const;
QSharedPointer<TerminalStripBridge> bridge() const;
Element* element() const;
QUuid elementUuid() const;
QUuid uuid() const;
static QString xmlTagName();
private :
QPointer<Element> m_element;
QPointer<TerminalStrip> m_parent_terminal_strip;
QUuid m_uuid = QUuid::createUuid();
QWeakPointer<RealTerminal> m_this_weak;
};
class PhysicalTerminal
{
friend class TerminalStrip;
private:
PhysicalTerminal(TerminalStrip *parent_strip, QVector<QSharedPointer<RealTerminal>> terminals);
QSharedPointer<PhysicalTerminal> sharedRef();
QWeakPointer<PhysicalTerminal> weakRef();
QDomElement toXml(QDomDocument &parent_document) const;
void setTerminals(const QVector<QSharedPointer<RealTerminal>> &terminals);
void addTerminal(const QSharedPointer<RealTerminal> &terminal);
bool removeTerminal(const QSharedPointer<RealTerminal> &terminal);
bool setLevelOf(const QSharedPointer<RealTerminal> &terminal, int level);
public:
PhysicalTerminal(){}
int levelCount() const;
int levelOf(const QWeakPointer<RealTerminal> &terminal) const;
QVector<QWeakPointer<RealTerminal>> realTerminals() const;
QUuid uuid() const;
int pos() const;
int realTerminalCount() const;
static QString xmlTagName();
private:
QPointer<TerminalStrip> m_parent_terminal_strip;
QVector<QSharedPointer<RealTerminal>> m_real_terminal;
QUuid m_uuid = QUuid::createUuid();
QWeakPointer<PhysicalTerminal> m_this_weak;
};
/**
* @brief The TerminalStrip class
* This class hold all the datas and configurations
@@ -178,28 +87,30 @@ class TerminalStrip : public QObject
bool addTerminal (Element *terminal);
bool removeTerminal (Element *terminal);
int pos(const QWeakPointer<PhysicalTerminal> &terminal) const;
int pos(const QSharedPointer<PhysicalTerminal> &terminal) const;
int physicalTerminalCount() const;
QWeakPointer<PhysicalTerminal> physicalTerminal(int index) const;
QWeakPointer<PhysicalTerminal> physicalTerminal (const QWeakPointer<RealTerminal> &real_terminal) const;
QVector<QWeakPointer<PhysicalTerminal>> physicalTerminal() const;
QSharedPointer<PhysicalTerminal> physicalTerminal(int index) const;
QSharedPointer<PhysicalTerminal> physicalTerminal (const QSharedPointer<RealTerminal> &real_terminal) const;
QVector<QSharedPointer<PhysicalTerminal>> physicalTerminal() const;
QSharedPointer<RealTerminal> realTerminal(Element *terminal) const;
bool setOrderTo(const QVector<QWeakPointer<PhysicalTerminal>> &sorted_vector);
bool groupTerminals(const QWeakPointer<PhysicalTerminal> &receiver_terminal, const QVector<QWeakPointer<RealTerminal>> &added_terminals);
void unGroupTerminals(const QVector<QWeakPointer<RealTerminal>> &terminals_to_ungroup);
bool setLevel(const QWeakPointer<RealTerminal> &real_terminal, int level);
bool setOrderTo(const QVector<QSharedPointer<PhysicalTerminal>> &sorted_vector);
bool groupTerminals(const QSharedPointer<PhysicalTerminal> &receiver_terminal, const QVector<QSharedPointer<RealTerminal>> &added_terminals);
void unGroupTerminals(const QVector<QSharedPointer<RealTerminal>> &terminals_to_ungroup);
bool setLevel(const QSharedPointer<RealTerminal> &real_terminal, int level);
bool isBridgeable(const QVector<QWeakPointer<RealTerminal>> &real_terminals) const;
bool setBridge(const QVector<QWeakPointer<RealTerminal>> &real_terminals);
bool setBridge(const QSharedPointer<TerminalStripBridge> &bridge, const QVector<QWeakPointer<RealTerminal>> &real_terminals);
void unBridge(const QVector<QWeakPointer<RealTerminal>> &real_terminals);
bool canUnBridge(const QVector <QWeakPointer<RealTerminal>> &real_terminals) const;
QSharedPointer<TerminalStripBridge> bridgeFor(const QWeakPointer<RealTerminal> &real_terminal) const;
bool isBridgeable(const QVector<QSharedPointer<RealTerminal>> &real_terminals) const;
bool setBridge(const QVector<QSharedPointer<RealTerminal>> &real_terminals);
bool setBridge(const QSharedPointer<TerminalStripBridge> &bridge, const QVector<QSharedPointer<RealTerminal>> &real_terminals);
void unBridge(const QVector<QSharedPointer<RealTerminal>> &real_terminals);
bool canUnBridge(const QVector <QSharedPointer<RealTerminal>> &real_terminals) const;
QSharedPointer<TerminalStripBridge> isBridged(const QSharedPointer<RealTerminal> real_terminal) const;
QSharedPointer<TerminalStripBridge> bridgeFor (const QVector<QSharedPointer<RealTerminal>> &terminal_vector) const;
QWeakPointer<RealTerminal> previousTerminalInLevel(const QWeakPointer<RealTerminal> &real_terminal) const;
QWeakPointer<RealTerminal> nextTerminalInLevel(const QWeakPointer<RealTerminal> &real_terminal) const;
QWeakPointer<RealTerminal> previousRealTerminal(const QWeakPointer<RealTerminal> &real_terminal) const;
QWeakPointer<RealTerminal> nextRealTerminal(const QWeakPointer<RealTerminal> &real_terminal) const;
QSharedPointer<RealTerminal> previousTerminalInLevel(const QSharedPointer<RealTerminal> &real_terminal) const;
QSharedPointer<RealTerminal> nextTerminalInLevel(const QSharedPointer<RealTerminal> &real_terminal) const;
QSharedPointer<RealTerminal> previousRealTerminal(const QSharedPointer<RealTerminal> &real_terminal) const;
QSharedPointer<RealTerminal> nextRealTerminal(const QSharedPointer<RealTerminal> &real_terminal) const;
QVector<QPointer<Element>> terminalElement() const;
@@ -208,10 +119,6 @@ class TerminalStrip : public QObject
bool fromXml(QDomElement &xml_element);
private:
QSharedPointer<RealTerminal> realTerminal(Element *terminal);
QSharedPointer<PhysicalTerminal> physicalTerminal(QSharedPointer<RealTerminal> terminal) const;
QSharedPointer<TerminalStripBridge> isBridged(const QSharedPointer<RealTerminal> real_terminal) const;
QSharedPointer<TerminalStripBridge> bridgeFor (const QVector<QSharedPointer<RealTerminal>> &terminal_vector) const;
void rebuildRealVector();
private: