def reduceterm(sender, maxlines): """When the Reduce button is pressed: call cc.runfile with our input. There is a maximum number of lines that we will output, to prevent a stalling browser and an overfull document. The user can raise this limit with a link. """ input = inputArea.getText() output = "" nlines = 0 def catchoutput(s, end="\n"): output += s + end nlines += 1 if nlines > maxlines: raise OverlongOutput() cc._defs = dict() try: cc.runfile(inputfile=io.StringIO(input), verbose=False, printout=catchoutput, printerr=catchoutput) except OverlongOutput: extra = FlowPanel(StyleName="terminated") extra.add(InlineLabel("Reduction terminated after %s lines. " % (maxlines,))) extra.add(Button("Try longer", functools.partial(queuereduce, maxlines=nextmaxlines(maxlines)))) showOutput(output, extra=extra) except Exception, e: Window.alert(e)
class FlowPanelDemo: """Demos the flow panel. Because of how the Flow Panel works, all elements have to be inline elements. Divs, tables, etc. can't be used, unless specified with CSS that they are inline or inline-block. Because of how Vertical Panels work (with tables), we use CSS to display tables as inline-blocks. IE, excluding IE8, doesn't support inline-blocks, so we have to use a CSS hack (see http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ for more on the hack) However, we use spans instead of divs for the Label by providing an 'element' argument.""" def __init__(self): self.root = RootPanel() #Flow panel taking up 70% of the page. CSS centers it. self.flow = FlowPanel(Width="70%", StyleName='flow-panel') for x in range(0, 10): self.panel = VerticalPanel() #Label each image with its number in the sequence title = Label("Item %s" % x, Element=DOM.createElement('span'), StyleName="title item") #Add a neat-o image. image = Image('images/pyjamas.png', Width="200px", Height="200px", StyleName="cat-image cat-item") #Add to the Vertical Panel the image title self.panel.add(title) self.panel.add(image) self.flow.add(self.panel) self.root.add(self.flow)
class FlowPanelDemo: """Demos the flow panel. Because of how the Flow Panel works, all elements have to be inline elements. Divs, tables, etc. can't be used, unless specified with CSS that they are inline or inline-block. Because of how Vertical Panels work (with tables), we use CSS to display tables as inline-blocks. IE, excluding IE8, doesn't support inline-blocks, so we have to use a CSS hack (see http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/ for more on the hack) However, we use spans instead of divs for the Label by providing an 'element' argument.""" def __init__(self): self.root = RootPanel() #Flow panel taking up 70% of the page. CSS centers it. self.flow = FlowPanel(Width="70%", StyleName='flow-panel') for x in range(0, 10): self.panel = VerticalPanel() #Label each image with its number in the sequence title = Label("Item %s" % x, element=DOM.createElement('span'), StyleName="title item") #Add a neat-o image. image = Image('images/pyjamas.png', Width="200px", Height="200px", StyleName="cat-image cat-item") #Add to the Vertical Panel the image title self.panel.add(title) self.panel.add(image) self.flow.add(self.panel) self.root.add(self.flow)
class WordBox(ScrollPanel): def __init__(self, **kwargs): Width = kwargs.get("Width") self.table = FlowPanel(Width=Width, StyleName="wordpanel") ScrollPanel.__init__(self, self.table, **kwargs) def setWords(self, words): self.words = words self.createBoxes() def createBoxes(self): while self.table.getWidgetCount(): self.table.remove(0) for w in self.words: el = DOM.createDiv() DOM.setStyleAttribute(el, "float", "left") wid = HTML(w, Element=el, StyleName="flowpanelword") self.table.add(wid) def markWords(self, wordstarter): for box in self.table: box.removeStyleName("flowpanelwordhighlight") for box in self.table: txt = box.getHTML() if txt.startswith(wordstarter): box.addStyleName("flowpanelwordhighlight")
class NavigationBar(SimplePanel): def __init__(self, *args, **kwargs): super(NavigationBar, self).__init__(*args, **kwargs) navbar = SimplePanel(StyleName="navbar navbar-fixed") navbar_inner = SimplePanel(StyleName="navbar-inner") self._navbar_container = FlowPanel() navbar_inner.add(self._navbar_container) navbar.add(navbar_inner) SimplePanel.add(self, navbar) def add(self, widget): self._navbar_container.add(widget)
def createControlPanel(self, controlNames): flowPanel=FlowPanel() newLabels=[] for buttonName in controlNames: newPanel=HorizontalPanel() newLabels.append(Label(buttonName)) newPanel.add(newLabels[-1]) newTextBox=TextBox() newTextBox.setEnabled(True) newTextBox.setWidth(80) newPanel.add(newTextBox) if buttonName=="RangeLo" : newTextBox.setText("100") # Default values self.rangeLowBox=newTextBox elif buttonName=="RangeHi" : newTextBox.setText("150") self.rangeHighBox=newTextBox elif buttonName=="Steps" : newTextBox.setText("1") self.stepSizeBox=newTextBox elif buttonName=="FileName": newTextBox.setText("TestRun.png") #newTextBox.addChangeListener(self) newTextBox.setTitle(buttonName) self.controlValueEntries[buttonName]=newTextBox flowPanel.add(newPanel) # Set all of the widths of the labels to be the same, so that the boxes line up maxWidth=0 for label in newLabels : # This doesn't work for some reason #if label.getWidth() > maxWidth : maxWidth=label.getWidth() if len(label.getText())*9 > maxWidth : maxWidth=len(label.getText())*9 for label in newLabels : label.setWidth(maxWidth) return flowPanel
class TextBoxArray: def __init__(self, default_value='0', show_indices=True): self._default_value = default_value self._show_indices = show_indices self._values = [] self.panel = FlowPanel() # public interface @property def values(self): return self._values @property def size(self): return len(self._values) @size.setter def size(self, value): add_count = value - len(self._values) if add_count < 0: for w in self._values[add_count:]: self.panel.remove(w.getParent()) self._values.remove(w) elif add_count > 0: if self._values: newval = self._values[-1].getText() else: newval = self._default_value for i in range(add_count): w = TextBox(Width='3em', Text=newval) self._values.append(w) panel = VerticalPanel(StyleName='TextBoxArrayCell') panel.add(w) panel.add( HTML("{}".format(i + value - add_count + 1), HorizontalAlignment='center', Visible=self._show_indices)) self.panel.add(panel)
def createRegisterPanel( self, registerNames ) : """ Creates panels and buttons for everything given in registerNames, and returns the main panel. """ flowPanel=FlowPanel() for buttonName in registerNames : newPanel=HorizontalPanel() label=Label(buttonName) newPanel.add( label ) newTextBox=TextBox() newTextBox.setEnabled(False) newTextBox.setWidth(80) statusBox=TextBox() statusBox.setEnabled(False) statusBox.setWidth(30) newPanel.add(newTextBox) newPanel.add(statusBox) newPanel.setCellHorizontalAlignment( newTextBox, HasHorizontalAlignment.ALIGN_RIGHT ) newPanel.setCellHorizontalAlignment( statusBox, HasHorizontalAlignment.ALIGN_RIGHT ) newPanel.setCellWidth( statusBox, "20px" ) newPanel.setWidth("100%") #newPanel.setStyleName("areaStyle"); #newPanel.setBorderWidth(5); newTextBox.setText("select chip...") newTextBox.addChangeListener(self) newTextBox.setTitle(buttonName) # This isn't displayed, but it's useful to have stored self.i2cValueEntries[buttonName]=newTextBox self.statusValueEntries[buttonName]=statusBox statusBox.setTitle(buttonName) statusBox.setText("...") flowPanel.add(newPanel) return flowPanel
def reduceterm(sender, maxlines): """When the Reduce button is pressed: call cc.runfile with our input. There is a maximum number of lines that we will output, to prevent a stalling browser and an overfull document. The user can raise this limit with a link. """ input = inputArea.getText() output = "" nlines = 0 def catchoutput(s, end="\n"): output += s + end nlines += 1 if nlines > maxlines: raise OverlongOutput() cc._defs = dict() try: cc.runfile(inputfile=io.StringIO(input), verbose=False, printout=catchoutput, printerr=catchoutput) except OverlongOutput: extra = FlowPanel(StyleName="terminated") extra.add( InlineLabel("Reduction terminated after %s lines. " % (maxlines, ))) extra.add( Button( "Try longer", functools.partial(queuereduce, maxlines=nextmaxlines(maxlines)))) showOutput(output, extra=extra) except Exception, e: Window.alert(e)
def finishgroup(): global curgroup, curgroupwidgets, curgrouphead, fp if curgroup == 0: for widget in curgroupwidgets: fp.add(widget) elif curgroup == 1: dp = DisclosurePanel("Definitions") dpflow = FlowPanel() dp.add(dpflow) for widget in curgroupwidgets: dpflow.add(widget) fp.add(dp) elif curgroup == 2: curgrouphead += " (%s steps)" % (len(curgroupwidgets), ) dp = DisclosurePanel(curgrouphead) dpflow = FlowPanel() dp.add(dpflow) for widget in curgroupwidgets[:-1]: dpflow.add(widget) fp.add(dp) fp.add(curgroupwidgets[-1]) curgroup = 0 curgroupwidgets = [] curgrouphead = None
def finishgroup(): global curgroup, curgroupwidgets, curgrouphead, fp if curgroup == 0: for widget in curgroupwidgets: fp.add(widget) elif curgroup == 1: dp = DisclosurePanel("Definitions") dpflow = FlowPanel() dp.add(dpflow) for widget in curgroupwidgets: dpflow.add(widget) fp.add(dp) elif curgroup == 2: curgrouphead += " (%s steps)" % (len(curgroupwidgets),) dp = DisclosurePanel(curgrouphead) dpflow = FlowPanel() dp.add(dpflow) for widget in curgroupwidgets[:-1]: dpflow.add(widget) fp.add(dp) fp.add(curgroupwidgets[-1]) curgroup = 0 curgroupwidgets = [] curgrouphead = None
def __init__(self, *args, **kwargs): # set defaults if not 'StyleName' in kwargs: kwargs['StyleName'] = "rjw-HorizontalCollapsePanel" FlowPanel.__init__(self, *args, **kwargs) self._containers = [ ScrollPanel(StyleName = self.getStylePrimaryName() + '-left'), ScrollPanel(StyleName = self.getStylePrimaryName() + '-right'), ] self._collapse_widget = ScrollPanel(StyleName = self.getStylePrimaryName() + '-collapse') collapse_button = ToggleButton(StyleName = self.getStylePrimaryName() + '-collapse-button') collapse_button.addClickListener(self._sync_collapse) self._collapse_widget.add(collapse_button) FlowPanel.add(self, self._containers[0]) FlowPanel.add(self, self._collapse_widget) FlowPanel.add(self, self._containers[1]) self._sync_collapse()
def __init__(self): Sink.__init__(self) text = """This is a <code>ScrollPanel</code> contained at the center of a <code>DockPanel</code>. By putting some fairly large contents in the middle and setting its size explicitly, it becomes a scrollable area within the page, but without requiring the use of an IFRAME. Here's quite a bit more meaningless text that will serve primarily to make this thing scroll off the bottom of its visible area. Otherwise, you might have to make it really, really small in order to see the nifty scroll bars!""" contents = HTML(text) scroller = ScrollPanel(contents, StyleName="ks-layouts-Scroller") dock = DockPanel(HorizontalAlignment=HasAlignment.ALIGN_CENTER, Spacing=10) north0 = HTML("This is the <i>first</i> north component", True) east = HTML("<center>This<br>is<br>the<br>east<br>component</center>", True) south = HTML("This is the south component") west = HTML("<center>This<br>is<br>the<br>west<br>component</center>", True) north1 = HTML("This is the <b>second</b> north component", True) dock.add(north0, DockPanel.NORTH) dock.add(east, DockPanel.EAST) dock.add(south, DockPanel.SOUTH) dock.add(west, DockPanel.WEST) dock.add(north1, DockPanel.NORTH) dock.add(scroller, DockPanel.CENTER) #Logger.write("Layouts", "TODO: flowpanel") flow = FlowPanel() for i in range(8): flow.add(CheckBox("Flow %d" % i)) horz = HorizontalPanel(VerticalAlignment=HasAlignment.ALIGN_MIDDLE) horz.add(Button("Button")) horz.add(HTML("<center>This is a<br>very<br>tall thing</center>", True)) horz.add(Button("Button")) vert = VerticalPanel(HorizontalAlignment=HasAlignment.ALIGN_CENTER) vert.add(Button("Small")) vert.add(Button("--- BigBigBigBig ---")) vert.add(Button("tiny")) menu = MenuBar() menu0 = MenuBar(True) menu1 = MenuBar(True) menu.addItem("menu0", menu0) menu.addItem("menu1", menu1) menu0.addItem("child00") menu0.addItem("child01") menu0.addItem("child02") menu1.addItem("child10") menu1.addItem("child11") menu1.addItem("child12") #Logger.write("Layouts", "TODO: htmlpanel") id = HTMLPanel.createUniqueId() text = """This is an <code>HTMLPanel</code>. It allows you to add components inside existing HTML, like this: <span id='%s' /> Notice how the menu just fits snugly in there? Cute.""" % id html = HTMLPanel(text) DOM.setStyleAttribute(menu.getElement(), "display", "inline") html.add(menu, id) disclose = DisclosurePanel("Click to disclose") disclose.add( HTML("""<b>Ta-daaaaa!</b><br />Ok - it could have been<br />more of a surprise.""")) panel = VerticalPanel(Spacing=8, HorizontalAlignment=HasAlignment.ALIGN_CENTER) panel.add(self.makeLabel("Dock Panel")) panel.add(dock) panel.add(self.makeLabel("Flow Panel")) panel.add(flow) panel.add(self.makeLabel("Horizontal Panel")) panel.add(horz) panel.add(self.makeLabel("Vertical Panel")) panel.add(vert) panel.add(self.makeLabel("HTML Panel")) panel.add(html) panel.add(self.makeLabel("Disclosure Panel")) panel.add(disclose) self.initWidget(panel) self.setStyleName("ks-layouts")
class FlowTabBar(Composite): STYLENAME_DEFAULT = "gwt-TabBarItem" def __init__(self, **kwargs): if not kwargs.has_key('StyleName'): kwargs['StyleName'] = "gwt-TabBar" # this is awkward: FlowPanel is the composite, # so we either the element here, and pass it in to FlowPanel. element = None if kwargs.has_key('Element'): element = kwargs.pop('Element') self.panel = FlowPanel(Element=element) self.selectedTab = None self.tabListeners = [] #self.panel.setVerticalAlignment(HasAlignment.ALIGN_BOTTOM) first = HTML(" ", True) rest = HTML(" ", True) first.setStyleName("gwt-TabBarFirst") rest.setStyleName("gwt-TabBarRest") first.setHeight("100%") rest.setHeight("100%") self.panel.add(first) self.panel.add(rest) first.setHeight("100%") #self.panel.setCellHeight(first, "100%") #self.panel.setCellWidth(rest, "100%") Composite.__init__(self, self.panel, **kwargs) self.sinkEvents(Event.ONCLICK) def addTab(self, text, asHTML=False): self.insertTab(text, asHTML, self.getTabCount()) def addTabListener(self, listener): self.tabListeners.append(listener) def getSelectedTab(self): if self.selectedTab is None: return -1 return self.panel.getWidgetIndex(self.selectedTab) - 1 def getTabCount(self): return self.panel.getWidgetCount() - 2 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 createTabTextWrapper(self): return None def insertTab(self, text, asHTML, beforeIndex=None): """ 1st arg can, instead of being 'text', be a widget """ if beforeIndex is None: beforeIndex = asHTML asHTML = False if (beforeIndex < 0) or (beforeIndex > self.getTabCount()): #throw new IndexOutOfBoundsException(); pass if isinstance(text, basestring): if asHTML: item = HTML(text) else: item = Label(text) item.setWordWrap(False) else: # passing in a widget, it's expected to have its own style item = text self.insertTabWidget(item, beforeIndex) 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) #print "insertTabWidget", DOM.getParent(delWidget.getElement()), DOM.getAttribute(DOM.getParent(delWidget.getElement()), "className") def onClick(self, sender=None): for i in range(1, self.panel.getWidgetCount() - 1): if DOM.isOrHasChild( self.panel.getWidget(i).getElement(), sender.getElement()): return self.selectTab(i - 1) return False def removeTab(self, index): self.checkTabIndex(index) toRemove = self.panel.getWidget(index + 1) if toRemove == self.selectedTab: self.selectedTab = None self.panel.remove(toRemove) def removeTabListener(self, listener): self.tabListeners.remove(listener) def selectTab(self, index): self.checkTabIndex(index) for listener in self.tabListeners: if not listener.onBeforeTabSelected(self, index): return False self.setSelectionStyle(self.selectedTab, False) if index == -1: self.selectedTab = None return True self.selectedTab = self.panel.getWidget(index + 1) self.setSelectionStyle(self.selectedTab, True) for listener in self.tabListeners: listener.onTabSelected(self, index) return True def checkTabIndex(self, index): if (index < -1) or (index >= self.getTabCount()): #throw new IndexOutOfBoundsException(); pass 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 onRemoteResponse(self, response, request_info): mname = request_info.method if mname == "customize_message": showCustomizationResult(self, response, request_info) return if mname == "get_messagesdata_for_cust": locations_data = response["locations"] selectionbox = VerticalPanel(Padding=3) locations = ListBox() for (loc_name, loc_id) in locations_data: locations.addItem(loc_id, loc_name) messages = ListBox() messages.setName("locations") messages.addItem(location_select_label) for (name, d) in response["messages"].items(): messages.addItem(d['label'], name) locations.addChangeListener(self) messages.addChangeListener(self) self.locations = locations self.messages = messages locationbox = HorizontalPanel() locationbox.add(Label("Location: ", StyleName="text", Width=80)) locationbox.add(locations) msgnamebox = HorizontalPanel() msgnamebox.add(Label("Message: ", StyleName="text", Width=80)) msgnamebox.add(messages) selectionbox.add(locationbox) selectionbox.add(msgnamebox) mainpanel = VerticalPanel(StyleName="dataBoxContent") mainpanel.add(selectionbox) self.mainpanel = mainpanel root = RootPanel() root.add(mainpanel) if mname == "get_messagecustdata": self.messages_data = response buttonspanel = FlowPanel(Spacing=1, Padding=1, Width=600) #buttonspanel.add(Label("Macros:", StyleName="text")) for macro_d in self.messages_data['macros']: macrobutton = Button(macro_d['label'], self, StyleName="buttonlikelink")#"nicebutton small") macrobutton.name = macro_d['name'] buttonspanel.add(macrobutton) msgpanel = VerticalPanel(Padding=1, Spacing=1) messagebox = TextArea() messagebox.setCharacterWidth(70) height = len(self.messages_data["text"].split('\n')) + 1 messagebox.setVisibleLines(height) messagebox.setText(self.messages_data["text"]) messagebox.setName("textBoxFormElement") self.messagebox = messagebox msgpanel.add(messagebox) self.statusbar = Label(StyleName="errorMessage") msgpanel.add(self.statusbar) actionbuttons = HorizontalPanel(Spacing=2) updatebutton = Button("Update", self, StyleName="nicebutton small yellow") updatebutton.name = "update" actionbuttons.add(updatebutton) #actionbuttons.add(Button("Send me a preview mail")) msgpanel.add(actionbuttons) editorbox = VerticalPanel(Padding=1) editorbox.add(buttonspanel) editorbox.add(msgpanel) editorpanel = CaptionPanel("Message editor", editorbox, Padding=1, StyleName="text") editorpanel.name = "editorpanel" self.editorpanel = editorpanel self.mainpanel.add(editorpanel)
class FlowTabBar(Composite): STYLENAME_DEFAULT = "gwt-TabBarItem" def __init__(self, **kwargs): if not kwargs.has_key('StyleName'): kwargs['StyleName']="gwt-TabBar" # this is awkward: FlowPanel is the composite, # so we either the element here, and pass it in to FlowPanel. element = None if kwargs.has_key('Element'): element = kwargs.pop('Element') self.panel = FlowPanel(Element=element) self.selectedTab = None self.tabListeners = [] #self.panel.setVerticalAlignment(HasAlignment.ALIGN_BOTTOM) first = HTML(" ", True) rest = HTML(" ", True) first.setStyleName("gwt-TabBarFirst") rest.setStyleName("gwt-TabBarRest") first.setHeight("100%") rest.setHeight("100%") self.panel.add(first) self.panel.add(rest) first.setHeight("100%") #self.panel.setCellHeight(first, "100%") #self.panel.setCellWidth(rest, "100%") Composite.__init__(self, self.panel, **kwargs) self.sinkEvents(Event.ONCLICK) def addTab(self, text, asHTML=False): self.insertTab(text, asHTML, self.getTabCount()) def addTabListener(self, listener): self.tabListeners.append(listener) def getSelectedTab(self): if self.selectedTab is None: return -1 return self.panel.getWidgetIndex(self.selectedTab) - 1 def getTabCount(self): return self.panel.getWidgetCount() - 2 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 createTabTextWrapper(self): return None def insertTab(self, text, asHTML, beforeIndex=None): """ 1st arg can, instead of being 'text', be a widget """ if beforeIndex is None: beforeIndex = asHTML asHTML = False if (beforeIndex < 0) or (beforeIndex > self.getTabCount()): #throw new IndexOutOfBoundsException(); pass if isinstance(text, basestring): if asHTML: item = HTML(text) else: item = Label(text) item.setWordWrap(False) else: # passing in a widget, it's expected to have its own style item = text self.insertTabWidget(item, beforeIndex) 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) #print "insertTabWidget", DOM.getParent(delWidget.getElement()), DOM.getAttribute(DOM.getParent(delWidget.getElement()), "className") def onClick(self, sender=None): for i in range(1, self.panel.getWidgetCount() - 1): if DOM.isOrHasChild(self.panel.getWidget(i).getElement(), sender.getElement()): return self.selectTab(i - 1) return False def removeTab(self, index): self.checkTabIndex(index) toRemove = self.panel.getWidget(index + 1) if toRemove == self.selectedTab: self.selectedTab = None self.panel.remove(toRemove) def removeTabListener(self, listener): self.tabListeners.remove(listener) def selectTab(self, index): self.checkTabIndex(index) for listener in self.tabListeners: if not listener.onBeforeTabSelected(self, index): return False self.setSelectionStyle(self.selectedTab, False) if index == -1: self.selectedTab = None return True self.selectedTab = self.panel.getWidget(index + 1) self.setSelectionStyle(self.selectedTab, True) for listener in self.tabListeners: listener.onTabSelected(self, index) return True def checkTabIndex(self, index): if (index < -1) or (index >= self.getTabCount()): #throw new IndexOutOfBoundsException(); pass 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 onModuleLoad(self): dlp = DockPanel(Width="100%", Height="100%") self.m_rte = RichTextArea(Width="500px", Height="400px") self.m_tb = RichTextToolbar(self.m_rte, self) buts = FlowPanel() self.m_getCurr = Button("Refresh v", self) self.m_setHtml = Button("Set html ^", self) self.m_setHtml.setTitle("Set html from the lower left text area") self.m_toSCursor = Button("< To Cursor", self) self.m_toSCursor.setTitle( "Set the selection to be a cursor at the beginning of the current selection" ) self.m_toECursor = Button("To Cursor >", self) self.m_toECursor.setTitle( "Set the selection to be a cursor at the end of the current selection" ) self.m_surround1 = Button("Surround1", self) self.m_surround2 = Button("Surround2", self) self.m_font1 = Button("Times New Roman", self) self.m_font2 = Button("Arial", self) grid = Grid(2, 2) self.m_startNode = self.createTextBox(1) self.m_startOffset = self.createTextBox(3) self.m_endNode = self.createTextBox(4) self.m_endOffset = self.createTextBox(5) self.m_select = Button("`>Select", self) self.m_select.setTitle("Select the texts/offsets in the boxes above") self.m_cursor = Button("`>Cursor", self) self.m_cursor.setTitle( "Set cursor to text/offset of top 2 boxes above") grid.setWidget(0, 0, self.m_startNode) grid.setWidget(0, 1, self.m_startOffset) grid.setWidget(1, 0, self.m_endNode) grid.setWidget(1, 1, self.m_endOffset) self.m_deleteSel = Button("Delete", self) self.m_reset = Button("Reset", self) buts.add(self.m_getCurr) buts.add(self.m_setHtml) buts.add(self.m_toSCursor) buts.add(self.m_toECursor) buts.add(self.m_font1) buts.add(self.m_font2) buts.add(self.m_surround1) buts.add(self.m_surround2) buts.add(grid) buts.add(self.m_select) buts.add(self.m_cursor) buts.add(self.m_deleteSel) buts.add(self.m_reset) dlp.add(buts, DockPanel.WEST) textPanels = DockPanel() self.m_html = TextArea() self.m_html.setSize("100%", "100%") self.m_sel = TextArea() self.m_sel.setSize("100%", "100%") textPanels.add(self.m_sel, DockPanel.EAST) textPanels.add(self.m_html, DockPanel.WEST) dlp.add(textPanels, DockPanel.SOUTH) dlp.add(self.m_tb, DockPanel.NORTH) dlp.add(self.m_rte, DockPanel.CENTER) rp = RootPanel.get() rp.add(dlp) DeferredCommand.add(getattr(self, "set_html_focus")) self.reset()
def onModuleLoad(self): dlp = DockPanel(Width="100%", Height="100%") self.m_rte = RichTextArea(Width="500px", Height="400px") self.m_tb = RichTextToolbar(self.m_rte, self) buts = FlowPanel() self.m_getCurr = Button("Refresh v", self) self.m_setHtml = Button("Set html ^", self) self.m_setHtml.setTitle("Set html from the lower left text area") self.m_toSCursor = Button("< To Cursor", self) self.m_toSCursor.setTitle("Set the selection to be a cursor at the beginning of the current selection") self.m_toECursor = Button("To Cursor >", self) self.m_toECursor.setTitle("Set the selection to be a cursor at the end of the current selection") self.m_surround1 = Button("Surround1", self) self.m_surround2 = Button("Surround2", self) self.m_font1 = Button("Times New Roman", self) self.m_font2 = Button("Arial", self) grid = Grid(2, 2) self.m_startNode = self.createTextBox(1) self.m_startOffset = self.createTextBox(3) self.m_endNode = self.createTextBox(4) self.m_endOffset = self.createTextBox(5) self.m_select = Button("`>Select", self) self.m_select.setTitle("Select the texts/offsets in the boxes above") self.m_cursor = Button("`>Cursor", self) self.m_cursor.setTitle("Set cursor to text/offset of top 2 boxes above") grid.setWidget(0, 0, self.m_startNode) grid.setWidget(0, 1, self.m_startOffset) grid.setWidget(1, 0, self.m_endNode) grid.setWidget(1, 1, self.m_endOffset) self.m_deleteSel = Button("Delete", self) self.m_reset = Button("Reset", self) buts.add(self.m_getCurr) buts.add(self.m_setHtml) buts.add(self.m_toSCursor) buts.add(self.m_toECursor) buts.add(self.m_font1) buts.add(self.m_font2) buts.add(self.m_surround1) buts.add(self.m_surround2) buts.add(grid) buts.add(self.m_select) buts.add(self.m_cursor) buts.add(self.m_deleteSel) buts.add(self.m_reset) dlp.add(buts, DockPanel.WEST) textPanels = DockPanel() self.m_html = TextArea() self.m_html.setSize("100%", "100%") self.m_sel = TextArea() self.m_sel.setSize("100%", "100%") textPanels.add(self.m_sel, DockPanel.EAST) textPanels.add(self.m_html, DockPanel.WEST) dlp.add(textPanels, DockPanel.SOUTH) dlp.add(self.m_tb, DockPanel.NORTH) dlp.add(self.m_rte, DockPanel.CENTER) rp = RootPanel.get() rp.add(dlp) DeferredCommand.add(getattr(self, "set_html_focus")) self.reset()
def __init__(self): SimplePanel.__init__(self) flow = FlowPanel(Width="400px") flow.add(Button("Item 1")) flow.add(Button("Item 2")) flow.add(Button("Item 3")) flow.add(Button("Item 4")) flow.add(Button("Item 5")) flow.add(Button("Item 6")) flow.add(Button("Item 7")) flow.add(Button("Item 8")) flow.add(Button("Item 9")) flow.add(Button("Item 10")) self.add(flow)
def __init__(self): Sink.__init__(self) text="""This is a <code>ScrollPanel</code> contained at the center of a <code>DockPanel</code>. By putting some fairly large contents in the middle and setting its size explicitly, it becomes a scrollable area within the page, but without requiring the use of an IFRAME. Here's quite a bit more meaningless text that will serve primarily to make this thing scroll off the bottom of its visible area. Otherwise, you might have to make it really, really small in order to see the nifty scroll bars!""" contents = HTML(text) scroller = ScrollPanel(contents, StyleName="ks-layouts-Scroller") dock = DockPanel(HorizontalAlignment=HasAlignment.ALIGN_CENTER, Spacing=10) north0 = HTML("This is the <i>first</i> north component", True) east = HTML("<center>This<br>is<br>the<br>east<br>component</center>", True) south = HTML("This is the south component") west = HTML("<center>This<br>is<br>the<br>west<br>component</center>", True) north1 = HTML("This is the <b>second</b> north component", True) dock.add(north0, DockPanel.NORTH) dock.add(east, DockPanel.EAST) dock.add(south, DockPanel.SOUTH) dock.add(west, DockPanel.WEST) dock.add(north1, DockPanel.NORTH) dock.add(scroller, DockPanel.CENTER) #Logger.write("Layouts", "TODO: flowpanel") flow = FlowPanel() for i in range(8): flow.add(CheckBox("Flow %d" % i)) horz = HorizontalPanel(VerticalAlignment=HasAlignment.ALIGN_MIDDLE) horz.add(Button("Button")) horz.add(HTML("<center>This is a<br>very<br>tall thing</center>", True)) horz.add(Button("Button")) vert = VerticalPanel(HorizontalAlignment=HasAlignment.ALIGN_CENTER) vert.add(Button("Small")) vert.add(Button("--- BigBigBigBig ---")) vert.add(Button("tiny")) menu = MenuBar() menu0 = MenuBar(True) menu1 = MenuBar(True) menu.addItem("menu0", menu0) menu.addItem("menu1", menu1) menu0.addItem("child00") menu0.addItem("child01") menu0.addItem("child02") menu1.addItem("child10") menu1.addItem("child11") menu1.addItem("child12") #Logger.write("Layouts", "TODO: htmlpanel") id = HTMLPanel.createUniqueId() text="""This is an <code>HTMLPanel</code>. It allows you to add components inside existing HTML, like this: <span id='%s' /> Notice how the menu just fits snugly in there? Cute.""" % id html = HTMLPanel(text) DOM.setStyleAttribute(menu.getElement(), "display", "inline") html.add(menu, id) disclose = DisclosurePanel("Click to disclose") disclose.add(HTML("""<b>Ta-daaaaa!</b><br />Ok - it could have been<br />more of a surprise.""")) panel = VerticalPanel(Spacing=8, HorizontalAlignment=HasAlignment.ALIGN_CENTER) panel.add(self.makeLabel("Dock Panel")) panel.add(dock) panel.add(self.makeLabel("Flow Panel")) panel.add(flow) panel.add(self.makeLabel("Horizontal Panel")) panel.add(horz) panel.add(self.makeLabel("Vertical Panel")) panel.add(vert) panel.add(self.makeLabel("HTML Panel")) panel.add(html) panel.add(self.makeLabel("Disclosure Panel")) panel.add(disclose) self.initWidget(panel) self.setStyleName("ks-layouts")
def __init__(self, worksheet, id): SimplePanel.__init__(self) MouseHandler.__init__(self) self._id = id self._worksheet = worksheet insert_new_cell = HTML("", StyleName="insert_new_cell") insert_new_cell.addClickListener(InsertListener(worksheet, self._id)) input_prompt = HTML("In [%d]:" % self._id, Element=DOM.createSpan(), StyleName="input_prompt") cell_input = InputArea(worksheet, self._id, StyleName='cell_input') evaluate_button = HTML("evaluate", Element=DOM.createAnchor(), StyleName="eval_button", Visible=False) evaluate_button.getElement().setAttribute("href", "") evaluate_button.addClickListener(EvaluateListener(self)) evaluate_button.addMouseListener(self) output_delimiter = HTML("", StyleName="output_delimiter") output_prompt = HTML("Out[%d]:" % self._id, Element=DOM.createSpan(), StyleName="output_prompt") cell_output = HTML("", Element=DOM.createSpan(), StyleName="cell_output") output_prompt.setVisible(False) p = FlowPanel(StyleName="cell") p.add(insert_new_cell) p.add(input_prompt) p.add(cell_input) p.add(evaluate_button) p.add(output_delimiter) p.add(output_prompt) p.add(cell_output) self.add(p) self._cell_input = cell_input self._cell_output = cell_output self._output_prompt = output_prompt self._evaluate_button = evaluate_button self._mouse_in = False