SyncServer - fix icon showing

Fixed better reaction on changes in Local Settings
This commit is contained in:
Petr Kalis 2021-05-04 14:27:16 +02:00
parent bf9151103b
commit 8b1a32b2e2
4 changed files with 39 additions and 14 deletions

View file

@ -1,6 +1,5 @@
import os
from Qt import QtCore, QtWidgets, QtGui
from avalon.vendor import qtawesome
from openpype.lib import PypeLogger
from openpype.modules.sync_server.tray import lib
@ -15,7 +14,10 @@ class PriorityDelegate(QtWidgets.QStyledItemDelegate):
if option.widget.selectionModel().isSelected(index) or \
option.state & QtWidgets.QStyle.State_MouseOver:
edit_icon = qtawesome.icon("fa.edit", color="white")
edit_icon = index.data(lib.EditIconRole)
if not edit_icon:
return
state = QtGui.QIcon.On
mode = QtGui.QIcon.Selected

View file

@ -25,6 +25,7 @@ DateRole = QtCore.Qt.UserRole + 6
FailedRole = QtCore.Qt.UserRole + 8
HeaderNameRole = QtCore.Qt.UserRole + 10
FullItemRole = QtCore.Qt.UserRole + 12
EditIconRole = QtCore.Qt.UserRole + 14
@six.add_metaclass(abc.ABCMeta)

View file

@ -65,6 +65,14 @@ class _SyncRepresentationModel(QtCore.QAbstractTableModel):
def column_filtering(self):
return self._column_filtering
@property
def is_running(self):
return self._is_running
@is_running.setter
def is_running(self, state):
self._is_running = state
def rowCount(self, _index):
return len(self._data)
@ -126,7 +134,7 @@ class _SyncRepresentationModel(QtCore.QAbstractTableModel):
actually queried (scrolled a couple of times to list more
than single page of records)
"""
if self.is_editing:
if self.is_editing or not self.is_running:
return
self.refresh_started.emit()
self.beginResetModel()
@ -422,8 +430,8 @@ class SyncRepresentationSummaryModel(_SyncRepresentationModel):
status = attr.ib(default=None)
path = attr.ib(default=None)
def __init__(self, sync_server, header, project=None):
super(SyncRepresentationSummaryModel, self).__init__()
def __init__(self, sync_server, header, project=None, parent=None):
super(SyncRepresentationSummaryModel, self).__init__(parent=parent)
self._header = header
self._data = []
self._project = project
@ -431,13 +439,13 @@ class SyncRepresentationSummaryModel(_SyncRepresentationModel):
self._total_records = 0 # how many documents query actually found
self._word_filter = None
self._column_filtering = {}
self._is_running = False
self.edit_icon = qtawesome.icon("fa.edit", color="white")
self.is_editing = False
self._word_filter = None
self._initialized = False
if not self._project or self._project == lib.DUMMY_PROJECT:
return
@ -500,6 +508,11 @@ class SyncRepresentationSummaryModel(_SyncRepresentationModel):
return ""
return attr.asdict(item)[self._header[index.column()]]
if role == lib.EditIconRole:
if self.can_edit and header_value in self.EDITABLE_COLUMNS:
return self.edit_icon
if role == Qt.UserRole:
return item._id
@ -960,10 +973,11 @@ class SyncRepresentationDetailModel(_SyncRepresentationModel):
self._total_records = 0 # how many documents query actually found
self._word_filter = None
self._id = _id
self._initialized = False
self._column_filtering = {}
self._is_running = False
self.is_editing = False
self.edit_icon = qtawesome.icon("fa.edit", color="white")
self.sync_server = sync_server
# TODO think about admin mode
@ -1016,11 +1030,17 @@ class SyncRepresentationDetailModel(_SyncRepresentationModel):
return item.status == lib.STATUS[2] and \
item.remote_progress < 1
if role == Qt.DisplayRole:
if role in (Qt.DisplayRole, Qt.EditRole):
# because of ImageDelegate
if header_value in ['remote_site', 'local_site']:
return ""
return attr.asdict(item)[self._header[index.column()]]
if role == lib.EditIconRole:
if self.can_edit and header_value in self.EDITABLE_COLUMNS:
return self.edit_icon
if role == Qt.UserRole:
return item._id

View file

@ -185,7 +185,7 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
_id = self.model.data(index, Qt.UserRole)
detail_window = SyncServerDetailWindow(
self.sync_server, _id, self.model.project)
self.sync_server, _id, self.model.project, parent=self)
detail_window.exec()
def _on_context_menu(self, point):
@ -489,7 +489,8 @@ class SyncRepresentationSummaryWidget(_SyncRepresentationWidget):
table_view = QtWidgets.QTableView()
headers = [item[0] for item in self.default_widths]
model = SyncRepresentationSummaryModel(sync_server, headers, project)
model = SyncRepresentationSummaryModel(sync_server, headers, project,
parent=self)
table_view.setModel(model)
table_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
table_view.setSelectionMode(
@ -510,10 +511,9 @@ class SyncRepresentationSummaryWidget(_SyncRepresentationWidget):
delegate = delegates.ImageDelegate(self)
table_view.setItemDelegateForColumn(column, delegate)
if model.can_edit:
column = table_view.model().get_header_index("priority")
priority_delegate = delegates.PriorityDelegate(self)
table_view.setItemDelegateForColumn(column, priority_delegate)
column = table_view.model().get_header_index("priority")
priority_delegate = delegates.PriorityDelegate(self)
table_view.setItemDelegateForColumn(column, priority_delegate)
layout = QtWidgets.QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
@ -653,6 +653,8 @@ class SyncRepresentationDetailWidget(_SyncRepresentationWidget):
model = SyncRepresentationDetailModel(sync_server, headers, _id,
project)
model.is_running = True
table_view.setModel(model)
table_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
table_view.setSelectionMode(