Skip to content

Commit ab3a50f

Browse files
Remove bad smell from progress dialog and handle ESC key
Fix GNS3#1120
1 parent 71d3e8d commit ab3a50f

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

gns3/main_window.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def __init__(self, parent=None):
9494

9595
MainWindow._instance = self
9696
self._settings = {}
97-
HTTPClient.setProgressCallback(Progress().instance())
97+
HTTPClient.setProgressCallback(Progress.instance(self))
9898

9999
self._project = None
100100
self._createTemporaryProject()

gns3/progress.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,11 @@ class Progress(QtCore.QObject):
3434
remove_query_signal = QtCore.Signal(str)
3535
progress_signal = QtCore.Signal(str, int, int)
3636

37-
def __init__(self, min_duration=1000):
37+
def __init__(self, parent, min_duration=1000):
3838

39-
super().__init__()
39+
super().__init__(parent)
4040
self._progress_dialog = None
4141

42-
from .main_window import MainWindow
43-
self._parent = MainWindow.instance()
44-
4542
# Timer called for refreshing the progress dialog status
4643
self._rtimer = QtCore.QTimer()
4744
self._rtimer.timeout.connect(self.update)
@@ -98,6 +95,10 @@ def _cancelSlot(self):
9895
for query in self._queries.copy().values():
9996
query["response"].abort()
10097

98+
def _rejectSlot(self):
99+
self._progress_dialog = None
100+
self._cancelSlot()
101+
101102
def update(self):
102103
if len(self._queries) == 0 and (time.time() * 1000) >= self._display_start_time + self._minimum_duration:
103104
self.hide()
@@ -106,8 +107,9 @@ def update(self):
106107

107108
def show(self):
108109
if self._progress_dialog is None or self._progress_dialog.wasCanceled():
109-
progress_dialog = QtWidgets.QProgressDialog("Waiting for server response", None, 0, 0, self._parent)
110+
progress_dialog = QtWidgets.QProgressDialog("Waiting for server response", None, 0, 0, self.parent())
110111
progress_dialog.canceled.connect(self._cancelSlot)
112+
progress_dialog.rejected.connect(self._rejectSlot)
111113
progress_dialog.setWindowModality(Qt.Qt.ApplicationModal)
112114
progress_dialog.setWindowTitle("Please wait")
113115
progress_dialog.setMinimumDuration(self._minimum_duration)
@@ -180,13 +182,14 @@ def context(self, **kwargs):
180182
self._cancel_button_text = old_cancel_button_text
181183

182184
@staticmethod
183-
def instance():
185+
def instance(parent=None):
184186
"""
185187
Singleton to return only one instance of Progress.
186188
187189
:returns: instance of Progress
188190
"""
189191

190192
if not hasattr(Progress, "_instance") or Progress._instance is None:
191-
Progress._instance = Progress()
193+
Progress._instance = Progress(parent)
192194
return Progress._instance
195+

tests/test_progress.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020

2121
def test_context():
22-
progress = Progress(min_duration=500)
22+
progress = Progress(None, min_duration=500)
2323
assert progress._minimum_duration == 500
2424
assert progress._enable
2525

0 commit comments

Comments
 (0)