class FormulaBuilder(DialogWindow): def __init__(self, operations,after,type='rel'): DialogWindow.__init__(self, modal=True, close=True) self.formula = Formula([]) self.after=after left = 100 top = 100 self.ops_with_buttons = [{"op": op, "button": Button(op.name, self)} for op in operations if op.available] dock = DockPanel() dock.setSpacing(3) for owb in self.ops_with_buttons: dock.add(owb['button'], DockPanel.NORTH) dock.setWidth("300") self.image = Image(latex_to_url(self.formula.fill_with_placeholders().to_latex())) dock.add(self.image, DockPanel.EAST) dock.setCellHorizontalAlignment(self.image, HasAlignment.ALIGN_TOP) self.doneButton=Button("Done",self) self.doneButton.setEnabled(False) dock.add(self.doneButton,DockPanel.SOUTH) dock.add(HTML(""),DockPanel.CENTER) self.setText("opkop") self.setPopupPosition(left, top) self.setStyleAttribute("background-color", "#ffffff") self.setStyleAttribute("color", "blue") self.setStyleAttribute("border-width", "5px") self.setStyleAttribute("border-style", "solid") self.setWidget(dock) def onClick(self, sender): if sender==self.doneButton: self.hide() self.after(self.formula) op=None for owb in self.ops_with_buttons: if owb['button'] == sender: self.setText(sender.getText()) op=owb['op'] if not self.formula.is_closed(): self.formula.add_one_op(op,type) self.image.setUrl(latex_to_url(self.formula.fill_with_placeholders().to_latex())) if self.formula.is_closed(): self.doneButton.setEnabled(True)
class Editor: def __init__(self, db_url, parent_panel): self.db_url = db_url self.doc_id = None self.parent_panel = parent_panel def loadDocument(self, doc_id): # Load document into editor HTTPRequest().asyncGet(None, None, url=self.db_url+doc_id, handler=DocLoader(self)) def reloadDocument(self): if self.doc_id is None: Window.Alert('Trying to reload blank doc') else: self.loadDocument(self.doc_id) def updateDoc(self, json): doc_obj = JSONParser().decode(json) self.doc_id = doc_obj['_id'] self.id_label.setText('ID : %s'%doc_obj['_id']) self.rev_label.setText('REV: %s'%doc_obj['_rev']) self.save_button.setEnabled(True) self.doc_area.setText(json) self.doc_area.setEnabled(True) self.doc_area.setFocus(True) def saveDocument(self): self.doc_area.setEnabled(False) self.save_button.setEnabled(False) HTTPRequest().asyncPut(None, None, url=self.db_url+self.doc_id, postData=self.doc_area.getText(), handler=DocSaver(self)) def onModuleLoad(self): # Editor self.editor_panel = VerticalPanel() self.id_label = Label('ID: ') self.editor_panel.add(self.id_label) self.rev_label = Label('REV: ') self.editor_panel.add(self.rev_label) self.doc_area = TextArea() self.doc_area.setCharacterWidth(80) self.doc_area.setVisibleLines(24) self.doc_area.setEnabled(False) self.editor_panel.add(self.doc_area) self.parent_panel.add(self.editor_panel) # Buttons self.button_panel = HorizontalPanel() self.save_button = Button("Save", self.saveDocument) self.save_button.setEnabled(False) self.button_panel.add(self.save_button) self.parent_panel.add(self.button_panel)
class CalibrateChannelTrimsView(object) : """ Class that takes care of the purely UI parts of the trim calibration """ def __init__( self ) : numberOfLoopsPanel=HorizontalPanel() numberOfLoopsPanel.add( HTML("Maximum number of loops") ) self.maximumNumberOfLoops=TextBox() self.maximumNumberOfLoops.setText(10) numberOfLoopsPanel.add( self.maximumNumberOfLoops ) numberOfLoopsPanel.setCellHorizontalAlignment( self.maximumNumberOfLoops, HasHorizontalAlignment.ALIGN_RIGHT ) numberOfLoopsPanel.setWidth("100%") aimPointPanel=HorizontalPanel() aimPointPanel.add( HTML("Aim point") ) self.aimPoint=TextBox() self.aimPoint.setText(127) aimPointPanel.add( self.aimPoint ) aimPointPanel.setCellHorizontalAlignment( self.aimPoint, HasHorizontalAlignment.ALIGN_RIGHT ) aimPointPanel.setWidth("100%") self.start=Button("Start") self.echo=HTML("Initiating...") self.mainPanel = VerticalPanel() self.mainPanel.add( numberOfLoopsPanel ) self.mainPanel.add( aimPointPanel ) self.mainPanel.add( self.start ) self.mainPanel.add( self.echo ) def getMaxNumberOfLoops( self ) : return int(self.maximumNumberOfLoops.getText()) def getAimPoint( self ) : return int(self.aimPoint.getText()) def getStartButton( self ) : return self.start def setEchoText( self, text ) : self.echo.setText( text ) def enable( self ) : self.start.setEnabled(True) def disable( self ) : self.start.setEnabled(False) def getPanel( self ) : return self.mainPanel
class GridWidget(AbsolutePanel): def __init__(self): AbsolutePanel.__init__(self) self.page=0 self.min_page=1 self.max_page=10 self.addb=Button("Next >", self) self.subb=Button("< Prev", self) self.clearb=Button("Clear", self) self.g=Grid() self.g.resize(5, 5) self.g.setWidget(0, 0, HTML("<b>Grid Test</b>")) self.g.setBorderWidth(2) self.g.setCellPadding(4) self.g.setCellSpacing(1) self.updatePageDisplay() self.add(self.subb) self.add(self.addb) self.add(self.clearb) self.add(self.g) def onClick(self, sender): if sender == self.clearb: print "clear" self.g.clear() return elif sender==self.addb: self.page+=1 elif sender==self.subb: self.page-=1 self.updatePageDisplay() def updatePageDisplay(self): if self.page<self.min_page: self.page=self.min_page elif self.page>self.max_page: self.page=self.max_page total_pages=(self.max_page-self.min_page) + 1 self.g.setHTML(0, 4, "<b>page %d of %d</b>" % (self.page, total_pages)) if self.page>=self.max_page: self.addb.setEnabled(False) else: self.addb.setEnabled(True) if self.page<=self.min_page: self.subb.setEnabled(False) else: self.subb.setEnabled(True) for y in range(1, 5): for x in range(5): self.g.setText(y, x, "%d (%d,%d)" % (self.page, x, y))
class NavBar(Composite): def __init__(self, owner): Composite.__init__(self) self.owner = owner self.bar = DockPanel() self.gotoFirst = Button("<<", self) self.gotoNext = Button(">", self) self.gotoPrev = Button("<", self) self.status = HTML() self.initWidget(self.bar) self.bar.setStyleName("navbar") self.status.setStyleName("status") buttons = HorizontalPanel() buttons.add(self.gotoFirst) buttons.add(self.gotoPrev) buttons.add(self.gotoNext) self.bar.add(buttons, DockPanel.EAST) self.bar.setCellHorizontalAlignment(buttons, HasAlignment.ALIGN_RIGHT) self.bar.add(self.status, DockPanel.CENTER) self.bar.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE) self.bar.setCellHorizontalAlignment(self.status, HasAlignment.ALIGN_RIGHT) self.bar.setCellVerticalAlignment(self.status, HasAlignment.ALIGN_MIDDLE) self.bar.setCellWidth(self.status, "100%") self.gotoPrev.setEnabled(False) self.gotoFirst.setEnabled(False) def onClick(self, sender): if sender == self.gotoNext: self.owner.startRow += self.owner.getDataRowCount() self.owner.refresh() elif sender == self.gotoPrev: self.owner.startRow -= self.owner.getDataRowCount() if self.owner.startRow < 0: self.owner.startRow = 0 self.owner.refresh() elif sender == self.gotoFirst: self.owner.startRow = 0 self.owner.refresh()
class Cancel(HorizontalPanel): def __init__(self): HorizontalPanel.__init__(self, Spacing=4) self.add(Label('Cancel:', StyleName='section')) self.name = TextBox() self.name.setMaxLength(18) self.name.setVisibleLength(18) self.add(self.name) self.cancel = Button('Do it', self) self.add(self.cancel) self.err = Label() self.add(self.err) def onClick(self, sender): self.err.setText('') name = self.name.getText().strip() if name == '': return else: self.cancel.setEnabled(False) remote = server.AdminService() id = remote.cancel(name, self) if id < 0: self.err.setText('oops: could not cancel') def onRemoteResponse(self, result, request_info): self.cancel.setEnabled(True) self.name.setText('') def onRemoteError(self, code, message, request_info): self.cancel.setEnabled(True) self.err.setText('Could not cancel: ' + message['data']['message'])
def __init__(self): Sink.__init__(self) disabledButton = Button("Disabled Button") disabledCheck = CheckBox("Disabled Check") normalButton = Button("Normal Button") normalCheck = CheckBox("Normal Check") panel = VerticalPanel() radio0 = RadioButton("group0", "Choice 0") radio1 = RadioButton("group0", "Choice 1") radio2 = RadioButton("group0", "Choice 2 (Disabled)") radio3 = RadioButton("group0", "Choice 3") hp = HorizontalPanel() panel.add(hp) hp.setSpacing(8) hp.add(normalButton) hp.add(disabledButton) hp = HorizontalPanel() panel.add(hp) hp.setSpacing(8) hp.add(normalCheck) hp.add(disabledCheck) hp = HorizontalPanel() panel.add(hp) hp.setSpacing(8) hp.add(radio0) hp.add(radio1) hp.add(radio2) hp.add(radio3) disabledButton.setEnabled(False) disabledCheck.setEnabled(False) radio2.setEnabled(False) panel.setSpacing(8) self.initWidget(panel)
class PreferencesDlg(DialogBox): fileLocation = None def __init__(self, left = 50, top = 50): DialogBox.__init__(self, modal = False) self.setPopupPosition(left, top) self.setText("Preferences") ftable = FlexTable() ftableFormatter = ftable.getFlexCellFormatter() row = 0 self.fileLocation = getCookie("fileLocation") row += 1 ftable.setWidget(row, 0, Label("Sheet loaded on startup", wordWrap=False)) self.fileLocationInput = TextBox() self.fileLocationInput.addChangeListener(self.checkValid) self.fileLocationInput.addKeyboardListener(self) self.fileLocationInput.setVisibleLength(30) self.fileLocationInput.setText(self.fileLocation) ftable.setWidget(row, 1, self.fileLocationInput) row += 1 hpanel = HorizontalPanel() self.saveBtn = Button("Save", self.onSave) self.saveBtn.setEnabled(False) hpanel.add(self.saveBtn) self.cancelBtn = Button("Cancel", self.onCancel) hpanel.add(self.cancelBtn) ftable.setWidget(row, 0, hpanel) ftableFormatter.setColSpan(row, 0, 2) self.setWidget(ftable) def onCancel(self, sender): self.hide() def onSave(self, sender): setCookie("fileLocation", self.fileLocationInput.getText(), 1000000000) self.hide() def checkValid(self, evt=None): if self.fileLocation != self.fileLocationInput.getText(): self.saveBtn.setEnabled(True) else: self.saveBtn.setEnabled(False) 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 QueueSize(HorizontalPanel): def __init__(self): HorizontalPanel.__init__(self, Spacing=4) self.add(Label('Queue size:', StyleName='section')) self.underway = Label() self.add(self.underway) self.queued = Label() self.add(self.queued) self.button = Button('Refresh', self, StyleName='refresh') self.add(self.button) self.err = Label() self.add(self.err) self.update() def update(self): remote = server.AdminService() id = remote.queueSize(self) if id < 0: self.err.setText('oops: could not call getQueueSize') def onRemoteResponse(self, result, request_info): self.button.setEnabled(True) underway, queued = result self.underway.setText('Underway: %d' % underway) self.queued.setText('Queued: %d' % queued) def onRemoteError(self, code, message, request_info): self.button.setEnabled(True) self.err.setText('Could not getQueueWidth: ' + message) def onClick(self, sender): self.err.setText('') self.button.setEnabled(False) self.update()
class BulkDirectAdd(HorizontalPanel): def __init__(self): HorizontalPanel.__init__(self, Spacing=4) self.add(Label('Directly add in bulk:', StyleName='section')) self.names = TextArea(VisibleLines=5) self.add(self.names) self.update = Button('Add', self) self.add(self.update) self.err = HTML() self.add(self.err) def onClick(self, sender): self.err.setHTML('') names = self.names.getText().strip() if names == '': return else: self.update.setEnabled(False) remote = server.AdminService() id = remote.bulkAddUsers(names, self) if id < 0: self.err.setText('oops: could not add') def onRemoteResponse(self, result, request_info): self.update.setEnabled(True) self.err.setText('OK, adding.') def onRemoteError(self, code, message, request_info): self.update.setEnabled(True) self.err.setHTML('Errors:<br/>' + '<br/>'.join(message['data']['message']))
def add_button ( self, action, bbox, method=None, enabled=True, name=None ): """ Creates a button. """ ui = self.ui if ((action.defined_when != '') and (not ui.eval_when( action.defined_when ))): return None if name is None: name = action.name id = action.id button = Button(name) bbox.add(button) # button.setAutoDefault(False) button.setEnabled(enabled) if (method is None) or (action.enabled_when != '') or (id != ''): editor = ButtonEditor( ui = ui, action = action, control = button ) if id != '': ui.info.bind( id, editor ) if action.visible_when != '': ui.add_visible( action.visible_when, editor ) if action.enabled_when != '': ui.add_enabled( action.enabled_when, editor ) if method is None: method = editor.perform if method is not None: button.addClickListener(method) if action.tooltip != '': # button.setToolTip(action.tooltip) print "Tooltips for buttons are not implemeted," return button
class Underway(HorizontalPanel): def __init__(self): HorizontalPanel.__init__(self, Spacing=4) self.add(Label('Underway:', StyleName='section')) s = ScrollPanel() self.add(s) v = VerticalPanel() s.add(v) self.queued = Grid(StyleName='users') v.add(self.queued) self.button = Button('Refresh', self, StyleName='refresh') self.add(self.button) self.err = Label() self.add(self.err) self.update() def update(self): remote = server.AdminService() id = remote.getUnderway(self) if id < 0: self.err.setText('oops: could not call getUnderway') def onRemoteResponse(self, result, request_info): self.button.setEnabled(True) self.queued.clear() if not result: self.queued.resize(1, 1) self.queued.setText(0, 0, 'No users are currently being added.') else: self.queued.resize(len(result) + 1, 6) self.queued.setText(0, 0, 'Pos') self.queued.setText(0, 1, 'Name') self.queued.setText(0, 2, 'Friends') self.queued.setText(0, 3, '% done') self.queued.setText(0, 4, 'Queued at') self.queued.setText(0, 5, 'Started at') row = 1 for name, nFriends, done, queuedAt, startTime in result: self.queued.setText(row, 0, row) self.queued.setText(row, 1, name) self.queued.setText(row, 2, nFriends) self.queued.setText(row, 3, '%.2f' % done) self.queued.setText(row, 4, queuedAt) self.queued.setText(row, 5, startTime) row += 1 def onRemoteError(self, code, message, request_info): self.button.setEnabled(True) self.err.setText('Could not getUnderway: ' + message) def onClick(self, sender): self.err.setText('') self.button.setEnabled(False) self.update()
class Queued(HorizontalPanel): def __init__(self): HorizontalPanel.__init__(self, Spacing=4) self.add(Label("Queued:", StyleName="section")) s = ScrollPanel() self.add(s) v = VerticalPanel() s.add(v) self.queued = Grid(StyleName="users") v.add(self.queued) self.button = Button("Refresh", self, StyleName="refresh") self.add(self.button) self.err = Label() self.add(self.err) self.update() def update(self): remote = server.AdminService() id = remote.getQueued(self) if id < 0: self.err.setText("oops: could not call getQueued") def onRemoteResponse(self, result, request_info): self.button.setEnabled(True) self.queued.clear() if not result: self.queued.resize(1, 1) self.queued.setText(0, 0, "No users are queued for addition.") else: self.queued.resize(len(result) + 1, 4) self.queued.setText(0, 0, "Pos") self.queued.setText(0, 1, "Name") self.queued.setText(0, 2, "Friends") self.queued.setText(0, 3, "Queued at") row = 1 for name, nFriends, time in result: self.queued.setText(row, 0, row) self.queued.setText(row, 1, name) self.queued.setText(row, 2, nFriends) self.queued.setText(row, 3, time) row += 1 def onRemoteError(self, code, message, request_info): self.button.setEnabled(True) self.err.setText("Could not getQueued: " + message) def onClick(self, sender): self.err.setText("") self.button.setEnabled(False) self.update()
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 UserList(AbsolutePanel): userGrid = None newBtn = None deleteBtn = None users = None selectedUser = None def __init__(self,parent): AbsolutePanel.__init__(self) self.userGrid = Grid() self.userGrid.createGrid(6, 6) self.userGrid.addTableListener(self) self.userGrid.setBorderWidth(2) self.userGrid.setCellPadding(4) self.userGrid.setCellSpacing(1) self.userGrid.setColLabelValue(0,"Username") self.userGrid.setColLabelValue(1,"First Name") self.userGrid.setColLabelValue(2,"Last Name") self.userGrid.setColLabelValue(3,"Email") self.userGrid.setColLabelValue(4,"Department") self.userGrid.setColLabelValue(5,"Password") self.newBtn = Button("New") self.deleteBtn = Button("Delete") self.deleteBtn.setEnabled(False) self.add(self.userGrid) self.add(self.newBtn) self.add(self.deleteBtn) return def updateUserGrid(self, users): self.userGrid.clearGrid() self.users = users for i in range(len(users)): self.userGrid.setCellValue(i, 0, users[i].username) self.userGrid.setCellValue(i, 1, users[i].fname) self.userGrid.setCellValue(i, 2, users[i].lname) self.userGrid.setCellValue(i, 3, users[i].email) self.userGrid.setCellValue(i, 4, users[i].department) self.userGrid.setCellValue(i, 5, users[i].password) def onCellClicked(self, sender, row, col): try: if row > 0 and row <= len(self.users): self.selectedUser = self.users[row-1] self.userGrid.selectRow(row) self.deleteBtn.setEnabled(True) else: self.userGrid.selectRow(-1) self.selectedUser = None self.deleteBtn.setEnabled(False) except IndexError: pass def deSelect(self): self.userGrid.selectRow(-1)
class Input_Form(Abstract_View): '''Input form that modifies itself depending on the proejct. ''' def __init__(self): Abstract_View.__init__(self) self.dev_fields = Dev_Fields() def register(self, controller): '''Register controller for view and its subviews''' self.controller = controller self.dev_fields.register(controller) def onModuleLoad(self): '''Create initial view of the panel. ''' # Container that keeps everything self.panel = VerticalPanel() self.panel.setSpacing(10) # Create list of projects proj_list = ListBox(Height='34px') proj_list.addItem('') proj_list.setVisibleItemCount(0) proj_list.addChangeListener(getattr(self, 'on_project_changed')) proj_list.setStyleName('form-control input-lg') self.proj_row = Form_Row('Select project', proj_list, help='project, status of which you want to report') # Project-specific container self.project_panel = VerticalPanel() # Submit report button self.submit_btn = Button('Submit report', getattr(self, 'send_data')) self.submit_btn.setStyleName('btn btn-primary btn-lg') self.submit_btn.setEnabled(False) self.msg_lbl = HTMLPanel('', Width='475px') # Add controls here self.panel.add(self.proj_row.panel()) self.panel.add(self.project_panel) self.panel.add(Label(Height='20px')) self.panel.add(self.msg_lbl) btn_holder = HorizontalPanel() btn_holder.add(self.submit_btn) help_btn = HTMLPanel('') help_btn.setHTML(MODAL_PNL) btn_holder.add(Label(Width='10px')) btn_holder.add(help_btn) self.panel.add(btn_holder) self.root = RootPanel('report') self.root.add(self.panel) def _load_project(self, project): '''Load project specific fields in the panel ''' if self.dev_fields is not None: self.project_panel.remove(self.dev_fields) # Remove the old one and add brand new self.dev_fields = Dev_Fields() self.project_panel.add(self.dev_fields) def send_data(self): '''Retrieve data for the active project fields and send to flask. ''' #data = self.dev_fields.prep_data() self.controller.process_msg(SEND_DATA_MSG) def on_project_changed(self, event): '''Change form fields depending on the proejct. ''' proj_list = self.proj_row.widget() project = proj_list.getItemText(proj_list.getSelectedIndex()) if project != '': self.controller.process_msg(PROJ_CHANGED_MSG, project)
class PopupPagina(PopupPanel): def __init__(self, autoHide=None, modal=True, **kwargs): PopupPanel.__init__(self, autoHide, modal, **kwargs) datasource = None id = None if kwargs.has_key("datasrc"): datasource = kwargs["datasrc"] if kwargs.has_key("id"): id = kwargs["id"] self.setSize(Window.getClientWidth() - 50, Window.getClientHeight() - 50) self.setPopupPosition(20, 0) DOM.setAttribute(self, "align", "center") # self.dbProxInstrucao = DialogBox() # self.dbProxInstrucao.setHTML("Alow") # botton = Button("Ok") # botton.addClickListener(self.onCloseDialog) # self.dbProxInstrucao.setWidget(botton) self.caption = HTML() self.child = None self.setHTML("<b>Soma de Matrizes.</b>") self.dragging = False self.dragStartX = 0 self.dragStartY = 0 self.imageFechar = Image("images/fechar.gif", Size=("32px", "32px"), StyleName="gwt-ImageButton") self.imgbtnDesfazer = Image("images/previous-arrow.png", Size=("32px", "20px"), StyleName="gwt-ImageButton") self.imgbtnFazer = Image("images/next-arrow.png", Size=("32px", "20px"), StyleName="gwt-ImageButton") # self.imgbtnDesfazer.addClickListener(desfazerProxOperacao) # self.imgbtnFazer.addClickListener(fazerProxOperacao) self.btnAutomatic = Button("Automático", self.onIniciarAnimacaoAutomatica) self.btnInterativo = Button("Interativo") if id == "escalar": self.btnStepByStep = Button("Passo a passo", IniciarAnimacaoPassoAPasso) else: self.btnStepByStep = Button("Passo a passo", self.onIniciarAnimacaoPassoAPasso) self.btnFazer = Button("fazer >>", fazerProxOperacao) # self.btnFazer.setEnabled(False); self.btnDesfazer = Button("<< desfazer", desfazerProxOperacao) # self.btnDesfazer.setEnabled(False); self.btnFechar = PushButton(imageFechar, imageFechar) self.btnTestarResposta = Button("Testar Solução") self.lbVelocidade = ListBox() self.lbVelocidade.setID("lbseg") self.lbVelocidade.addItem("0.5 segundo", value=2) self.lbVelocidade.addItem("1 segundo", value=1) self.lbVelocidade.addItem("2 segundos", value=0.5) self.lbVelocidade.addItem("3 segundos", value=1 / 3) self.lbVelocidade.addItem("4 segundos", value=0.25) self.lbVelocidade.addItem("5 segundos", value=0.20) self.lbVelocidade.addItem("6 segundos", value=0.167) self.lbVelocidade.addItem("7 segundos", value=0.143) self.lbVelocidade.addItem("8 segundos", value=0.125) self.lbVelocidade.addItem("10 segundos", value=0.1) lblinha1 = ListBox() lblinha1.setID("lm1") lblinha1.addItem("1", value=1) lblinha1.addItem("2", value=2) lblinha1.addItem("3", value=3) lblinha1.addItem("4", value=4) lblinha1.addItem("5", value=5) lblinha2 = ListBox() lblinha2.setID("lm2") lblinha2.addItem("1", value=1) lblinha2.addItem("2", value=2) lblinha2.addItem("3", value=3) lblinha2.addItem("4", value=4) lblinha2.addItem("5", value=5) lbcoluna1 = ListBox() lbcoluna1.setID("cm1") lbcoluna1.addItem("1", value=1) lbcoluna1.addItem("2", value=2) lbcoluna1.addItem("3", value=3) lbcoluna1.addItem("4", value=4) lbcoluna1.addItem("5", value=5) lbcoluna1.addItem("6", value=6) lbcoluna1.addItem("7", value=7) lbcoluna2 = ListBox() lbcoluna2.setID("cm2") lbcoluna2.addItem("1", value=1) lbcoluna2.addItem("2", value=2) lbcoluna2.addItem("3", value=3) lbcoluna2.addItem("4", value=4) lbcoluna2.addItem("5", value=5) lbcoluna2.addItem("6", value=6) lbcoluna2.addItem("7", value=7) self.lblStatus = Label("Label para Status") # Eventos self.imageFechar.addClickListener(self.onFecharPopup) # Cabeçalho da poupPanel self.grid = Grid(1, 16) self.grid.setWidth(self.getWidth()) self.grid.setHTML(0, 0, "<b>Matriz 1:</b> Nº Linhas:") self.grid.setWidget(0, 1, lblinha1) self.grid.setText(0, 2, "Nº Colunas:") self.grid.setWidget(0, 3, lbcoluna1) self.grid.setHTML(0, 4, "<b>Matriz 2:</b> Nº Linhas:") self.grid.setWidget(0, 5, lblinha2) self.grid.setText(0, 6, "Nº Colunas:") self.grid.setWidget(0, 7, lbcoluna2) # self.grid.setWidget(0, 3, self.txtColunas) self.grid.setWidget(0, 8, self.btnStepByStep) self.grid.setWidget(0, 9, self.btnDesfazer) self.grid.setWidget(0, 10, self.btnFazer) self.grid.setHTML(0, 11, "<b>Velocidade:</b>") self.grid.setWidget(0, 12, self.lbVelocidade) self.grid.setWidget(0, 13, self.btnAutomatic) # self.grid.setWidget(0, 14, self.btnInterativo) self.grid.setWidget(0, 15, self.imageFechar) # self.grid.setWidget(0, 7, self.btnFechar) self.grid.getCellFormatter().setAlignment( 0, 15, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_TOP ) self.panel = FlexTable(Height="100%", width="100%", BorderWidth="0", CellPadding="0", CellSpacing="0") self.panel.setWidget(0, 0, self.caption) self.panel.setWidget(1, 0, self.grid) self.panel.getCellFormatter().setHeight(2, 0, "100%") self.panel.getCellFormatter().setWidth(2, 0, "100%") self.panel.getCellFormatter().setAlignment( 2, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP ) self.panel.setID("contetepopup") painelhorizontal = HorizontalPanel() gridinterativa = FlexTable() painelhorizontal.add( HTML( "<canvas id='%s' datasrc='%s' width='%s' height='%s' style='image-rendering: optimizespeed !important; '></canvas>" % ("soma", datasource, "1000px", "500px") ) ) ftInterativo = FlexTable(Height="100%", width="100%", BorderWidth="0", CellPadding="0", CellSpacing="0") gridinterativa = Grid(4, 4) gridinterativa.setWidget( 0, 0, HTML( "<b>M1(</b><input type='text' class='gwt-TextBox' id='linha1' style='width: 25px; height:20px;' maxLength='1'><b> , </b>" ), ) gridinterativa.setWidget( 0, 1, HTML( "<input type='text' class='gwt-TextBox' id='coluna1' style='width: 25px;height:20px;' maxLength='1'><b>) +</b>" ), ) gridinterativa.setWidget( 0, 2, HTML( "<b>M2(</b> <input type='text' class='gwt-TextBox' id='linha2' style='width: 25px; height:20px;' maxLength='1'><b> , </b>" ), ) gridinterativa.setWidget( 0, 3, HTML( "<input type='text' class='gwt-TextBox' id='coluna2' style='width: 25px; height:20px;' maxLength='1'><b>) =</b>" ), ) gridinterativa.setWidget( 2, 0, HTML( " <b>(</b><input type='text' class='gwt-TextBox' id='n1' style='width: 25px; height:20px;' maxLength='1'><b>) +</b>" ), ) gridinterativa.setWidget( 2, 1, HTML( "<b>(</b><input type='text' class='gwt-TextBox' id='n2' style='width: 25px; height:20px;' maxLength='1'><b>)</b>" ), ) gridinterativa.setWidget( 2, 2, HTML( "<b>= </b> <input type='text' class='gwt-TextBox' id='solucao' style='width: 25px; height:20px;' maxLength='1'>" ), ) ftInterativo.setHTML(0, 0, "</br>") ftInterativo.setHTML(1, 0, "<b><h3>Painel Interativo<h3></b>") # ftInterativo.setWidget(2, 0, self.btnInterativo) ftInterativo.setWidget(3, 0, gridinterativa) ftInterativo.setWidget(4, 0, self.btnTestarResposta) ftInterativo.setHTML(5, 0, "</br>") ftInterativo.setHTML(6, 0, "Use a tecla tab para agilizar.") ftInterativo.getCellFormatter().setAlignment( 4, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP ) ftInterativo.getCellFormatter().setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP ) # painelhorizontal.add(ftInterativo) self.panel.setWidget(2, 0, painelhorizontal) self.panel.setWidget(3, 0, self.lblStatus) self.panel.setStyleName("dialogContent") PopupPanel.setWidget(self, self.panel) self.setStyleName("gwt-DialogBox") self.caption.setStyleName("Caption") self.caption.addMouseListener(self) # self.txtlm1.setFocus(True); def onFecharPopup(self, event): self.hide() PararAnimacao() def onIniciarAnimacaoPassoAPasso(self, event): self.btnFazer.setEnabled(True) self.btnDesfazer.setEnabled(True) if self.validarParametrosMatriz(): IniciarAnimacaoPassoAPasso() def onIniciarAnimacaoAutomatica(self, event): if self.validarParametrosMatriz(): IniciarAnimacaoAutomatica() def onTestarSolucao(self, event): pass # if self.validarParametrosMatriz(): # def onCloseDialog(self, event): # self.dbProxInstrucao.hide() # def onOpenDialog(self, event): # self.dbProxInstrucao.show() def validarParametrosTestarSolucao(): lm1 = DOM.getElementById("linha1") lm1 = lm1.value cm1 = DOM.getElementById("coluna1") cm1 = cm1.value lm2 = DOM.getElementById("linha2") lm2 = lm2.value cm2 = DOM.getElementById("coluna2") cm2 = cm2.value def validarParametrosMatriz(): lm1 = DOM.getElementById("lm1") lm1 = lm1.value cm1 = DOM.getElementById("cm1") cm1 = cm1.value lm2 = DOM.getElementById("lm2") lm2 = lm2.value cm2 = DOM.getElementById("cm2") cm2 = cm2.value if not lm1 or not lm2: Window.alert("Informe o numero de linhas da matriz M1 e M2.") return False if lm1 != lm2: Window.alert("A quantidade de linhas da matriz M1 deve ser igual a da matriz M2 para operação de soma.") return False if lm1 > "5" or lm2 > "5" or len(lm1) != 1 or len(lm2) != 1: Window.alert("A quantidade de linhas da matriz M1 e da matriz M2, deve ser menor ou igual a 5.") return False if not cm1 or not cm2: Window.alert("Informe o numero de colunas da matriz M1 e M2.") return False if cm1 != cm2: Window.alert("A quantidade de colunas da matriz M1 deve ser igual a da matriz M2 para operação de soma.") return False if cm1 > "7" or cm2 > "7" or len(cm1) != 1 or len(cm2) != 1: Window.alert("A quantidade de colunas da matriz M1 e da matriz M2, deve ser menor ou igual a 7.") return False return True def getHTML(self): return self.caption.getHTML() def getText(self): return self.caption.getText() def onEventPreview(self, event): # preventDefault on mousedown events, outside of the # dialog, to stop text-selection on dragging type = DOM.eventGetType(event) if type == "mousedown": target = DOM.eventGetTarget(event) elem = self.caption.getElement() event_targets_popup = target and DOM.isOrHasChild(elem, target) if event_targets_popup: DOM.eventPreventDefault(event) return PopupPanel.onEventPreview(self, event) def onMouseDown(self, sender, x, y): self.dragging = True DOM.setCapture(self.caption.getElement()) self.dragStartX = x self.dragStartY = y def onMouseMove(self, sender, x, y): if self.dragging: absX = x + self.getAbsoluteLeft() absY = y + self.getAbsoluteTop() self.setPopupPosition(absX - self.dragStartX, absY - self.dragStartY) def onMouseUp(self, sender, x, y): self.dragging = False DOM.releaseCapture(self.caption.getElement()) def onMouseLeave(self, self, x, y): pass def onMouseEnter(self, self, x, y): pass def remove(self, widget): if self.child != widget: return False self.panel.remove(widget) self.child = None return True def setHTML(self, html): self.caption.setHTML(html) def setText(self, text): self.caption.setText(text) def doAttachChildren(self): PopupPanel.doAttachChildren(self) self.caption.onAttach() def doDetachChildren(self): PopupPanel.doDetachChildren(self) self.caption.onDetach() def setWidget(self, widget): if self.child is not None: self.panel.remove(self.child) if widget is not None: self.panel.setWidget(1, 0, widget) self.child = widget
class DisplayHistogramsView(object) : """ @brief View in the MVP pattern for displaying histograms. @author Mark Grimes ([email protected]) @date 09/Feb/2014 """ def __init__( self ) : self.cbcList=ListBox(MultipleSelect=True, VisibleItemCount=4) self.channelList=ListBox(MultipleSelect=True, VisibleItemCount=20) self.updateButton=Button("Update") controls=VerticalPanel() controls.add(self.updateButton) controls.add(self.cbcList) controls.add(self.channelList) controls.setCellHorizontalAlignment( self.updateButton, HasHorizontalAlignment.ALIGN_CENTER ) self.cbcList.setWidth("95%") self.channelList.setWidth("95%") self.cbcList.addItem( "waiting..." ) for index in range(0,254) : self.channelList.addItem( "Channel %3d"%index ) self.histogram = Image() self.mainPanel = HorizontalPanel() self.mainPanel.add( controls ) self.mainPanel.add( self.histogram ) self.histogram.setUrl( "defaultScurveHistogram.png" ) def getPanel( self ) : return self.mainPanel def setAvailableCBCs( self, cbcNames ) : self.cbcList.clear() for name in cbcNames : self.cbcList.addItem( name ) def enable( self ) : self.updateButton.setEnabled(True) self.cbcList.setEnabled(True) self.channelList.setEnabled(True) def disable( self ) : self.updateButton.setEnabled(False) self.cbcList.setEnabled(False) self.channelList.setEnabled(False) def getUpdateButton( self ) : return self.updateButton def getSelectedCBCChannels( self ) : """ Returns a dictionary of which channels are selected, with CBC name as a key and an array of the channels for that CBC as the value. """ # The way this view is currently set up, the selected channels have to be the same # for each selected CBC. selectedChannels=[] for index in range(self.channelList.getItemCount()) : if self.channelList.isItemSelected(index) : selectedChannels.append(index) returnValue={} for index in range(self.cbcList.getItemCount()) : if self.cbcList.isItemSelected(index) : returnValue[self.cbcList.getItemText(index)]=selectedChannels return returnValue def setImage( self, url ) : self.histogram.setUrl( url )
class Application: def __init__(self): #set some vars self.title = "last.fm" #this is where we build the ui self.statusPanel = VerticalPanel() self.statusPanel.setID('status_panel') #make a few Labels to hold station, artist, track, album info self.stationLabel = Label() self.artistLabel = Label() self.trackLabel = Label() self.albumLabel = Label() self.timeLabel = Label() self.infoTable = FlexTable() i=0 self.stationLabel = Label() self.infoTable.setWidget(i,0,Label("Station:") ) self.infoTable.setWidget(i,1,self.stationLabel) i+=1 self.infoTable.setWidget(i,0,Label("Artist:") ) self.infoTable.setWidget(i,1,self.artistLabel) i+=1 self.infoTable.setWidget(i,0,Label("Track:") ) self.infoTable.setWidget(i,1,self.trackLabel) i+=1 self.infoTable.setWidget(i,0,Label("Album:") ) self.infoTable.setWidget(i,1,self.albumLabel) self.statusPanel.add(self.infoTable) self.statusPanel.add(self.timeLabel) #make the time bar timebarWrapperPanel = SimplePanel() timebarWrapperPanel.setID("timebar_wrapper") #timebarWrapperPanel.setStyleName('timebar_wrapper') self.timebarPanel = SimplePanel() self.timebarPanel.setID("timebar") #self.timebarPanel.setStyleName('timebar') timebarWrapperPanel.add(self.timebarPanel) self.statusPanel.add(timebarWrapperPanel) #make some shit for buttons self.buttonHPanel = HorizontalPanel() self.skipButton = Button("Skip", self.clicked_skip ) self.buttonHPanel.add(self.skipButton) loveButton = Button("Love", self.clicked_love ) self.buttonHPanel.add(loveButton) pauseButton = Button("Pause", self.clicked_pause ) self.buttonHPanel.add(pauseButton) banButton = Button("Ban", self.clicked_ban ) self.buttonHPanel.add(banButton) #control the volume self.volumePanel = HorizontalPanel() self.volumeLabel = Label("Volume:") self.volumePanel.add(self.volumeLabel) volupButton = Button("+", self.clicked_volume_up, 5) self.volumePanel.add(volupButton) voldownButton = Button("-", self.clicked_volume_down, 5) self.volumePanel.add(voldownButton) #make buttons and shit to create a new station self.setStationHPanel = HorizontalPanel() self.setStationTypeListBox = ListBox() self.setStationTypeListBox.setVisibleItemCount(0) self.setStationTypeListBox.addItem("Similar Artists", "artist/%s/similarartists") self.setStationTypeListBox.addItem("Top Fans", "artist/%s/fans") self.setStationTypeListBox.addItem("Library", "user/%s/library") self.setStationTypeListBox.addItem("Mix", "user/%s/mix") self.setStationTypeListBox.addItem("Recommended", "user/%s/recommended") self.setStationTypeListBox.addItem("Neighbours", "user/%s/neighbours") self.setStationTypeListBox.addItem("Global Tag", "globaltags/%s") self.setStationHPanel.add(self.setStationTypeListBox) self.setStationTextBox = TextBox() self.setStationTextBox.setVisibleLength(10) self.setStationTextBox.setMaxLength(50) self.setStationHPanel.add(self.setStationTextBox) self.setStationButton = Button("Play", self.clicked_set_station) self.setStationHPanel.add(self.setStationButton) #make an error place to display data self.infoHTML = HTML() RootPanel().add(self.statusPanel) RootPanel().add(self.buttonHPanel) RootPanel().add(self.volumePanel) RootPanel().add(self.setStationHPanel) RootPanel().add(self.infoHTML) def run(self): self.get_track_info() def get_track_info(self): HTTPRequest().asyncGet("/track_info", TrackInfoHandler(self)) Timer(5000,self.get_track_info) def clicked_skip(self): self.skipButton.setEnabled(False) HTTPRequest().asyncGet("/skip",ButtonInfoHandler(self,self.skipButton) ) def clicked_volume_down(self): HTTPRequest().asyncGet("/volume/down",NullInfoHandler(self) ) def clicked_volume_up(self): HTTPRequest().asyncGet("/volume/up",NullInfoHandler(self) ) def clicked_love(self): HTTPRequest().asyncGet("/love",NullInfoHandler(self) ) def clicked_ban(self): result = Window.confirm("Really ban this song?") if result: HTTPRequest().asyncGet("/ban",NullInfoHandler(self) ) def clicked_pause(self): HTTPRequest().asyncGet("/pause",NullInfoHandler(self) ) def clicked_set_station(self): type = self.setStationTypeListBox.getSelectedValues()[0] text = self.setStationTextBox.getText().strip() if len(text) > 0 : #clear the text self.setStationTextBox.setText("") station = type % text HTTPRequest().asyncGet("/station/%s" % station,NullInfoHandler(self) ) def set_error(self, content): self.infoHTML.setHTML("<pre>%s</pre>" % content) def onTimeout(self,text): self.infoHTML.setHTML("timeout: "+text) def onError(self, text, code): self.infoHTML.setHTML(text + "<br />" + str(code)) def process_track_info(self,text): #explode the text at :: #%a::%t::%l::%d::%R::%s::%v::%r data = text.split("::") artist = data[0] track = data[1] album = data[2] duration = data[3] played = int(duration)-int(data[4]) percent = int( played/int(duration)*100 ) self.artistLabel.setText( artist ) self.trackLabel.setText( track ) self.albumLabel.setText( album ) #format time t = "%s : %d %d" % (duration,played,percent) self.timeLabel.setText(data[7]) #update the timebarwidth self.timebarPanel.setWidth("%d%" % (percent) ) #set the station self.stationLabel.setText(data[5]) #display the volume self.volumeLabel.setText("Volume: "+data[6]) Window.setTitle(self.title+": "+artist+" - "+track)
class OccupancyCheckView : """ A class that takes of the purely UI part of the OccupanceCheckPanel. @author Mark Grimes ([email protected]) @date 08/Feb/2014 """ def __init__( self ) : self.mainPanel = VerticalPanel() self.echo = HTML('Initiating') self.launchButton=Button("Update") controlPanel=HorizontalPanel() controlPanel.add(self.launchButton) controlPanel.add(self.echo) self.mainPanel.add(controlPanel) self.resultGrids={} self.resultLabels={} def createResultGrid( self, gridName ) : label=HTML('<br><b>'+gridName+'</b>') grid=Grid(17,17) # Create the column and row headers for index in range( 1, grid.getColumnCount() ) : grid.setWidget( 0, index, HTML('Cx%X'%(index-1)) ) for index in range( 1, grid.getRowCount() ) : grid.setWidget( index, 0, HTML('C%Xx'%(index-1)) ) self.mainPanel.add(label) self.mainPanel.add(grid) self.resultLabels[gridName]=label self.resultGrids[gridName]=grid def getPanel( self ) : return self.mainPanel def getUpdateButton( self ) : return self.launchButton def enable( self ) : self.launchButton.setEnabled(True) def disable( self ) : self.launchButton.setEnabled(False) def clearResults( self ) : for name in self.resultGrids.keys() : grid=self.resultGrids[name] # Loop over all the data cells and set them empty for column in range( 1, grid.getColumnCount() ) : for row in range( 1, grid.getRowCount() ) : grid.setWidget( row, column, HTML('') ) def addResult( self, cbcName, occupancies ) : """ Display the occupancies for a CBC. cbcName - string describing naming which CBC it is occupancies - an array of length 254 where each entry is the occupancy for that channel """ if occupancies==None : return self.addError( cbcName ) try : grid=self.resultGrids[cbcName] except NameError : self.createResultGrid( cbcName ) grid=self.resultGrids[cbcName] # Might need to reset the label if the was an error earlier label=self.resultLabels[cbcName] label.setHTML( '<br><b>'+cbcName+'</b>' ) row=1 column=1 for index in range(0,len(occupancies)) : # Work out RGB components so that it is completely red when occupancy is zero, and green when one red=255.0*(1.0-occupancies[index]) green=255.0*occupancies[index] blue=0 grid.setWidget( row, column, HTML('<div style="background-color:#%02X%02X%02X'%(red,green,blue)+'">%1.2f'%occupancies[index]+'</div>') ) column+=1 if column%17 == 0 : column=1 row+=1 def addError( self, cbcName ) : """ Displays something to indicate that there was an error for the given CBC """ try : label=self.resultLabels[cbcName] except NameError : self.createResultGrid( cbcName ) label=self.resultLabels[cbcName] label.setHTML( '<br>Unable to get the results for <b>'+cbcName+'</b>' ) def setEchoMessage( self, message ) : self.echo.setText( message )
class LargeAvatar(VerticalPanel): def __init__(self, userListPanel, tabPanel, topPanel): VerticalPanel.__init__(self, StyleName='large-avatar-panel') self.userListPanel = userListPanel self.tabPanel = tabPanel self.topPanel = topPanel upperPanel = HorizontalPanel(StyleName='large-avatar-upper-panel', Spacing=8) self.image = Image(StyleName='large-avatar') self.upperText = HTML(StyleName='large-avatar-upper-text') upperPanel.add(self.image) upperPanel.add(self.upperText) self.add(upperPanel) self.lowerText = HTML(StyleName='large-avatar-lower-text') self.add(self.lowerText) self.followButton = None self.user = None insertPanel = HorizontalPanel(Spacing=3) insertPanel.add(Label('Use name: ')) if tabPanel.tabName == 'simple': b1 = Button('upper', SimpleInserter(self, 'upper')) b2 = Button('lower', SimpleInserter(self, 'lower')) insertPanel.add(b1) insertPanel.add(b2) else: b1 = Button('or', QueryInserter(self, 'or')) b2 = Button('and', QueryInserter(self, 'and')) b3 = Button('except', QueryInserter(self, 'except')) insertPanel.add(b1) insertPanel.add(b2) insertPanel.add(b3) self.add(insertPanel) def setUser(self, u): self.user = u screenname = u['screen_name'] self.image.setUrl(u['profile_image_url']) self.upperText.setHTML( '''%s<br/>%s''' % (u['name'], utils.screennameToTwitterLink(screenname, '@' + screenname))) friends = utils.splitthousands(u['friends_count']) followers = utils.splitthousands(u['followers_count']) tweets = utils.splitthousands(u['statuses_count']) location = u['location'] or 'unknown' self.lowerText.setHTML( '''Friends: %s<br/> Followers: %s<br/> Tweets: %s<br/> Location: %s<br/> Twitter id: %s<br/> Private: %s''' % (utils.screennameToTwitterFriendsLink(screenname, friends), utils.screennameToTwitterFollowersLink(screenname, followers), utils.screennameToTwitterLink(screenname, tweets), location, utils.splitthousands(u['id']), u['protected'])) if self.followButton: self.remove(self.followButton) self.followButton = None following = u.get('following') if following is not None: if self.topPanel.loginPanel.screenname == screenname: # OK, I admit, this is ugly. self.followButton = Label("That's you!", StyleName='follow-button') else: if following: text = _unfollowText else: text = _followText self.followButton = Button(text, self, StyleName='follow-button') self.add(self.followButton) def onClick(self, sender): self.followButton.setEnabled(False) cookie = self.topPanel.loginPanel.oauthCookie remote = server.TickeryService() if self.user['following']: func = remote.unfollow else: func = remote.follow id = func(cookie, self.user['id'], UpdateFollow(self, self.userListPanel, self.topPanel)) if id < 0: self.add(Label('oops: could not call follow/unfollow'))
class EventLinkPopup(PopupPanel): def __init__(self, editor): PopupPanel.__init__(self, glass=True) self.m_origAnchorStart = None self.m_origAnchorEnd = None self.m_origTargetText = "" self.m_editor = editor vpanel = VerticalPanel() vpanel.setWidth("350px") self.m_webPageText = TextBox() self.m_webPageText.setText("http:#") self.m_webPageText.setWidth("320px") vpanel.add(self.m_webPageText) lbl = Label("Display:") self.m_targetText = TextBox() self.m_targetText.setWidth("100%") lpanel = HorizontalPanel() lpanel.add(lbl) lpanel.add(self.m_targetText) vpanel.add(lpanel) self.m_fillOutCB = CheckBox("Change entire link") self.m_fillOutCB.setVisible(False) self.m_fillOutCB.addClickListener(self) vpanel.add(self.m_fillOutCB) self.m_okBut = Button("Ok", self) self.m_okBut.addStyleName("float-left") self.m_cancelBut = Button("Cancel", self) self.m_cancelBut.addStyleName("float-left") hpanel = HorizontalPanel() hpanel.add(self.m_okBut) hpanel.add(self.m_cancelBut) vpanel.add(hpanel) self.add(vpanel) self.setStyleName("gwt-DialogBox") def refresh(self): try: self.m_editor.getSelection() self.m_range = self.m_editor.getRange() if self.m_range is None: return False else: self.m_selTexts = self.m_range.getSelectedTextElements() if self.m_selTexts is None: return False else: self.m_origTargetText = self.m_range.getText() self.m_targetText.setText(self.m_origTargetText) anchor = self.getAnchor(self.m_selTexts) if anchor is not None: href = anchor.getHref().strip() if href: self.m_webPageText.setText(href) self.m_origAnchorStart = self.getAnchorLimit( self.m_range.getStartPoint().getTextNode(), anchor, False) self.m_origAnchorEnd = self.getAnchorLimit( self.m_range.getStartPoint().getTextNode(), anchor, True) if self.m_range.getStartPoint().equals(self.m_origAnchorStart) and self.m_range.getStartPoint().equals(self.m_origAnchorEnd): self.m_origAnchorStart = None self.m_origAnchorEnd = None else: self.m_fillOutCB.setVisible(True) self.m_fillOutCB.setValue(True) self.m_origTargetText = self.fetchStringFromTexts( self.m_origAnchorStart, self.m_origAnchorEnd) self.m_targetText.setText(self.m_origTargetText) except: print "exception" traceback.print_exc() return False return True def _apply(self): formatter = self.m_editor.getFormatter() link = self.m_webPageText.getText().strip() if not link: return False print self.m_origAnchorStart, self.m_origAnchorEnd if (self.m_origAnchorStart is not None) and self.m_fillOutCB.getValue(): # Expand selection to these bounds self.m_range.setRange(self.m_origAnchorStart, self.m_origAnchorEnd) # Ensure the selection hasn't changed, or at least changes to the # expanded bounds we want Selection.setRange(self.m_range) targetText = self.m_targetText.getText() if self.m_range.isCursor(): # Insert into a single cursor location newEle = DOM.createAnchor() newEle.href = link newEle.innerText = targetText sp = self.m_range.getStartPoint() startNode = sp.getTextNode() offset = sp.getOffset() print "sp", sp, startNode, offset parentEle = startNode.parentElement text = startNode.data if offset == 0: parentEle.insertBefore(newEle, startNode) else: if offset < len(text): # Split this in two and insert the node between startNode.splitText(offset) DOM.insertAfter(startNode, newEle) Selection.setRange(Range(newEle)) elif targetText != self.m_origTargetText: # Replace whatever was selected with this text ele = self.m_range.surroundContents() newEle = DOM.createAnchor() newEle.href = link newEle.innerText = targetText ele.parentElement.replaceChild(newEle, ele) Selection.setRange(Range(newEle)) else: formatter.createLink(link) return True def getAnchor(self, node): res = None if isinstance(node, list): nodes = node for node in nodes: res = self.getAnchor(node) if res is not None: break return res ele = node.parentElement while ele is not None: tag = ele.tagName if tag.lower == "a": res = ele break ele = ele.parentElement return res def getAnchorLimit(self, node, anchor, forward): href = anchor.href while True: prevNode = node node = Range.getAdjacentTextElement(prevNode, forward) if node is not None: cmpAnchor = self.getAnchor(node) if (cmpAnchor is None) or not href == cmpAnchor.href: break if node is None: break res = RangeEndPoint() res.setTextNode(prevNode) res.setOffset(forward and prevNode.getData().length() or 0) return res def parseEventLink(self, href): res = 0 idx = href.index("#event=") if idx > 0: try: res = href[idx+7:] except: pass return res def createEventLink(self, id): return "#event=" + id def fetchStringFromTexts(self, startPoint, endPoint): res = None texts = Range.getSelectedTextElements( startPoint.getTextNode(), endPoint.getTextNode()) if texts is not None: res = self.fetchStringFromTexts(texts, startPoint, endPoint) return res def fetchStringFromTexts(self, allTexts, startPoint, endPoint): selText = "" for node in allTexts: val = node.getData() if node == startPoint.getTextNode(): if node == endPoint.getTextNode(): val = val.substring[startPoint.getOffset(): endPoint.getOffset()] else: val = val[startPoint.getOffset():] elif node == endPoint.getTextNode(): val = val[:endPoint.getOffset()] selText += val return selText def onClick(self, sender): if sender == self.m_cancelBut: self.hide() elif sender == self.m_okBut: if self._apply(): self.hide() elif sender == self.m_fillOutCB: if self.m_fillOutCB.getValue(): self.m_origTargetText = fetchStringFromTexts(self.m_origAnchorStart, self.m_origAnchorEnd) self.m_targetText.setValue(self.m_origTargetText) else: self.m_origTargetText = self.m_range.getText() self.m_targetText.setValue(self.m_origTargetText) def checkSuggestValid(self): self.m_okBut.setEnabled(True) def execute(self): self.checkSuggestValid() def deferredCheckValid(self): DeferredCommand.addCommand(self)
class RolePanel(AbsolutePanel): user = None selectedRole = None roleList = None roleCombo = None addBtn = None removeBtn = None def __init__(self, parent): AbsolutePanel.__init__(self) self.roleList = ListBox() self.roleList.setWidth('300px') self.roleList.setVisibleItemCount(6) self.roleList.addChangeListener(self.onListChange) #self.roleList.addKeyboardListener(self) self.roleCombo = ListBox() self.roleCombo.addKeyboardListener(self) self.roleCombo.addChangeListener(self.onComboChange) self.addBtn = Button("Add") self.addBtn.setEnabled(False) self.removeBtn = Button("Remove") self.removeBtn.setEnabled(False) vpanel = VerticalPanel() vpanel.add(self.roleList) hpanel = HorizontalPanel() hpanel.add(self.roleCombo) hpanel.add(self.addBtn) hpanel.add(self.removeBtn) vpanel.add(hpanel) self.add(vpanel) self.clearForm() return def clearForm(self): self.user = None self.updateRoleList([]) self.roleCombo.setItemTextSelection(None) def updateRoleList(self, items): self.roleList.clear() for item in items: self.roleList.addItem(item) #self.roleList.addItem(' ') #self.roleList.addItem('- - - - - - - -') def updateRoleCombo(self, choices, default_): self.roleCombo.clear() for choice in choices: self.roleCombo.addItem(choice) self.roleCombo.selectValue(default_) def onComboChange(self, sender, keyCode=None, modifiers=None): selected = self.roleCombo.getSelectedItemText() if not selected \ or selected[0] == ApplicationConstants.ROLE_NONE_SELECTED \ or not self.user: self.addBtn.setEnabled(False) self.selectedRole = None else: self.addBtn.setEnabled(True) self.selectedRole = selected[0] self.removeBtn.setEnabled(False) self.roleList.setItemTextSelection(None) def onListChange(self, sender): selected = self.roleList.getSelectedItemText() if selected: self.removeBtn.setEnabled(True) self.selectedRole = selected[0] else: self.removeBtn.setEnabled(False) self.selectedRole = None self.addBtn.setEnabled(False) self.roleCombo.setItemTextSelection(None) def onClick(self, sender): pass def onKeyUp(self, sender, keyCode, modifiers): if sender == self.roleCombo: self.onComboChange(sender) elif sender == self.roleList: self.onListChange(sender) 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 UserList(AbsolutePanel): userGrid = None newBtn = None deleteBtn = None users = None selectedUser = None def __init__(self, parent): AbsolutePanel.__init__(self) self.userGrid = Grid() self.userGrid.createGrid(6, 6) self.userGrid.addTableListener(self) self.userGrid.setBorderWidth(2) self.userGrid.setCellPadding(4) self.userGrid.setCellSpacing(1) self.userGrid.setColLabelValue(0, "Username") self.userGrid.setColLabelValue(1, "First Name") self.userGrid.setColLabelValue(2, "Last Name") self.userGrid.setColLabelValue(3, "Email") self.userGrid.setColLabelValue(4, "Department") self.userGrid.setColLabelValue(5, "Password") self.newBtn = Button("New") self.deleteBtn = Button("Delete") self.deleteBtn.setEnabled(False) self.add(self.userGrid) self.add(self.newBtn) self.add(self.deleteBtn) return def updateUserGrid(self, users): self.userGrid.clearGrid() self.users = users for i in range(len(users)): self.userGrid.setCellValue(i, 0, users[i].username) self.userGrid.setCellValue(i, 1, users[i].fname) self.userGrid.setCellValue(i, 2, users[i].lname) self.userGrid.setCellValue(i, 3, users[i].email) self.userGrid.setCellValue(i, 4, users[i].department) self.userGrid.setCellValue(i, 5, users[i].password) def onCellClicked(self, sender, row, col): try: if row > 0 and row <= len(self.users): self.selectedUser = self.users[row - 1] self.userGrid.selectRow(row) self.deleteBtn.setEnabled(True) else: self.userGrid.selectRow(-1) self.selectedUser = None self.deleteBtn.setEnabled(False) except IndexError: pass def deSelect(self): self.userGrid.selectRow(-1)
class I2CPanel : class saveStateListener : def __init__(self, panel) : self._saveStatePanel=panel def onRemoteResponse(self, response, request_info): self._saveStatePanel.returnStatement.setText("File saved:" + response) def onRemoteError(self, code, message, request_info): ErrorMessage( "Unable to contact server" ) class loadStateListener : def __init__(self, panel) : self._saveStatePanel=panel def onRemoteResponse(self, response, request_info): self._saveStatePanel.returnStatement.setText("File loaded:" + response) self._saveStatePanel.rpcService.I2CRegisterValues( self._saveStatePanel.getTotalCBCs(), I2CPanel.ReadRegisterValueListener(self._saveStatePanel) ) #refresh of text boxes def onRemoteError(self, code, message, request_info): ErrorMessage( "Unable to contact server" ) class ConnectedCBCListener : """ A class to listen for the response to the connectedCBCNames call """ def __init__(self, listBox) : self.listBox=listBox def onRemoteResponse(self, response, request_info): self.listBox.clear() if response == None: self.listBox.addItem("<none>") self.listBox.setEnabled( False ) else : for name in response : self.listBox.addItem(name) #e.g FE0CBC0 self.listBox.setEnabled(True) def onRemoteError(self, code, message, request_info): ErrorMessage( "Unable to contact server" ) class ReadRegisterValueListener : """ A class to listen for the response to the call to get the register values """ def __init__(self, panel) : self._I2Cpanel=panel self.textBoxes=self._I2Cpanel.i2cValueEntries def onRemoteResponse(self, response, request_info): #Call is now made for all connected CBCs for better stability of status box- fb for cbcName in self._I2Cpanel.getActiveCBCs(): if cbcName=='FE0CBC0': valuesTuple = response[response.keys()[0]] elif cbcName=='FE0CBC1': valuesTuple = response[response.keys()[1]] # For this chip loop over all the register and set the text box values for registerName in valuesTuple : box=self.textBoxes[registerName] status=self._I2Cpanel.statusValueEntries[registerName] box.setText( "0x%02x"%valuesTuple[registerName] ) box.setStyleAttribute( "background-color", "#FFFFFF" ) box.setEnabled( True ) #for some reason pyjas likes these separated - fb for registerName in valuesTuple: if response['FE0CBC0'][registerName]==response['FE0CBC1'][registerName]: self._I2Cpanel.statusValueEntries[registerName].setText("==") else: self._I2Cpanel.statusValueEntries[registerName].setText(" //") def onRemoteError(self, code, message, request_info): ErrorMessage( "Unable to contact server" ) class RefreshListener : """ A class that will wait for a response before refreshing the status box """ def __init__(self, panel) : self._Refresh = panel def onRemoteResponse(self, response, request_info): self._Refresh.rpcService.I2CRegisterValues( self._Refresh.getTotalCBCs(), I2CPanel.ReadRegisterValueListener(self._Refresh) ) #Live refresh of the status box def onRemoteError(self, code, message, request_info): ErrorMessage( "Unable to contact server" ) def __init__( self ) : # This is the service that will be used to communicate with the DAQ software self.rpcService = GlibRPCService.instance() # The main panel that everythings will be insided self.mainPanel = HorizontalPanel() self.mainPanel.setSpacing(10) self.i2cValueEntries = {} # The input boxes for all the registers self.statusValueEntries = {} # Displays the status of the i2cValueEntries self.stateValueEntries = {} # For load/save state self.fileName = {} # File name of the i2c registers # This is the list of available CBC chips. It will be populated by a call to the # server later. self.cbcList=ListBox(MultipleSelect=True, VisibleItemCount=10) self.cbcList.addItem( "waiting..." ) # Default text until I hear from the server what's connected self.cbcList.setEnabled( False ) self.cbcList.addChangeListener(self) self.rpcService.connectedCBCNames( None, I2CPanel.ConnectedCBCListener(self.cbcList) ) # Ask the server what's connected # This is the panel that will have the list of I2C registers. I'll split up the # registers into subjects to make them more manageable. self.mainSettings = DisclosurePanel("Main Control Registers") self.channelMasks = DisclosurePanel("Channel Masks") self.channelTrims = DisclosurePanel("Channel Trims") self.callSettings = VerticalPanel("Load/Save States") self.callSettings.setBorderWidth(1) self.callSettings.add(HTML("<center>Load/Save State</center>")) cbcListAndCallSettings=VerticalPanel() cbcListAndCallSettings.add(self.cbcList) cbcListAndCallSettings.add(self.callSettings) self.mainPanel.add(cbcListAndCallSettings) self.mainPanel.add(self.mainSettings) self.mainPanel.add(self.channelMasks) self.mainPanel.add(self.channelTrims) self.callSettings.add( self.createStatesPanel()) self.mainSettings.add( self.createRegisterPanel(["FrontEndControl","TriggerLatency","HitDetectSLVS","Ipre1","Ipre2","Ipsf","Ipa","Ipaos","Vpafb","Icomp","Vpc","Vplus","VCth","TestPulsePot","SelTestPulseDel&ChanGroup","MiscTestPulseCtrl&AnalogMux","TestPulseChargePumpCurrent","TestPulseChargeMirrCascodeVolt","CwdWindow&Coincid","MiscStubLogic"]) ) self.channelMasks.add( self.createRegisterPanel(["MaskChannelFrom008downto001","MaskChannelFrom016downto009","MaskChannelFrom024downto017","MaskChannelFrom032downto025","MaskChannelFrom040downto033","MaskChannelFrom048downto041","MaskChannelFrom056downto049","MaskChannelFrom064downto057","MaskChannelFrom072downto065","MaskChannelFrom080downto073","MaskChannelFrom088downto081","MaskChannelFrom096downto089","MaskChannelFrom104downto097","MaskChannelFrom112downto105","MaskChannelFrom120downto113","MaskChannelFrom128downto121","MaskChannelFrom136downto129","MaskChannelFrom144downto137","MaskChannelFrom152downto145","MaskChannelFrom160downto153","MaskChannelFrom168downto161","MaskChannelFrom176downto169","MaskChannelFrom184downto177","MaskChannelFrom192downto185","MaskChannelFrom200downto193","MaskChannelFrom208downto201","MaskChannelFrom216downto209","MaskChannelFrom224downto217","MaskChannelFrom232downto225","MaskChannelFrom240downto233","MaskChannelFrom248downto241","MaskChannelFrom254downto249"]) ) self.channelTrims.add( self.createRegisterPanel(["Channel001","Channel002","Channel003","Channel004","Channel005","Channel006","Channel007","Channel008","Channel009","Channel010","Channel011","Channel012","Channel013","Channel014","Channel015","Channel016","Channel017","Channel018","Channel019","Channel020","Channel021","Channel022","Channel023","Channel024","Channel025","Channel026","Channel027","Channel028","Channel029","Channel030","Channel031","Channel032","Channel033","Channel034","Channel035","Channel036","Channel037","Channel038","Channel039","Channel040","Channel041","Channel042","Channel043","Channel044","Channel045","Channel046","Channel047","Channel048","Channel049","Channel050","Channel051","Channel052","Channel053","Channel054","Channel055","Channel056","Channel057","Channel058","Channel059","Channel060","Channel061","Channel062","Channel063","Channel064","Channel065","Channel066","Channel067","Channel068","Channel069","Channel070","Channel071","Channel072","Channel073","Channel074","Channel075","Channel076","Channel077","Channel078","Channel079","Channel080","Channel081","Channel082","Channel083","Channel084","Channel085","Channel086","Channel087","Channel088","Channel089","Channel090","Channel091","Channel092","Channel093","Channel094","Channel095","Channel096","Channel097","Channel098","Channel099","Channel100","Channel101","Channel102","Channel103","Channel104","Channel105","Channel106","Channel107","Channel108","Channel109","Channel110","Channel111","Channel112","Channel113","Channel114","Channel115","Channel116","Channel117","Channel118","Channel119","Channel120","Channel121","Channel122","Channel123","Channel124","Channel125","Channel126","Channel127","Channel128","Channel129","Channel130","Channel131","Channel132","Channel133","Channel134","Channel135","Channel136","Channel137","Channel138","Channel139","Channel140","Channel141","Channel142","Channel143","Channel144","Channel145","Channel146","Channel147","Channel148","Channel149","Channel150","Channel151","Channel152","Channel153","Channel154","Channel155","Channel156","Channel157","Channel158","Channel159","Channel160","Channel161","Channel162","Channel163","Channel164","Channel165","Channel166","Channel167","Channel168","Channel169","Channel170","Channel171","Channel172","Channel173","Channel174","Channel175","Channel176","Channel177","Channel178","Channel179","Channel180","Channel181","Channel182","Channel183","Channel184","Channel185","Channel186","Channel187","Channel188","Channel189","Channel190","Channel191","Channel192","Channel193","Channel194","Channel195","Channel196","Channel197","Channel198","Channel199","Channel200","Channel201","Channel202","Channel203","Channel204","Channel205","Channel206","Channel207","Channel208","Channel209","Channel210","Channel211","Channel212","Channel213","Channel214","Channel215","Channel216","Channel217","Channel218","Channel219","Channel220","Channel221","Channel222","Channel223","Channel224","Channel225","Channel226","Channel227","Channel228","Channel229","Channel230","Channel231","Channel232","Channel233","Channel234","Channel235","Channel236","Channel237","Channel238","Channel239","Channel240","Channel241","Channel242","Channel243","Channel244","Channel245","Channel246","Channel247","Channel248","Channel249","Channel250","Channel251","Channel252","Channel253","Channel254","ChannelDummy"]) ) self.mainSettings.add() self.echo=Label() self.mainPanel.add(self.echo) def getPanel( self ) : return self.mainPanel def onChange( self, sender ) : if sender == self.cbcList : # Make a call to the RPC service to get the register values self.rpcService.I2CRegisterValues( self.getTotalCBCs(), I2CPanel.ReadRegisterValueListener(self) )#fb - sends all CBCs self.load.setEnabled(True) self.save.setEnabled(True) elif sender == self.save: msg = self.saveFileName.getText() self.rpcService.saveI2cRegisterValues(msg, I2CPanel.saveStateListener(self) ) elif sender == self.load: msg = self.loadFileName.getText() self.rpcService.loadI2cRegisterValues(msg, I2CPanel.loadStateListener(self) ) self.rpcService.I2CRegisterValues( self.getTotalCBCs(), I2CPanel.ReadRegisterValueListener(self) )# # Sender must be a text box. Need to format the input. else : try: # For some reason the '0x' at the start of the string is causing exceptions, # even though it works fine with interactive python. I'll take it off anyway. string=sender.getText() if( len(string)>=2 ) : if string[0]=='0' and string[1]=='x' : string=string[2:] value=int( string, 16 ) # convert as hex # Cap values at 255 if value<0 : value=0 if value>255 : value=255 sender.setStyleAttribute( "background-color", "#FFFFFF" ) # Convert to the same format as everything else sender.setText( "0x%02x"%value ) # Send the change to the RPC service messageParameters = {} for cbcName in self.getActiveCBCs() : messageParameters[cbcName]={ sender.getTitle():value } self.rpcService.setI2CRegisterValues( messageParameters, I2CPanel.RefreshListener(self) ) except ValueError: sender.setStyleAttribute( "background-color", "#FF3333" ) #self.echoSelection() def echoSelection(self): #fb - a good "print screen" method msg = " File saved: " for names in self.getCheckedStates(): msg += names self.echo.setText(msg) def getList(self): selectCBCs = [] for i in range(self.cbcList.getItemCount()) : if self.cbcList.isItemSelected(i): selectedCBCs.append(self.cbcList.getItemText(i)) def getTotalCBCs(self) : #fb totalCBCs = [] for i in range(self.cbcList.getItemCount()) : totalCBCs.append(self.cbcList.getItemText(i)) return totalCBCs def getSpecificCBC(self, i): #fb specificCBC = [] specificCBC.append(self.cbcList.getItemText(i)) return specificCBC def getActiveCBCs(self) : selectedCBCs = [] for i in range(self.cbcList.getItemCount()) : if self.cbcList.isItemSelected(i): selectedCBCs.append(self.cbcList.getItemText(i)) return selectedCBCs def getCheckedStates(self): # returns the checked boxes + filename selectedStates = [] #for names in self.stateValueEntries: #if str(self.stateValueEntries[names].isChecked())=="True": # selectedStates.append(names) selectedStates.append(self.saveFileName.getText()) return selectedStates 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 createStatesPanel(self): vertPanel=VerticalPanel() vertPanel.setSpacing(10) selectionNames = (["Main Control", "Masks", "Trims"]) registerSelection = VerticalPanel() for name in selectionNames : checkBox = CheckBox(name) checkBox.setTitle(name) self.stateValueEntries[name]=checkBox registerSelection.add(checkBox) #Tidy up loadPanel = HorizontalPanel() loadFileTextBox = TextBox() loadFileTextBox.setText("MyI2cCfg") loadFileTextBox.setWidth(80) self.loadFileName = loadFileTextBox loadPanel.add(loadFileTextBox) self.load = Button("Load",getattr(self,"onChange")) #overrides default and sends it to onChange loadPanel.add(self.load) self.load.setEnabled(False) savePanel = HorizontalPanel() saveFileTextBox = TextBox() saveFileTextBox.setText("MyI2cCfg") saveFileTextBox.setWidth(80) self.saveFileName = saveFileTextBox savePanel.add(saveFileTextBox) self.save = Button("Save", getattr(self,"onChange")) savePanel.add(self.save) self.save.setEnabled(False) self.returnStatement = Label() vertPanel.add(registerSelection) vertPanel.add(loadPanel) vertPanel.add(savePanel) vertPanel.add(self.returnStatement) return vertPanel
class RolePanel(AbsolutePanel): user = None selectedRole = None roleList = None roleCombo = None addBtn = None removeBtn = None def __init__(self,parent): AbsolutePanel.__init__(self) self.roleList = ListBox() self.roleList.setWidth('300px') self.roleList.setVisibleItemCount(6) self.roleList.addChangeListener(self.onListChange) #self.roleList.addKeyboardListener(self) self.roleCombo = ListBox() self.roleCombo.addKeyboardListener(self) self.roleCombo.addChangeListener(self.onComboChange) self.addBtn = Button("Add") self.addBtn.setEnabled(False) self.removeBtn = Button("Remove") self.removeBtn.setEnabled(False) vpanel = VerticalPanel() vpanel.add(self.roleList) hpanel = HorizontalPanel() hpanel.add(self.roleCombo) hpanel.add(self.addBtn) hpanel.add(self.removeBtn) vpanel.add(hpanel) self.add(vpanel) self.clearForm() return def clearForm(self): self.user = None self.updateRoleList([]) self.roleCombo.setItemTextSelection(None) def updateRoleList(self,items): self.roleList.clear() for item in items: self.roleList.addItem(item) #self.roleList.addItem(' ') #self.roleList.addItem('- - - - - - - -') def updateRoleCombo(self,choices, default_): self.roleCombo.clear() for choice in choices: self.roleCombo.addItem(choice) self.roleCombo.selectValue(default_) def onComboChange(self, sender, keyCode=None, modifiers=None): selected = self.roleCombo.getSelectedItemText() if not selected \ or selected[0] == ApplicationConstants.ROLE_NONE_SELECTED \ or not self.user: self.addBtn.setEnabled(False) self.selectedRole=None else: self.addBtn.setEnabled(True) self.selectedRole=selected[0] self.removeBtn.setEnabled(False) self.roleList.setItemTextSelection(None) def onListChange(self, sender): selected = self.roleList.getSelectedItemText() if selected: self.removeBtn.setEnabled(True) self.selectedRole=selected[0] else: self.removeBtn.setEnabled(False) self.selectedRole=None self.addBtn.setEnabled(False) self.roleCombo.setItemTextSelection(None) def onClick(self, sender): pass def onKeyUp(self, sender, keyCode, modifiers): if sender == self.roleCombo: self.onComboChange(sender) elif sender == self.roleList: self.onListChange(sender) def onKeyDown(self, sender, keyCode, modifiers): pass def onKeyPress(self, sender, keyCode, modifiers): pass
class Client: def onModuleLoad(self): # Window.setTitle("CBC Test Stand") StyleSheetCssFile("styleSheet.css") self.TEXT_WAITING = "Waiting for response..." self.TEXT_ERROR = "Server Error" self.status = Label() # This is the remote service self.I2CPanel = I2CPanel() self.SCurveRunPanel = SCurveRunPanel() self.OccupancyCheckPanel = OccupancyCheckPanel() self.CalibrateChannelTrimsPanel = CalibrateChannelTrimsPanel() # mainPanel will have all of the working stuff in it self.mainPanel = DockPanel() # self.mainPanel.setSpacing(10) titleBar = HorizontalPanel() titleBar.add(HTML(r"CBC Test Stand (v1.1)", StyleName="titleStyle")) self.stopTakingDataButton = Button("Stop taking data") self.stopTakingDataButton.addClickListener(self) self.dataTakingPercentage = HTML("0%") self.dataTakingStatus = HTML("Initiating...") titleBar.add(self.dataTakingPercentage) titleBar.add(self.dataTakingStatus) titleBar.add(self.stopTakingDataButton) titleBar.setCellHorizontalAlignment(self.dataTakingStatus, HasHorizontalAlignment.ALIGN_RIGHT) titleBar.setCellHorizontalAlignment(self.dataTakingPercentage, HasHorizontalAlignment.ALIGN_RIGHT) titleBar.setCellHorizontalAlignment(self.stopTakingDataButton, HasHorizontalAlignment.ALIGN_RIGHT) titleBar.setWidth("100%") self.mainPanel.add(titleBar, DockPanel.NORTH) selectionPanel = VerticalPanel() # Register to get updates about the status of data taking, so that # I can update the information in the title bar self.dataRunManager = DataRunManager.instance() self.dataRunManager.registerEventHandler(self) self.activePanelButton = None self.activePanel = None self.registersButton = Label("I2C Registers", StyleName="areaStyle") self.occupanciesButton = Label("Test Occupancies", StyleName="areaStyle") self.scurveButton = Label("S-Curve Run", StyleName="areaStyle") self.calibrateTrimsButton = Label("Calibrate Trims", StyleName="areaStyle") self.registersButton.addClickListener(self) self.occupanciesButton.addClickListener(self) self.scurveButton.addClickListener(self) self.calibrateTrimsButton.addClickListener(self) selectionPanel.add(self.registersButton) selectionPanel.add(self.occupanciesButton) selectionPanel.add(self.scurveButton) selectionPanel.add(self.calibrateTrimsButton) self.mainPanel.add(selectionPanel, DockPanel.WEST) self.mainPanel.add(self.status, DockPanel.SOUTH) RootPanel().add(self.mainPanel) self.setNewMainPanel(self.registersButton) def onDataTakingEvent(self, eventCode, details): """ Method that receives updates from DataRunManager """ if eventCode == DataRunManager.DataTakingStartedEvent: self.stopTakingDataButton.setEnabled(True) self.dataTakingPercentage.setText("0%") self.dataTakingStatus.setText("Starting run...") elif eventCode == DataRunManager.DataTakingFinishedEvent: self.stopTakingDataButton.setEnabled(False) self.dataTakingPercentage.setText("") self.dataTakingStatus.setText("Not taking data") elif eventCode == DataRunManager.DataTakingStatusEvent: self.stopTakingDataButton.setEnabled(True) self.dataTakingPercentage.setText("%3d%%" % int(details["fractionComplete"] * 100 + 0.5)) self.dataTakingStatus.setText(details["statusString"]) def onClick(self, sender): # (data, response_class): if the latter is 'self', then # the response is handled by the self.onRemoteResponse() method try: if sender == self.stopTakingDataButton: self.dataRunManager.stopTakingData() else: # I don't have any other buttons so it must be a panel change self.setNewMainPanel(sender) except Exception as error: self.status.setText("Client exception was thrown: '" + str(error.__class__) + "'='" + str(error) + "'") def setNewMainPanel(self, panelButton): if panelButton == self.activePanelButton: return # already the active panel so no need to do anything # Remove the "selected" style from the current button if self.activePanelButton != None: self.activePanelButton.setStyleName("areaStyle") # Set the "selected" style on the new one self.activePanelButton = panelButton self.activePanelButton.setStyleName("selectedAreaStyle") # Clear the main panel if self.activePanel != None: self.mainPanel.remove(self.activePanel.getPanel()) # Figure out what the new main panel should be if panelButton == self.registersButton: self.activePanel = self.I2CPanel elif panelButton == self.scurveButton: self.activePanel = self.SCurveRunPanel elif panelButton == self.occupanciesButton: self.activePanel = self.OccupancyCheckPanel elif panelButton == self.calibrateTrimsButton: self.activePanel = self.CalibrateChannelTrimsPanel # Set the new main panel self.activePanel.getPanel().setStyleName("selectedAreaStyle") self.activePanel.getPanel().setWidth("100%") self.mainPanel.add(self.activePanel.getPanel(), DockPanel.CENTER) def onRemoteResponse(self, response, request_info): self.status.setText(response) def onRemoteError(self, code, message, request_info): ErrorMessage("Unable to contact server")
class kMeans(Algorithm): def __init__(self): Algorithm.__init__(self) self.MLAlgorithmService = MLAlgorithmService(self) self.image=Image(self.baseURL() + "services/kMeansPictures/lenna.png",Width="320px", Height="360px") self.resultImage=Image("",Width="320px", Height="360px") self.loadingImage = Image(self.baseURL() + "images/blanksearching.gif") self.calculateButton = Button("RUN", self.onButtonClick) self.log = Button("SHOW LOG", self.openLogFile) self.log.setEnabled(False) self.image.addLoadListener(self) topPanel = DockPanel() topPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE) topPanel.add(self.calculateButton, DockPanel.WEST) topPanel.add(self.loadingImage, DockPanel.CENTER) topPanel.add(self.log, DockPanel.EAST) panel = DockPanel() panel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER) panel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE) #panel.add(HTML("<h2>Image compression</h2>", True)) panel.add(topPanel, DockPanel.NORTH) panel.add(self.image, DockPanel.WEST) panel.add(self.resultImage, DockPanel.EAST) panel.setWidth("100%") self.initWidget(panel) self.image.setStyleName("ks-images-Image") self.calculateButton.setStyleName("ks-images-Button") self.loadImage("picturem.png") def onButtonClick(self, sender): Window.alert("Starting image compression...") self.MLAlgorithmService.callMethod("lenna.png") def onError(self, sender): pass def onLoad(self, sender=None): self.loadingImage.setUrl(self.baseURL() + "images/blanksearching.gif") def loadImage(self, picture): self.loadingImage.setUrl(self.baseURL() + "images/searching.gif") self.image.setUrl(self.baseURL() + "services/kMeansPictures/lenna.png") self.resultImage.setUrl(self.baseURL() + "services/kMeansPictures/lenna.png") self.resultImage.setUrl(self.baseURL() + "services/kMeansPictures/" + picture) def onImageClicked(self): Window.alert("picture!") def openLogFile(self, sender): ###TODO: make logging output fileLocation = self.baseURL() + "services/contactjson.txt" dlg = FileOpenDlg(fileLocation=fileLocation) dlg.show() def showStatus(self, msg): Window.alert(msg)
class PauseResume(HorizontalPanel): def __init__(self): HorizontalPanel.__init__(self, Spacing=4) self.add(Label('Dispatch:', StyleName='section')) self.pause = Button('Pause', self) self.add(self.pause) self.resume = Button('Resume', self) self.add(self.resume) self.refresh = Button('Refresh', self, StyleName='refresh') self.add(self.refresh) self.err = Label() self.add(self.err) self._refresh() def _refresh(self): self.refresh.setEnabled(False) self.pause.setEnabled(False) self.resume.setEnabled(False) remote = server.AdminService() id = remote.queuePaused(self) if id < 0: self.err.setText('oops: could not call getQueueSize') def onClick(self, sender): self.err.setText('') if sender is self.refresh: self._refresh() elif sender is self.pause: self._pause() else: self._resume() def _pause(self): remote = server.AdminService() id = remote.pause(Paused(self)) if id < 0: self.err.setText('oops: could not call pause.') def _resume(self): remote = server.AdminService() id = remote.resume(Resumed(self)) if id < 0: self.err.setText('oops: could not call resume.') def onRemoteResponse(self, paused, request_info): self.refresh.setEnabled(True) if paused: self.resume.setEnabled(True) else: self.pause.setEnabled(True) def onRemoteError(self, code, message, request_info): self.refresh.setEnabled(True) self.err.setText('Error from queuePaused: ' + message)
class kMeans(Algorithm): def __init__(self): Algorithm.__init__(self) self.MLAlgorithmService = MLAlgorithmService(self) self.image = Image(self.baseURL() + "services/kMeansPictures/lenna.png", Width="320px", Height="360px") self.resultImage = Image("", Width="320px", Height="360px") self.loadingImage = Image(self.baseURL() + "images/blanksearching.gif") self.calculateButton = Button("RUN", self.onButtonClick) self.log = Button("SHOW LOG", self.openLogFile) self.log.setEnabled(False) self.image.addLoadListener(self) topPanel = DockPanel() topPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE) topPanel.add(self.calculateButton, DockPanel.WEST) topPanel.add(self.loadingImage, DockPanel.CENTER) topPanel.add(self.log, DockPanel.EAST) panel = DockPanel() panel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER) panel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE) #panel.add(HTML("<h2>Image compression</h2>", True)) panel.add(topPanel, DockPanel.NORTH) panel.add(self.image, DockPanel.WEST) panel.add(self.resultImage, DockPanel.EAST) panel.setWidth("100%") self.initWidget(panel) self.image.setStyleName("ks-images-Image") self.calculateButton.setStyleName("ks-images-Button") self.loadImage("picturem.png") def onButtonClick(self, sender): Window.alert("Starting image compression...") self.MLAlgorithmService.callMethod("lenna.png") def onError(self, sender): pass def onLoad(self, sender=None): self.loadingImage.setUrl(self.baseURL() + "images/blanksearching.gif") def loadImage(self, picture): self.loadingImage.setUrl(self.baseURL() + "images/searching.gif") self.image.setUrl(self.baseURL() + "services/kMeansPictures/lenna.png") self.resultImage.setUrl(self.baseURL() + "services/kMeansPictures/lenna.png") self.resultImage.setUrl(self.baseURL() + "services/kMeansPictures/" + picture) def onImageClicked(self): Window.alert("picture!") def openLogFile(self, sender): ###TODO: make logging output fileLocation = self.baseURL() + "services/contactjson.txt" dlg = FileOpenDlg(fileLocation=fileLocation) dlg.show() def showStatus(self, msg): Window.alert(msg)
class RolePanel(AbsolutePanel): user = None selectedRole = None roleList = None roleCombo = None addBtn = None removeBtn = None def __init__(self,parent): AbsolutePanel.__init__(self) self.roleList = ListBox() self.roleList.setWidth('300px') self.roleList.setVisibleItemCount(6) self.roleList.addClickListener(self.onListClick) self.roleList.addKeyboardListener(self) self.roleCombo = ListBox() self.roleCombo.addClickListener(self.onComboClick) self.roleCombo.addKeyboardListener(self) self.addBtn = Button("Add", self) self.addBtn.addClickListener(self.onAdd) self.addBtn.setEnabled(False) self.removeBtn = Button("Remove", self) self.removeBtn.addClickListener(self.onRemove) self.removeBtn.setEnabled(False) vpanel = VerticalPanel() vpanel.add(self.roleList) hpanel = HorizontalPanel() hpanel.add(self.roleCombo) hpanel.add(self.addBtn) hpanel.add(self.removeBtn) vpanel.add(hpanel) self.add(vpanel) return def updateRoleList(self,items): self.roleList.clear() for item in items: self.roleList.addItem(item) #self.roleList.addItem(' ') #self.roleList.addItem('- - - - - - - -') def updateRoleCombo(self,choices, default_): self.roleCombo.clear() for choice in choices: self.roleCombo.addItem(choice) self.roleCombo.selectValue(default_) def onComboClick(self, sender, keyCode=None, modifiers=None): selected = self.roleCombo.getSelectedItemText() if not selected or not self.user: self.addBtn.setEnabled(False) self.selectedRole=None else: self.addBtn.setEnabled(True) self.selectedRole=selected[0] self.removeBtn.setEnabled(False) self.roleList.setItemTextSelection(None) def onListClick(self, sender): selected = self.roleList.getSelectedItemText() if selected: self.removeBtn.setEnabled(True) self.selectedRole=selected[0] else: self.removeBtn.setEnabled(False) self.selectedRole=None self.addBtn.setEnabled(False) self.roleCombo.setItemTextSelection(None) def onAdd(self, evt): self.mediator.sendNotification(EmployeeAdmin.AppFacade.ADD_ROLE,self.selectedRole) def onRemove(self,evt): self.mediator.sendNotification(EmployeeAdmin.AppFacade.REMOVE_ROLE,self.selectedRole) def onClick(self, sender): pass def onKeyUp(self, sender, keyCode, modifiers): if sender == self.roleCombo: self.onComboClick(sender) elif sender == self.roleList: self.onListClick(sender) def onKeyDown(self, sender, keyCode, modifiers): pass def onKeyPress(self, sender, keyCode, modifiers): pass
class Viewer: def __init__(self, db_url, parent_panel, doc_callback=None, page_size=5): self.db_url = db_url self.parent_panel = parent_panel self.doc_callback = doc_callback self.page_size = page_size def onModuleLoad(self): ## Grid setup self.grid = Grid() # Note: The resize method args are Rows,Cols (Curses style) self.grid.resize(1,4) self.grid.setBorderWidth(1) self.grid.setHTML(0,0,'#') self.grid.setHTML(0,1,'ID') self.grid.setHTML(0,2,'Revision') self.grid.setHTML(0,3,'Delete') self.grid.addTableListener(self) self.parent_panel.add(self.grid) ## Buttons self.button_panel = HorizontalPanel() # Prev self.first_button = Button("<-", self.firstPage) self.first_button.setEnabled(False) self.button_panel.add(self.first_button) self.prev_button = Button("Previous", self.prevPage) self.prev_button.setEnabled(False) self.button_panel.add(self.prev_button) self.next_button = Button("Next", self.nextPage) self.next_button.setEnabled(False) self.button_panel.add(self.next_button) self.parent_panel.add(self.button_panel) def populate(self, json): view_obj = JSONParser().decode(json) view_rows = view_obj['rows'] offset = view_obj['offset'] num_rows = len(view_rows) self.first_key = view_rows[0]['key'] if offset != 0: self.first_button.setEnabled(True) if num_rows > self.page_size: self.next_key = view_rows[-1:][0]['key'] self.next_button.setEnabled(True) self.grid.resize(self.page_size+1,4) else: self.grid.resize(num_rows+1,4) for row_num in range(num_rows): if row_num < self.page_size: self.grid.setHTML(row_num+1, 0, 1+offset+row_num) self.grid.setHTML(row_num+1, 1, view_rows[row_num]['key']) self.grid.setHTML(row_num+1, 2, view_rows[row_num]['value']['rev']) self.grid.setHTML(row_num+1, 3, '<b>X O X</b>') if len(self.prev_keys)>0: self.prev_button.setEnabled(True) def onCellClicked(self, sender, row, col): doc_id = self.grid.getHTML(row, 1) if col == 3: doc_rev = self.grid.getHTML(row, 2) url = self.db_url+doc_id+'?rev='+doc_rev HTTPRequest().asyncDelete(None, None, url=url, handler=DeleteHandler(self)) else: if self.doc_callback is not None: self.doc_callback(doc_id) def firstPage(self): self.loadPage(None) def nextPage(self): self.prev_keys.append(self.first_key) self.loadPage(self.next_key) def prevPage(self): self.loadPage(self.prev_keys.pop()) def setView(self, view_path, first_key = None): self.view_path = view_path #self.prev_keys = [] #self.next_key = None self.loadPage(first_key) def loadPage(self, startkey=None): limit = int(self.page_size)+1 view_url = self.db_url+self.view_path+'?limit=%d'%limit if startkey is not None: view_url += '&startkey="%s"'%startkey else: self.prev_keys = [] self.first_button.setEnabled(False) self.next_button.setEnabled(False) self.prev_button.setEnabled(False) HTTPRequest().asyncGet(None, None, url=view_url, handler=ViewLoader(self))
class FormulaBuilder(DialogWindow): def __init__(self, operations, after, **kwargs): DialogWindow.__init__(self, modal=True, close=True) self.formula = Formula([]) self.after = after if "type" in kwargs: self.type = kwargs["type"] else: self.type = 'rel' self.set_styles() def op_button_click(op): def aio(): self.add_op(op) return aio self.ops_with_buttons = [{ "op": op, "button": Button(op.name, op_button_click(op)) } for op in operations] for owb in self.ops_with_buttons: self.add_button(owb["button"]) self.var = list() self.is_clicked = list() self.textbox = list() self.set_variables((0 if self.type == 'exp' else 5)) def set_variables(self, no_of_vars, x=True): def name(n): return "var" + str(n) def print_scheme(n): return ["\\alpha", "\\beta", "\\gamma", "\\delta", "\\epsilon"][n] def button_click(n): def sopa(): if not self.is_clicked[n]: v = Operation(name(n), 0, self.textbox[n].getText(), name(n), Operation.VARIABLE) self.var[n] = v self.textbox[n].setEnabled(False) self.is_clicked[n] = True self.add_op(self.var[n]) return sopa for i in range(no_of_vars): h = HorizontalPanel() b = Button("variable", button_click(i)) h.add(b) self.is_clicked.append(False) self.var.append(None) t = TextBox() self.textbox.append(t) t.setText(print_scheme(i)) h.add(t) self.add_button(h) def set_styles(self): self.dock = DockPanel() self.dock.setSpacing(3) self.dock.setWidth("300") self.image = Image( latex_to_url(self.formula.fill_with_placeholders().to_latex())) self.dock.add(self.image, DockPanel.EAST) self.dock.setCellHorizontalAlignment(self.image, HasAlignment.ALIGN_TOP) self.backspaceButton_add() self.doneButton_add() self.dock.add(HTML(""), DockPanel.CENTER) left = 100 top = 100 self.setText("opkop") self.setPopupPosition(left, top) self.setStyleAttribute("background-color", "#ffffff") self.setStyleAttribute("color", "blue") self.setStyleAttribute("border-width", "5px") self.setStyleAttribute("border-style", "solid") self.setWidget(self.dock) def doneButton_add(self): def doneButton_click(): self.hide() self.after(self.formula) self.doneButton = Button("Done", doneButton_click) self.doneButton.setEnabled(False) self.dock.add(self.doneButton, DockPanel.SOUTH) def backspaceButton_add(self): def backspaceButton_click(): self.formula = Formula(self.formula.body[:-1]) self.refresh() self.backspaceButton = Button("Backspace", backspaceButton_click) self.backspaceButton.setEnabled(False) self.dock.add(self.backspaceButton, DockPanel.SOUTH) def refresh(self): self.image.setUrl( latex_to_url(self.formula.fill_with_placeholders().to_latex())) self.doneButton.setEnabled(self.formula.is_closed()) self.backspaceButton.setEnabled(len(self.formula.body) >= 0) def add_button(self, b): self.dock.add(b, DockPanel.NORTH) def add_op(self, op): if not self.formula.is_closed(): self.formula.add_one_op(op, self.type) self.refresh()
class TweetEditor(Grid): def __init__(self, query, nUsers, tabName, popup, preparePanel, topPanel): Grid.__init__(self, 3, 2) self.tweet = text.TextAreaFocusHighlight( Text="Tickery query %r has %d results. See them at" % ( query, nUsers), VisibleLines=3, MaxLength=1000, StyleName='large-query-area') self.tweet.addKeyboardListener(self) self.query = query self.tabName = tabName self.popup = popup self.preparePanel = preparePanel self.topPanel = topPanel self.button = Button('Tweet!', self) self.count = Label('') self.setWidget(0, 0, HTML(_instructions)) self.setWidget(0, 1, self.count) self.setWidget(1, 0, self.tweet) self.setWidget(1, 1, self.button) formatter = self.getCellFormatter() formatter.setVerticalAlignment(0, 1, 'bottom') formatter.setVerticalAlignment(1, 1, 'bottom') self.setCount() def onClick(self, sender): self.button.setEnabled(False) text = self.tweet.getText().strip() remote = server.TickeryService() id = remote.tweet( self.topPanel.loginPanel.oauthCookie, text, self.query, self.tabName, userlist._sortKey, self) if id < 0: self.setWidget(2, 0, Label('Oops!')) def onRemoteResponse(self, response, request_info): self.button.setEnabled(True) if response['result']: self.popup.hide() self.preparePanel.link.setHTML('<a href="%s"> %s</a>' % (response['URL'], _doneText)) else: self.setWidget(2, 0, Label('Oops: %r' % response)) def onRemoteError(self, code, message, request_info): self.button.setEnabled(True) self.setWidget(2, 0, Label('Server Err or Invalid Response: ERROR %d - %s' % (code, message))) def onKeyDown(self, sender, keycode, modifiers): pass def onKeyUp(self, sender, keycode, modifiers): pass def onKeyPress(self, sender, keycode, modifiers): self.setCount() def setCount(self): n = TWEET_LIMIT - len(self.tweet.getText()) if n >= 0: self.count.setStyleName('tweet-char-count-ok') else: self.count.setStyleName('tweet-char-count-excessive') self.count.setText(str(n))
class EventLinkPopup(PopupPanel): def __init__(self, editor): PopupPanel.__init__(self, glass=True) self.m_origAnchorStart = None self.m_origAnchorEnd = None self.m_origTargetText = "" self.m_editor = editor vpanel = VerticalPanel() vpanel.setWidth("350px") self.m_webPageText = TextBox() self.m_webPageText.setText("http:#") self.m_webPageText.setWidth("320px") vpanel.add(self.m_webPageText) lbl = Label("Display:") self.m_targetText = TextBox() self.m_targetText.setWidth("100%") lpanel = HorizontalPanel() lpanel.add(lbl) lpanel.add(self.m_targetText) vpanel.add(lpanel) self.m_fillOutCB = CheckBox("Change entire link") self.m_fillOutCB.setVisible(False) self.m_fillOutCB.addClickListener(self) vpanel.add(self.m_fillOutCB) self.m_okBut = Button("Ok", self) self.m_okBut.addStyleName("float-left") self.m_cancelBut = Button("Cancel", self) self.m_cancelBut.addStyleName("float-left") hpanel = HorizontalPanel() hpanel.add(self.m_okBut) hpanel.add(self.m_cancelBut) vpanel.add(hpanel) self.add(vpanel) self.setStyleName("gwt-DialogBox") def refresh(self): try: self.m_editor.getSelection() self.m_range = self.m_editor.getRange() if self.m_range is None: return False else: self.m_selTexts = self.m_range.getSelectedTextElements() if self.m_selTexts is None: return False else: self.m_origTargetText = self.m_range.getText() self.m_targetText.setText(self.m_origTargetText) anchor = self.getAnchor(self.m_selTexts) if anchor is not None: href = anchor.getHref().strip() if href: self.m_webPageText.setText(href) self.m_origAnchorStart = self.getAnchorLimit( self.m_range.getStartPoint().getTextNode(), anchor, False) self.m_origAnchorEnd = self.getAnchorLimit( self.m_range.getStartPoint().getTextNode(), anchor, True) if self.m_range.getStartPoint().equals(self.m_origAnchorStart) and self.m_range.getStartPoint().equals(self.m_origAnchorEnd): self.m_origAnchorStart = None self.m_origAnchorEnd = None else: self.m_fillOutCB.setVisible(True) self.m_fillOutCB.setValue(True) self.m_origTargetText = self.fetchStringFromTexts( self.m_origAnchorStart, self.m_origAnchorEnd) self.m_targetText.setText(self.m_origTargetText) except: print "exception" traceback.print_exc() return False return True def _apply(self): formatter = self.m_editor.getFormatter() link = self.m_webPageText.getText().strip() if not link: return False print self.m_origAnchorStart, self.m_origAnchorEnd if (self.m_origAnchorStart is not None) and self.m_fillOutCB.getValue(): # Expand selection to these bounds self.m_range.setRange(self.m_origAnchorStart, self.m_origAnchorEnd) # Ensure the selection hasn't changed, or at least changes to the # expanded bounds we want Selection.setRange(self.m_range) targetText = self.m_targetText.getText() if self.m_range.isCursor(): # Insert into a single cursor location newEle = DOM.createAnchor() newEle.setHref(link) newEle.setInnerText(targetText) sp = self.m_range.getStartPoint() startNode = sp.getTextNode() offset = sp.getOffset() print "sp", sp, startNode, offset parentEle = startNode.parentElement text = startNode.data if offset == 0: parentEle.insertBefore(newEle, startNode) else: if offset < text.length(): # Split this in two and insert the node between startNode.splitText(offset) parentEle.insertAfter(newEle, startNode) Selection.setRange(Range(newEle)) elif targetText != self.m_origTargetText: # Replace whatever was selected with this text ele = self.m_range.surroundContents() newEle = DOM.createAnchor() newEle.href = link newEle.innerText = targetText ele.parentElement.replaceChild(newEle, ele) Selection.setRange(Range(newEle)) else: formatter.createLink(link) return True def getAnchor(self, node): res = None if isinstance(node, list): nodes = node for node in nodes: res = self.getAnchor(node) if res is not None: break return res ele = node.parentElement while ele is not None: tag = ele.tagName if tag.lower == "a": res = ele break ele = ele.parentElement return res def getAnchorLimit(self, node, anchor, forward): href = anchor.href while True: prevNode = node node = Range.getAdjacentTextElement(prevNode, forward) if node is not None: cmpAnchor = self.getAnchor(node) if (cmpAnchor is None) or not href == cmpAnchor.href: break if node is None: break res = RangeEndPoint() res.setTextNode(prevNode) res.setOffset(forward and prevNode.getData().length() or 0) return res def parseEventLink(self, href): res = 0 idx = href.index("#event=") if idx > 0: try: res = href[idx+7:] except: pass return res def createEventLink(self, id): return "#event=" + id def fetchStringFromTexts(self, startPoint, endPoint): res = None texts = Range.getSelectedTextElements( startPoint.getTextNode(), endPoint.getTextNode()) if texts is not None: res = self.fetchStringFromTexts(texts, startPoint, endPoint) return res def fetchStringFromTexts(self, allTexts, startPoint, endPoint): selText = "" for node in allTexts: val = node.getData() if node == startPoint.getTextNode(): if node == endPoint.getTextNode(): val = val.substring[startPoint.getOffset(): endPoint.getOffset()] else: val = val[startPoint.getOffset():] elif node == endPoint.getTextNode(): val = val[:endPoint.getOffset()] selText += val return selText def onClick(self, sender): if sender == self.m_cancelBut: self.hide() elif sender == self.m_okBut: if self._apply(): self.hide() elif sender == self.m_fillOutCB: if self.m_fillOutCB.getValue(): self.m_origTargetText = fetchStringFromTexts(self.m_origAnchorStart, self.m_origAnchorEnd) self.m_targetText.setValue(self.m_origTargetText) else: self.m_origTargetText = self.m_range.getText() self.m_targetText.setValue(self.m_origTargetText) def checkSuggestValid(self): self.m_okBut.setEnabled(True) def execute(self): self.checkSuggestValid() def deferredCheckValid(self): DeferredCommand.addCommand(self)
class PreferencesDlg(DialogBox): fileLocation = None def __init__(self, left=50, top=50): DialogBox.__init__(self, modal=False) self.setPopupPosition(left, top) self.setText("Preferences") ftable = FlexTable() ftableFormatter = ftable.getFlexCellFormatter() row = 0 try: self.fileLocation = getCookie("fileLocation") except: self.fileLocation = None row += 1 ftable.setWidget(row, 0, Label("Sheet loaded on startup", wordWrap=False)) self.fileLocationInput = TextBox() self.fileLocationInput.addChangeListener(self.checkValid) self.fileLocationInput.addKeyboardListener(self) self.fileLocationInput.setVisibleLength(30) self.fileLocationInput.setText(self.fileLocation) ftable.setWidget(row, 1, self.fileLocationInput) row += 1 hpanel = HorizontalPanel() self.saveBtn = Button("Save", self.onSave) self.saveBtn.setEnabled(False) hpanel.add(self.saveBtn) self.cancelBtn = Button("Cancel", self.onCancel) hpanel.add(self.cancelBtn) ftable.setWidget(row, 0, hpanel) ftableFormatter.setColSpan(row, 0, 2) self.setWidget(ftable) def onCancel(self, sender): self.hide() def onSave(self, sender): try: setCookie("fileLocation", self.fileLocationInput.getText(), 1000000000) except: pass self.hide() def checkValid(self, evt=None): if self.fileLocation != self.fileLocationInput.getText(): self.saveBtn.setEnabled(True) else: self.saveBtn.setEnabled(False) 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 IntroPage: DiceInstance = 0 VarTempScore = 0 #Temporary Score Variable VarTotScore = [] #Total Score Variable CountTurn = 1 #Count to display player number in Temporary Score Board def __init__(self): self.DPanel = DockPanel(HorizontalAlignment = HasAlignment.ALIGN_CENTER, Spacing=10) # Creates the Docker Panel Instance self.VPanel = VerticalPanel() # Creates the Vertical Panel Instance self.VPanel1 = VerticalPanel() # Creates the Vertical Panel Instance self.HPanel = HorizontalPanel() # Creates a Horizontal Panel Instance self.HPanel1 = HorizontalPanel()# Creates a Horizontal Panel Instance self.image=Image()#Creates the Image instance to embed the images of dice self.DummyUrl = self.image.getUrl() self.timer = Timer(notify=self.StillImage)#Timer for display of gif animation self.timerRButton = Timer(notify=self.OneAlert)#Timer for controlling states of Roll button #whenever the output of the dice is 1 self.RollButton = Button("Roll", getattr(self, "RollButtonPressed")) #Initially Disabled self.RollButton.setEnabled(False) self.BankButton = Button("Bank", getattr(self, "BankButtonPressed")) #Initially Disabled self.BankButton.setEnabled(False) #The start button controls both the number players as well the winning score self.StartButton = Button("Start", getattr(self, "StartButtonPressed")) #Intially Enabled self.StartButton.setEnabled(True) self.PlayerNum = TextBox() #Enter the Number of Players self.WinScore = TextBox() #Enter the Target Score self.PlayerNum.setText("0") self.WinScore.setText("0") # self.OK = Button("OK", getattr(self, "okButtonPressed")) self.NameScore = FlexTable() #main score board self.NameScore.setStyleName("NameScore") self.TempBoard = FlexTable() #Temporary score board self.TempBoard.setStyleName("TempBoard") self.TxtInstructions = HTML() def StartButtonPressed(self): self.CountTurn = 1 if int(self.PlayerNum.getText()) >= 2 and int(self.PlayerNum.getText()) <= 6 and int(self.WinScore.getText()) >= 10 and int(self.WinScore.getText()) <= 100: self.DPanel.remove(self.TxtInstructions, DockPanel.CENTER) self.BankButton.setVisible(True) self.RollButton.setVisible(True) # self.image.setVisible(True) self.TempBoard.setVisible(True) self.NameScore.setVisible(True) self.image = Image( self.DummyUrl + "images/0.png") self.image.setSize("200px", "300px") self.DPanel.add(self.image, DockPanel.CENTER) RootPanel().add(self.DPanel) self.StartButton.setEnabled(False) self.PlayerNum.setEnabled(False) self.WinScore.setEnabled(False) self.RollButton.setEnabled(True) self.TempBoard.setText(1,0,"Player"+str(1)) self.TempBoard.setText(1, 1, "0") self.NameScore.getRowFormatter().addStyleName(self.CountTurn,"Rows") else: Window.alert("Please Enter Correct Parameters " ) #Command for alert window return 0 VarPlayer = ["Player" + str(i) for i in xrange(1,int(self.PlayerNum.getText())+1)] i = 0 while i < int(self.PlayerNum.getText()): self.NameScore.setText(i+1, 0, VarPlayer[i]) self.NameScore.setText(i+1, 1, "0") self.VarTotScore.append(0) #m*1 vector of zeros indicating the initial scores i += 1 def OneAlert(self): AlrtTxt = " Sorry, your turn is over" Window.alert(AlrtTxt) self.timerRButton.cancel() self.RollButton.setEnabled(True) def StillImage(self): self.DPanel.remove(self.image, DockPanel.CENTER) self.image = Image( self.DummyUrl + "images/" +str(self.DiceInstance)+".png") self.image.setSize("300px", "300px") self.DPanel.add(self.image, DockPanel.CENTER) self.DPanel.setCellHeight(self.image, "300px") self.DPanel.setCellWidth(self.image, "600px") RootPanel().add(self.DPanel) self.timer.cancel() if self.DiceInstance != 1: self.TempBoard.setText(1, 1, self.DiceInstance + int(self.TempBoard.getText(1, 1))) self.BankButton.setEnabled(True) self.RollButton.setEnabled(True) else: self.NameScore.getRowFormatter().removeStyleName(self.CountTurn,"Rows") self.RollButton.setEnabled(False) self.timerRButton.schedule(1500) self.CountTurn += 1 if self.CountTurn % int(self.PlayerNum.getText()) == 1: self.CountTurn = 1 self.TempBoard.setText(1,0,"Player"+str(self.CountTurn)) self.TempBoard.setText(1, 1, "0") self.NameScore.getRowFormatter().addStyleName(self.CountTurn,"Rows"); else: self.TempBoard.setText(1,0,"Player"+str(self.CountTurn)) self.TempBoard.setText(1, 1, "0") self.NameScore.getRowFormatter().addStyleName(self.CountTurn,"Rows"); def RollButtonPressed(self): self.DiceInstance = random.randint(1, 6) # value turned after rolling the dice self.DPanel.remove(self.image, DockPanel.CENTER) self.image = Image("http://www.animatedimages.org/data/media/710/animated-dice-image-0064.gif") self.image.setSize("100px", "200px") self.DPanel.add(self.image, DockPanel.CENTER) self.DPanel.setCellHeight(self.image, "300px") self.DPanel.setCellWidth(self.image, "600px") RootPanel().add(self.DPanel) self.BankButton.setEnabled(False) self.RollButton.setEnabled(False) self.timer.schedule(3000) def BankButtonPressed(self): self.BankButton.setEnabled(False) self.NameScore.setText(self.CountTurn, 1, int(self.NameScore.getText(self.CountTurn, 1)) + int(self.TempBoard.getText(1,1))) if int(self.NameScore.getText(self.CountTurn, 1)) >= int(self.WinScore.getText()): AlrtTxt = "Congratulation!!! Player"+ str(self.CountTurn) + " wins !!!!" Window.alert(AlrtTxt) self.DPanel.remove(self.image, DockPanel.CENTER) self.DPanel.add(self.TxtInstructions, DockPanel.CENTER) self.BankButton.setVisible(False) self.RollButton.setVisible(False) # self.image.setVisible(False) self.TempBoard.setVisible(False) self.NameScore.setVisible(False) i = int(self.PlayerNum.getText()) while i > 0: self.NameScore. removeRow(i) i -= 1 self.TempBoard.setText(1,0,"X") self.TempBoard.setText(1, 1, "0") self.StartButton.setEnabled(True) # self.OK.setEnabled(True) self.PlayerNum.setEnabled(True) self.WinScore.setEnabled(True) self.RollButton.setEnabled(False) self.BankButton.setEnabled(False) self.NameScore.getRowFormatter().removeStyleName(self.CountTurn,"Rows"); self.DPanel.remove(self.image, DockPanel.CENTER) self.image = Image( self.DummyUrl + "images/0.png") self.image.setSize("200px", "300px") self.DPanel.add(self.image, DockPanel.CENTER) self.DPanel.setCellHeight(self.image, "200px") self.DPanel.setCellWidth(self.image, "400px") RootPanel().add(self.DPanel) else: self.NameScore.getRowFormatter().removeStyleName(self.CountTurn,"Rows"); self.CountTurn += 1 if self.CountTurn % int(self.PlayerNum.getText()) == 1: self.CountTurn = 1 self.TempBoard.setText(1,0,"Player"+str(self.CountTurn)) self.TempBoard.setText(1, 1, "0") self.NameScore.getRowFormatter().addStyleName(self.CountTurn,"Rows"); else: self.TempBoard.setText(1,0,"Player"+str(self.CountTurn)) self.TempBoard.setText(1, 1, "0") self.NameScore.getRowFormatter().addStyleName(self.CountTurn,"Rows"); def OnGameLoad(self): self.NameScore.setText(0, 0, "Player ID") self.NameScore.setText(0, 1, "Score") self.NameScore.setCellSpacing(10) self.NameScore.setCellPadding(10) self.NameScore.setBorderWidth(2) self.NameScore.setVisible(False) self.TempBoard.setText(0, 0, "Player's Turn") self.TempBoard.setText(0, 1, "Temporary Score") self.TempBoard.setText(1, 0, "X") self.TempBoard.setText(1, 1, "0") self.TempBoard.setCellSpacing(10) self.TempBoard.setCellPadding(10) self.TempBoard.setBorderWidth(2) self.TempBoard.setVisible(False) #Adding StartButton to Dock panel self.DPanel.add(self.StartButton, DockPanel.EAST) self.DPanel.setCellHeight(self.StartButton, "200px") self.DPanel.setCellWidth(self.StartButton, "20px") Txt = HTML("<center><b>Enter Number of Players (between 2 & 6)</b><center>")#Adding playernumber and winscore textbox to Horizontal Panel Txt1 = HTML("<left><b>Enter Target Score (between 10 & 100)</b><left>") self.HPanel1.add(Txt) self.HPanel1.add(self.PlayerNum) self.HPanel1.add(Txt1) self.HPanel1.add(self.WinScore) self.HPanel1.add(self.StartButton) self.HPanel1.setSpacing(20) #Adding Horizontal panel containing playernumber and winscore textbox to Dock Panel self.DPanel.add(self.HPanel1, DockPanel.NORTH) self.DPanel.setCellHeight(self.HPanel1, "30px") self.DPanel.setCellWidth(self.HPanel1, "2000px") self.TxtInstructions = HTML("<b><u><center>Instructions</center></u><ul><li>Pig is game for 2 to 6 Players.</li><li>Players take turns rolling a dice as many times as they like. </li><li>If a roll is 2, 3, 4, 5 or 6, the player adds that many points to their score for the turn. </li><li>A player may choose to end their turn at any time and 'bank' their points.</li><li>If a player rolls a 1, they lose all their unbanked points and their turn is over.</li><li>The first player to score the target or more wins.</li></ul></b>") self.TxtInstructions.setStyleName("TxtInstructions") self.DPanel.add(self.TxtInstructions, DockPanel.CENTER) self.DPanel.add(self.NameScore, DockPanel.WEST) #Adding main scoreboard to Dock Panel self.DPanel.setCellHeight(self.NameScore, "300px") self.DPanel.setCellWidth(self.NameScore, "100px") self.DPanel.setSpacing(10) self.DPanel.setPadding(2) #Adding Tempboard and BankButton to Horizontal Panel self.HPanel.add(self.TempBoard) #Adding BankButton and RollButton to vertical panel self.VPanel.add(self.RollButton) self.RollButton.setVisible(False) self.VPanel.add(self.BankButton) self.BankButton.setVisible(False) self.VPanel.setSpacing(10) #Adding Vertical panel containing BankButton and RollButton to Horizontal Panel self.HPanel.add(self.VPanel) self.HPanel.setSpacing(40) #Adding Horizontal panel containing Tempboard and vertical panel containing BankButton and RollButton to Dock Panel self.DPanel.add(self.HPanel, DockPanel.SOUTH) self.DPanel.setCellHeight(self.HPanel, "20px") self.DPanel.setCellWidth(self.HPanel, "2000px") RootPanel().add(self.DPanel)