Browse Source

fix old memders of uiml <frame> element weere not removed from the view cleanly when the uiml were updated

Kolja Strohm 8 months ago
parent
commit
232399ef60
1 changed files with 10 additions and 1 deletions
  1. 10 1
      UIMLView.cpp

+ 10 - 1
UIMLView.cpp

@@ -890,16 +890,21 @@ bool Framework::UIMLFrame::updateElement(
 {
     Fenster* f = dynamic_cast<Fenster*>(&z);
     if (!f) return false;
-    for (auto member = f->getMembers().begin(); member; member++)
+    for (auto member = f->getMembers().begin(); member; )
     { // remove all members that are not in the xml
         if (!element
                  .selectChildsByAttribute(
                      "id", generalFactory.getZeichnungId(*member.val()))
                  .exists())
         {
+            generalFactory.removeZeichnung(*member.val());
             member.remove();
             f->setRender();
         }
+        else
+        {
+            member++;
+        }
     }
     int index = 0;
     for (auto i = element.getChilds(); i; i++)
@@ -909,6 +914,10 @@ bool Framework::UIMLFrame::updateElement(
         if (!id.getLength() || !z || f->getMembers().indexOf(z) < 0
             || !generalFactory.updateElement(*i.val(), *z, generalFactory))
         {
+            if (f->getMembers().indexOf(z) >= 0)
+            {
+                f->removeMember(z);
+            }
             if (z) generalFactory.removeZeichnung(*z);
             z = generalFactory.parseElement(*i.val(), generalFactory);
             if (z) f->addMember(z);