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)
> >
> >
>