mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-01-08 14:49:58 +01:00
rebase XMLProperties_New (c0d9bf9) to master
This commit is contained in:
committed by
Martin Marmsoler
parent
73b394527d
commit
f3097fc537
@@ -76,14 +76,7 @@ class ConductorXmlRetroCompatibility
|
||||
*/
|
||||
Conductor::Conductor(Terminal *p1, Terminal* p2) :
|
||||
terminal1(p1),
|
||||
terminal2(p2),
|
||||
m_mouse_over(false),
|
||||
m_text_item(nullptr),
|
||||
segments(nullptr),
|
||||
m_moving_segment(false),
|
||||
modified_path(false),
|
||||
has_to_save_profile(false),
|
||||
must_highlight_(Conductor::None)
|
||||
terminal2(p2)
|
||||
{
|
||||
//set Zvalue at 11 to be upper than the DiagramImageItem and element
|
||||
setZValue(11);
|
||||
@@ -585,36 +578,16 @@ ConductorTextItem *Conductor::textItem() const
|
||||
@return true si l'element XML represente bien un Conducteur ; false sinon
|
||||
*/
|
||||
bool Conductor::valideXml(QDomElement &e){
|
||||
// verifie le nom du tag
|
||||
if (e.tagName() != "conductor") return(false);
|
||||
|
||||
// verifie la presence des attributs minimaux
|
||||
if (!e.hasAttribute("terminal1")) return(false);
|
||||
if (!e.hasAttribute("terminal2")) return(false);
|
||||
// // TODO: seems to short! (see fromXML)
|
||||
// if (propertyDouble(e, "x") ||
|
||||
// propertyDouble(e, "y"))
|
||||
// return false;
|
||||
|
||||
bool conv_ok;
|
||||
// parse l'abscisse
|
||||
if (e.hasAttribute("element1")) {
|
||||
if (QUuid(e.attribute("element1")).isNull())
|
||||
return false;
|
||||
if (QUuid(e.attribute("terminal1")).isNull())
|
||||
return false;
|
||||
} else {
|
||||
e.attribute("terminal1").toInt(&conv_ok);
|
||||
if (!conv_ok) return(false);
|
||||
}
|
||||
// if (propertyBool(e, "freezeLabel"))
|
||||
// return false;
|
||||
|
||||
// parse l'ordonnee
|
||||
if (e.hasAttribute("element2")) {
|
||||
if (QUuid(e.attribute("element2")).isNull())
|
||||
return false;
|
||||
if (QUuid(e.attribute("terminal2")).isNull())
|
||||
return false;
|
||||
} else {
|
||||
e.attribute("terminal2").toInt(&conv_ok);
|
||||
if (!conv_ok) return(false);
|
||||
}
|
||||
return(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -987,10 +960,13 @@ void Conductor::pointsToSegments(const QList<QPointF>& points_list) {
|
||||
@param dom_element
|
||||
@return true is loading success else return false
|
||||
*/
|
||||
bool Conductor::fromXml(QDomElement &dom_element)
|
||||
bool Conductor::fromXml(const QDomElement &dom_element)
|
||||
{
|
||||
setPos(dom_element.attribute("x", nullptr).toDouble(),
|
||||
dom_element.attribute("y", nullptr).toDouble());
|
||||
// TODO: seems to short!
|
||||
double x=0, y=0;
|
||||
propertyDouble(dom_element, "x", &x);
|
||||
propertyDouble(dom_element, "y", &y);
|
||||
setPos(x, y);
|
||||
|
||||
bool return_ = pathFromXml(dom_element);
|
||||
|
||||
@@ -1004,14 +980,13 @@ bool Conductor::fromXml(QDomElement &dom_element)
|
||||
else
|
||||
m_autoNum_seq.fromXml(dom_element.firstChildElement("sequentialNumbers"));
|
||||
|
||||
m_freeze_label = dom_element.attribute("freezeLabel") == "true"? true : false;
|
||||
|
||||
propertyBool(dom_element, "freezeLabel", &m_freeze_label);
|
||||
setProperties(pr);
|
||||
|
||||
return return_;
|
||||
}
|
||||
|
||||
/**
|
||||
// does not support legacy method
|
||||
@brief Conductor::toXml
|
||||
Exporte les caracteristiques du conducteur sous forme d'une element XML.
|
||||
@param dom_document :
|
||||
@@ -1020,33 +995,39 @@ bool Conductor::fromXml(QDomElement &dom_element)
|
||||
Hash stockant les correspondances entre les ids des
|
||||
bornes dans le document XML et leur adresse en memoire
|
||||
@return Un element XML representant le conducteur
|
||||
*/
|
||||
QDomElement Conductor::toXml(QDomDocument &dom_document,
|
||||
QHash<Terminal *,
|
||||
int> &table_adr_id) const
|
||||
{
|
||||
QDomElement dom_element = dom_document.createElement("conductor");
|
||||
QDomElement Conductor::toXml(QDomDocument & doc) const {
|
||||
QDomElement dom_element = doc.createElement("conductor");
|
||||
|
||||
dom_element.setAttribute("x", QString::number(pos().x()));
|
||||
dom_element.setAttribute("y", QString::number(pos().y()));
|
||||
|
||||
dom_element.appendChild(createXmlProperty(doc, "x", pos().x()));
|
||||
dom_element.appendChild(createXmlProperty(doc, "y", pos().y()));
|
||||
|
||||
// Terminal is uniquely identified by the uuid of the terminal and the element
|
||||
if (terminal1->uuid().isNull()) {
|
||||
// legacy method to identify the terminal
|
||||
dom_element.setAttribute("terminal1", table_adr_id.value(terminal1)); // for backward compability
|
||||
QUuid terminal = terminal1->uuid();
|
||||
QUuid terminalParent = terminal1->parentElement()->uuid();
|
||||
if (terminalParent.isNull() || terminal.isNull()) {
|
||||
// legacy when the terminal does not have a valid uuid
|
||||
// do not store element1 information, because this is used to determine in the fromXml
|
||||
// process that legacy file format
|
||||
dom_element.appendChild(createXmlProperty(doc, "terminal1", terminal1->ID()));
|
||||
} else {
|
||||
dom_element.setAttribute("element1", terminal1->parentElement()->uuid().toString());
|
||||
dom_element.setAttribute("terminal1", terminal1->uuid().toString());
|
||||
dom_element.appendChild(createXmlProperty(doc, "element1", terminalParent));
|
||||
dom_element.appendChild(createXmlProperty(doc, "terminal1", terminal));
|
||||
}
|
||||
|
||||
if (terminal2->uuid().isNull()) {
|
||||
// legacy method to identify the terminal
|
||||
dom_element.setAttribute("terminal2", table_adr_id.value(terminal2)); // for backward compability
|
||||
terminal = terminal2->uuid();
|
||||
terminalParent = terminal2->parentElement()->uuid();
|
||||
if (terminalParent.isNull() || terminal.isNull()) {
|
||||
// legacy when the terminal does not have a valid uuid
|
||||
// do not store element1 information, because this is used to determine in the fromXml
|
||||
// process that legacy file format
|
||||
dom_element.appendChild(createXmlProperty(doc, "terminal2", terminal2->ID()));
|
||||
} else {
|
||||
dom_element.setAttribute("element2", terminal2->parentElement()->uuid().toString());
|
||||
dom_element.setAttribute("terminal2", terminal2->uuid().toString());
|
||||
dom_element.appendChild(createXmlProperty(doc, "element2", terminal2->parentElement()->uuid()));
|
||||
dom_element.appendChild(createXmlProperty(doc, "terminal2", terminal2->uuid()));
|
||||
}
|
||||
dom_element.setAttribute("freezeLabel", m_freeze_label? "true" : "false");
|
||||
|
||||
dom_element.appendChild(createXmlProperty(doc, "freezeLabel", m_freeze_label));
|
||||
|
||||
// on n'exporte les segments du conducteur que si ceux-ci ont
|
||||
// ete modifies par l'utilisateur
|
||||
@@ -1056,35 +1037,92 @@ QDomElement Conductor::toXml(QDomDocument &dom_document,
|
||||
QDomElement current_segment;
|
||||
foreach(ConductorSegment *segment, segmentsList())
|
||||
{
|
||||
current_segment = dom_document.createElement("segment");
|
||||
current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
|
||||
current_segment.setAttribute("length", QString("%1").arg(segment -> length()));
|
||||
current_segment = doc.createElement("segment");
|
||||
current_segment.appendChild(createXmlProperty(doc, "orientation", segment->isHorizontal() ? "horizontal": "vertical"));
|
||||
current_segment.appendChild(createXmlProperty(doc, "length", segment -> length()));
|
||||
dom_element.appendChild(current_segment);
|
||||
}
|
||||
}
|
||||
|
||||
QDomElement dom_seq = m_autoNum_seq.toXml(dom_document);
|
||||
QDomElement dom_seq = m_autoNum_seq.toXml(doc); // swquentialNumbers tag
|
||||
dom_element.appendChild(dom_seq);
|
||||
|
||||
// Export the properties and text
|
||||
m_properties. toXml(dom_element);
|
||||
if(m_text_item->wasMovedByUser())
|
||||
{
|
||||
dom_element.setAttribute("userx", QString::number(m_text_item->pos().x()));
|
||||
dom_element.setAttribute("usery", QString::number(m_text_item->pos().y()));
|
||||
QDomElement conductorProperties = m_properties.toXml(doc);
|
||||
for (int i=0; i < conductorProperties.childNodes().count(); i++) {
|
||||
QDomNode node = conductorProperties.childNodes().at(i).cloneNode(); // cloneNode() is important!
|
||||
dom_element.appendChild(node);
|
||||
}
|
||||
if(m_text_item->wasRotateByUser())
|
||||
dom_element.setAttribute("rotation", QString::number(m_text_item->rotation()));
|
||||
|
||||
m_text_item->toXml(doc, dom_element);
|
||||
|
||||
return(dom_element);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Conductor::pathFromXml
|
||||
Generate the path (of the line) from xml file by checking the segments in the xml
|
||||
file
|
||||
@param e
|
||||
@return true if generate path success else return false
|
||||
Exporte les caracteristiques du conducteur sous forme d'une element XML.
|
||||
@param d Le document XML a utiliser pour creer l'element XML
|
||||
@param table_adr_id Hash stockant les correspondances entre les ids des
|
||||
bornes dans le document XML et leur adresse en memoire
|
||||
@return Un element XML representant le conducteur
|
||||
*/
|
||||
//QDomElement Conductor::toXml(QDomDocument &dom_document, QHash<Terminal *, int> &table_adr_id) const
|
||||
//{
|
||||
// QDomElement dom_element = dom_document.createElement("conductor");
|
||||
|
||||
// dom_element.setAttribute("x", QString::number(pos().x()));
|
||||
// dom_element.setAttribute("y", QString::number(pos().y()));
|
||||
|
||||
// // Terminal is uniquely identified by the uuid of the terminal and the element
|
||||
// if (terminal1->uuid().isNull()) {
|
||||
// // legacy method to identify the terminal
|
||||
// dom_element.setAttribute("terminal1", table_adr_id.value(terminal1)); // for backward compability
|
||||
// } else {
|
||||
// dom_element.setAttribute("element1", terminal1->parentElement()->uuid().toString());
|
||||
// dom_element.setAttribute("terminal1", terminal1->uuid().toString());
|
||||
// }
|
||||
|
||||
// if (terminal2->uuid().isNull()) {
|
||||
// // legacy method to identify the terminal
|
||||
// dom_element.setAttribute("terminal2", table_adr_id.value(terminal2)); // for backward compability
|
||||
// } else {
|
||||
// dom_element.setAttribute("element2", terminal2->parentElement()->uuid().toString());
|
||||
// dom_element.setAttribute("terminal2", terminal2->uuid().toString());
|
||||
// }
|
||||
// dom_element.setAttribute("freezeLabel", m_freeze_label? "true" : "false");
|
||||
|
||||
// // on n'exporte les segments du conducteur que si ceux-ci ont
|
||||
// // ete modifies par l'utilisateur
|
||||
// if (modified_path)
|
||||
// {
|
||||
// // parcours et export des segments
|
||||
// QDomElement current_segment;
|
||||
// foreach(ConductorSegment *segment, segmentsList())
|
||||
// {
|
||||
// current_segment = dom_document.createElement("segment");
|
||||
// current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
|
||||
// current_segment.setAttribute("length", QString("%1").arg(segment -> length()));
|
||||
// dom_element.appendChild(current_segment);
|
||||
// }
|
||||
// }
|
||||
|
||||
// QDomElement dom_seq = m_autoNum_seq.toXml(dom_document);
|
||||
// dom_element.appendChild(dom_seq);
|
||||
|
||||
// // Export the properties and text
|
||||
// m_properties.toXml(dom_document);
|
||||
// if(m_text_item->wasMovedByUser())
|
||||
// {
|
||||
// dom_element.setAttribute("userx", QString::number(m_text_item->pos().x()));
|
||||
// dom_element.setAttribute("usery", QString::number(m_text_item->pos().y()));
|
||||
// }
|
||||
// if(m_text_item->wasRotateByUser())
|
||||
// dom_element.setAttribute("rotation", QString::number(m_text_item->rotation()));
|
||||
|
||||
// return(dom_element);
|
||||
//}
|
||||
|
||||
/**
|
||||
*/
|
||||
bool Conductor::pathFromXml(const QDomElement &e) {
|
||||
// parcourt les elements XML "segment" et en extrait deux listes de longueurs
|
||||
@@ -1096,14 +1134,21 @@ bool Conductor::pathFromXml(const QDomElement &e) {
|
||||
if (current_segment.isNull() || current_segment.tagName() != "segment") continue;
|
||||
|
||||
// le segment doit avoir une longueur
|
||||
if (!current_segment.hasAttribute("length")) continue;
|
||||
qreal segment_length;
|
||||
if (propertyDouble(current_segment, "length", & segment_length))
|
||||
continue;
|
||||
|
||||
// cette longueur doit etre un reel
|
||||
bool ok;
|
||||
qreal segment_length = current_segment.attribute("length").toDouble(&ok);
|
||||
if (!ok) continue;
|
||||
bool isHorizontal = false;
|
||||
QString orientation;
|
||||
if (propertyString(current_segment, "orientation", &orientation) == PropertyFlags::Success) {
|
||||
if (orientation == "horizontal")
|
||||
isHorizontal = true;
|
||||
} else {
|
||||
qDebug() << "PathFromXML failed";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (current_segment.attribute("orientation") == "horizontal") {
|
||||
if (isHorizontal) {
|
||||
segments_x << segment_length;
|
||||
segments_y << 0.0;
|
||||
} else {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#define CONDUCTOR_H
|
||||
|
||||
#include "conductorproperties.h"
|
||||
#include "propertiesinterface.h"
|
||||
#include <QGraphicsPathItem>
|
||||
#include "assignvariables.h"
|
||||
|
||||
@@ -39,7 +40,7 @@ typedef QHash<Qt::Corner, ConductorProfile> ConductorProfilesGroup;
|
||||
This class represents a conductor, i.e. a wire between two element
|
||||
terminals.
|
||||
*/
|
||||
class Conductor : public QGraphicsObject
|
||||
class Conductor : public QGraphicsObject, public PropertiesInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -100,11 +101,9 @@ class Conductor : public QGraphicsObject
|
||||
|
||||
public:
|
||||
static bool valideXml (QDomElement &);
|
||||
bool fromXml (QDomElement &);
|
||||
QDomElement toXml (
|
||||
QDomDocument &,
|
||||
QHash<Terminal *,
|
||||
int> &) const;
|
||||
bool fromXml (const QDomElement &) override;
|
||||
//QDomElement toXml (QDomDocument &, QHash<Terminal *, int> &) const;
|
||||
QDomElement toXml (QDomDocument &doc) const override;
|
||||
private:
|
||||
bool pathFromXml(const QDomElement &);
|
||||
|
||||
@@ -181,28 +180,28 @@ class Conductor : public QGraphicsObject
|
||||
|
||||
QVector<QetGraphicsHandlerItem *> m_handler_vector;
|
||||
int m_vector_index = -1;
|
||||
bool m_mouse_over;
|
||||
bool m_mouse_over{false};
|
||||
/// Functional properties
|
||||
ConductorProperties m_properties;
|
||||
/// Text input for non simple, non-singleline conductors
|
||||
ConductorTextItem *m_text_item;
|
||||
ConductorTextItem *m_text_item{nullptr};
|
||||
/// Segments composing the conductor
|
||||
ConductorSegment *segments;
|
||||
ConductorSegment *segments{nullptr};
|
||||
/// Attributs related to mouse interaction
|
||||
bool m_moving_segment;
|
||||
bool m_moving_segment{false};
|
||||
int moved_point;
|
||||
qreal m_previous_z_value;
|
||||
ConductorSegment *m_moved_segment;
|
||||
QPointF before_mov_text_pos_;
|
||||
/// Whether the conductor was manually modified by users
|
||||
bool modified_path;
|
||||
bool modified_path{false};
|
||||
/// Whether the current profile should be saved as soon as possible
|
||||
bool has_to_save_profile;
|
||||
bool has_to_save_profile{false};
|
||||
/// conductor profile: "photography" of what the conductor is supposed to look
|
||||
/// like - there is one profile per kind of traject
|
||||
ConductorProfilesGroup conductor_profiles;
|
||||
/// Define whether and how the conductor should be highlighted
|
||||
Highlight must_highlight_;
|
||||
Highlight must_highlight_{Conductor::None};
|
||||
bool m_valid;
|
||||
bool m_freeze_label = false;
|
||||
|
||||
|
||||
@@ -26,9 +26,7 @@
|
||||
*/
|
||||
ConductorTextItem::ConductorTextItem(Conductor *parent_conductor) :
|
||||
DiagramTextItem(parent_conductor),
|
||||
parent_conductor_(parent_conductor),
|
||||
moved_by_user_(false),
|
||||
rotate_by_user_(false)
|
||||
parent_conductor_(parent_conductor)
|
||||
{
|
||||
setAcceptHoverEvents(true);
|
||||
}
|
||||
@@ -62,19 +60,34 @@ Conductor *ConductorTextItem::parentConductor() const
|
||||
return(parent_conductor_);
|
||||
}
|
||||
|
||||
void ConductorTextItem::toXml(QDomDocument& doc, QDomElement& e) {
|
||||
if(moved_by_user_)
|
||||
{
|
||||
e.appendChild(PropertiesInterface::createXmlProperty(doc, "userx", pos().x()));
|
||||
e.appendChild(PropertiesInterface::createXmlProperty(doc, "usery", pos().y()));
|
||||
}
|
||||
if(rotate_by_user_)
|
||||
e.appendChild(PropertiesInterface::createXmlProperty(doc, "rotation", rotation()));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief ConductorTextItem::fromXml
|
||||
Read the properties stored in the xml element given in parameter
|
||||
@param e
|
||||
*/
|
||||
void ConductorTextItem::fromXml(const QDomElement &e) {
|
||||
if (e.hasAttribute("userx")) {
|
||||
setPos(e.attribute("userx").toDouble(),
|
||||
e.attribute("usery").toDouble());
|
||||
|
||||
double userx=0, usery=0;
|
||||
if (PropertiesInterface::propertyDouble(e, "userx", &userx) == PropertiesInterface::PropertyFlags::Success &&
|
||||
PropertiesInterface::propertyDouble(e, "usery", &usery) == PropertiesInterface::PropertyFlags::Success) {
|
||||
setPos(userx, usery);
|
||||
moved_by_user_ = true;
|
||||
}
|
||||
if (e.hasAttribute("rotation")) {
|
||||
setRotation(e.attribute("rotation").toDouble());
|
||||
|
||||
double rotation;
|
||||
if (PropertiesInterface::propertyDouble(e, "rotation", &rotation) == PropertiesInterface::PropertyFlags::Success) {
|
||||
setRotation(rotation);
|
||||
rotate_by_user_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ class ConductorTextItem : public DiagramTextItem
|
||||
enum { Type = UserType + 1006 };
|
||||
Conductor *parentConductor() const;
|
||||
void fromXml(const QDomElement &) override;
|
||||
void toXml(QDomDocument& doc, QDomElement& e);
|
||||
int type() const override { return Type; }
|
||||
virtual bool wasMovedByUser() const;
|
||||
virtual bool wasRotateByUser() const;
|
||||
@@ -61,8 +62,8 @@ class ConductorTextItem : public DiagramTextItem
|
||||
// attributes
|
||||
private:
|
||||
Conductor *parent_conductor_;
|
||||
bool moved_by_user_;
|
||||
bool rotate_by_user_;
|
||||
bool moved_by_user_{false};
|
||||
bool rotate_by_user_{false};
|
||||
QPointF before_mov_pos_;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -212,7 +212,7 @@ void DynamicElementTextItem::fromXml(const QDomElement &dom_elmt)
|
||||
setColor(QColor(dom_color.text()));
|
||||
|
||||
//Force the update of the displayed text
|
||||
setTextFrom(m_text_from);
|
||||
setTextFrom(m_text_from); // TODO: does not update because there is a retrun inside if the textfrom argument is the same as m_text_from
|
||||
|
||||
QGraphicsTextItem::setPos(dom_elmt.attribute("x", QString::number(0)).toDouble(),
|
||||
dom_elmt.attribute("y", QString::number(0)).toDouble());
|
||||
|
||||
@@ -152,7 +152,7 @@ class DynamicElementTextItem : public DiagramTextItem
|
||||
QList<QMetaObject::Connection>
|
||||
m_formula_connection,
|
||||
m_update_slave_Xref_connection;
|
||||
QColor m_user_color;
|
||||
QColor m_user_color{QColor()};
|
||||
bool
|
||||
m_frame = false,
|
||||
m_first_scene_change = true;
|
||||
|
||||
@@ -96,7 +96,8 @@ Element::Element(
|
||||
}
|
||||
}
|
||||
int elmt_state;
|
||||
buildFromXml(location.xml(), &elmt_state);
|
||||
qDebug() << "\tCollection Path: " << location.collectionPath();
|
||||
buildFromXml(location.xml(), &elmt_state); // build from the collection definition
|
||||
if (state) {
|
||||
*state = elmt_state;
|
||||
}
|
||||
@@ -387,7 +388,7 @@ void Element::drawHighlight(
|
||||
|
||||
/**
|
||||
@brief Element::buildFromXml
|
||||
Build this element from an xml description
|
||||
Build this element from an xml description (from the collection)
|
||||
@param xml_def_elmt
|
||||
@param state
|
||||
Optional pointer which define the status of build
|
||||
@@ -504,11 +505,15 @@ bool Element::buildFromXml(const QDomElement &xml_def_elmt, int *state)
|
||||
if (qde.isNull())
|
||||
continue;
|
||||
|
||||
if (parseElement(qde)) {
|
||||
qDebug() << "\t\tElement.cpp:buildFromXml;parseElement: " << qde.tagName();
|
||||
|
||||
if (parseElement(qde)) { // TODO: why lines are not parsed here?
|
||||
qDebug() << "\t\t\tParsing Element success";
|
||||
++ parsed_elements_count;
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "\t\t\tParsing Element no success";
|
||||
if (state)
|
||||
*state = 7;
|
||||
m_state = QET::GIOK;
|
||||
@@ -541,7 +546,6 @@ bool Element::buildFromXml(const QDomElement &xml_def_elmt, int *state)
|
||||
m_state = QET::GIOK;
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Element::parseElement
|
||||
@@ -644,13 +648,11 @@ DynamicElementTextItem *Element::parseDynamicText(
|
||||
*/
|
||||
Terminal *Element::parseTerminal(const QDomElement &dom_element)
|
||||
{
|
||||
TerminalData* data = new TerminalData();
|
||||
if (!data->fromXml(dom_element)) {
|
||||
delete data;
|
||||
if (!Terminal::valideXml(dom_element))
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Terminal *new_terminal = new Terminal(data, this);
|
||||
Terminal *new_terminal = new Terminal(0, 0, Qet::Orientation::North, this); // does not matter which values are typed in here, because they get overwritten by the fromXML() function
|
||||
new_terminal->fromXml(dom_element);
|
||||
m_terminals << new_terminal;
|
||||
|
||||
//Sort from top to bottom and left to rigth
|
||||
@@ -665,7 +667,7 @@ Terminal *Element::parseTerminal(const QDomElement &dom_element)
|
||||
return (a->dockConductor().y() < b->dockConductor().y());
|
||||
});
|
||||
|
||||
return(new_terminal);
|
||||
return(new_terminal); // TODO: makes no sense
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -715,7 +717,7 @@ bool Element::fromXml(
|
||||
les bornes vont maintenant etre recensees pour associer leurs id a leur adresse reelle
|
||||
ce recensement servira lors de la mise en place des fils
|
||||
*/
|
||||
QList<QDomElement> liste_terminals;
|
||||
QList<QDomElement> liste_terminals; // terminals in the element in the diagram
|
||||
foreach(QDomElement qde,
|
||||
QET::findInDomElement(e, "terminals", "terminal")) {
|
||||
if (Terminal::valideXml(qde)) liste_terminals << qde;
|
||||
@@ -723,15 +725,29 @@ bool Element::fromXml(
|
||||
|
||||
QHash<int, Terminal *> priv_id_adr;
|
||||
int terminals_non_trouvees = 0;
|
||||
foreach(QGraphicsItem *qgi, childItems()) {
|
||||
// The added childs from the collection now must match with the terminals from the diagram. Iterate through
|
||||
// all Terminals in the collection and in the diagram to link them together
|
||||
for(QGraphicsItem *qgi: childItems()) { // TODO: Where the Terminals are added as childs?
|
||||
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) {
|
||||
bool terminal_trouvee = false;
|
||||
foreach(QDomElement qde, liste_terminals) {
|
||||
if (p -> fromXml(qde)) {
|
||||
priv_id_adr.insert(
|
||||
qde.attribute(
|
||||
"id").toInt(),
|
||||
p);
|
||||
for(QDomElement qde: liste_terminals) {
|
||||
// The position in the collection element definition is the origin position (originPos).
|
||||
// The position in the diagram element definition is the position where the conductor is connected (dock position)
|
||||
// Therefore a simple operator overloading is not possible.
|
||||
Terminal diagramTerminal(0,0, Qet::Orientation::East);
|
||||
diagramTerminal.fromXml(qde);
|
||||
QPointF dockPos1 = diagramTerminal.originPos(); // position here is directly the dock_elmt_ position (stored in the diagram)
|
||||
QPointF dockPos2 = p->dockPos();
|
||||
if (qFuzzyCompare(dockPos1.x(), dockPos2.x()) &&
|
||||
qFuzzyCompare(dockPos1.y(), dockPos2.y()) &&
|
||||
p->orientation() == diagramTerminal.orientation()) { // check if the part in the collection is the same as in the diagram stored
|
||||
qDebug() << "Matching Terminal found.";
|
||||
// store id for legacy purpose, because when opening a old project in the collection the terminal does not have an uuid. Therefore the id must be used
|
||||
if (p->uuid().isNull()) {
|
||||
p->setID(qde.attribute("id").toInt());
|
||||
}
|
||||
|
||||
priv_id_adr.insert(qde.attribute("id").toInt(), p);
|
||||
terminal_trouvee = true;
|
||||
// We used to break here, because we did not expect
|
||||
// several terminals to share the same position.
|
||||
@@ -744,6 +760,7 @@ bool Element::fromXml(
|
||||
|
||||
if (terminals_non_trouvees > 0)
|
||||
{
|
||||
qDebug() << "element.cpp: Element::fromXML; Elements not found: " << terminals_non_trouvees;
|
||||
m_state = QET::GIOK;
|
||||
return(false);
|
||||
}
|
||||
@@ -761,15 +778,15 @@ bool Element::fromXml(
|
||||
}
|
||||
// copie des associations id / adr
|
||||
foreach(int id_trouve, priv_id_adr.keys()) {
|
||||
table_id_adr.insert(id_trouve,
|
||||
table_id_adr.insert(id_trouve, priv_id_adr.value(id_trouve));
|
||||
priv_id_adr.value(id_trouve));
|
||||
}
|
||||
}
|
||||
|
||||
//load uuid of connected elements
|
||||
QList <QDomElement> uuid_list = QET::findInDomElement(e,
|
||||
"links_uuids",
|
||||
"link_uuid");
|
||||
QList <QDomElement> uuid_list = QET::findInDomElement(e, "links_uuids", "link_uuid");
|
||||
foreach (QDomElement qdo, uuid_list) tmp_uuids_link << qdo.attribute("uuid");
|
||||
|
||||
foreach (QDomElement qdo, uuid_list)
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove
|
||||
tmp_uuids_link << qdo.attribute("uuid");
|
||||
@@ -823,7 +840,7 @@ bool Element::fromXml(
|
||||
|
||||
//************************//
|
||||
//***Dynamic texts item***//
|
||||
//************************//
|
||||
//************************// read from the diagram section
|
||||
for (const QDomElement& qde : QET::findInDomElement(
|
||||
e,
|
||||
"dynamic_texts",
|
||||
@@ -837,7 +854,7 @@ bool Element::fromXml(
|
||||
//************************//
|
||||
//***Element texts item***//
|
||||
//************************//
|
||||
QList<QDomElement> inputs = QET::findInDomElement(e, "inputs", "input");
|
||||
QList<QDomElement> inputs = QET::findInDomElement(e, "inputs", "input"); // inputs in diagram section
|
||||
|
||||
//First case, we check for the text item converted to dynamic text item
|
||||
const QList <DynamicElementTextItem *> conv_deti_list =
|
||||
@@ -1194,18 +1211,7 @@ QDomElement Element::toXml(
|
||||
element.setAttribute("z", QString::number(this->zValue()));
|
||||
element.setAttribute("orientation", QString::number(orientation()));
|
||||
|
||||
/* get the first id to use for the bounds of this element
|
||||
* recupere le premier id a utiliser pour les bornes de cet element */
|
||||
int id_terminal = 0;
|
||||
if (!table_adr_id.isEmpty()) {
|
||||
// trouve le plus grand id
|
||||
int max_id_t = -1;
|
||||
foreach (int id_t, table_adr_id.values()) {
|
||||
if (id_t > max_id_t) max_id_t = id_t;
|
||||
}
|
||||
id_terminal = max_id_t + 1;
|
||||
}
|
||||
|
||||
// registration of device terminals
|
||||
// enregistrement des bornes de l'appareil
|
||||
QDomElement xml_terminals = document.createElement("terminals");
|
||||
@@ -1214,8 +1220,10 @@ QDomElement Element::toXml(
|
||||
foreach(Terminal *t, terminals()) {
|
||||
// alors on enregistre la borne
|
||||
QDomElement terminal = t -> toXml(document);
|
||||
terminal.setAttribute("id", id_terminal); // for backward compatibility
|
||||
table_adr_id.insert(t, id_terminal ++);
|
||||
if (t->ID() > 0) {
|
||||
// for backward compatibility
|
||||
terminal.setAttribute("id", t->ID()); // for backward compatibility
|
||||
}
|
||||
xml_terminals.appendChild(terminal);
|
||||
}
|
||||
element.appendChild(xml_terminals);
|
||||
|
||||
@@ -38,7 +38,7 @@ class ElementTextItemGroup;
|
||||
/**
|
||||
This is the base class for electrical elements.
|
||||
*/
|
||||
class Element : public QetGraphicsItem
|
||||
class Element : public QetGraphicsItem // TODO: derive from propertiesInterface!
|
||||
{
|
||||
friend class DiagramEventAddElement;
|
||||
|
||||
@@ -130,14 +130,8 @@ class Element : public QetGraphicsItem
|
||||
QPoint hotspot() const;
|
||||
void editProperty() override;
|
||||
static bool valideXml(QDomElement &);
|
||||
virtual bool fromXml(
|
||||
QDomElement &,
|
||||
QHash<int,
|
||||
Terminal *> &);
|
||||
virtual QDomElement toXml(
|
||||
QDomDocument &,
|
||||
QHash<Terminal *,
|
||||
int> &) const;
|
||||
virtual bool fromXml(QDomElement &, QHash<int, Terminal *> &, bool = false);
|
||||
virtual QDomElement toXml(QDomDocument &) const;
|
||||
QUuid uuid() const;
|
||||
int orientation() const;
|
||||
|
||||
|
||||
@@ -437,6 +437,7 @@ QDomElement ElementTextItemGroup::toXml(QDomDocument &dom_document) const
|
||||
return dom_element;
|
||||
}
|
||||
|
||||
// TOOD: inherit from propertiesinterface
|
||||
/**
|
||||
@brief ElementTextItemGroup::fromXml
|
||||
Import data of this group from xml
|
||||
|
||||
@@ -32,7 +32,7 @@ class CrossRefItem;
|
||||
This class represent a group of element text
|
||||
Texts in the group can be aligned left / center /right
|
||||
*/
|
||||
class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
|
||||
class ElementTextItemGroup : public QObject, public QGraphicsItemGroup // TODO: derive from PropertiesInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -112,7 +112,7 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
|
||||
m_hold_to_bottom_of_page = false,
|
||||
m_block_alignment_update = false,
|
||||
m_frame = false;
|
||||
QPointF m_initial_position;
|
||||
QPointF m_initial_position{QPointF(0,0)};
|
||||
int m_vertical_adjustment = 0;
|
||||
CrossRefItem *m_Xref_item = nullptr;
|
||||
Element *m_parent_element = nullptr;
|
||||
|
||||
@@ -50,6 +50,7 @@ IndependentTextItem::~IndependentTextItem()
|
||||
{
|
||||
}
|
||||
|
||||
// TODO: inherit from PropertiesInterface
|
||||
/**
|
||||
Permet de lire le texte a mettre dans le champ a partir d'un element XML.
|
||||
Cette methode se base sur la position du champ pour assigner ou non la
|
||||
|
||||
@@ -24,10 +24,7 @@
|
||||
@param parent : Parent Item
|
||||
*/
|
||||
QetGraphicsItem::QetGraphicsItem(QGraphicsItem *parent):
|
||||
QGraphicsObject(parent),
|
||||
is_movable_(true),
|
||||
m_first_move(true),
|
||||
snap_to_grid_(true)
|
||||
QGraphicsObject(parent)
|
||||
{}
|
||||
|
||||
QetGraphicsItem::~QetGraphicsItem()
|
||||
|
||||
@@ -55,10 +55,10 @@ class QetGraphicsItem : public QGraphicsObject
|
||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
|
||||
|
||||
protected:
|
||||
bool is_movable_;
|
||||
bool m_first_move;
|
||||
bool snap_to_grid_;
|
||||
QPointF m_mouse_to_origin_movement;
|
||||
bool is_movable_{true};
|
||||
bool m_first_move{true};
|
||||
bool snap_to_grid_{true};
|
||||
QPointF m_mouse_to_origin_movement{QPointF(0,0)};
|
||||
QET::GraphicsItemState m_state = QET:: GIOK;
|
||||
|
||||
};
|
||||
|
||||
@@ -835,6 +835,7 @@ void QetShapeItem::handlerMouseReleaseEvent()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: inherit from Propertiesinterface!
|
||||
/**
|
||||
@brief QetShapeItem::fromXml
|
||||
Build this item from the xml description
|
||||
|
||||
@@ -35,7 +35,7 @@ class SlaveElement : public Element
|
||||
void unlinkElement(Element *elmt) override;
|
||||
|
||||
private:
|
||||
QGraphicsTextItem *m_xref_item;
|
||||
QGraphicsTextItem *m_xref_item{nullptr};
|
||||
};
|
||||
|
||||
#endif // SLAVEELEMENT_H
|
||||
|
||||
@@ -30,7 +30,7 @@ QColor Terminal::neutralColor = QColor(Qt::blue);
|
||||
QColor Terminal::allowedColor = QColor(Qt::darkGreen);
|
||||
QColor Terminal::warningColor = QColor("#ff8000");
|
||||
QColor Terminal::forbiddenColor = QColor(Qt::red);
|
||||
const qreal Terminal::terminalSize = 4.0;
|
||||
const qreal Terminal::terminalSize = 4.0; // TODO: store terminalSize in terminaldata, because in PartTerminal there is the same parameter. So only one is needed
|
||||
const qreal Terminal::Z = 1000;
|
||||
|
||||
/**
|
||||
@@ -43,8 +43,6 @@ const qreal Terminal::Z = 1000;
|
||||
void Terminal::init(
|
||||
QString number, QString name, bool hiddenName)
|
||||
{
|
||||
hovered_color_ = Terminal::neutralColor;
|
||||
|
||||
// calcul de la position du point d'amarrage a l'element
|
||||
dock_elmt_ = d->m_pos;
|
||||
switch(d->m_orientation) {
|
||||
@@ -57,17 +55,15 @@ void Terminal::init(
|
||||
// Number of terminal
|
||||
number_terminal_ = std::move(number);
|
||||
// Name of terminal
|
||||
name_terminal_ = std::move(name);
|
||||
d->m_name = std::move(name);
|
||||
name_terminal_hidden = hiddenName;
|
||||
// par defaut : pas de conducteur
|
||||
|
||||
// QRectF null
|
||||
br_ = new QRectF();
|
||||
previous_terminal_ = nullptr;
|
||||
// divers
|
||||
setAcceptHoverEvents(true);
|
||||
setAcceptedMouseButtons(Qt::LeftButton);
|
||||
hovered_ = false;
|
||||
setToolTip(QObject::tr("Borne", "tooltip"));
|
||||
setZValue(Z);
|
||||
}
|
||||
@@ -213,11 +209,18 @@ void Terminal::setNumber(QString number)
|
||||
@param hiddenName : bool
|
||||
*/
|
||||
void Terminal::setName(QString name, bool hiddenName)
|
||||
{
|
||||
name_terminal_ = std::move(name);
|
||||
d->m_name = std::move(name);
|
||||
name_terminal_hidden = hiddenName;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Terminal::name
|
||||
@return the name of terminal.
|
||||
*/
|
||||
inline QString Terminal::name() const {
|
||||
return(d->m_name);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Terminal::addConductor
|
||||
Add a conductor to this terminal
|
||||
@@ -745,6 +748,10 @@ bool Terminal::canBeLinkedTo(Terminal *other_terminal)
|
||||
return true;
|
||||
}
|
||||
|
||||
void Terminal::setID(int id) {
|
||||
m_id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Terminal::conductors
|
||||
@return La liste des conducteurs lies a cette borne
|
||||
@@ -764,15 +771,24 @@ QDomElement Terminal::toXml(QDomDocument &doc) const
|
||||
{
|
||||
QDomElement qdo = doc.createElement("terminal");
|
||||
|
||||
// for backward compatibility
|
||||
qdo.setAttribute("x", QString("%1").arg(dock_elmt_.x()));
|
||||
qdo.setAttribute("y", QString("%1").arg(dock_elmt_.y()));
|
||||
// end for backward compatibility
|
||||
qdo.appendChild(createXmlProperty(doc, "number", number_terminal_));
|
||||
qdo.appendChild(createXmlProperty(doc, "nameHidden", name_terminal_hidden));
|
||||
|
||||
// store terminal data too!
|
||||
|
||||
// Do not store terminal data in its own child
|
||||
// Bad hack. The problem is that in the diagrams the terminal is described by the position and in the Collection by the dock.
|
||||
QPointF tempPos = d->m_pos;
|
||||
d->m_pos = dock_elmt_;
|
||||
QDomElement terminalDataElement = d->toXml(doc);
|
||||
d->m_pos = tempPos;
|
||||
|
||||
int childsCount = terminalDataElement.childNodes().count();
|
||||
for (int i=0; i < childsCount; i++) {
|
||||
QDomNode node = terminalDataElement.childNodes().at(i).cloneNode(); // cloneNode() is important, otherwise no deep clone is made
|
||||
qdo.appendChild(node);
|
||||
}
|
||||
|
||||
qdo.setAttribute("orientation", d->m_orientation);
|
||||
qdo.setAttribute("number", number_terminal_);
|
||||
qdo.setAttribute("name", name_terminal_);
|
||||
qdo.setAttribute("nameHidden", name_terminal_hidden);
|
||||
return(qdo);
|
||||
}
|
||||
|
||||
@@ -782,42 +798,25 @@ QDomElement Terminal::toXml(QDomDocument &doc) const
|
||||
@param terminal Le QDomElement a analyser
|
||||
@return true si le QDomElement passe en parametre est une borne, false sinon
|
||||
*/
|
||||
bool Terminal::valideXml(QDomElement &terminal)
|
||||
bool Terminal::valideXml(const QDomElement &terminal) {
|
||||
{
|
||||
// verifie le nom du tag
|
||||
if (terminal.tagName() != "terminal") return(false);
|
||||
|
||||
// verifie la presence des attributs minimaux
|
||||
if (!terminal.hasAttribute("x")) return(false);
|
||||
if (!terminal.hasAttribute("y")) return(false);
|
||||
if (!terminal.hasAttribute("orientation")) return(false);
|
||||
// affuteuse_250h.qet contains in line 8398 terminals which do not have this
|
||||
// if (propertyString(terminal, "number"))
|
||||
// return false;
|
||||
// affuteuse_250h.qet contains in line 8398 terminals which do not have this
|
||||
// if (propertyBool(terminal, "nameHidden"))
|
||||
// return false;
|
||||
|
||||
bool conv_ok;
|
||||
// parse l'abscisse
|
||||
terminal.attribute("x").toDouble(&conv_ok);
|
||||
if (!conv_ok) return(false);
|
||||
|
||||
// parse l'ordonnee
|
||||
terminal.attribute("y").toDouble(&conv_ok);
|
||||
if (!conv_ok) return(false);
|
||||
|
||||
// parse l'id
|
||||
terminal.attribute("id").toInt(&conv_ok);
|
||||
if (!conv_ok) return(false);
|
||||
|
||||
// parse l'orientation
|
||||
int terminal_or = terminal.attribute("orientation").toInt(&conv_ok);
|
||||
if (!conv_ok) return(false);
|
||||
if (terminal_or != Qet::North
|
||||
&& terminal_or != Qet::South
|
||||
&& terminal_or != Qet::East
|
||||
&& terminal_or != Qet::West) return(false);
|
||||
if (!TerminalData::valideXml(terminal))
|
||||
return false;
|
||||
|
||||
// a ce stade, la borne est syntaxiquement correcte
|
||||
return(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
/** RETURNS True
|
||||
@brief Terminal::fromXml
|
||||
Permet de savoir si un element XML represente cette borne. Attention,
|
||||
l'element XML n'est pas verifie
|
||||
@@ -825,17 +824,17 @@ bool Terminal::valideXml(QDomElement &terminal)
|
||||
@return true si la borne "se reconnait"
|
||||
(memes coordonnes, meme orientation), false sinon
|
||||
*/
|
||||
bool Terminal::fromXml(QDomElement &terminal)
|
||||
{
|
||||
number_terminal_ = terminal.attribute("number");
|
||||
name_terminal_ = terminal.attribute("name");
|
||||
name_terminal_hidden = terminal.attribute("nameHidden").toInt();
|
||||
bool Terminal::fromXml(const QDomElement &terminal) {
|
||||
propertyString(terminal, "number", &number_terminal_);
|
||||
|
||||
return (
|
||||
qFuzzyCompare(terminal.attribute("x").toDouble(), dock_elmt_.x()) &&
|
||||
qFuzzyCompare(terminal.attribute("y").toDouble(), dock_elmt_.y()) &&
|
||||
(terminal.attribute("orientation").toInt() == d->m_orientation)
|
||||
);
|
||||
propertyBool(terminal, "nameHidden", &name_terminal_hidden);
|
||||
|
||||
if(!d->fromXml(terminal))
|
||||
return false;
|
||||
|
||||
|
||||
init(number_terminal_, d->m_name, name_terminal_hidden); // initialize dock_elmt_. This must be done after Terminal data is initialized
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -872,6 +871,18 @@ QUuid Terminal::uuid() const
|
||||
return d->m_uuid;
|
||||
}
|
||||
|
||||
int Terminal::ID() const {
|
||||
return m_id;
|
||||
}
|
||||
|
||||
QPointF Terminal::dockPos() {
|
||||
return dock_elmt_;
|
||||
}
|
||||
|
||||
QPointF Terminal::originPos() {
|
||||
return d->m_pos;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Conductor::relatedPotentialTerminal
|
||||
Return terminal at the same potential from the same
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include <QtWidgets>
|
||||
#include <QtXml>
|
||||
#include "qet.h"
|
||||
#include "propertiesinterface.h"
|
||||
|
||||
class Conductor;
|
||||
class Diagram;
|
||||
class Element;
|
||||
@@ -31,7 +33,7 @@ class TerminalData;
|
||||
plug point for conductors.
|
||||
This class handles all mouse events for connecting conductors
|
||||
*/
|
||||
class Terminal : public QGraphicsObject
|
||||
class Terminal : public QGraphicsObject, public PropertiesInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -77,6 +79,9 @@ class Terminal : public QGraphicsObject
|
||||
Diagram *diagram () const;
|
||||
Element *parentElement () const;
|
||||
QUuid uuid () const;
|
||||
int ID() const;
|
||||
QPointF dockPos();
|
||||
QPointF originPos();
|
||||
|
||||
QList<Conductor *> conductors() const;
|
||||
Qet::Orientation orientation() const;
|
||||
@@ -88,11 +93,12 @@ class Terminal : public QGraphicsObject
|
||||
void updateConductor();
|
||||
bool isLinkedTo(Terminal *);
|
||||
bool canBeLinkedTo(Terminal *);
|
||||
void setID(int id);
|
||||
|
||||
// methods related to XML import/export
|
||||
static bool valideXml(QDomElement &);
|
||||
bool fromXml (QDomElement &);
|
||||
QDomElement toXml (QDomDocument &) const;
|
||||
static bool valideXml(const QDomElement &);
|
||||
bool fromXml (const QDomElement &) override;
|
||||
QDomElement toXml (QDomDocument &) const override;
|
||||
|
||||
protected:
|
||||
// methods related to events management
|
||||
@@ -110,6 +116,7 @@ class Terminal : public QGraphicsObject
|
||||
static const qreal terminalSize;
|
||||
static const qreal Z;
|
||||
// Various static colors used for hover effects
|
||||
// The assignement is in the cpp file
|
||||
/// default color
|
||||
static QColor neutralColor;
|
||||
/// color for legal actions
|
||||
@@ -142,16 +149,17 @@ class Terminal : public QGraphicsObject
|
||||
*/
|
||||
QRectF *br_{nullptr};
|
||||
/// Last terminal seen through an attached conductor
|
||||
Terminal *previous_terminal_;
|
||||
Terminal *previous_terminal_{nullptr};
|
||||
/// Whether the mouse pointer is hovering the terminal
|
||||
bool hovered_;
|
||||
bool hovered_{false};
|
||||
/// Color used for the hover effect
|
||||
QColor hovered_color_;
|
||||
QColor hovered_color_{Terminal::hovered_color_};
|
||||
/// Number of Terminal
|
||||
QString number_terminal_;
|
||||
/// Name of Terminal
|
||||
QString name_terminal_;
|
||||
bool name_terminal_hidden;
|
||||
bool name_terminal_hidden{true};
|
||||
|
||||
/// legacy id used by the conductor to find the terminal. From 0.8x on the uuid is used instead.
|
||||
int m_id{-1};
|
||||
|
||||
private:
|
||||
void init(QString number, QString name, bool hiddenName);
|
||||
@@ -177,15 +185,7 @@ inline QString Terminal::number() const
|
||||
return(number_terminal_);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Terminal::name
|
||||
@return the name of terminal.
|
||||
*/
|
||||
inline QString Terminal::name() const
|
||||
{
|
||||
return(name_terminal_);
|
||||
}
|
||||
|
||||
QList<Terminal *> relatedPotentialTerminal (const Terminal *terminal,
|
||||
const bool all_diagram = true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user