empty dialog has Ok btn

This commit is contained in:
iLLiCiTiT 2021-10-19 18:20:26 +02:00
parent 5026d300bb
commit 7d3f4d315f

View file

@ -30,41 +30,59 @@ class ExperimentalDialog(QtWidgets.QDialog):
icon = QtGui.QIcon(app_icon_path()) icon = QtGui.QIcon(app_icon_path())
self.setWindowIcon(icon) self.setWindowIcon(icon)
empty_widget = QtWidgets.QWidget(self)
empty_label = QtWidgets.QLabel( empty_label = QtWidgets.QLabel(
"There are no experimental tools available.", self "There are no experimental tools available...", empty_widget
) )
empty_btns_layout = QtWidgets.QHBoxLayout()
ok_btn = QtWidgets.QPushButton("OK", empty_widget)
empty_btns_layout.setContentsMargins(0, 0, 0, 0)
empty_btns_layout.addStretch(1)
empty_btns_layout.addWidget(ok_btn, 0)
empty_layout = QtWidgets.QVBoxLayout(empty_widget)
empty_layout.setContentsMargins(0, 0, 0, 0)
empty_layout.addWidget(empty_label)
empty_layout.addStretch(1)
empty_layout.addLayout(empty_btns_layout)
content_widget = QtWidgets.QWidget(self) content_widget = QtWidgets.QWidget(self)
content_layout = QtWidgets.QHBoxLayout(content_widget) content_layout = QtWidgets.QVBoxLayout(content_widget)
content_layout.setContentsMargins(0, 0, 0, 0) content_layout.setContentsMargins(0, 0, 0, 0)
experimental_tools = ExperimentalTools() experimental_tools = ExperimentalTools()
layout = QtWidgets.QHBoxLayout(self) layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(empty_label) layout.addWidget(empty_widget, 1)
layout.addWidget(content_widget, 1) layout.addWidget(content_widget, 1)
refresh_timer = QtCore.QTimer() refresh_timer = QtCore.QTimer()
refresh_timer.setInterval(self.refresh_interval) refresh_timer.setInterval(self.refresh_interval)
refresh_timer.timeout.connect(self._on_refresh_timeout) refresh_timer.timeout.connect(self._on_refresh_timeout)
self._empty_label = empty_label ok_btn.clicked.connect(self._on_ok_click)
self._empty_widget = empty_widget
self._content_widget = content_widget self._content_widget = content_widget
self._content_layout = content_layout self._content_layout = content_layout
self._experimental_tools = experimental_tools self._experimental_tools = experimental_tools
self._buttons_by_tool_identifier = {} self._buttons_by_tool_identifier = {}
self._is_refreshing = False
self._refresh_on_active = True
self._window_is_active = False
self._refresh_timer = refresh_timer self._refresh_timer = refresh_timer
def refresh(self): # Is dialog first shown
if self._is_refreshing: self._first_show = True
return # Trigger refresh when window get's activity
self._is_refreshing = True self._refresh_on_active = True
# Is window active
self._window_is_active = False
def refresh(self):
self._experimental_tools.refresh_availability() self._experimental_tools.refresh_availability()
buttons_to_remove = set(self._buttons_by_tool_identifier.keys()) buttons_to_remove = set(self._buttons_by_tool_identifier.keys())
@ -100,11 +118,18 @@ class ExperimentalDialog(QtWidgets.QDialog):
self._content_layout.takeAt(idx) self._content_layout.takeAt(idx)
button.deleteLater() button.deleteLater()
self._empty_label.setVisible( self._set_visibility()
len(self._buttons_by_tool_identifier) == 0
)
self._is_refreshing = False def _is_content_visible(self):
return len(self._buttons_by_tool_identifier) > 0
def _set_visibility(self):
content_visible = self._is_content_visible()
self._content_widget.setVisible(content_visible)
self._empty_widget.setVisible(not content_visible)
def _on_ok_click(self):
self.close()
def _on_btn_trigger(self, identifier): def _on_btn_trigger(self, identifier):
tool = self._experimental_tools.tools_by_identifier.get(identifier) tool = self._experimental_tools.tools_by_identifier.get(identifier)
@ -123,6 +148,14 @@ class ExperimentalDialog(QtWidgets.QDialog):
elif not self._refresh_timer.isActive(): elif not self._refresh_timer.isActive():
self._refresh_timer.start() self._refresh_timer.start()
if self._first_show:
self._first_show = False
# Resize dialog if there is not content
if not self._is_content_visible():
size = self.size()
size.setWidth(size.width() + size.width() / 3)
self.resize(size)
def changeEvent(self, event): def changeEvent(self, event):
if event.type() == QtCore.QEvent.ActivationChange: if event.type() == QtCore.QEvent.ActivationChange:
self._window_is_active = self.isActiveWindow() self._window_is_active = self.isActiveWindow()