def setSelectionStyle(self, item, selected): if item is not None: if selected: item.addStyleName("gwt-TabBarItem-selected") self.setStyleName(DOM.getParent(item.getElement()), "gwt-TabBarItem-wrapper-selected", True) else: item.removeStyleName("gwt-TabBarItem-selected") self.setStyleName(DOM.getParent(item.getElement()), "gwt-TabBarItem-wrapper-selected", False)
def remove(self, widget): if isinstance(widget, int): widget = self.getWidget(widget) if widget.getParent() != self: return False td = DOM.getParent(widget.getElement()) tr = DOM.getParent(td) DOM.removeChild(self.getBody(), tr) CellPanel.remove(self, widget) return True
def getEventTargetCell(self, event): td = DOM.eventGetTarget(event) while td is not None: if DOM.getAttribute(td, "tagName").lower() == "td": tr = DOM.getParent(td) body = DOM.getParent(tr) if DOM.compare(body, self.bodyElem): return td if DOM.compare(td, self.bodyElem): return None td = DOM.getParent(td) return None
def onBrowserEvent(self, event): if DOM.eventGetType(event) == "click": td = self.getEventTargetCell(event) if td is None: return tr = DOM.getParent(td) body = DOM.getParent(tr) row = DOM.getChildIndex(body, tr) column = DOM.getChildIndex(tr, td) for listener in self.tableListeners: if hasattr(listener, 'onCellClicked'): listener.onCellClicked(self, row, column) else: listener(self)
def replaceLinks(self, tagname="a"): """ replaces <tag href="#pagename">sometext</tag> with: Hyperlink("sometext", "pagename") """ tags = self.findTags(tagname) pageloc = Window.getLocation() pagehref = pageloc.getPageHref() for el in tags: href = el.href l = href.split("#") if len(l) != 2: continue if l[0] != pagehref: continue token = l[1] if not token: continue html = DOM.getInnerHTML(el) parent = DOM.getParent(el) index = DOM.getChildIndex(parent, el) hl = Hyperlink(TargetHistoryToken=token, HTML=html, Element=DOM.createSpan()) DOM.insertChild(parent, hl.getElement(), index) self.children.insert(index, hl) parent.removeChild(el)
def setCaption(self, caption): self.caption = caption if caption is not None and not caption == "": DOM.setInnerHTML(self.legend, caption) DOM.insertChild(self.getElement(), self.legend, 0) elif DOM.getParent(self.legend) is not None: DOM.removeChild(self.getElement(), self.legend)
def insertChildBefore(new_elem, elem): """ Inserts an element "new_elem" before the element "elem". """ parent = DOM.getParent(elem) id = DOM.getChildIndex(parent, elem) DOM.insertChild(parent, new_elem, id)
def replaceLinks(self, tagname="a", use_page_href=True, ajaxify=False): """ replaces <tag href="#pagename">sometext</tag> with: Hyperlink("sometext", "pagename"). Hyperlinks use the History module so the notification will come in on an onHistoryChanged. """ self._clear_hyperlinks() tags = self.findTags(tagname) pageloc = Window.getLocation() pagehref = pageloc.getPageHref() for el in tags: href = el.href l = href.split("#") if len(l) != 2: continue if use_page_href and not l[0].startswith(pagehref): continue token = l[1] if not token: continue html = DOM.getInnerHTML(el) parent = DOM.getParent(el) index = DOM.getChildIndex(parent, el) if ajaxify: token = '!%s' % token hl = Hyperlink(TargetHistoryToken=token, HTML=html, Element=DOM.createSpan()) DOM.insertChild(parent, hl.getElement(), index) parent.removeChild(el) self.children.insert(index, hl) hl.setParent(self) self.hyperlinks.append(hl)
def _clear_hyperlinks(self): while self.hyperlinks: hl = self.hyperlinks.pop() el = hl.getElement() parent = DOM.getParent(el) if parent is not None: parent.removeChild(el) hl.setParent(None)
def getDividerIndex(self, elem): while (elem is not None) and not DOM.compare(elem, self.getElement()): expando = self._getIndex(elem) if expando is not None: return int(expando) elem = DOM.getParent(elem) return -1
def showHidePanelMonitor(self): if DOM.getStyleAttribute( DOM.getParent(self.center.getWidgetTd(self.serialMonitor)), 'display') == 'none': DOM.setStyleAttribute( DOM.getParent(self.center.getWidgetTd(self.serialMonitor)), "display", "") self.showHideMonitor.setStyleName('collapse open_down') #JS("""addCodeBenderPlugin();@{{!addCodeBenderPlugin}}();""") DOM.setStyleAttribute(self.resizeMonitor.getElement(), "display", "") else: DOM.setStyleAttribute( DOM.getParent(self.center.getWidgetTd(self.serialMonitor)), "display", "none") self.showHideMonitor.setStyleName('collapse close_up') DOM.setStyleAttribute(self.resizeMonitor.getElement(), "display", "none")
def disown(self, widget): if widget.getParent() != self: console.error("widget %o is not a child of this panel %o", widget, self) else: element = widget.getElement() widget.setParent(None) parentElement = DOM.getParent(element) if parentElement: DOM.removeChild(parentElement, element)
def getTabHTML(self, index): widget = self.getTabWidget(index) if hasattr(widget, "getHTML"): return widget.getHTML() elif hasattr(widget, "getText"): # assume it's a Label if it has getText return widget.getText() else: fpe = DOM.getParent(self.focusablePanel.getElement()) return DOM.getInnerHTML(fpe)
def disown(self, widget): if widget.getParent() is not self: raise Exception("widget %s is not a child of this panel %s" % \ (str(widget), str(self))) element = widget.getElement() widget.setParent(None) parentElement = DOM.getParent(element) if parentElement is not None: DOM.removeChild(parentElement, element)
def insertTabWidget(self, widget, beforeIndex): delWidget = ClickDelegatePanel(self, widget, self, self) delWidget.setStyleName(self.STYLENAME_DEFAULT) focusablePanel = delWidget.getFocusablePanel() self.panel.insert(delWidget, beforeIndex + 1) self.setStyleName(DOM.getParent(delWidget.getElement()), self.STYLENAME_DEFAULT + "-wrapper", True)
def insertTabWidget(self, widget, beforeIndex): delWidget = ClickDelegatePanel(self, widget, self, self) delWidget.setStyleName(self.STYLENAME_DEFAULT) focusablePanel = delWidget.getFocusablePanel() self.panel.insert(delWidget, self.panel.getElement(), beforeIndex + 1) parent = DOM.getParent(delWidget.getElement()) #DOM.setStyleAttribute(parent, "flow", "left") #DOM.setStyleAttribute(parent, "display", "inline") self.setStyleName(parent, self.STYLENAME_DEFAULT + "-wrapper", True)
def onBrowserEvent(self, event): DOM.eventPreventDefault(event) if not self.game.started: return td = self.getEventTargetCell(event) if not td: return tr = DOM.getParent(td) table = DOM.getParent(tr) row = DOM.getChildIndex(table, tr) column = DOM.getChildIndex(tr, td) target_cell = self.getCell(row, column) type = DOM.eventGetType(event) event_mapper = {'click': 'onClick', 'contextmenu': 'onRightClick', 'mousedown': 'onMouseDown', 'mouseup': 'onMouseUp', 'mouseout': 'onMouseLeave'} event_handler = event_mapper.get(type) if event_handler: getattr(self, event_handler)(target_cell)
def getTabHTML(self, index): if index >= self.getTabCount(): return None delPanel = self.panel.getWidget(index + 1) focusablePanel = delPanel.getFocusablePanel() widget = focusablePanel.getWidget() if hasattr(widget, "getHTML"): return widget.getHTML() elif hasattr(widget, "getText"): # assume it's a Label if it has getText return widget.getText() else: fpe = DOM.getParent(self.focusablePanel.getElement()) return DOM.getInnerHTML(fpe)
def _onBrowserEvent(self, event, event_type): td = self.getEventTargetCell(event) if td is None: return tr = DOM.getParent(td) body = DOM.getParent(tr) row = DOM.getChildIndex(body, tr) column = DOM.getChildIndex(tr, td) if event_type == 'dblclick': lists = self.dbltableListeners else: lists = self.tableListeners for listener in lists: if event_type == 'click' and \ hasattr(listener, 'onCellClicked'): listener.onCellClicked(self, row, column) elif event_type == 'dblclick' and \ hasattr(listener, 'onCellDoubleClicked'): listener.onCellDoubleClicked(self, row, column) else: listener(self)
def onDragStart(self, event): dt = event.dataTransfer target = DOM.eventGetTarget(event) target = Widget(Element=target) try: id = target.getID() except: id = '' if id == 'datadrag0': dt.setData('text/plain', 'Hello World!') elif id == 'datadrag1': logo = doc().getElementById('logo') logo_parent_element = DOM.getParent(logo) text = DOM.getInnerText(logo_parent_element) html = DOM.getInnerHTML(logo_parent_element) uri = DOM.getAttribute(logo, 'src') dt.setData('text/plain', text) dt.setData('text/html', html) dt.setData('text/uri-list', uri) elif id == 'datadrag2': dt.setData('x-star-trek/tribble', 'I am a tribble')
def getCellHeight(self, widget): td = DOM.getParent(widget.getElement()) return DOM.getAttribute(td, "height")
def remove(self): parent = DOM.getParent(self._e) DOM.removeChild(parent, self._e)
def getCellWidth(self, widget): td = DOM.getParent(widget.getElement()) return DOM.getAttribute(td, "width")
def collectElementChain(self, chain, hRoot, hElem): if (hElem is None) or DOM.compare(hElem, hRoot): return self.collectElementChain(chain, hRoot, DOM.getParent(hElem)) chain.append(hElem)
def getWidgetTd(self, widget): if widget.getParent() != self: return None return DOM.getParent(widget.getElement())
def setCellHeight(self, widget, height): td = DOM.getParent(widget.getElement()) if height is None: DOM.removeAttribute(td, "height") else: DOM.setAttribute(td, "height", str(height))
<head> <title>Example 5</title> </head> <body> <p>Test 5: Processes server html and insert click listeners into links: <span id='link1' class = 'wikilink'>link 1</span> and <span id='link2' class = 'wikilink'>link 2</span>. </p> </body> </html> """ html3 = HTMLPanel(serverXml) links = list() for elem in html3.findTags('span'): if DOM.getElemAttribute(elem, 'class') == 'wikilink': linkClass = DOM.getElemAttribute(elem, 'class') links.append(elem) if len(links) > 0: parent = DOM.getParent(links[0]) for link in links: linkId = DOM.getElemAttribute(link, 'id') linkClass = DOM.getElemAttribute(link, 'class') linkInner = DOM.getInnerHTML(link) a3 = Hyperlink(text=linkInner, Element=DOM.createSpan()) a3.addClickListener(onClick) a3.setID('param2') #todo: modify HTMLPanel to replace an element instead of add #html3.replace(a3, linkId) DOM.setInnerHTML(link, '') # clear existing text html3.add(a3, linkId) RootPanel().add(html3) pyjd.run()
def replaceElement(self, element, widget): """Replace an existing element with the given widget.""" DOM.getParent(element).replaceChild(widget.getElement(), element) self.adopt(widget, None) self.children.append(widget)
def setCellWidth(self, widget, width): td = DOM.getParent(widget.getElement()) DOM.setAttribute(td, "width", width)
def setCellWidth(self, widget, width): td = DOM.getParent(widget.getElement()) if width is None: DOM.removeAttribute(td, "width") else: DOM.setAttribute(td, "width", str(width))
def getCellWordWrap(self, widget): td = DOM.getParent(widget.getElement()) return DOM.getStyleAttribute(td, "whiteSpace") == "nowrap"
<head> <title>Example 5</title> </head> <body> <p>Test 5: Processes server html and insert click listeners into links: <span id='link1' class = 'wikilink'>link 1</span> and <span id='link2' class = 'wikilink'>link 2</span>. </p> </body> </html> """ html3 = HTMLPanel(serverXml) links = list() for elem in html3.findTags('span'): if DOM.getElemAttribute(elem, 'class') == 'wikilink': linkClass = DOM.getElemAttribute(elem, 'class') links.append(elem) if len(links) > 0: parent = DOM.getParent(links[0]) for link in links: linkId = DOM.getElemAttribute(link, 'id') linkClass = DOM.getElemAttribute(link, 'class') linkInner = DOM.getInnerHTML(link) a3 = Hyperlink(text = linkInner, Element = DOM.createSpan()) a3.addClickListener(onClick) a3.setID('param2') #todo: modify HTMLPanel to replace an element instead of add #html3.replace(a3, linkId) DOM.setInnerHTML(link, '') # clear existing text html3.add(a3, linkId) RootPanel().add(html3) pyjd.run()
def getPrevSibling(elem): parent = DOM.getParent(elem) elem_index = DOM.getChildIndex(parent, elem) children = list(DOM.iterChildren(parent)) return children[elem_index - 1]
def setCellHeight(self, widget, height): td = DOM.getParent(widget.getElement()) DOM.setAttribute(td, "height", height)