class GettextExample(object): def __init__(self): self.b = Button(_("Click me"), self.greet, StyleName='teststyle') self.h = HTML(_("<b>Hello World</b> (html)"), StyleName='teststyle') self.l = Label(_("Hello World (label)"), StyleName='teststyle') self.base = HTML(_("Hello from %s") % pygwt.getModuleBaseURL(), StyleName='teststyle') RootPanel().add(self.b) RootPanel().add(self.h) RootPanel().add(self.l) RootPanel().add(self.base) def change_texts(self, text): self.b.setText(_("Click me")) self.h.setHTML(_("<b>Hello World</b> (html)")) self.l.setText(_("Hello World (label)")) text = [_("Hello from %s") % pygwt.getModuleBaseURL()] for i in range(4): text.append( ngettext('%(num)d single', '%(num)d plural', i) % dict(num=i)) text = '<br />'.join(text) self.base.setHTML(text) def greet(self, fred): fred.setText(_("No, really click me!")) Window.alert(_("Hello, there!")) i18n.load(lang=lang[0], onCompletion=self.change_texts) lang.append(lang.pop(0))
class GettextExample(object): def __init__(self): self.b = Button(_("Click me"), self.greet, StyleName='teststyle') self.h = HTML(_("<b>Hello World</b> (html)"), StyleName='teststyle') self.l = Label(_("Hello World (label)"), StyleName='teststyle') self.base = HTML(_("Hello from %s") % pygwt.getModuleBaseURL(), StyleName='teststyle') RootPanel().add(self.b) RootPanel().add(self.h) RootPanel().add(self.l) RootPanel().add(self.base) def change_texts(self, text): self.b.setText(_("Click me")) self.h.setHTML(_("<b>Hello World</b> (html)")) self.l.setText(_("Hello World (label)")) text = [_("Hello from %s") % pygwt.getModuleBaseURL()] for i in range(4): text.append(ngettext('%(num)d single', '%(num)d plural', i) % dict(num=i)) text = '<br />'.join(text) self.base.setHTML(text) def greet(self, fred): fred.setText(_("No, really click me!")) Window.alert(_("Hello, there!")) i18n.load(lang=lang[0], onCompletion=self.change_texts) lang.append(lang.pop(0))
class pjBallot: def __init__(self): self.mainPanel = VerticalPanel() self.contest = HorizontalPanel() self.contest.setStyleName('words') self.selection = HorizontalPanel() self.selection.setStyleName('words') self.button = Button('test', self.test) self.x = 1 def test(self): self.button.setText("No, really click me!") # Window.alert("Hello, AJAAAX!") self.contest.add(HTML('yay')) def nextContest(self): self.x += 1 self.contest.clear() self.contest.add(HTML('<b /> Contest: %d' % self.x)) def nextSelection(self): self.x += 1 self.selection.clear() self.selection.add(HTML('<b /> Selection: %d' % self.x)) def onKeyDown(self, sender, keycode, modifiers): pass def onKeyUp(self, sender, keycode, modifiers): pass def onKeyPress(self, sender, keycode, modifiers): DOM.eventPreventDefault(DOM.eventGetCurrentEvent()) #not needed if keycode == KeyboardListener.KEY_UP: self.nextContest() if keycode == KeyboardListener.KEY_DOWN: self.nextContest() if keycode == KeyboardListener.KEY_LEFT: self.nextSelection() if keycode == KeyboardListener.KEY_RIGHT: self.nextSelection() def onModuleLoad(self): h = HTML("<b />Contest: ") self.contest.add(h) l = HTML("<b />Selection: ") self.selection.add(l) # self.mainPanel.add(self.button) self.mainPanel.add(self.contest) self.mainPanel.add(self.selection) panel = FocusPanel(Widget=self.mainPanel) gp = RootPanelListener(panel) manageRootPanel(gp) RootPanel().add(panel) panel.setFocus(True)
class Clock: # pyjamas doesn't generate __doc__ __doc__ = '''This demonstrates using Timer instantiated with the notify keyword, as in:<pre> timer = Timer(notify=func) </pre>When the timer fires it will call func() with no arguments (or <code>self</code> if it is a bound method as in this example). This timer is scheduled with the <code>scheduleRepeating()</code> method, so after func() is called, it is automatically rescheduled to fire again after the specified period. The timer can be cancelled by calling the <code>cancel()</code> method; this happens when you click on the button. ''' start_txt = 'Click to start the clock' stop_txt = 'Click to stop the clock' def __init__(self): # the button self.button = Button(listener=self) # set an attr on the button to keep track of its state self.button.stop = False # date label self.datelabel = Label(StyleName='clock') # the timer self.timer = Timer(notify=self.updateclock) # kick start self.onClick(self.button) def onClick(self, button): if self.button.stop: # we're stopping the clock self.button.stop = False self.timer.cancel() self.button.setText(self.start_txt) else: # we're starting the clock self.button.stop = True self.timer.scheduleRepeating(1000) self.button.setText(self.stop_txt) def updateclock(self, timer): # the callable attached to the timer with notify dt = datetime.now().replace(microsecond=0) self.datelabel.setText(dt.isoformat(' '))
class ContentItemToolbar(HorizontalPanel): def __init__(self, contentitem, onPublish, onLike, onDislike): """Create a ContentItemToolbar. Event handlers should be methods that take: sender """ HorizontalPanel.__init__(self) self.contentitem = contentitem self.publishBtn = Button('Publish', listener=onPublish, StyleName=Styles.TOOLBAR_BUTTON) self.add(self.publishBtn) self.likeBtn = Button('FOO', listener=onLike, StyleName=Styles.TOOLBAR_BUTTON) self.add(self.likeBtn) self.dislikeBtn = Button('Dislike', listener=onDislike, StyleName=Styles.TOOLBAR_BUTTON) self.add(self.dislikeBtn) self.updateStatusFromItem() return def updateStatusFromItem(self, updatedItem=None): if updatedItem: self.contentitem = updatedItem likes = self.contentitem['metadata']['likes'] self.likeBtn.setText('Like (%s)' % likes) isPublished = self.contentitem['metadata']['is_published'] self.publishBtn.setStyleName(Styles.TOOLBAR_BUTTON_PUBLISHED if isPublished else Styles.TOOLBAR_BUTTON)
def makeLink(self): link = Button() link.setText("+ Add another") return link
class LatBuilderWeb: def setStyleSheet(self, sheet): e = DOM.createElement('link') e.setAttribute('rel', 'stylesheet') e.setAttribute('type', 'text/css') e.setAttribute('href', sheet) html = Window.getDocumentRoot().parentElement head = html.getElementsByTagName('head').item(0) head.appendChild(e) def includeMathJax(self, config): html = Window.getDocumentRoot().parentElement head = html.getElementsByTagName('head').item(0) e = DOM.createElement('script') e.setAttribute('type', 'text/javascript') e.setAttribute( 'src', 'http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=' + config) head.appendChild(e) e = DOM.createElement('script') e.setAttribute('type', 'text/javascript') e.textContent = 'function Typeset() { MathJax.Hub.Queue(["Typeset",MathJax.Hub]); }' head.appendChild(e) def onModuleLoad(self): self.current_request = None Window.setTitle("Lattice Builder Web Interface") self.setStyleSheet("./LatBuilderWeb.css") self.includeMathJax('TeX-AMS-MML_HTMLorMML') self.TEXT_WAITING = "Lattice Builder is working..." self.TEXT_ERROR = "Server Error" self.FIGURES_OF_MERIT = [ # (key, name) ('{cs}P2', 'P2'), ('{cs}P4', 'P4'), ('{cs}P6', 'P6'), ('{cs}R{alpha}', 'R_alpha'), ('spectral', 'spectral'), ] self.CONSTRUCTION_METHODS = [ ('explicit:{genvec}', "Explicit (Evaluation)", "Evaluates the figure of merit for a given generating vector.<br/>" "<strong>Please specify the generating vector in the Lattice " "Properties panel above.</strong>"), ('exhaustive', "Exhaustive", "Examines all generating vectors and retains the best one."), ('random:{samples}', "Random", "Examines a number of randomly selected generating vectors and " "retains the best one."), ('Korobov', "Korobov", "Examines all generating vectors of the form (1, a, a^2 mod n, " "..., a^s mod n) and retains the best one."), ('random-Korobov:{samples}', "Random Korobov", "Examines a number of randomly selected generating vectors of " "the form (1, a, a^2 mod n, ..., a^s mod n) and retains the " "best one."), ('CBC', "Component-by-Component", "Examines all possible values of the components of the " "generating vector and selects the best ones, one coordinate " "at a time."), ('random-CBC:{samples}', "Random Component-by-Component", "Examines a number of randomly selected values of the " "components of the generating vector and selects the best " "ones, one coordinate at a time."), ('fast-CBC', "Fast Component-by-Component", "Examines all possible values of the components of the " "generating vector and selects the best ones, one coordinate " "at a time. Computation is accelerated by using fast " "Fourier transforms."), ] self.COMBINER_TYPES = [ ('level:max', 'highest level'), ('sum', 'weighted sum'), ('max', 'maximum weighted value'), ] self.NORMALIZATION_TYPES = [ ('norm:P{alpha}-SL10', 'SL10 P-alpha'), ('norm:P{alpha}-DPW08', 'DPW08 P-alpha'), ] captionstyle = { 'Width': '10em', 'HorizontalAlignment': 'right', } self.remote = LatBuilderService() WeightValuesArray.REMOTE = self.remote main_panel = VerticalPanel(Spacing=30) # information info = """<h2>Lattice Builder Web Interface</h2> <p>This Web interface allows <a href="https://github.com/mungerd/latbuilder#readme">Lattice Builder</a> users to call the executable program without having to construct the command line explicitly. </p> <p>Enter the construction parameters below, and press the <em>Search for Good Lattices</em> button. The results will show at the bottom. </p>""" main_panel.add(HTML(info)) self.version_label = HTML() main_panel.add(self.version_label) self.remote.backend_version(self) params_panel = VerticalPanel(Spacing=15) main_panel.add(params_panel) # lattice type and size and dimension lat_panel = VerticalPanel() params_panel.add(CaptionPanel("Lattice Properties", lat_panel)) lat_panel.add( HTML( r'\[ P_n = \left\{ (i \boldsymbol a \bmod n) / n \::\: i = 0, \dots, n \right\} \qquad (\boldsymbol a \in \mathbb Z^s) \]', StyleName='DisplayMath')) self.size = TextBox(Text="2^10") self.size.addChangeListener(self) self.embedded = CheckBox("embedded") self.embedded.addClickListener(self) panel = HorizontalPanel(Spacing=8) panel.add(HTML(r"Size (\(n\)): ", StyleName="CaptionLabel")) panel.add(self.size) panel.add(self.embedded) lat_panel.add(panel) self.dimension = TextBox(Text="3") self.dimension.addChangeListener(self) panel = HorizontalPanel(Spacing=8) panel.add(HTML(r"Dimension (\(s\)): ", StyleName="CaptionLabel")) panel.add(self.dimension) lat_panel.add(panel) self.generating_vector = GeneratingVector(self.size) self.generating_vector.panel.setVisible(False) lat_panel.add(self.generating_vector.panel) # figure of merit merit_panel = VerticalPanel() params_panel.add(CaptionPanel("Figure of Merit", merit_panel)) merit_panel.add( HTML( r"\[ \left[ \mathcal D_q(P_n) \right]^q = " r"\sum_{\emptyset \neq u \subseteq \{1,\dots,s\}}" r"\gamma_u^q \, \left[\mathcal D_u(P_n)\right]^q" r"\qquad (q > 0) \]", StyleName='DisplayMath')) self.norm_type = TextBox(Text="2") self.norm_type.addChangeListener(self) panel = HorizontalPanel(Spacing=8) panel.add( HTML(r"Norm type (\(q\) or <b>inf</b>): ", StyleName="CaptionLabel")) panel.add(self.norm_type) merit_panel.add(panel) self.merit = ListBox() self.merit.addChangeListener(self) for key, name in self.FIGURES_OF_MERIT: self.merit.addItem(name) self.merit_cs = CheckBox("Use coordinate-symmetric implementation", Checked=True) panel = HorizontalPanel(Spacing=8) panel.add(HTML("Figure of merit: ", StyleName="CaptionLabel")) panel.add(self.merit) panel.add(self.merit_cs) merit_panel.add(panel) self.merit_alpha_panel = HorizontalPanel(Spacing=8) self.merit_alpha = TextBox(Text="2") self.merit_alpha_panel.add( HTML("Value of alpha: ", StyleName="CaptionLabel")) self.merit_alpha_panel.add(self.merit_alpha) merit_panel.add(self.merit_alpha_panel) # filters and combiner multilevel_panel = VerticalPanel(Spacing=8) self.multilevel_panel = CaptionPanel("Multilevel Filters and Combiner", multilevel_panel, Visible=False) params_panel.add(self.multilevel_panel) self.ml_normalization_enable = CheckBox("Normalization") self.ml_normalization_enable.addClickListener(self) multilevel_panel.add(self.ml_normalization_enable) self.ml_normalization_panel = VerticalPanel(Spacing=4, Visible=False, StyleName='SubPanel') multilevel_panel.add(self.ml_normalization_panel) panel = HorizontalPanel(Spacing=8) panel.add(HTML("Normalization type: ", StyleName="CaptionLabel")) self.ml_normalization_type = ListBox() for key, name in self.NORMALIZATION_TYPES: self.ml_normalization_type.addItem(name, value=key) panel.add(self.ml_normalization_type) self.ml_normalization_panel.add(panel) panel = HorizontalPanel(Spacing=8) panel.add(HTML("Minimum level: ", StyleName="CaptionLabel")) self.ml_min_level = TextBox(Text="1") panel.add(self.ml_min_level) self.ml_normalization_panel.add(panel) panel = HorizontalPanel(Spacing=8) panel.add(HTML("Maximum level: ", StyleName="CaptionLabel")) self.ml_max_level = TextBox(Text="1") panel.add(self.ml_max_level) self.ml_normalization_panel.add(panel) self.ml_lowpass_enable = CheckBox("Low-pass filter") self.ml_lowpass_enable.addClickListener(self) multilevel_panel.add(self.ml_lowpass_enable) self.ml_lowpass_panel = VerticalPanel(Spacing=4, Visible=False, StyleName='SubPanel') multilevel_panel.add(self.ml_lowpass_panel) self.ml_lowpass = TextBox(Text="1.0") panel = HorizontalPanel(Spacing=8) panel.add(HTML("Low-pass threshold: ", StyleName="CaptionLabel")) panel.add(self.ml_lowpass) self.ml_lowpass_panel.add(panel) self.combiner_type = ListBox() for key, name in self.COMBINER_TYPES: self.combiner_type.addItem(name, value=key) panel = HorizontalPanel(Spacing=8) panel.add(HTML("Combiner: ", StyleName="CaptionLabel")) panel.add(self.combiner_type) multilevel_panel.add(panel) # weights self.weights = CompoundWeights() weights_panel = VerticalPanel() params_panel.add(CaptionPanel("Weights", weights_panel)) weights_panel.add( HTML(r"\[ \gamma_u^p \qquad (u \subseteq \{1, \dots, s\}) \]", StyleName='DisplayMath')) self.weights_power = TextBox(Text="2") panel = HorizontalPanel(Spacing=8) panel.add(HTML(r"Weights power (\(p\)): ", StyleName="CaptionLabel")) panel.add(self.weights_power) weights_panel.add(panel) weights_panel.add(self.weights.panel) self.weights.add_weights(ProductWeights) # construction method cons_panel = VerticalPanel() params_panel.add(CaptionPanel("Construction Method", cons_panel)) self.construction = ListBox() self.construction.addChangeListener(self) for key, name, desc in self.CONSTRUCTION_METHODS: self.construction.addItem(name, value=key) self.construction_desc = HTML() panel = HorizontalPanel(Spacing=8) panel.add(self.construction) panel.add(self.construction_desc) cons_panel.add(panel) self.construction_samples_panel = HorizontalPanel(Spacing=8) self.construction_samples = TextBox(Text="30") self.construction_samples_panel.add( HTML("Random samples: ", StyleName="CaptionLabel")) self.construction_samples_panel.add(self.construction_samples) cons_panel.add(self.construction_samples_panel) # execute button panel = VerticalPanel(Spacing=8, Width="100%", HorizontalAlignment='center') main_panel.add(panel) button_panel = HorizontalPanel() panel.add(button_panel) self.button_search = Button("Search", self) button_panel.add(self.button_search) self.button_abort = Button("Abort", self, Visible=False) button_panel.add(self.button_abort) self.status = Label() panel.add(self.status) # results results_panel = VerticalPanel() self.results_panel = CaptionPanel("Results", results_panel, Visible=False) main_panel.add(self.results_panel) self.results_size = Label() panel = HorizontalPanel(Spacing=8) panel.add(HTML("Lattice size: ", StyleName="ResultsCaptionLabel")) panel.add(self.results_size) results_panel.add(panel) self.results_gen = Label() panel = HorizontalPanel(Spacing=8) panel.add(HTML("Generating vector: ", StyleName="ResultsCaptionLabel")) panel.add(self.results_gen) results_panel.add(panel) self.results_merit = Label() panel = HorizontalPanel(Spacing=8) panel.add(HTML("Merit value: ", StyleName="ResultsCaptionLabel")) panel.add(self.results_merit) results_panel.add(panel) self.results_cpu_time = Label() panel = HorizontalPanel(Spacing=8) panel.add(HTML("CPU time: ", StyleName="ResultsCaptionLabel")) panel.add(self.results_cpu_time) results_panel.add(panel) self.results_cmd = Label(StyleName='Command', Visible=False) panel = HorizontalPanel(Spacing=8) self.results_cmd_link = Hyperlink("Command line: ", StyleName="ResultsCaptionLabel") self.results_cmd_link.addClickListener(self) panel.add(self.results_cmd_link) panel.add(self.results_cmd) results_panel.add(panel) # update selections self.construction.selectValue('CBC') self.onChange(self.size) self.onChange(self.construction) self.onChange(self.merit) self.onChange(self.dimension) self.onClick(self.embedded) self.onChange(self.ml_normalization_enable) self.onChange(self.ml_lowpass_enable) RootPanel().add(main_panel) def onChange(self, sender): if sender == self.construction: key, name, desc = \ self.CONSTRUCTION_METHODS[self.construction.getSelectedIndex()] self.construction_desc.setHTML(desc) self.construction_samples_panel.setVisible('{samples}' in key) if key.startswith('explicit'): self.generating_vector.panel.setVisible(True) self.button_search.setText("Evaluate Figure of Merit") else: self.generating_vector.panel.setVisible(False) self.button_search.setText("Search for Good Lattices") elif sender == self.merit: key, name = \ self.FIGURES_OF_MERIT[self.merit.getSelectedIndex()] self.merit_alpha_panel.setVisible('{alpha}' in key) self.merit_cs.setVisible('{cs}' in key) elif sender == self.size: max_level = LatSize(self.size.getText()).max_level if int(self.ml_min_level.getText()) > max_level: self.ml_min_level.setText(max_level) self.ml_max_level.setText(max_level) elif sender == self.dimension: # resize weights dimension = int(self.dimension.getText()) self.generating_vector.dimension = dimension self.weights.dimension = dimension elif sender == self.norm_type: q = self.norm_type.getText().strip() self.merit_cs.setVisible(q == '2') if q == 'inf': self.weights_power.setText('1') else: self.weights_power.setText(q) def onClick(self, sender): if sender == self.embedded: self.multilevel_panel.setVisible(self.embedded.getChecked()) elif sender == self.ml_normalization_enable: self.ml_normalization_panel.setVisible( self.ml_normalization_enable.getChecked()) elif sender == self.ml_lowpass_enable: self.ml_lowpass_panel.setVisible( self.ml_lowpass_enable.getChecked()) elif sender == self.results_cmd_link: self.results_cmd.setVisible(not self.results_cmd.getVisible()) elif sender == self.button_search: self.results_panel.setVisible(False) self.button_search.setVisible(False) self.button_abort.setVisible(True) lattype = self.embedded.getChecked() and 'embedded' or 'ordinary' size = self.size.getText() dimension = self.dimension.getText() norm_type = self.norm_type.getText() merit, merit_name = \ self.FIGURES_OF_MERIT[self.merit.getSelectedIndex()] alpha = self.merit_alpha.getText() cs = norm_type == 2 and self.merit_cs.getChecked() and 'CS:' or '' weights_power = self.weights_power.getText() weights = [w.as_arg() for w in self.weights.weights] construction, construction_name, desc = \ self.CONSTRUCTION_METHODS[self.construction.getSelectedIndex()] samples = self.construction_samples.getText() genvec = ','.join(self.generating_vector.values) mlfilters = [] combiner_type = None if self.embedded.getChecked(): if self.ml_normalization_enable.getChecked(): ml_normalization_type, ml_normalization_name = \ self.NORMALIZATION_TYPES[self.ml_normalization_type.getSelectedIndex()] ml_normalization_type += ':even:{},{}'.format( self.ml_min_level.getText(), self.ml_max_level.getText()) mlfilters.append(ml_normalization_type.format(alpha=alpha)) if self.ml_lowpass_enable.getChecked(): mlfilters.append('low-pass:{}'.format( self.ml_lowpass.getText())) combiner_type, combiner_name = \ self.COMBINER_TYPES[self.combiner_type.getSelectedIndex()] self.status.setText(self.TEXT_WAITING) self.current_request = self.remote.latbuilder_exec( lattype, size, dimension, norm_type, merit.format(alpha=alpha, cs=cs), construction.format(samples=samples, genvec=genvec), weights, weights_power, None, mlfilters, combiner_type, self) elif sender == self.button_abort: # Need to patch JSONService.sendRequest(): # # return HTTPRequest().asyncPost(self.url, msg_data, # JSONResponseTextHandler(request_info) # False, self.content_type, # self.headers) if self.current_request: self.current_request.abort() self.current_request = None self.button_abort.setVisible(False) self.button_search.setVisible(True) elif sender == self.product_weights_expr_link: self.showDialog(self._product_weights_expr_dialog) elif sender == self.order_weights_expr_link: self.showDialog(self._order_weights_expr_dialog) def onRemoteResponse(self, response, request_info): try: if request_info.method == 'latbuilder_exec': self.button_search.setVisible(True) self.button_abort.setVisible(False) cmd, points, gen, merit, seconds = eval(response) self.results_size.setText(points) self.results_gen.setText(', '.join(gen)) self.results_merit.setText(merit) self.results_cpu_time.setText(format_time(seconds=seconds)) self.results_cmd.setText(cmd) self.results_panel.setVisible(True) self.status.setText("") elif request_info.method == 'backend_version': version = response self.version_label.setHTML( "<b>Backend:</b> {}".format(version)) except: self.status.setText(response.replace('\n', ' | ')) def onRemoteError(self, code, errobj, request_info): if request_info.method == 'latbuilder_exec': self.button_search.setVisible(True) self.button_abort.setVisible(False) message = errobj['message'] if code != 0: self.status.setText("HTTP error %d: %s" % (code, message['name'])) else: code = errobj['code'] if code == -32603: self.status.setText("Aborted.") else: self.status.setText("JSONRPC Error %s: %s" % (code, message))
class UserForm(AbsolutePanel): MODE_ADD = "modeAdd"; MODE_EDIT = "modeEdit"; user = None mode = None usernameInput = None firstInput = None lastInput = None emailInput = None passwordInput = None confirmInput = None departmentCombo = None addBtn = None cancelBtn = None def __init__(self,parent): AbsolutePanel.__init__(self) ftable = FlexTable() ftable.setWidget(0, 0, Label("First Name", wordWrap=False)) ftableFormatter = ftable.getFlexCellFormatter() self.firstInput = TextBox() self.firstInput.addChangeListener(self.checkValid) self.firstInput.addKeyboardListener(self) ftable.setWidget(0, 1, self.firstInput) ftable.setWidget(1, 0, Label("Last Name", wordWrap=False)) self.lastInput = TextBox() self.lastInput.addChangeListener(self.checkValid) self.lastInput.addKeyboardListener(self) ftable.setWidget(1, 1, self.lastInput) ftable.setWidget(2, 0, Label("Email", wordWrap=False)) self.emailInput = TextBox() self.emailInput.addChangeListener(self.checkValid) self.emailInput.addKeyboardListener(self) ftable.setWidget(2, 1, self.emailInput) w = Label("* Username", wordWrap=False) w.addMouseListener(TooltipListener("Required, not changable")) ftable.setWidget(3, 0, w) self.usernameInput = TextBox() self.usernameInput.addChangeListener(self.checkValid) self.usernameInput.addKeyboardListener(self) ftable.setWidget(3, 1, self.usernameInput) w = Label("* Password", wordWrap=False) w.addMouseListener(TooltipListener("Required")) ftable.setWidget(4, 0, w) self.passwordInput = PasswordTextBox() self.passwordInput.addChangeListener(self.checkValid) self.passwordInput.addKeyboardListener(self) ftable.setWidget(4, 1, self.passwordInput) w = Label("* Confirm", wordWrap=False) w.addMouseListener(TooltipListener("Required")) ftable.setWidget(5, 0, w) self.confirmInput = PasswordTextBox() self.confirmInput.addChangeListener(self.checkValid) self.confirmInput.addKeyboardListener(self) ftable.setWidget(5, 1, self.confirmInput) w = Label("* Department", wordWrap=False) w.addMouseListener(TooltipListener("Required")) ftable.setWidget(6, 0, w) self.departmentCombo = ListBox() self.departmentCombo.addChangeListener(self.checkValid) self.departmentCombo.addKeyboardListener(self) ftable.setWidget(6, 1, self.departmentCombo) hpanel = HorizontalPanel() self.addBtn = Button("Add User") self.addBtn.setEnabled(False) hpanel.add(self.addBtn) self.cancelBtn = Button("Cancel") hpanel.add(self.cancelBtn) ftable.setWidget(7, 0, hpanel) ftableFormatter.setColSpan(7, 0, 2) self.add(ftable) self.clearForm() return def clearForm(self): self.user = None self.usernameInput.setText('') self.firstInput.setText('') self.lastInput.setText('') self.emailInput.setText('') self.passwordInput.setText('') self.confirmInput.setText('') self.departmentCombo.setItemTextSelection(None) self.updateMode(self.MODE_ADD) self.checkValid() def updateUser(self, user): def setText(elem, value): if value: elem.setText(value) else: elem.setText("") self.user = user setText(self.usernameInput, self.user.username) setText(self.firstInput, self.user.fname) setText(self.lastInput, self.user.lname) setText(self.emailInput, self.user.email) setText(self.passwordInput, self.user.password) setText(self.confirmInput, self.user.password) self.departmentCombo.setItemTextSelection([self.user.department]) self.checkValid() def updateDepartmentCombo(self,choices, default_): self.departmentCombo.clear() for choice in choices: self.departmentCombo.addItem(choice) self.departmentCombo.selectValue(default_) def updateMode(self, mode): self.mode = mode if self.mode == self.MODE_ADD: self.addBtn.setText("Add User") else: self.addBtn.setText("Update User") def checkValid(self, evt=None): if self.enableSubmit(self.usernameInput.getText(),self.passwordInput.getText(),self.confirmInput.getText(), self.departmentCombo.getSelectedItemText(True)): self.addBtn.setEnabled(True) else: self.addBtn.setEnabled(False) def enableSubmit(self, u, p, c, d): return (len(u) > 0 and len(p) >0 and p == c and len(d) > 0) def onClick(self, sender): pass def onKeyUp(self, sender, keyCode, modifiers): self.checkValid() def onKeyDown(self, sender, keyCode, modifiers): pass def onKeyPress(self, sender, keyCode, modifiers): pass
class UserForm(AbsolutePanel): MODE_ADD = "modeAdd" MODE_EDIT = "modeEdit" user = None mode = None usernameInput = None firstInput = None lastInput = None emailInput = None passwordInput = None confirmInput = None departmentCombo = None addBtn = None cancelBtn = None def __init__(self, parent): AbsolutePanel.__init__(self) ftable = FlexTable() ftable.setWidget(0, 0, Label("First Name", wordWrap=False)) ftableFormatter = ftable.getFlexCellFormatter() self.firstInput = TextBox() self.firstInput.addChangeListener(self.checkValid) self.firstInput.addKeyboardListener(self) ftable.setWidget(0, 1, self.firstInput) ftable.setWidget(1, 0, Label("Last Name", wordWrap=False)) self.lastInput = TextBox() self.lastInput.addChangeListener(self.checkValid) self.lastInput.addKeyboardListener(self) ftable.setWidget(1, 1, self.lastInput) ftable.setWidget(2, 0, Label("Email", wordWrap=False)) self.emailInput = TextBox() self.emailInput.addChangeListener(self.checkValid) self.emailInput.addKeyboardListener(self) ftable.setWidget(2, 1, self.emailInput) w = Label("* Username", wordWrap=False) w.addMouseListener(TooltipListener("Required, not changable")) ftable.setWidget(3, 0, w) self.usernameInput = TextBox() self.usernameInput.addChangeListener(self.checkValid) self.usernameInput.addKeyboardListener(self) ftable.setWidget(3, 1, self.usernameInput) w = Label("* Password", wordWrap=False) w.addMouseListener(TooltipListener("Required")) ftable.setWidget(4, 0, w) self.passwordInput = PasswordTextBox() self.passwordInput.addChangeListener(self.checkValid) self.passwordInput.addKeyboardListener(self) ftable.setWidget(4, 1, self.passwordInput) w = Label("* Confirm", wordWrap=False) w.addMouseListener(TooltipListener("Required")) ftable.setWidget(5, 0, w) self.confirmInput = PasswordTextBox() self.confirmInput.addChangeListener(self.checkValid) self.confirmInput.addKeyboardListener(self) ftable.setWidget(5, 1, self.confirmInput) w = Label("* Department", wordWrap=False) w.addMouseListener(TooltipListener("Required")) ftable.setWidget(6, 0, w) self.departmentCombo = ListBox() self.departmentCombo.addChangeListener(self.checkValid) self.departmentCombo.addKeyboardListener(self) ftable.setWidget(6, 1, self.departmentCombo) hpanel = HorizontalPanel() self.addBtn = Button("Add User") self.addBtn.setEnabled(False) hpanel.add(self.addBtn) self.cancelBtn = Button("Cancel") hpanel.add(self.cancelBtn) ftable.setWidget(7, 0, hpanel) ftableFormatter.setColSpan(7, 0, 2) self.add(ftable) self.clearForm() return def clearForm(self): self.user = None self.usernameInput.setText('') self.firstInput.setText('') self.lastInput.setText('') self.emailInput.setText('') self.passwordInput.setText('') self.confirmInput.setText('') self.departmentCombo.setItemTextSelection(None) self.updateMode(self.MODE_ADD) self.checkValid() def updateUser(self, user): def setText(elem, value): if value: elem.setText(value) else: elem.setText("") self.user = user setText(self.usernameInput, self.user.username) setText(self.firstInput, self.user.fname) setText(self.lastInput, self.user.lname) setText(self.emailInput, self.user.email) setText(self.passwordInput, self.user.password) setText(self.confirmInput, self.user.password) self.departmentCombo.setItemTextSelection([self.user.department]) self.checkValid() def updateDepartmentCombo(self, choices, default_): self.departmentCombo.clear() for choice in choices: self.departmentCombo.addItem(choice) self.departmentCombo.selectValue(default_) def updateMode(self, mode): self.mode = mode if self.mode == self.MODE_ADD: self.addBtn.setText("Add User") else: self.addBtn.setText("Update User") def checkValid(self, evt=None): if self.enableSubmit(self.usernameInput.getText(), self.passwordInput.getText(), self.confirmInput.getText(), self.departmentCombo.getSelectedItemText(True)): self.addBtn.setEnabled(True) else: self.addBtn.setEnabled(False) def enableSubmit(self, u, p, c, d): return (len(u) > 0 and len(p) > 0 and p == c and len(d) > 0) def onClick(self, sender): pass def onKeyUp(self, sender, keyCode, modifiers): self.checkValid() def onKeyDown(self, sender, keyCode, modifiers): pass def onKeyPress(self, sender, keyCode, modifiers): pass
class PjBallot: def __init__(self): self.mainPanel = VerticalPanel() self.button = Button('test', self.test) self.status = Label('hi') self.x = 1 self.srace = Race('', '', [], '') def test(self): self.button.setText("No, really click me!") self.contest.add(HTML('yay')) def onKeyDown(self, sender, keycode, modifiers): #print "inside onKeyDown, self is", self, "sender is", sender, "keycode is", keycode #self.mainPanel.add(keycode) pass def onKeyUp(self, sender, keycode, modifiers): pass def onModuleLoad(self): print "inside onModuleLoad" self.remote_py = JSONService() self.mainPanel.add(sampleBallot.title) self.mainPanel.add(sampleBallot.instructions) self.mainPanel.add(sampleBallot.contest) self.mainPanel.add(sampleBallot.candidate) self.mainPanel.add(sampleBallot.selection) self.mainPanel.add(sampleBallot.status) panel = FocusPanel(Widget=self.mainPanel) gp = RootPanelListener(panel) manageRootPanel(gp) RootPanel().add(panel) panel.setFocus(True) self.remote_py.passBallot(self) def onRemoteResponse(self, response, request_info): print "inside onRemoteResponse" print response self.srace = response sampleBallot.sendRace(self.srace) #sampleBallot.instructions.clear() #sampleBallot.title.add(HTML('Name: %s' % self.srace.name)) #sampleBallot.instructions.add(HTML('Instruction: %s' % self.srace.instructions)) #inst = sampleBallot.getInstruction() #self.mainPanel.add(HTML() sampleBallot.fsm.startVoting() sampleBallot.currObj = sampleBallot.race.selectionList[0] #sampleBallot.playAudio() sampleBallot.setContest() def onRemoteError(self, code, errobj, request_info): # onRemoteError gets the HTTP error code or 0 and # errobj is an jsonrpc 2.0 error dict: # { # 'code': jsonrpc-error-code (integer) , # 'message': jsonrpc-error-message (string) , # 'data' : extra-error-data # } message = errobj['message'] if code != 0: self.status.setText("HTTP error %d: %s" % (code, message)) print "HTTP error %d: %s" % (code, message) else: code = errobj['code'] self.status.setText("JSONRPC Error %s: %s" % (code, message)) print "JSONRPC Error %s: %s: %s" % (code, message, data)
class pjBallot: def __init__(self): self.mainPanel = VerticalPanel() self.contest = HorizontalPanel() self.contest.setStyleName('words') self.selection = HorizontalPanel() self.selection.setStyleName('words') self.button = Button('test', self.test) self.status = Label('hi') self.x = 1 def test(self): self.button.setText("No, really click me!") # Window.alert("Hello, AJAAAX!") self.contest.add(HTML('yay')) def nextContest(self): self.x += 1 self.contest.clear() self.contest.add(HTML('<b /> Contest: %d' % self.x)) def nextSelection(self): self.x += 1 self.selection.clear() self.selection.add(HTML('<b /> Selection: %d' % self.x)) def onKeyDown(self, sender, keycode, modifiers): pass def onKeyUp(self, sender, keycode, modifiers): pass def onKeyPress(self, sender, keycode, modifiers): DOM.eventPreventDefault(DOM.eventGetCurrentEvent()) #not needed if keycode == KeyboardListener.KEY_UP: self.nextContest() if keycode == KeyboardListener.KEY_DOWN: self.nextContest() if keycode == KeyboardListener.KEY_LEFT: self.nextSelection() if keycode == KeyboardListener.KEY_RIGHT: self.nextSelection() def onModuleLoad(self): self.remote_py = JSONService() h = HTML("<b />Contest: ") self.contest.add(h) l = HTML("<b />Selection: ") self.selection.add(l) # self.mainPanel.add(self.button) self.mainPanel.add(self.contest) self.mainPanel.add(self.selection) self.mainPanel.add(self.status) panel = FocusPanel(Widget=self.mainPanel) gp = RootPanelListener(panel) manageRootPanel(gp) RootPanel().add(panel) panel.setFocus(True) # self.remote_py.uppercase('yay', self) self.remote_py.passBallot(self) # encoded_object = '[{"__jsonclass__": "Candidate.Candidate", "name": "Barack Obama"}]' ## test = json2.loads(encoded_object) ## self.mainPanel.add(HTML("%s" % test))#json.loads(encoded_object)))#, object_hook=self.dict_to_object))) # foo = '["foo", {"bar":["baz", null, 1.0, 2]}]' # bar = loads(foo, object_hook=tester) # self.mainPanel.add(HTML(bar)) def dict_to_object(self,d): Window.alert("Hello, AJAAAX!") self.mainPanel.add(HTML('whatevs: %s' % 12)) if '__class__' in d: # import pdb # pdb.set_trace() class_name = d.pop('__class__') module_name = d.pop('__module__') module = __import__(module_name) print 'MODULE:', module class_ = getattr(module.ballotTree, class_name) #because module was just audioBallot print 'CLASS:', class_ args = dict( (key.encode('ascii'), value) for key, value in d.items()) print 'INSTANCE ARGS:', args inst = class_(**args) else: inst = d return inst def onRemoteResponse(self, response, request_info): race = response name = race.works self.mainPanel.add(HTML('pleasework %s' % name)) # self.mainPanel.add(HTML('pleasework2 %s' % JSONResponseTextHandler(response))) # test = JSONResponseTextHandler(response) # test.request # self.mainPanel.add(HTML('pleasework3 %s' % test.name)) # encoded_object = '[{"__jsonclass__": "Candidate.Candidate", "name": "Barack Obama"}]' # foo = loads(response) # self.mainPanel.add(HTML(foo)) # self.mainPanel.add(HTML("not working %s" % 12 ))#loads(response)))#, object_hook=self.dict_to_object))) # bar = loads('["foo", {"bar":["baz", null, 1.0, 2]}]', object_hook=tester) # self.mainPanel.add(HTML(bar)) # self.status.setText(request_info.method) def onRemoteError(self): pass