]> git.jsancho.org Git - kivyforms.git/blobdiff - kivyforms/formcanvas.py
Create boxes only when needed
[kivyforms.git] / kivyforms / formcanvas.py
index 0f8f2fee5d4e17aad23b8c1c5a0a51910dc97a99..0e233fbf5836066ee01215332820b43fbf05b346 100644 (file)
@@ -64,26 +64,25 @@ class Grabbable(BoxLayout):
         self.size_hint = self.form_canvas.widgets_size_hint
 
         for widget in self.form_canvas.walk(restrict=True):
-            if type(widget) is Grabbable and widget.collide_point(x, y):
+            if isinstance(widget, Grabbable) and widget.collide_point(x, y):
                 idx = widget.get_index()
                 if widget.point_area == 'top':
                     widget.parent.add_widget(self, index=idx + 1)
                 elif widget.point_area == 'bottom':
                     widget.parent.add_widget(self, index=idx)
-                elif widget.point_area == 'left':
-                    parent = widget.parent
-                    box = parent.create_box()
-                    parent.add_widget(box, index=idx)
-                    box.add_widget(self)
-                    parent.remove_widget(widget)
-                    box.add_widget(widget)
                 else:
                     parent = widget.parent
-                    box = parent.create_box()
-                    parent.add_widget(box, index=idx)
-                    parent.remove_widget(widget)
-                    box.add_widget(widget)
-                    box.add_widget(self)
+                    if not isinstance(parent, BoxLayout):
+                        box = parent.create_box()
+                        parent.add_widget(box, index=idx)
+                        parent.remove_widget(widget)
+                        box.add_widget(widget)
+                        idx = 0
+                        parent = box
+                    if widget.point_area == 'left':
+                        parent.add_widget(self, index=idx + 1)
+                    else:
+                        parent.add_widget(self, index=idx)
                 widget.point()
                 break
         else:
@@ -158,10 +157,10 @@ class FormCanvas(ButtonBehavior, StackLayout):
         widgets = self.walk(restrict=True)
         next(widgets)    # the first widget is the FormCanvas
         for widget in widgets:
-            if not type(widget) is Grabbable:
+            if not isinstance(widget, Grabbable):
                 # Look for the widget position inside the tree
                 parent = widget.parent
-                if type(parent) is Grabbable:
+                if isinstance(parent, Grabbable):
                     parent = parent.parent
                 while not parent is stack[-1]:
                     stack.pop()