From 93f655c7cedea27ed31f5323883085eaae7d096b Mon Sep 17 00:00:00 2001 From: Daniel Seiller Date: Sat, 28 Sep 2019 19:28:39 +0200 Subject: [PATCH] feat(Router): finish implementing route computation progress display --- ed_lrr_gui/gui/main.py | 41 +++++++++++++++++------------- ed_lrr_gui/gui/widget_route.py | 46 ++++++++++++++++++---------------- ed_lrr_gui/gui/widget_route.ui | 15 ++++++++--- 3 files changed, 60 insertions(+), 42 deletions(-) diff --git a/ed_lrr_gui/gui/main.py b/ed_lrr_gui/gui/main.py index e873f4f..5a89bae 100644 --- a/ed_lrr_gui/gui/main.py +++ b/ed_lrr_gui/gui/main.py @@ -14,7 +14,7 @@ import ed_lrr_gui import requests as RQ from ed_lrr_gui import Preprocessor, Router, cfg from ed_lrr_gui.gui.ed_lrr import Ui_ED_LRR -from ed_lrr_gui.gui.widget_route import Ui_Route +from ed_lrr_gui.gui.widget_route import Ui_diag_route from PyQt5.QtCore import QObject, Qt, QThread, QTimer, pyqtSignal from PyQt5.QtGui import QColor, QPalette, QIcon from PyQt5.QtWidgets import ( @@ -82,11 +82,17 @@ class Job(QObject): self.job.terminate() self.job = None + def __bool__(self): + return not self.done + + @property def done(self): + if self.job: return (self.job.is_alive() == False) and (self.job.queue.empty()) + return True def interval(self): - while self.job: + while self: try: res = self.job.queue.get(True, 0.1) except queue.Empty: @@ -103,20 +109,16 @@ class RouterJob(Job): super().__init__(app, main_window, Router, *args, **kwargs) self.progress_dialog = ProgressDialog("", "Cancel", 0, 0, self.main_window) self.progress_dialog.setAutoClose(False) - self.progress_dialog.setLabelText("Loading...") + self.progress_dialog.setLabelText("Loading (this will take a bit) ...") self.progress_dialog.setWindowTitle("Loading...") self.progress_dialog.canceled.connect(self.cancel) self.progress_dialog.show() self.start() - def done(self,result): - return - def handle_progess(self, state): if state.get('return') is not None: - self.done(state['return']) self.progress_dialog.close() - WRoute(state['return']) + route_win=WRoute(self.main_window,state['return']) return msg = "Depth: {depth}\nBody: {body}\nQueued: {queue_size}\nDistance remaining: {d_rem:.2f} Ly".format( **state["status"] @@ -212,15 +214,17 @@ class App(QApplication): self.styles[style] = palette self.styles["Light"] = self.style().standardPalette() -class WRoute(Ui_Route): - def __init__(self,hops): +class WRoute(Ui_diag_route): + def __init__(self,main_window,hops): super().__init__() - dialog=QDialog() + dialog=QDialog(main_window) self.setupUi(dialog) for n,item in enumerate(hops): + if item['body'].startswith(item['system']): + item['body']=item['body'].replace(item['system'],"").strip() item = QTreeWidgetItem(self.lst_route, [str(n+1),item['system'],"{body} ({star_type})".format(**item),str(item['distance']), None]) item.setFlags(item.flags() & ~Qt.ItemIsDropEnabled) - dialog.show() + dialog.exec_() class ED_LRR(Ui_ED_LRR): dl_thread = None @@ -343,17 +347,19 @@ class ED_LRR(Ui_ED_LRR): return return path - def route_progress(self, job, state): - print("RP:", job, state) - def compute_route(self): + self.bar_status.showMessage("Resolving systems...") num_resolved=self.resolve_systems() if num_resolved: - if QMessageBox.question(self.main_window,"ED_LRR","Resolved {} systems, are the names correct?".format(num_resolved))==QMessageBox.No: + if QMessageBox.question(self.main_window,"ED_LRR","Resolved {} system(s), are the names correct?".format(num_resolved))==QMessageBox.No: return + self.bar_status.clearMessage() print(self.systems) systems = [str(s["id"]) for s in self.systems] jump_range = self.sb_range.value() + if jump_range==0: + self.error("Your jump range is set to zero, you're not going to get anywhere that way") + return mode = self.cmb_mode.currentText() primary = self.chk_primary.isChecked() keep_first = self.chk_permute_keep_first.isChecked() @@ -385,7 +391,8 @@ class ED_LRR(Ui_ED_LRR): path, precomp, ) - if (self.current_job is None) or self.current_job.done(): + if not self.current_job: + self.bar_status.showMessage("Computing Route...") self.current_job = RouterJob( self.app, self.main_window, diff --git a/ed_lrr_gui/gui/widget_route.py b/ed_lrr_gui/gui/widget_route.py index b0f2b75..5a2eb15 100644 --- a/ed_lrr_gui/gui/widget_route.py +++ b/ed_lrr_gui/gui/widget_route.py @@ -10,16 +10,16 @@ from PyQt5 import QtCore, QtGui, QtWidgets -class Ui_Dialog(object): - def setupUi(self, Dialog): - Dialog.setObjectName("Dialog") - Dialog.setWindowModality(QtCore.Qt.WindowModal) - Dialog.resize(430, 300) - self.layout_main = QtWidgets.QGridLayout(Dialog) +class Ui_diag_route(object): + def setupUi(self, diag_route): + diag_route.setObjectName("diag_route") + diag_route.setWindowModality(QtCore.Qt.WindowModal) + diag_route.resize(430, 300) + self.layout_main = QtWidgets.QGridLayout(diag_route) self.layout_main.setObjectName("layout_main") self.layout_top = QtWidgets.QGridLayout() self.layout_top.setObjectName("layout_top") - self.lst_route = QtWidgets.QTreeWidget(Dialog) + self.lst_route = QtWidgets.QTreeWidget(diag_route) self.lst_route.setProperty("showDropIndicator", False) self.lst_route.setDefaultDropAction(QtCore.Qt.IgnoreAction) self.lst_route.setAlternatingRowColors(True) @@ -33,23 +33,27 @@ class Ui_Dialog(object): self.layout_main.addLayout(self.layout_top, 0, 0, 1, 1) self.layout_bottom = QtWidgets.QGridLayout() self.layout_bottom.setObjectName("layout_bottom") - self.chk_copy = QtWidgets.QCheckBox(Dialog) + self.chk_copy = QtWidgets.QCheckBox(diag_route) self.chk_copy.setObjectName("chk_copy") self.layout_bottom.addWidget(self.chk_copy, 1, 0, 1, 1) - self.pushButton = QtWidgets.QPushButton(Dialog) - self.pushButton.setObjectName("pushButton") - self.layout_bottom.addWidget(self.pushButton, 1, 1, 1, 1) + self.btn_close = QtWidgets.QPushButton(diag_route) + self.btn_close.setObjectName("btn_close") + self.layout_bottom.addWidget(self.btn_close, 1, 2, 1, 1) + self.btn_export = QtWidgets.QPushButton(diag_route) + self.btn_export.setObjectName("btn_export") + self.layout_bottom.addWidget(self.btn_export, 1, 1, 1, 1) self.layout_main.addLayout(self.layout_bottom, 1, 0, 1, 1) - self.retranslateUi(Dialog) - QtCore.QMetaObject.connectSlotsByName(Dialog) + self.retranslateUi(diag_route) + QtCore.QMetaObject.connectSlotsByName(diag_route) - def retranslateUi(self, Dialog): + def retranslateUi(self, diag_route): _translate = QtCore.QCoreApplication.translate - Dialog.setWindowTitle(_translate("Dialog", "Route")) - self.lst_route.headerItem().setText(0, _translate("Dialog", "Num")) - self.lst_route.headerItem().setText(1, _translate("Dialog", "System")) - self.lst_route.headerItem().setText(2, _translate("Dialog", "Body")) - self.lst_route.headerItem().setText(3, _translate("Dialog", "Distance (Ls)")) - self.chk_copy.setText(_translate("Dialog", "Auto-copy next hop to clipboard")) - self.pushButton.setText(_translate("Dialog", "Close")) + diag_route.setWindowTitle(_translate("diag_route", "Route")) + self.lst_route.headerItem().setText(0, _translate("diag_route", "Num")) + self.lst_route.headerItem().setText(1, _translate("diag_route", "System")) + self.lst_route.headerItem().setText(2, _translate("diag_route", "Body")) + self.lst_route.headerItem().setText(3, _translate("diag_route", "Distance (Ls)")) + self.chk_copy.setText(_translate("diag_route", "Auto-copy next hop to clipboard")) + self.btn_close.setText(_translate("diag_route", "Close")) + self.btn_export.setText(_translate("diag_route", "Export")) diff --git a/ed_lrr_gui/gui/widget_route.ui b/ed_lrr_gui/gui/widget_route.ui index e9cd562..44aa952 100644 --- a/ed_lrr_gui/gui/widget_route.ui +++ b/ed_lrr_gui/gui/widget_route.ui @@ -1,7 +1,7 @@ - Dialog - + diag_route + Qt::WindowModal @@ -78,13 +78,20 @@ - - + + Close + + + + Export + + +