|
@ -9,7 +9,7 @@ import os |
|
|
import webbrowser |
|
|
import webbrowser |
|
|
|
|
|
|
|
|
from functools import partial, lru_cache |
|
|
from functools import partial, lru_cache |
|
|
from typing import NamedTuple, Callable, Optional, TYPE_CHECKING, Union, List, Dict |
|
|
from typing import NamedTuple, Callable, Optional, TYPE_CHECKING, Union, List, Dict, Any |
|
|
|
|
|
|
|
|
from PyQt5.QtGui import (QFont, QColor, QCursor, QPixmap, QStandardItem, |
|
|
from PyQt5.QtGui import (QFont, QColor, QCursor, QPixmap, QStandardItem, |
|
|
QPalette, QIcon, QFontMetrics) |
|
|
QPalette, QIcon, QFontMetrics) |
|
@ -280,7 +280,7 @@ class WindowModalDialog(QDialog, MessageBoxMixin): |
|
|
class WaitingDialog(WindowModalDialog): |
|
|
class WaitingDialog(WindowModalDialog): |
|
|
'''Shows a please wait dialog whilst running a task. It is not |
|
|
'''Shows a please wait dialog whilst running a task. It is not |
|
|
necessary to maintain a reference to this dialog.''' |
|
|
necessary to maintain a reference to this dialog.''' |
|
|
def __init__(self, parent, message, task, on_success=None, on_error=None): |
|
|
def __init__(self, parent: QWidget, message: str, task, on_success=None, on_error=None): |
|
|
assert parent |
|
|
assert parent |
|
|
if isinstance(parent, MessageBoxMixin): |
|
|
if isinstance(parent, MessageBoxMixin): |
|
|
parent = parent.top_level_window() |
|
|
parent = parent.top_level_window() |
|
@ -305,6 +305,26 @@ class WaitingDialog(WindowModalDialog): |
|
|
self.message_label.setText(msg) |
|
|
self.message_label.setText(msg) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BlockingWaitingDialog(WindowModalDialog): |
|
|
|
|
|
"""Shows a waiting dialog whilst running a task. |
|
|
|
|
|
Should be called from the GUI thread. The GUI thread will be blocked while |
|
|
|
|
|
the task is running; the point of the dialog is to provide feedback |
|
|
|
|
|
to the user regarding what is going on. |
|
|
|
|
|
""" |
|
|
|
|
|
def __init__(self, parent: QWidget, message: str, task: Callable[[], Any]): |
|
|
|
|
|
assert parent |
|
|
|
|
|
if isinstance(parent, MessageBoxMixin): |
|
|
|
|
|
parent = parent.top_level_window() |
|
|
|
|
|
WindowModalDialog.__init__(self, parent, _("Please wait")) |
|
|
|
|
|
self.message_label = QLabel(message) |
|
|
|
|
|
vbox = QVBoxLayout(self) |
|
|
|
|
|
vbox.addWidget(self.message_label) |
|
|
|
|
|
self.show() |
|
|
|
|
|
QCoreApplication.processEvents() |
|
|
|
|
|
task() |
|
|
|
|
|
self.accept() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def line_dialog(parent, title, label, ok_label, default=None): |
|
|
def line_dialog(parent, title, label, ok_label, default=None): |
|
|
dialog = WindowModalDialog(parent, title) |
|
|
dialog = WindowModalDialog(parent, title) |
|
|
dialog.setMinimumWidth(500) |
|
|
dialog.setMinimumWidth(500) |
|
|