def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.nextWorkerInput = ["[]", "1"] self.bestPropScore = -1 self.clear_worker_table() self.DataCollector = JsonReader(self) self.connect(self.DataCollector, QtCore.SIGNAL("received_data"), self.received) self.connect(self.DataCollector, QtCore.SIGNAL("worker_updated"), self.update_worker) self.connect(self.DataCollector, QtCore.SIGNAL("round_started"), self.start_round) self.connect(self.DataCollector, QtCore.SIGNAL("worker_input_changed"), self.update_worker_input) self.connect(self.DataCollector, QtCore.SIGNAL("problem_state_changed"), self.update_problem_state) self.connect(self.DataCollector, QtCore.SIGNAL("all_data"), self.update_all) self.DataCollector.start() # proposition tab QtCore.QObject.connect(self.ui.cbxId, QtCore.SIGNAL("currentIndexChanged(int)"), self.cbxId_indexChanged) self.paintBox = PaintBox(self.ui.tabProposition) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.paintBox.sizePolicy().hasHeightForWidth()) self.paintBox.setSizePolicy(sizePolicy) self.ui.gridLayout_4.addWidget(self.paintBox, 1, 0, 1, 1) # io tab QtCore.QObject.connect(self.ui.btnSend, QtCore.SIGNAL("clicked()"), self.btnSend_clicked) QtCore.QObject.connect(self.ui.edtSend, QtCore.SIGNAL("returnPressed()"), self.btnSend_clicked)
def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.nextWorkerInput = ["[]", "1"] self.bestPropScore = -1 self.clear_worker_table() self.DataCollector = JsonReader(self) self.connect(self.DataCollector, QtCore.SIGNAL("received_data"), self.received) self.connect(self.DataCollector, QtCore.SIGNAL("worker_updated"), self.update_worker) self.connect(self.DataCollector, QtCore.SIGNAL("round_started"), self.start_round) self.connect(self.DataCollector, QtCore.SIGNAL("worker_input_changed"), self.update_worker_input) self.connect(self.DataCollector, QtCore.SIGNAL("problem_state_changed"), self.update_problem_state) self.connect(self.DataCollector, QtCore.SIGNAL("all_data"), self.update_all) self.DataCollector.start() # proposition tab QtCore.QObject.connect(self.ui.cbxId, QtCore.SIGNAL("currentIndexChanged(int)"), self.cbxId_indexChanged) self.paintBox = PaintBox(self.ui.tabProposition) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.paintBox.sizePolicy().hasHeightForWidth()) self.paintBox.setSizePolicy(sizePolicy) self.ui.gridLayout_4.addWidget(self.paintBox, 1, 0, 1, 1) # io tab QtCore.QObject.connect(self.ui.btnSend, QtCore.SIGNAL("clicked()"), self.btnSend_clicked) QtCore.QObject.connect(self.ui.edtSend, QtCore.SIGNAL("returnPressed()"), self.btnSend_clicked)
class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.nextWorkerInput = ["[]", "1"] self.bestPropScore = -1 self.clear_worker_table() self.DataCollector = JsonReader(self) self.connect(self.DataCollector, QtCore.SIGNAL("received_data"), self.received) self.connect(self.DataCollector, QtCore.SIGNAL("worker_updated"), self.update_worker) self.connect(self.DataCollector, QtCore.SIGNAL("round_started"), self.start_round) self.connect(self.DataCollector, QtCore.SIGNAL("worker_input_changed"), self.update_worker_input) self.connect(self.DataCollector, QtCore.SIGNAL("problem_state_changed"), self.update_problem_state) self.connect(self.DataCollector, QtCore.SIGNAL("all_data"), self.update_all) self.DataCollector.start() # proposition tab QtCore.QObject.connect(self.ui.cbxId, QtCore.SIGNAL("currentIndexChanged(int)"), self.cbxId_indexChanged) self.paintBox = PaintBox(self.ui.tabProposition) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.paintBox.sizePolicy().hasHeightForWidth()) self.paintBox.setSizePolicy(sizePolicy) self.ui.gridLayout_4.addWidget(self.paintBox, 1, 0, 1, 1) # io tab QtCore.QObject.connect(self.ui.btnSend, QtCore.SIGNAL("clicked()"), self.btnSend_clicked) QtCore.QObject.connect(self.ui.edtSend, QtCore.SIGNAL("returnPressed()"), self.btnSend_clicked) def closeEvent(self, e): self.send(json.dumps({'action': 'quit program'})) self.DataCollector.terminate( ) # TODO: "This function is dangerous and its use is discouraged" self.DataCollector.wait() e.accept() app.exit() ############################### ## main menu / buttons ## ############################### ## io tab def btnSend_clicked(self): msg = self.ui.edtSend.text() self.send(msg) self.ui.edtSend.clear() def cbxId_indexChanged(self, idx): ## DEBUG #sys.stderr.write(">> cbxId_indexChanged %d\n" % idx) #sys.stderr.flush() self.display_proposition_by_cbxId_index(idx) ####################### ## JSON events ## ####################### def update_worker(self, id, proposition, propCaption, propScore, processedScore, problemScore, blocked, working): ## DEBUG #sys.stderr.write("[json] update_worker:\n") #sys.stderr.write(" id : %s\n" % id) #sys.stderr.write(" proposition: %s\n" % proposition) #sys.stderr.write(" caption : %s\n" % propCaption) #sys.stderr.write(" score : %s\n" % propScore) #sys.stderr.flush() if id in self.worker: (workerName, bestProposition, bestPropCaption, bestPropScore) = self.worker[id] self.worker[id] = (workerName, proposition, propCaption, propScore) if (blocked == "no"): ## valid proposition: check if better if propScore > self.bestPropScore: self.bestPropScore = propScore ## auto switch to best proposition newCbxIndex = self.ui.cbxId.findText(id) if newCbxIndex == self.ui.cbxId.currentIndex(): self.display_proposition_by_cbxId_index(newCbxIndex) else: self.ui.cbxId.setCurrentIndex(newCbxIndex) else: if propScore < 0: ## invalid proposition: find and display the next better proposition if 1 == 1 or self.ui.cbxId.text() == id: nextBestId = id nextBestScore = -1 for i in self.worker.keys(): (n, p, c, s) = self.worker[i] if s > nextBestScore: nextBestId = i nextBestScore = s self.bestPropScore = nextBestScore ## switch to next better proposition newCbxIndex = self.ui.cbxId.findText(nextBestId) if newCbxIndex == self.ui.cbxId.currentIndex(): self.display_proposition_by_cbxId_index( newCbxIndex) else: self.ui.cbxId.setCurrentIndex(newCbxIndex) def start_round(self, round): ## DEBUG #sys.stderr.write("[json] start_round:\n") #sys.stderr.write(" round: %s\n" % round) #sys.stderr.flush() ## activate proposition tab self.ui.tabWidget.setCurrentIndex(2) self.paintBox.setSquareSize(int(self.nextWorkerInput[1])) self.ui.lblInput.setText("<html><body>" + "<p><b>Square: </b>" + self.nextWorkerInput[1] + "</p>" + "<p><b>Squares </b>(" + str(self.nextWorkerInput[0].count(",")) + ")<b>: </b>" + self.nextWorkerInput[0].replace(",", ", ") + "</p></body></html>") self.bestPropScore = -1 self.ui.lblWorker.setText("") self.ui.lblScore.setText("") for workerId in self.worker.keys(): (name, proposition, propCaption, propScore) = self.worker[workerId] self.worker[workerId] = (name, "[]", "", 0) self.paintBox.drawProposition("[]") def update_worker_input(self, workerInput): ## DEBUG #sys.stderr.write("[json] update_worker_input:\n") #sys.stderr.write(" workerInput: %s\n" % workerInput) #sys.stderr.flush() self.nextWorkerInput = workerInput def update_problem_state(self, problemState): self.ui.lblState.setText(problemState.replace(",", ", ")) def update_all(self, running, workerList, problemList, problemIdx, round, workerInput, problemState): ## DEBUG #sys.stderr.write("[json] update_all:\n") #sys.stderr.write(" running : %s\n" % running) #sys.stderr.write(" workerList: %s\n" % workerList) #sys.stderr.write(" ...\n") #sys.stderr.flush() self.clear_worker_table() for id, name, group, proposition, caption, score, processedScore, problemScore, blocked, working in workerList: self.add_worker(id, name, group, proposition, caption, score, processedScore, problemScore, blocked, working) self.update_worker_input(workerInput) self.update_problem_state(problemState) if running: self.start_round(round) ############################# ## private functions ## ############################# def send(self, msg): self.ui.txtRecv.appendHtml( "<span style='font-weight:bold;color:red'>send:</span> " + escape_html(msg).rstrip("\n").replace("\n", "<br />")) print(msg) sys.stdout.flush() def received(self, msg): self.ui.txtRecv.appendHtml( "<span style='font-weight:bold;color:blue'>recv:</span> " + escape_html(msg).rstrip("\n").replace("\n", "<br />")) def clear_worker_table(self): self.worker = {} self.ui.cbxId.clear() def add_worker(self, id, name, group, proposition, propCaption, propScore, processedScore, problemScore, blocked, working): self.worker[id] = (name, proposition, propCaption, propScore) self.ui.cbxId.clear() self.ui.cbxId.addItems(sorted(self.worker.keys())) def display_proposition_by_cbxId_index(self, idx): ## DEBUG #sys.stderr.write(">> display_proposition_by_cbxId_index %d\n" % idx) #sys.stderr.flush() if idx > -1: workerId = str(self.ui.cbxId.itemText(idx)) if workerId in self.worker: ## DEBUG #sys.stderr.write(">> %s\n" % workerId) #sys.stderr.flush() (workerName, lastProposition, lastPropCaption, lastPropScore) = self.worker[workerId] self.ui.lblWorker.setText( "<html><body><p style='font-size:12pt'><b>" + workerName + "</b></p></body></html>") self.ui.lblScore.setText( "<html><body><p style='font-size:12pt'><b>Score: </b>" + str(lastPropScore) + "</p></body></html>") self.paintBox.drawProposition(lastProposition)
class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.nextWorkerInput = ["[]", "1"] self.bestPropScore = -1 self.clear_worker_table() self.DataCollector = JsonReader(self) self.connect(self.DataCollector, QtCore.SIGNAL("received_data"), self.received) self.connect(self.DataCollector, QtCore.SIGNAL("worker_updated"), self.update_worker) self.connect(self.DataCollector, QtCore.SIGNAL("round_started"), self.start_round) self.connect(self.DataCollector, QtCore.SIGNAL("worker_input_changed"), self.update_worker_input) self.connect(self.DataCollector, QtCore.SIGNAL("problem_state_changed"), self.update_problem_state) self.connect(self.DataCollector, QtCore.SIGNAL("all_data"), self.update_all) self.DataCollector.start() # proposition tab QtCore.QObject.connect(self.ui.cbxId, QtCore.SIGNAL("currentIndexChanged(int)"), self.cbxId_indexChanged) self.paintBox = PaintBox(self.ui.tabProposition) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.paintBox.sizePolicy().hasHeightForWidth()) self.paintBox.setSizePolicy(sizePolicy) self.ui.gridLayout_4.addWidget(self.paintBox, 1, 0, 1, 1) # io tab QtCore.QObject.connect(self.ui.btnSend, QtCore.SIGNAL("clicked()"), self.btnSend_clicked) QtCore.QObject.connect(self.ui.edtSend, QtCore.SIGNAL("returnPressed()"), self.btnSend_clicked) def closeEvent(self, e): self.send(json.dumps({'action': 'quit program'})) self.DataCollector.terminate() # TODO: "This function is dangerous and its use is discouraged" self.DataCollector.wait() e.accept() app.exit() ############################### ## main menu / buttons ## ############################### ## io tab def btnSend_clicked(self): msg = self.ui.edtSend.text() self.send(msg) self.ui.edtSend.clear() def cbxId_indexChanged(self, idx): ## DEBUG #sys.stderr.write(">> cbxId_indexChanged %d\n" % idx) #sys.stderr.flush() self.display_proposition_by_cbxId_index(idx) ####################### ## JSON events ## ####################### def update_worker(self, id, proposition, propCaption, propScore, processedScore, problemScore, blocked, working): ## DEBUG #sys.stderr.write("[json] update_worker:\n") #sys.stderr.write(" id : %s\n" % id) #sys.stderr.write(" proposition: %s\n" % proposition) #sys.stderr.write(" caption : %s\n" % propCaption) #sys.stderr.write(" score : %s\n" % propScore) #sys.stderr.flush() if id in self.worker: (workerName, bestProposition, bestPropCaption, bestPropScore) = self.worker[id] self.worker[id] = (workerName, proposition, propCaption, propScore) if (blocked == "no"): ## valid proposition: check if better if propScore > self.bestPropScore: self.bestPropScore = propScore ## auto switch to best proposition newCbxIndex = self.ui.cbxId.findText(id) if newCbxIndex == self.ui.cbxId.currentIndex(): self.display_proposition_by_cbxId_index(newCbxIndex) else: self.ui.cbxId.setCurrentIndex(newCbxIndex) else: if propScore < 0: ## invalid proposition: find and display the next better proposition if 1 == 1 or self.ui.cbxId.text() == id: nextBestId = id nextBestScore = -1 for i in self.worker.keys(): (n, p, c, s) = self.worker[i] if s > nextBestScore: nextBestId = i nextBestScore = s self.bestPropScore = nextBestScore ## switch to next better proposition newCbxIndex = self.ui.cbxId.findText(nextBestId) if newCbxIndex == self.ui.cbxId.currentIndex(): self.display_proposition_by_cbxId_index(newCbxIndex) else: self.ui.cbxId.setCurrentIndex(newCbxIndex) def start_round(self, round): ## DEBUG #sys.stderr.write("[json] start_round:\n") #sys.stderr.write(" round: %s\n" % round) #sys.stderr.flush() ## activate proposition tab self.ui.tabWidget.setCurrentIndex(2) self.paintBox.setSquareSize(int(self.nextWorkerInput[1])) self.ui.lblInput.setText("<html><body>" + "<p><b>Square: </b>" + self.nextWorkerInput[1] + "</p>" + "<p><b>Squares </b>(" + str(self.nextWorkerInput[0].count(",")) + ")<b>: </b>" + self.nextWorkerInput[0].replace(",", ", ") + "</p></body></html>") self.bestPropScore = -1 self.ui.lblWorker.setText("") self.ui.lblScore.setText("") for workerId in self.worker.keys(): (name, proposition, propCaption, propScore) = self.worker[workerId] self.worker[workerId] = (name, "[]", "", 0) self.paintBox.drawProposition("[]") def update_worker_input(self, workerInput): ## DEBUG #sys.stderr.write("[json] update_worker_input:\n") #sys.stderr.write(" workerInput: %s\n" % workerInput) #sys.stderr.flush() self.nextWorkerInput = workerInput def update_problem_state(self, problemState): self.ui.lblState.setText(problemState.replace(",", ", ")) def update_all(self, running, workerList, problemList, problemIdx, round, workerInput, problemState): ## DEBUG #sys.stderr.write("[json] update_all:\n") #sys.stderr.write(" running : %s\n" % running) #sys.stderr.write(" workerList: %s\n" % workerList) #sys.stderr.write(" ...\n") #sys.stderr.flush() self.clear_worker_table() for id, name, group, proposition, caption, score, processedScore, problemScore, blocked, working in workerList: self.add_worker(id, name, group, proposition, caption, score, processedScore, problemScore, blocked, working) self.update_worker_input(workerInput) self.update_problem_state(problemState) if running: self.start_round(round) ############################# ## private functions ## ############################# def send(self, msg): self.ui.txtRecv.appendHtml("<span style='font-weight:bold;color:red'>send:</span> " + escape_html(msg).rstrip("\n").replace("\n","<br />")) print(msg) sys.stdout.flush() def received(self, msg): self.ui.txtRecv.appendHtml("<span style='font-weight:bold;color:blue'>recv:</span> " + escape_html(msg).rstrip("\n").replace("\n","<br />")) def clear_worker_table(self): self.worker = {} self.ui.cbxId.clear() def add_worker(self, id, name, group, proposition, propCaption, propScore, processedScore, problemScore, blocked, working): self.worker[id] = (name, proposition, propCaption, propScore) self.ui.cbxId.clear() self.ui.cbxId.addItems(sorted(self.worker.keys())) def display_proposition_by_cbxId_index(self, idx): ## DEBUG #sys.stderr.write(">> display_proposition_by_cbxId_index %d\n" % idx) #sys.stderr.flush() if idx > -1: workerId = str(self.ui.cbxId.itemText(idx)) if workerId in self.worker: ## DEBUG #sys.stderr.write(">> %s\n" % workerId) #sys.stderr.flush() (workerName, lastProposition, lastPropCaption, lastPropScore) = self.worker[workerId] self.ui.lblWorker.setText("<html><body><p style='font-size:12pt'><b>" + workerName + "</b></p></body></html>") self.ui.lblScore.setText("<html><body><p style='font-size:12pt'><b>Score: </b>" + str(lastPropScore) + "</p></body></html>") self.paintBox.drawProposition(lastProposition)