Bug fix : in some condition element are not loaded when open a project

If an element are overwrite by a modified element and the terminals of
the modified element are moved, the old element is not loaded because
some terminal are not found.
This commit remove the checking of not found terminal because it's
useless now.
This commit is contained in:
joshua 2021-09-07 22:23:43 +02:00
parent 07e38236d2
commit a765fe24be

View File

@ -729,51 +729,38 @@ bool Element::fromXml(QDomElement &e,
} }
QHash<int, Terminal *> priv_id_adr; QHash<int, Terminal *> priv_id_adr;
int terminals_non_trouvees = 0;
for (auto *qgi : childItems()) for (auto *qgi : childItems())
{ {
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) if (auto terminal_ = qgraphicsitem_cast<Terminal *>(qgi))
{ {
bool terminal_trouvee = false;
for(auto qde : liste_terminals) for(auto qde : liste_terminals)
{ {
if (p -> fromXml(qde)) if (terminal_ -> fromXml(qde))
{ {
priv_id_adr.insert(qde.attribute(QStringLiteral("id")).toInt(), priv_id_adr.insert(qde.attribute(QStringLiteral("id")).toInt(),
p); terminal_);
terminal_trouvee = true;
// We used to break here, because we did not expect
// several terminals to share the same position.
// Of course, it finally happened.
} }
} }
if (!terminal_trouvee) ++ terminals_non_trouvees;
} }
} }
if (terminals_non_trouvees > 0)
//Check that associated id/adress doesn't conflict with table_id_adr
for(auto found_id : priv_id_adr.keys())
{ {
m_state = QET::GIOK; if (table_id_adr.contains(found_id))
return(false);
}
else
{ {
// verifie que les associations id / adr n'entrent pas en conflit avec table_id_adr //This element got an id who is already referenced (= conflict)
foreach(int id_trouve, priv_id_adr.keys())
{
if (table_id_adr.contains(id_trouve))
{
// cet element possede un id qui est deja reference (= conflit)
m_state = QET::GIOK; m_state = QET::GIOK;
return(false); return(false);
} }
} }
// copie des associations id / adr
foreach(int id_trouve, priv_id_adr.keys()) { //Copie the association id/adress
table_id_adr.insert(id_trouve, for(auto found_id : priv_id_adr.keys()) {
priv_id_adr.value(id_trouve)); table_id_adr.insert(found_id,
} priv_id_adr.value(found_id));
} }
//load uuid of connected elements //load uuid of connected elements