def on_submit__clicked(self, but, *args): filename = self._get_filename_from_user() if filename is None: return # save directory for future use self.selection_directory = os.path.split(filename)[0] language = self._get_language(filename) # On invalid extension, show msg and return if language is None: ext_info = '\n'.join( [x+': '+str(y) for x,y in self.info['languages'].items()] ) util.msg_dialog('Invalid file extension' + \ '\n\n' + \ 'File extensions allowed are:\n' + \ ext_info, gtk.MESSAGE_ERROR) return def done(result): #if result: # util.msg_dialog('Ok') #else: # util.msg_dialog('Something Wrong!!') pass self.gui.call_remote('Submitting %s' % filename, done, 'submitProblem', self.pr_no, file(filename).read(), language)
def showSubmissionResult(self, problem , lang, ts, result): "Called from mind, when server sends submission result" text = 'Result for %s\n\n%s\n\nLang: %s\nTime: %d' text = text % (self.info['problems'][problem], self.info['results'][result], self.info['languages'][lang], ts) self._update_submissions() util.msg_dialog(text)
def _cb_done(self, result, next_success_callback): reason = util.getReason(result) if reason: # Error raised by server util.msg_dialog(reason, gtk.MESSAGE_ERROR) else: # Normal return if next_success_callback: next_success_callback(result) self.unfreeze() self.setStatus(READY)
def on_but_edit__clicked(self, but, *args): tids = self._tv_get() # Editting operation can be done only if exactly 1 row is selected if len(tids) != 1: util.msg_dialog('Select exactly one row') return tid = tids.values()[0] # Readonly row cannot be edited if self.is_readonly_tid(tid): util.msg_dialog('Readonly entries cannot be edited') return self._fields_visible(True, self.LBL_EDIT) self._fields_put(tid)
def on_but_start_contest__clicked(self, but, *args): duration = self["ent_duration"].get_text() try: duration = int(duration) if duration < 0: raise ValueError except ValueError: util.msg_dialog("Enter duration in seconds", gtk.MESSAGE_ERROR) self["ent_duration"].set_text("") return def done(result): # Start time self._update_contest_ui(result["name"], result["duration"], result["age"]) self.call_remote("Starting contest", done, "startContest", duration)
def on_but_delete__clicked(self, but, *args): tids = self._tv_get() if len(tids) == 0: util.msg_dialog('Select atleat one row to delete') return # Readonly row cannot be edited if True in map(self.is_readonly_tid, tids.values()): util.msg_dialog('You selected atleast one readonly entry. Deselect it') return def cb_done(result): self.ui_list_remove(tids.keys()) self.call_remote( 'Removing %d %s' % (len(tids), self.table), cb_done, self._rmfunc('remove'), tids.keys() )
def on_but_login__clicked(self, button, *args): identity = self['ent_identity'].get_text() password = self['ent_password'].get_text() self.identity = identity # TODO: Get host, port from user #host = 'localhost' host = self['ent_hostname'].get_text().strip() port = self['ent_port'].get_text().strip() try: port = int(port) if port < 1024: raise ValueError, 'port must be positive number > 1024' except ValueError: util.msg_dialog('Enter valid port greater than 1024', gtk.MESSAGE_ERROR) self['ent_port'].set_text('') return #host = 'cs.annauniv.edu' #port = 8800 self.mind_proxy = MindProxy() if not identity or not password: self.setStatus('Please fill both the fields') return self.setStatus('Logging in ...') button.set_sensitive(False) # Login using pb f = pb.PBClientFactory() self.factory = f from twisted.internet import reactor reactor.connectTCP(host, port, f) creds = credentials.UsernamePassword(identity, password) f.login(creds, self.mind_proxy ).addCallbacks(self._cbGotPerspective, self._ebFailedLogin ).setTimeout(TIMEOUT ) self.setStatus("Contacting server...")
def _disconnected(self, *args): util.msg_dialog('You are disconnected from server', gtk.MESSAGE_ERROR) gtk.main_quit()
def _cb_oops(self, reason): msg = reason.getErrorMessage() util.msg_dialog('CRITICAL: ' + msg, gtk.MESSAGE_ERROR) self.setStatus(READY) self.unfreeze()
def _ebFailedLogin(self, reason): self.setStatus('Login failed') reason = str(reason) util.msg_dialog(reason) self['but_login'].set_sensitive(True)