mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
Merge branch 'terminal_strip'
* terminal_strip: Terminal strip bridge are now save in .qet file Minor : don't push an undo command when change bridge color by the same color
This commit is contained in:
commit
1d20018a26
@ -66,12 +66,12 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
|
||||
return true;
|
||||
}
|
||||
|
||||
auto is_draw = xml_element.attribute(QStringLiteral("is_draw")) == QLatin1String("true")
|
||||
? true : false;
|
||||
m_uuid = QUuid(xml_element.attribute(QStringLiteral("uuid")));
|
||||
|
||||
QUuid uuid_(xml_element.attribute(QStringLiteral("uuid")));
|
||||
if (xml_element.hasAttribute(QStringLiteral("element_uuid")))
|
||||
{
|
||||
QUuid uuid_(xml_element.attribute(QStringLiteral("element_uuid")));
|
||||
|
||||
if (is_draw) {
|
||||
for (auto terminal : terminal_vector) {
|
||||
if (terminal->uuid() == uuid_)
|
||||
{
|
||||
@ -79,8 +79,6 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
m_uuid = uuid_;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -94,9 +92,9 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
|
||||
QDomElement RealTerminal::toXml(QDomDocument &parent_document) const
|
||||
{
|
||||
auto root_elmt = parent_document.createElement(this->xmlTagName());
|
||||
root_elmt.setAttribute("is_draw", m_element ? "true" : "false");
|
||||
root_elmt.setAttribute("uuid", m_element ? m_element->uuid().toString() :
|
||||
m_uuid.toString());
|
||||
root_elmt.setAttribute(QStringLiteral("uuid"), m_uuid.toString());
|
||||
if (m_element)
|
||||
root_elmt.setAttribute(QStringLiteral("element_uuid"), m_element->uuid().toString());
|
||||
|
||||
return root_elmt;
|
||||
}
|
||||
|
@ -246,6 +246,22 @@ QSharedPointer<RealTerminal> TerminalStrip::realTerminal(Element *terminal) cons
|
||||
return shared_real_terminal();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalStrip::realTerminalForUuid
|
||||
* @param uuid
|
||||
* @return the real terminal with uuid @a uuid or a null QSharedPointer if not found
|
||||
*/
|
||||
QSharedPointer<RealTerminal> TerminalStrip::realTerminalForUuid(const QUuid &uuid) const
|
||||
{
|
||||
for (const auto &t : qAsConst(m_real_terminals)) {
|
||||
if (t->uuid() == uuid) {
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
return QSharedPointer<RealTerminal>();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief TerminalStrip::setSortedTo
|
||||
@ -764,6 +780,10 @@ QDomElement TerminalStrip::toXml(QDomDocument &parent_document)
|
||||
}
|
||||
root_elmt.appendChild(xml_layout);
|
||||
|
||||
for (const auto &bridge_ : qAsConst(m_bridge)) {
|
||||
root_elmt.appendChild(bridge_->toXml(parent_document));
|
||||
}
|
||||
|
||||
return root_elmt;
|
||||
}
|
||||
|
||||
@ -818,6 +838,16 @@ bool TerminalStrip::fromXml(QDomElement &xml_element)
|
||||
|
||||
}
|
||||
|
||||
//Read bridges
|
||||
const auto bridge_vector = QETXML::directChild(xml_element, TerminalStripBridge::xmlTagName());
|
||||
for (const auto &xml_bridge : bridge_vector)
|
||||
{
|
||||
auto bridge_ = new TerminalStripBridge(this);
|
||||
auto shared_bridge = bridge_->sharedRef();
|
||||
shared_bridge->fromXml(xml_bridge);
|
||||
m_bridge.append(shared_bridge);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ class TerminalStrip : public QObject
|
||||
QSharedPointer<PhysicalTerminal> physicalTerminal (const QSharedPointer<RealTerminal> &real_terminal) const;
|
||||
QVector<QSharedPointer<PhysicalTerminal>> physicalTerminal() const;
|
||||
QSharedPointer<RealTerminal> realTerminal(Element *terminal) const;
|
||||
QSharedPointer<RealTerminal> realTerminalForUuid(const QUuid &uuid) const;
|
||||
|
||||
bool setOrderTo(const QVector<QSharedPointer<PhysicalTerminal>> &sorted_vector);
|
||||
bool groupTerminals(const QSharedPointer<PhysicalTerminal> &receiver_terminal, const QVector<QSharedPointer<RealTerminal>> &added_terminals);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "terminalstripbridge.h"
|
||||
#include "realterminal.h"
|
||||
#include "terminalstrip.h"
|
||||
#include "../qetxml.h"
|
||||
|
||||
TerminalStripBridge::TerminalStripBridge(TerminalStrip *parent_strip) :
|
||||
m_strip(parent_strip)
|
||||
@ -70,6 +71,55 @@ QVector<QSharedPointer<RealTerminal> > TerminalStripBridge::realTerminals() cons
|
||||
return m_real_terminals;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalStripBridge::toXml
|
||||
* Save this bridge into a QDomElement and return it.
|
||||
* @param parent_document
|
||||
* @return
|
||||
*/
|
||||
QDomElement TerminalStripBridge::toXml(QDomDocument &parent_document) const
|
||||
{
|
||||
auto root_elmt = parent_document.createElement(xmlTagName());
|
||||
|
||||
root_elmt.setAttribute(QStringLiteral("uuid"), m_uuid.toString());
|
||||
root_elmt.setAttribute(QStringLiteral("color"), m_color.name());
|
||||
|
||||
auto terminals_elmt = parent_document.createElement(QStringLiteral("real_terminals"));
|
||||
for (const auto &real_t : qAsConst(m_real_terminals))
|
||||
{
|
||||
if (real_t)
|
||||
{
|
||||
auto terminal_elmt = parent_document.createElement(QStringLiteral("real_terminal"));
|
||||
terminal_elmt.setAttribute(QStringLiteral("uuid"), real_t->uuid().toString());
|
||||
terminals_elmt.appendChild(terminal_elmt);
|
||||
}
|
||||
}
|
||||
|
||||
root_elmt.appendChild(terminals_elmt);
|
||||
return root_elmt;
|
||||
}
|
||||
|
||||
void TerminalStripBridge::fromXml(const QDomElement &dom_element)
|
||||
{
|
||||
if (dom_element.tagName() != xmlTagName() || !m_strip) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_uuid.fromString(dom_element.attribute(QStringLiteral("uuid"), m_uuid.toString()));
|
||||
m_color.setNamedColor(dom_element.attribute(QStringLiteral("color")));
|
||||
|
||||
const auto real_t_vector = QETXML::subChild(dom_element,
|
||||
QStringLiteral("real_terminals"),
|
||||
QStringLiteral("real_terminal"));
|
||||
for (const auto &xml_real_t : real_t_vector)
|
||||
{
|
||||
auto real_t = m_strip->realTerminalForUuid(QUuid(xml_real_t.attribute(QStringLiteral("uuid"))));
|
||||
if (real_t) {
|
||||
m_real_terminals.append(real_t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalStripBridge::addTerminals
|
||||
* @param real_terminals
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <QUuid>
|
||||
#include <QPointer>
|
||||
#include <QColor>
|
||||
#include <QDomDocument>
|
||||
#include <QVector>
|
||||
|
||||
class RealTerminal;
|
||||
@ -42,6 +43,10 @@ class TerminalStripBridge
|
||||
void setColor(const QColor &color);
|
||||
QVector<QSharedPointer<RealTerminal>> realTerminals() const;
|
||||
|
||||
static QString xmlTagName() {return QStringLiteral("terminal_strip_bridge");}
|
||||
QDomElement toXml(QDomDocument &parent_document) const;
|
||||
void fromXml(const QDomElement &dom_element);
|
||||
|
||||
private:
|
||||
bool addTerminals(const QVector<QSharedPointer<RealTerminal>> &real_terminals);
|
||||
void removeTerminals(const QVector<QSharedPointer<RealTerminal>> &real_terminals);
|
||||
|
@ -916,7 +916,8 @@ void TerminalStripEditor::on_m_bridge_color_cb_activated(const QColor &col)
|
||||
{
|
||||
if (mrtd.level_ == level_ && mrtd.bridged_) {
|
||||
auto bridge_ = mrtd.real_terminal.toStrongRef()->bridge();
|
||||
m_project->undoStack()->push(new ChangeTerminalStripColor(bridge_, col));
|
||||
if (bridge_->color() != col)
|
||||
m_project->undoStack()->push(new ChangeTerminalStripColor(bridge_, col));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user