Przeglądaj źródła

fix crash when uiml align tags contained invalid ids

Kolja Strohm 4 miesięcy temu
rodzic
commit
6d2fe64e26
1 zmienionych plików z 65 dodań i 47 usunięć
  1. 65 47
      UIMLView.cpp

+ 65 - 47
UIMLView.cpp

@@ -64,13 +64,16 @@ void UIMLElement::layout(XML::Element& element,
         {
             XML::Editor ed
                 = element.zParent()->selectChildsByAttribute("id", la);
-            generalLayouter.layout(*ed.begin().val(),
-                *generalLayouter.zZeichnungById(la),
-                pWidth,
-                pHeight,
-                generalLayouter);
-            Zeichnung* laz = generalLayouter.zZeichnungById(la);
-            if (laz) x = laz->getX();
+            if (ed.exists())
+            {
+                generalLayouter.layout(*ed.begin().val(),
+                    *generalLayouter.zZeichnungById(la),
+                    pWidth,
+                    pHeight,
+                    generalLayouter);
+                Zeichnung* laz = generalLayouter.zZeichnungById(la);
+                if (laz) x = laz->getX();
+            }
         }
         if (element.hasAttribute("margin-x"))
         {
@@ -93,13 +96,16 @@ void UIMLElement::layout(XML::Element& element,
         {
             XML::Editor ed
                 = element.zParent()->selectChildsByAttribute("id", la);
-            generalLayouter.layout(*ed.begin().val(),
-                *generalLayouter.zZeichnungById(la),
-                pWidth,
-                pHeight,
-                generalLayouter);
-            Zeichnung* laz = generalLayouter.zZeichnungById(la);
-            if (laz) x = laz->getX() + laz->getBreite();
+            if (ed.exists())
+            {
+                generalLayouter.layout(*ed.begin().val(),
+                    *generalLayouter.zZeichnungById(la),
+                    pWidth,
+                    pHeight,
+                    generalLayouter);
+                Zeichnung* laz = generalLayouter.zZeichnungById(la);
+                if (laz) x = laz->getX() + laz->getBreite();
+            }
         }
         if (element.hasAttribute("margin-left"))
         {
@@ -122,13 +128,16 @@ void UIMLElement::layout(XML::Element& element,
         {
             XML::Editor ed
                 = element.zParent()->selectChildsByAttribute("id", ra);
-            generalLayouter.layout(*ed.begin().val(),
-                *generalLayouter.zZeichnungById(ra),
-                pWidth,
-                pHeight,
-                generalLayouter);
-            Zeichnung* raz = generalLayouter.zZeichnungById(ra);
-            if (raz) x = raz->getX() - z.getBreite();
+            if (ed.exists())
+            {
+                generalLayouter.layout(*ed.begin().val(),
+                    *generalLayouter.zZeichnungById(ra),
+                    pWidth,
+                    pHeight,
+                    generalLayouter);
+                Zeichnung* raz = generalLayouter.zZeichnungById(ra);
+                if (raz) x = raz->getX() - z.getBreite();
+            }
         }
         if (element.hasAttribute("margin-right"))
         {
@@ -151,13 +160,16 @@ void UIMLElement::layout(XML::Element& element,
         {
             XML::Editor ed
                 = element.zParent()->selectChildsByAttribute("id", ta);
-            generalLayouter.layout(*ed.begin().val(),
-                *generalLayouter.zZeichnungById(ta),
-                pWidth,
-                pHeight,
-                generalLayouter);
-            Zeichnung* taz = generalLayouter.zZeichnungById(ta);
-            if (taz) y = taz->getY();
+            if (ed.exists())
+            {
+                generalLayouter.layout(*ed.begin().val(),
+                    *generalLayouter.zZeichnungById(ta),
+                    pWidth,
+                    pHeight,
+                    generalLayouter);
+                Zeichnung* taz = generalLayouter.zZeichnungById(ta);
+                if (taz) y = taz->getY();
+            }
         }
         if (element.hasAttribute("margin-y"))
         {
@@ -180,13 +192,16 @@ void UIMLElement::layout(XML::Element& element,
         {
             XML::Editor ed
                 = element.zParent()->selectChildsByAttribute("id", ta);
-            generalLayouter.layout(*ed.begin().val(),
-                *generalLayouter.zZeichnungById(ta),
-                pWidth,
-                pHeight,
-                generalLayouter);
-            Zeichnung* taz = generalLayouter.zZeichnungById(ta);
-            if (taz) y = taz->getY() + taz->getHeight();
+            if (ed.exists())
+            {
+                generalLayouter.layout(*ed.begin().val(),
+                    *generalLayouter.zZeichnungById(ta),
+                    pWidth,
+                    pHeight,
+                    generalLayouter);
+                Zeichnung* taz = generalLayouter.zZeichnungById(ta);
+                if (taz) y = taz->getY() + taz->getHeight();
+            }
         }
         if (element.hasAttribute("margin-top"))
         {
@@ -209,13 +224,16 @@ void UIMLElement::layout(XML::Element& element,
         {
             XML::Editor ed
                 = element.zParent()->selectChildsByAttribute("id", ba);
-            generalLayouter.layout(*ed.begin().val(),
-                *generalLayouter.zZeichnungById(ba),
-                pWidth,
-                pHeight,
-                generalLayouter);
-            Zeichnung* baz = generalLayouter.zZeichnungById(ba);
-            if (baz) y = baz->getY() - z.getHeight();
+            if (ed.exists())
+            {
+                generalLayouter.layout(*ed.begin().val(),
+                    *generalLayouter.zZeichnungById(ba),
+                    pWidth,
+                    pHeight,
+                    generalLayouter);
+                Zeichnung* baz = generalLayouter.zZeichnungById(ba);
+                if (baz) y = baz->getY() - z.getHeight();
+            }
         }
         if (element.hasAttribute("margin-bottom"))
         {
@@ -816,8 +834,8 @@ DLLEXPORT bool Framework::UIMLTable::updateElement(
     for (int i = 0; i < t->getZeilenAnzahl(); i++)
     { // remove all lines that are not in the xml
         if (!element.selectChildsByName("tr")
-                 .whereAttributeEquals("id", *t->zZeilenName(i))
-                 .exists())
+                .whereAttributeEquals("id", *t->zZeilenName(i))
+                .exists())
         {
             t->removeZeile(i);
             i--;
@@ -1459,8 +1477,8 @@ Zeichnung* UIMLView::parseElement(
                 {
                     for (auto j = i->getAttributeNames(),
                               k = i->getAttributeValues();
-                         j && k;
-                         j++, k++)
+                        j && k;
+                        j++, k++)
                     {
                         if (!element.hasAttribute(j->getText()))
                             element.setAttribute(j->getText(), i->getText());
@@ -1522,7 +1540,7 @@ Zeichnung* UIMLView::parseElement(
                                            RCPointer<XML::Element> element) {
                                 return onMemberKeyboardEvent
                                          ? onMemberKeyboardEvent(
-                                             *element, *z, te)
+                                               *element, *z, te)
                                          : 0;
                             })
                             .orElse(0);