On Mon, Mar 5, 2012 at 8:11 PM, Janjaap Bos <[email protected]> wrote: > Ok. I've done that. Works fine for me:
git pull. i'd already committed the changes. 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..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) >> > >> > > >

