Publisher: Keep track about current context and fix context selection widget (#4892)

* keep track about last context so it can be updated on context change

* don't use '_asset_name' attribute for validation of selected asset

* use current context after publisher window close
This commit is contained in:
Jakub Trllo 2023-04-24 17:36:26 +02:00 committed by GitHub
parent ed1fd82ff2
commit ebcd48d138
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 1 deletions

View file

@ -282,6 +282,9 @@ class CreateWidget(QtWidgets.QWidget):
thumbnail_widget.thumbnail_created.connect(self._on_thumbnail_create) thumbnail_widget.thumbnail_created.connect(self._on_thumbnail_create)
thumbnail_widget.thumbnail_cleared.connect(self._on_thumbnail_clear) thumbnail_widget.thumbnail_cleared.connect(self._on_thumbnail_clear)
controller.event_system.add_callback(
"main.window.closed", self._on_main_window_close
)
controller.event_system.add_callback( controller.event_system.add_callback(
"plugins.refresh.finished", self._on_plugins_refresh "plugins.refresh.finished", self._on_plugins_refresh
) )
@ -316,6 +319,10 @@ class CreateWidget(QtWidgets.QWidget):
self._first_show = True self._first_show = True
self._last_thumbnail_path = None self._last_thumbnail_path = None
self._last_current_context_asset = None
self._last_current_context_task = None
self._use_current_context = True
@property @property
def current_asset_name(self): def current_asset_name(self):
return self._controller.current_asset_name return self._controller.current_asset_name
@ -356,12 +363,39 @@ class CreateWidget(QtWidgets.QWidget):
if check_prereq: if check_prereq:
self._invalidate_prereq() self._invalidate_prereq()
def _on_main_window_close(self):
"""Publisher window was closed."""
# Use current context on next refresh
self._use_current_context = True
def refresh(self): def refresh(self):
current_asset_name = self._controller.current_asset_name
current_task_name = self._controller.current_task_name
# Get context before refresh to keep selection of asset and # Get context before refresh to keep selection of asset and
# task widgets # task widgets
asset_name = self._get_asset_name() asset_name = self._get_asset_name()
task_name = self._get_task_name() task_name = self._get_task_name()
# Replace by current context if last loaded context was
# 'current context' before reset
if (
self._use_current_context
or (
self._last_current_context_asset
and asset_name == self._last_current_context_asset
and task_name == self._last_current_context_task
)
):
asset_name = current_asset_name
task_name = current_task_name
# Store values for future refresh
self._last_current_context_asset = current_asset_name
self._last_current_context_task = current_task_name
self._use_current_context = False
self._prereq_available = False self._prereq_available = False
# Disable context widget so refresh of asset will use context asset # Disable context widget so refresh of asset will use context asset
@ -398,7 +432,10 @@ class CreateWidget(QtWidgets.QWidget):
prereq_available = False prereq_available = False
creator_btn_tooltips.append("Creator is not selected") creator_btn_tooltips.append("Creator is not selected")
if self._context_change_is_enabled() and self._asset_name is None: if (
self._context_change_is_enabled()
and self._get_asset_name() is None
):
# QUESTION how to handle invalid asset? # QUESTION how to handle invalid asset?
prereq_available = False prereq_available = False
creator_btn_tooltips.append("Context is not selected") creator_btn_tooltips.append("Context is not selected")

View file

@ -406,6 +406,9 @@ class PublisherWindow(QtWidgets.QDialog):
self._comment_input.setText("") # clear comment self._comment_input.setText("") # clear comment
self._reset_on_show = True self._reset_on_show = True
self._controller.clear_thumbnail_temp_dir_path() self._controller.clear_thumbnail_temp_dir_path()
# Trigger custom event that should be captured only in UI
# - backend (controller) must not be dependent on this event topic!!!
self._controller.event_system.emit("main.window.closed", {}, "window")
super(PublisherWindow, self).closeEvent(event) super(PublisherWindow, self).closeEvent(event)
def leaveEvent(self, event): def leaveEvent(self, event):