Ok. I've done that. Works fine for me:

diff --git a/library/pyjamas/ui/ComplexPanel.py
b/library/pyjamas/ui/ComplexPanel.py
index 190b747..8cfbf99 100644
--- a/library/pyjamas/ui/ComplexPanel.py
+++ b/library/pyjamas/ui/ComplexPanel.py
@@ -27,7 +27,20 @@ class ComplexPanel(Panel):
         else:
             self.insert(widget, self.getWidgetCount())

-    def insert(self, widget, container, beforeIndex):
+    def insert(self, widget, container, beforeIndex=None):
+        """ has two modes of operation:
+            widget, beforeIndex
+            widget, container, beforeIndex.
+            if beforeIndex argument is not given, the 1st mode is assumed.
+            this technique is less costly than using *args.
+        """
+        if widget.getParent() == self:
+            return
+
+        if beforeIndex is None:
+            beforeIndex = container
+            container = self.getElement()
+
         if widget.getParent() == self:
             return

diff --git a/library/pyjamas/ui/HorizontalPanel.py
b/library/pyjamas/ui/HorizontalPanel.py
index 0f33618..380e510 100644
--- a/library/pyjamas/ui/HorizontalPanel.py
+++ b/library/pyjamas/ui/HorizontalPanel.py
@@ -27,11 +27,27 @@ class HorizontalPanel(CellPanel):
         self.tableRow = DOM.createTR()
         DOM.appendChild(self.getBody(), self.tableRow)

-    def insert(self, widget, beforeIndex):
+    def insert(self, widget, container, beforeIndex=None):
+        """ has two modes of operation:
+            widget, beforeIndex
+            widget, container, beforeIndex.
+            if beforeIndex argument is not given, the 1st mode is assumed.
+            this technique is less costly than using *args.
+        """
+        if widget.getParent() == self:
+            return
+
+        if beforeIndex is None:
+            beforeIndex = container
+            container = self.tableRow
+
+        if widget.getParent() == self:
+            return
+
         widget.removeFromParent()

         td = DOM.createTD()
-        DOM.insertChild(self.tableRow, td, beforeIndex)
+        DOM.insertChild(container, td, beforeIndex)

         CellPanel.insert(self, widget, td, beforeIndex)

diff --git a/library/pyjamas/ui/VerticalPanel.py
b/library/pyjamas/ui/VerticalPanel.py
index 9b122b6..f6e5b36 100644
--- a/library/pyjamas/ui/VerticalPanel.py
+++ b/library/pyjamas/ui/VerticalPanel.py
@@ -21,13 +21,29 @@ from pyjamas.ui import HasVerticalAlignment

 class VerticalPanel(CellPanel):

-    def insert(self, widget, beforeIndex):
+    def insert(self, widget, container, beforeIndex=None):
+        """ has two modes of operation:
+            widget, beforeIndex
+            widget, container, beforeIndex.
+            if beforeIndex argument is not given, the 1st mode is assumed.
+            this technique is less costly than using *args.
+        """
+        if widget.getParent() == self:
+            return
+
+        if beforeIndex is None:
+            beforeIndex = container
+            container = self.getBody()
+
+        if widget.getParent() == self:
+            return
+
         widget.removeFromParent()

         tr = DOM.createTR()
         td = DOM.createTD()

-        DOM.insertChild(self.getBody(), tr, beforeIndex)
+        DOM.insertChild(container, tr, beforeIndex)
         DOM.appendChild(tr, td)

         CellPanel.insert(self, widget, td, beforeIndex)



2012/3/5 lkcl luke <[email protected]>

> On Mon, Mar 5, 2012 at 5:34 PM, Janjaap Bos <[email protected]> wrote:
> > Looks good, but breaks for VerticalPanel and HorizontalPanel, because
> they
> > redefine insert.
> > When I apply the change below also to them it works fine.
>
>
>  ok waitwait.... err... what you have there is something which ignores
> the container argument (if it's set).  what i'll do is slightly modify
> this so that if it's not set, it picks up self.getBody() rather than
> self.getElement() in the case of the Vert Panel and self.tableRow in
> the Horiz case.
>
> l.
>
> > diff --git a/library/pyjamas/ui/ComplexPanel.py
> > b/library/pyjamas/ui/ComplexPanel.py
> > index 190b747..8cfbf99 100644
> > --- a/library/pyjamas/ui/ComplexPanel.py
> > +++ b/library/pyjamas/ui/ComplexPanel.py
> > @@ -27,7 +27,20 @@ class ComplexPanel(Panel):
> >          else:
> >              self.insert(widget, self.getWidgetCount())
> >
> > -    def insert(self, widget, container, beforeIndex):
> > +    def insert(self, widget, container, beforeIndex=None):
> > +        """ has two modes of operation:
> > +            widget, beforeIndex
> > +            widget, container, beforeIndex.
> > +            if beforeIndex argument is not given, the 1st mode is
> assumed.
> > +            this technique is less costly than using *args.
> > +        """
> > +        if widget.getParent() == self:
> > +            return
> > +
> > +        if beforeIndex is None:
> > +            beforeIndex = container
> > +            container = self.getElement()
> > +
> >          if widget.getParent() == self:
> >              return
> >
> > diff --git a/library/pyjamas/ui/HorizontalPanel.py
> > b/library/pyjamas/ui/HorizontalPanel.py
> > index 0f33618..941e04e 100644
> > --- a/library/pyjamas/ui/HorizontalPanel.py
> > +++ b/library/pyjamas/ui/HorizontalPanel.py
> > @@ -27,7 +27,23 @@ class HorizontalPanel(CellPanel):
> >          self.tableRow = DOM.createTR()
> >          DOM.appendChild(self.getBody(), self.tableRow)
> >
> > -    def insert(self, widget, beforeIndex):
> > +    def insert(self, widget, container, beforeIndex=None):
> > +        """ has two modes of operation:
> > +            widget, beforeIndex
> > +            widget, container, beforeIndex.
> > +            if beforeIndex argument is not given, the 1st mode is
> assumed.
> > +            this technique is less costly than using *args.
> > +        """
> > +        if widget.getParent() == self:
> > +            return
> > +
> > +        if beforeIndex is None:
> > +            beforeIndex = container
> > +            container = self.getElement()
> > +
> > +        if widget.getParent() == self:
> > +            return
> > +
> >          widget.removeFromParent()
> >
> >          td = DOM.createTD()
> > diff --git a/library/pyjamas/ui/VerticalPanel.py
> > b/library/pyjamas/ui/VerticalPanel.py
> > index 9b122b6..f33f729 100644
> > --- a/library/pyjamas/ui/VerticalPanel.py
> > +++ b/library/pyjamas/ui/VerticalPanel.py
> > @@ -21,7 +21,23 @@ from pyjamas.ui import HasVerticalAlignment
> >
> >  class VerticalPanel(CellPanel):
> >
> > -    def insert(self, widget, beforeIndex):
> > +    def insert(self, widget, container, beforeIndex=None):
> > +        """ has two modes of operation:
> > +            widget, beforeIndex
> > +            widget, container, beforeIndex.
> > +            if beforeIndex argument is not given, the 1st mode is
> assumed.
> > +            this technique is less costly than using *args.
> > +        """
> > +        if widget.getParent() == self:
> > +            return
> > +
> > +        if beforeIndex is None:
> > +            beforeIndex = container
> > +            container = self.getElement()
> > +
> > +        if widget.getParent() == self:
> > +            return
> > +
> >          widget.removeFromParent()
> >
> >          tr = DOM.createTR()
> >
> >
> >
> > -Janjaap
> >
> >
> >
> > 2012/3/5 lkcl luke <[email protected]>
> >>
> >> the bug's actually in ComplexPanel.  let me know if this works.  tests
> >> required to make sure nothing breaks because of this!
> >>
> >> l.
> >>
> >> lkcl@teenymac:~/pyjamas/library/pyjamas/ui$ git diff
> >> diff --git a/library/pyjamas/ui/ComplexPanel.py
> >> b/library/pyjamas/ui/ComplexPane
> >> index 190b747..4bc4cf2 100644
> >> --- a/library/pyjamas/ui/ComplexPanel.py
> >> +++ b/library/pyjamas/ui/ComplexPanel.py
> >> @@ -27,10 +27,20 @@ class ComplexPanel(Panel):
> >>         else:
> >>             self.insert(widget, self.getWidgetCount())
> >>
> >> -    def insert(self, widget, container, beforeIndex):
> >> +    def insert(self, widget, container, beforeIndex=None):
> >> +        """ has two modes of operation:
> >> +            widget, beforeIndex
> >> +            widget, container, beforeIndex.
> >> +            if beforeIndex argument is not given, the 1st mode is
> >> assumed.
> >> +            this technique is less costly than using *args.
> >> +        """
> >>         if widget.getParent() == self:
> >>             return
> >>
> >> +        if beforeIndex is None:
> >> +            beforeIndex = container
> >> +            container = self.getElement()
> >> +
> >>         self.adopt(widget, container)
> >>         self.children.insert(beforeIndex, widget)
> >
> >
>

Reply via email to