mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
removed artist view, model and delagate
This commit is contained in:
parent
266dc08a84
commit
d3f09293d3
4 changed files with 2 additions and 417 deletions
|
|
@ -522,168 +522,6 @@ class PluginDelegate(QtWidgets.QStyledItemDelegate):
|
|||
return QtCore.QSize(option.rect.width(), 20)
|
||||
|
||||
|
||||
class ArtistDelegate(QtWidgets.QStyledItemDelegate):
|
||||
"""Delegate used on Artist page"""
|
||||
|
||||
def paint(self, painter, option, index):
|
||||
"""Paint checkbox and text
|
||||
|
||||
_______________________________________________
|
||||
| | label | duration |arrow|
|
||||
|toggle |_____________________| | to |
|
||||
| | families | |persp|
|
||||
|_______|_____________________|___________|_____|
|
||||
|
||||
"""
|
||||
|
||||
# Layout
|
||||
spacing = 10
|
||||
|
||||
body_rect = QtCore.QRectF(option.rect).adjusted(2, 2, -8, -2)
|
||||
content_rect = body_rect.adjusted(5, 5, -5, -5)
|
||||
|
||||
perspective_rect = QtCore.QRectF(body_rect)
|
||||
perspective_rect.setWidth(35)
|
||||
perspective_rect.setHeight(35)
|
||||
perspective_rect.translate(
|
||||
content_rect.width() - (perspective_rect.width() / 2) + 10,
|
||||
(content_rect.height() / 2) - (perspective_rect.height() / 2)
|
||||
)
|
||||
|
||||
toggle_rect = QtCore.QRectF(body_rect)
|
||||
toggle_rect.setWidth(7)
|
||||
toggle_rect.adjust(1, 1, 0, -1)
|
||||
|
||||
icon_rect = QtCore.QRectF(content_rect)
|
||||
icon_rect.translate(toggle_rect.width() + spacing, 3)
|
||||
icon_rect.setWidth(35)
|
||||
icon_rect.setHeight(35)
|
||||
|
||||
duration_rect = QtCore.QRectF(content_rect)
|
||||
duration_rect.translate(content_rect.width() - 50, 0)
|
||||
|
||||
# Colors
|
||||
check_color = colors["idle"]
|
||||
|
||||
publish_states = index.data(Roles.PublishFlagsRole)
|
||||
if publish_states is None:
|
||||
return
|
||||
if publish_states & InstanceStates.InProgress:
|
||||
check_color = colors["active"]
|
||||
|
||||
elif publish_states & InstanceStates.HasError:
|
||||
check_color = colors["error"]
|
||||
|
||||
elif publish_states & InstanceStates.HasWarning:
|
||||
check_color = colors["warning"]
|
||||
|
||||
elif publish_states & InstanceStates.HasFinished:
|
||||
check_color = colors["ok"]
|
||||
|
||||
elif not index.data(Roles.IsEnabledRole):
|
||||
check_color = colors["inactive"]
|
||||
|
||||
perspective_icon = icons["angle-right"]
|
||||
|
||||
if not index.data(QtCore.Qt.CheckStateRole):
|
||||
font_color = colors["inactive"]
|
||||
else:
|
||||
font_color = colors["idle"]
|
||||
|
||||
if (
|
||||
option.state
|
||||
& (
|
||||
QtWidgets.QStyle.State_MouseOver
|
||||
or QtWidgets.QStyle.State_Selected
|
||||
)
|
||||
):
|
||||
perspective_color = colors["idle"]
|
||||
else:
|
||||
perspective_color = colors["inactive"]
|
||||
# Maintan reference to state, so we can restore it once we're done
|
||||
painter.save()
|
||||
|
||||
# Draw background
|
||||
painter.fillRect(body_rect, colors["hover"])
|
||||
|
||||
# Draw icon
|
||||
icon = index.data(QtCore.Qt.DecorationRole)
|
||||
|
||||
painter.setFont(fonts["largeAwesome"])
|
||||
painter.setPen(QtGui.QPen(font_color))
|
||||
painter.drawText(icon_rect, icon)
|
||||
|
||||
# Draw label
|
||||
painter.setFont(fonts["h3"])
|
||||
label_rect = QtCore.QRectF(content_rect)
|
||||
label_x_offset = icon_rect.width() + spacing
|
||||
label_rect.translate(
|
||||
label_x_offset,
|
||||
0
|
||||
)
|
||||
metrics = painter.fontMetrics()
|
||||
label_rect.setHeight(metrics.lineSpacing())
|
||||
label_rect.setWidth(
|
||||
content_rect.width()
|
||||
- label_x_offset
|
||||
- perspective_rect.width()
|
||||
)
|
||||
# Elide label
|
||||
label = index.data(QtCore.Qt.DisplayRole)
|
||||
label = metrics.elidedText(
|
||||
label, QtCore.Qt.ElideRight, label_rect.width()
|
||||
)
|
||||
painter.drawText(label_rect, label)
|
||||
|
||||
# Draw families
|
||||
painter.setFont(fonts["h5"])
|
||||
painter.setPen(QtGui.QPen(colors["inactive"]))
|
||||
|
||||
families = ", ".join(index.data(Roles.FamiliesRole))
|
||||
families = painter.fontMetrics().elidedText(
|
||||
families, QtCore.Qt.ElideRight, label_rect.width()
|
||||
)
|
||||
|
||||
families_rect = QtCore.QRectF(label_rect)
|
||||
families_rect.translate(0, label_rect.height() + spacing)
|
||||
|
||||
painter.drawText(families_rect, families)
|
||||
|
||||
painter.setFont(fonts["largeAwesome"])
|
||||
painter.setPen(QtGui.QPen(perspective_color))
|
||||
painter.drawText(perspective_rect, perspective_icon)
|
||||
|
||||
# Draw checkbox
|
||||
pen = QtGui.QPen(check_color, 1)
|
||||
painter.setPen(pen)
|
||||
|
||||
if index.data(Roles.IsOptionalRole):
|
||||
painter.drawRect(toggle_rect)
|
||||
|
||||
if index.data(QtCore.Qt.CheckStateRole):
|
||||
painter.fillRect(toggle_rect, check_color)
|
||||
|
||||
elif (
|
||||
index.data(QtCore.Qt.CheckStateRole)
|
||||
):
|
||||
painter.fillRect(toggle_rect, check_color)
|
||||
|
||||
if option.state & QtWidgets.QStyle.State_MouseOver:
|
||||
painter.fillRect(body_rect, colors["hover"])
|
||||
|
||||
if option.state & QtWidgets.QStyle.State_Selected:
|
||||
painter.fillRect(body_rect, colors["selected"])
|
||||
|
||||
painter.setPen(colors["outline"])
|
||||
painter.drawRect(body_rect)
|
||||
|
||||
# Ok, we're done, tidy up.
|
||||
painter.restore()
|
||||
|
||||
def sizeHint(self, option, index):
|
||||
return QtCore.QSize(option.rect.width(), 80)
|
||||
|
||||
|
||||
class TerminalItem(QtWidgets.QStyledItemDelegate):
|
||||
"""Delegate used exclusively for the Terminal"""
|
||||
|
||||
|
|
|
|||
|
|
@ -842,164 +842,6 @@ class InstanceModel(QtGui.QStandardItemModel):
|
|||
)
|
||||
|
||||
|
||||
class ArtistProxy(QtCore.QAbstractProxyModel):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.mapping_from = []
|
||||
self.mapping_to = []
|
||||
super(ArtistProxy, self).__init__(*args, **kwargs)
|
||||
|
||||
def on_rows_inserted(self, parent_index, from_row, to_row):
|
||||
if not parent_index.isValid():
|
||||
return
|
||||
|
||||
parent_row = parent_index.row()
|
||||
if parent_row >= len(self.mapping_from):
|
||||
self.mapping_from.append(list())
|
||||
|
||||
new_from = None
|
||||
new_to = None
|
||||
for row_num in range(from_row, to_row + 1):
|
||||
new_row = len(self.mapping_to)
|
||||
new_to = new_row
|
||||
if new_from is None:
|
||||
new_from = new_row
|
||||
|
||||
self.mapping_from[parent_row].insert(row_num, new_row)
|
||||
self.mapping_to.insert(new_row, [parent_row, row_num])
|
||||
|
||||
self.rowsInserted.emit(self.parent(), new_from, new_to + 1)
|
||||
|
||||
def _remove_rows(self, parent_row, from_row, to_row):
|
||||
increment_num = self.mapping_from[parent_row][from_row]
|
||||
|
||||
to_end_index = len(self.mapping_from[parent_row]) - 1
|
||||
for _idx in range(0, parent_row):
|
||||
to_end_index += len(self.mapping_from[_idx])
|
||||
|
||||
removed_rows = 0
|
||||
_emit_last = None
|
||||
for row_num in reversed(range(from_row, to_row + 1)):
|
||||
row = self.mapping_from[parent_row].pop(row_num)
|
||||
_emit_last = row
|
||||
removed_rows += 1
|
||||
|
||||
_emit_first = int(increment_num)
|
||||
mapping_from_len = len(self.mapping_from)
|
||||
mapping_from_parent_len = len(self.mapping_from[parent_row])
|
||||
if parent_row < mapping_from_len:
|
||||
for idx in range(from_row, mapping_from_parent_len):
|
||||
self.mapping_from[parent_row][idx] = increment_num
|
||||
increment_num += 1
|
||||
|
||||
if parent_row < mapping_from_len - 1:
|
||||
for idx_i in range(parent_row + 1, mapping_from_len):
|
||||
sub_values = self.mapping_from[idx_i]
|
||||
if not sub_values:
|
||||
continue
|
||||
|
||||
for idx_j in range(0, len(sub_values)):
|
||||
self.mapping_from[idx_i][idx_j] = increment_num
|
||||
increment_num += 1
|
||||
|
||||
for idx in range(removed_rows):
|
||||
self.mapping_to.pop(to_end_index - idx)
|
||||
|
||||
return (_emit_first, _emit_last)
|
||||
|
||||
def on_rows_removed(self, parent_index, from_row, to_row):
|
||||
if parent_index.isValid():
|
||||
parent_row = parent_index.row()
|
||||
_emit_first, _emit_last = self._remove_rows(
|
||||
parent_row, from_row, to_row
|
||||
)
|
||||
self.rowsRemoved.emit(self.parent(), _emit_first, _emit_last)
|
||||
|
||||
else:
|
||||
removed_rows = False
|
||||
emit_first = None
|
||||
emit_last = None
|
||||
for row_num in reversed(range(from_row, to_row + 1)):
|
||||
remaining_rows = self.mapping_from[row_num]
|
||||
if remaining_rows:
|
||||
removed_rows = True
|
||||
_emit_first, _emit_last = self._remove_rows(
|
||||
row_num, 0, len(remaining_rows) - 1
|
||||
)
|
||||
if emit_first is None:
|
||||
emit_first = _emit_first
|
||||
emit_last = _emit_last
|
||||
|
||||
self.mapping_from.pop(row_num)
|
||||
|
||||
diff = to_row - from_row + 1
|
||||
mapping_to_len = len(self.mapping_to)
|
||||
if from_row < mapping_to_len:
|
||||
for idx in range(from_row, mapping_to_len):
|
||||
self.mapping_to[idx][0] -= diff
|
||||
|
||||
if removed_rows:
|
||||
self.rowsRemoved.emit(self.parent(), emit_first, emit_last)
|
||||
|
||||
def on_reset(self):
|
||||
self.modelReset.emit()
|
||||
self.mapping_from = []
|
||||
self.mapping_to = []
|
||||
|
||||
def setSourceModel(self, source_model):
|
||||
super(ArtistProxy, self).setSourceModel(source_model)
|
||||
source_model.rowsInserted.connect(self.on_rows_inserted)
|
||||
source_model.rowsRemoved.connect(self.on_rows_removed)
|
||||
source_model.modelReset.connect(self.on_reset)
|
||||
source_model.dataChanged.connect(self.on_data_changed)
|
||||
|
||||
def on_data_changed(self, from_index, to_index, roles=None):
|
||||
proxy_from_index = self.mapFromSource(from_index)
|
||||
if from_index == to_index:
|
||||
proxy_to_index = proxy_from_index
|
||||
else:
|
||||
proxy_to_index = self.mapFromSource(to_index)
|
||||
|
||||
args = [proxy_from_index, proxy_to_index]
|
||||
if Qt.__binding__ not in ("PyQt4", "PySide"):
|
||||
args.append(roles or [])
|
||||
self.dataChanged.emit(*args)
|
||||
|
||||
def columnCount(self, parent=QtCore.QModelIndex()):
|
||||
# This is not right for global proxy, but in this case it is enough
|
||||
return self.sourceModel().columnCount()
|
||||
|
||||
def rowCount(self, parent=QtCore.QModelIndex()):
|
||||
if parent.isValid():
|
||||
return 0
|
||||
return len(self.mapping_to)
|
||||
|
||||
def mapFromSource(self, index):
|
||||
if not index.isValid():
|
||||
return QtCore.QModelIndex()
|
||||
|
||||
parent_index = index.parent()
|
||||
if not parent_index.isValid():
|
||||
return QtCore.QModelIndex()
|
||||
|
||||
parent_idx = self.mapping_from[parent_index.row()]
|
||||
my_row = parent_idx[index.row()]
|
||||
return self.index(my_row, index.column())
|
||||
|
||||
def mapToSource(self, index):
|
||||
if not index.isValid() or index.row() > len(self.mapping_to):
|
||||
return self.sourceModel().index(index.row(), index.column())
|
||||
|
||||
parent_row, item_row = self.mapping_to[index.row()]
|
||||
parent_index = self.sourceModel().index(parent_row, 0)
|
||||
return self.sourceModel().index(item_row, 0, parent_index)
|
||||
|
||||
def index(self, row, column, parent=QtCore.QModelIndex()):
|
||||
return self.createIndex(row, column, QtCore.QModelIndex())
|
||||
|
||||
def parent(self, index=None):
|
||||
return QtCore.QModelIndex()
|
||||
|
||||
|
||||
class TerminalDetailItem(QtGui.QStandardItem):
|
||||
key_label_record_map = (
|
||||
("instance", "Instance"),
|
||||
|
|
|
|||
|
|
@ -11,61 +11,6 @@ def _import_widgets():
|
|||
from . import widgets
|
||||
|
||||
|
||||
class ArtistView(QtWidgets.QListView):
|
||||
# An item is requesting to be toggled, with optional forced-state
|
||||
toggled = QtCore.Signal(QtCore.QModelIndex, object)
|
||||
show_perspective = QtCore.Signal(QtCore.QModelIndex)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(ArtistView, self).__init__(parent)
|
||||
|
||||
self.horizontalScrollBar().hide()
|
||||
self.viewport().setAttribute(QtCore.Qt.WA_Hover, True)
|
||||
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.setResizeMode(QtWidgets.QListView.Adjust)
|
||||
self.setVerticalScrollMode(QtWidgets.QListView.ScrollPerPixel)
|
||||
|
||||
def event(self, event):
|
||||
if not event.type() == QtCore.QEvent.KeyPress:
|
||||
return super(ArtistView, self).event(event)
|
||||
|
||||
elif event.key() == QtCore.Qt.Key_Space:
|
||||
for index in self.selectionModel().selectedIndexes():
|
||||
self.toggled.emit(index, None)
|
||||
|
||||
return True
|
||||
|
||||
elif event.key() == QtCore.Qt.Key_Backspace:
|
||||
for index in self.selectionModel().selectedIndexes():
|
||||
self.toggled.emit(index, False)
|
||||
|
||||
return True
|
||||
|
||||
elif event.key() == QtCore.Qt.Key_Return:
|
||||
for index in self.selectionModel().selectedIndexes():
|
||||
self.toggled.emit(index, True)
|
||||
|
||||
return True
|
||||
|
||||
return super(ArtistView, self).event(event)
|
||||
|
||||
def focusOutEvent(self, event):
|
||||
self.selectionModel().clear()
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
if event.button() == QtCore.Qt.LeftButton:
|
||||
indexes = self.selectionModel().selectedIndexes()
|
||||
if len(indexes) <= 1 and event.pos().x() < 20:
|
||||
for index in indexes:
|
||||
self.toggled.emit(index, None)
|
||||
if len(indexes) == 1 and event.pos().x() > self.width() - 40:
|
||||
for index in indexes:
|
||||
self.show_perspective.emit(index)
|
||||
|
||||
return super(ArtistView, self).mouseReleaseEvent(event)
|
||||
|
||||
|
||||
class OverviewView(QtWidgets.QTreeView):
|
||||
# An item is requesting to be toggled, with optional forced-state
|
||||
toggled = QtCore.Signal(QtCore.QModelIndex, object)
|
||||
|
|
|
|||
|
|
@ -97,7 +97,6 @@ class Window(QtWidgets.QDialog):
|
|||
header_widget = QtWidgets.QWidget(parent=main_widget)
|
||||
|
||||
header_tab_widget = QtWidgets.QWidget(header_widget)
|
||||
header_tab_artist = QtWidgets.QRadioButton(header_tab_widget)
|
||||
header_tab_overview = QtWidgets.QRadioButton(header_tab_widget)
|
||||
header_tab_terminal = QtWidgets.QRadioButton(header_tab_widget)
|
||||
header_spacer = QtWidgets.QWidget(header_tab_widget)
|
||||
|
|
@ -125,7 +124,6 @@ class Window(QtWidgets.QDialog):
|
|||
layout_tab = QtWidgets.QHBoxLayout(header_tab_widget)
|
||||
layout_tab.setContentsMargins(0, 0, 0, 0)
|
||||
layout_tab.setSpacing(0)
|
||||
layout_tab.addWidget(header_tab_artist, 0)
|
||||
layout_tab.addWidget(header_tab_overview, 0)
|
||||
layout_tab.addWidget(header_tab_terminal, 0)
|
||||
layout_tab.addWidget(button_suspend_logs_widget, 0)
|
||||
|
|
@ -141,37 +139,18 @@ class Window(QtWidgets.QDialog):
|
|||
|
||||
header_widget.setLayout(layout)
|
||||
|
||||
# Artist Page
|
||||
instance_model = model.InstanceModel(controller)
|
||||
|
||||
artist_page = QtWidgets.QWidget()
|
||||
|
||||
artist_view = view.ArtistView()
|
||||
artist_view.show_perspective.connect(self.toggle_perspective_widget)
|
||||
artist_proxy = model.ArtistProxy()
|
||||
artist_proxy.setSourceModel(instance_model)
|
||||
artist_view.setModel(artist_proxy)
|
||||
|
||||
artist_delegate = delegate.ArtistDelegate()
|
||||
artist_view.setItemDelegate(artist_delegate)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout(artist_page)
|
||||
layout.addWidget(artist_view)
|
||||
layout.setContentsMargins(5, 5, 5, 5)
|
||||
layout.setSpacing(0)
|
||||
|
||||
artist_page.setLayout(layout)
|
||||
|
||||
# Overview Page
|
||||
# TODO add parent
|
||||
overview_page = QtWidgets.QWidget()
|
||||
|
||||
instance_model = model.InstanceModel(controller)
|
||||
overview_instance_view = view.InstanceView(
|
||||
animated=settings.Animated, parent=overview_page
|
||||
)
|
||||
overview_instance_delegate = delegate.InstanceDelegate(
|
||||
parent=overview_instance_view
|
||||
)
|
||||
|
||||
overview_instance_view.setItemDelegate(overview_instance_delegate)
|
||||
overview_instance_view.setModel(instance_model)
|
||||
|
||||
|
|
@ -223,7 +202,6 @@ class Window(QtWidgets.QDialog):
|
|||
body_widget = QtWidgets.QWidget(main_widget)
|
||||
layout = QtWidgets.QHBoxLayout(body_widget)
|
||||
layout.setContentsMargins(5, 5, 5, 1)
|
||||
layout.addWidget(artist_page)
|
||||
layout.addWidget(overview_page)
|
||||
layout.addWidget(terminal_page)
|
||||
|
||||
|
|
@ -361,12 +339,10 @@ class Window(QtWidgets.QDialog):
|
|||
"Footer": footer_widget,
|
||||
|
||||
# Pages
|
||||
"Artist": artist_page,
|
||||
"Overview": overview_page,
|
||||
"Terminal": terminal_page,
|
||||
|
||||
# Tabs
|
||||
"ArtistTab": header_tab_artist,
|
||||
"OverviewTab": header_tab_overview,
|
||||
"TerminalTab": header_tab_terminal,
|
||||
|
||||
|
|
@ -399,7 +375,6 @@ class Window(QtWidgets.QDialog):
|
|||
pages_widget,
|
||||
header_widget,
|
||||
body_widget,
|
||||
artist_page,
|
||||
comment_box,
|
||||
overview_page,
|
||||
terminal_page,
|
||||
|
|
@ -415,9 +390,6 @@ class Window(QtWidgets.QDialog):
|
|||
_widget.setAttribute(QtCore.Qt.WA_StyledBackground)
|
||||
|
||||
# Signals
|
||||
header_tab_artist.toggled.connect(
|
||||
lambda: self.on_tab_changed("artist")
|
||||
)
|
||||
header_tab_overview.toggled.connect(
|
||||
lambda: self.on_tab_changed("overview")
|
||||
)
|
||||
|
|
@ -450,7 +422,6 @@ class Window(QtWidgets.QDialog):
|
|||
QtCore.Qt.DirectConnection
|
||||
)
|
||||
|
||||
artist_view.toggled.connect(self.on_instance_toggle)
|
||||
overview_instance_view.toggled.connect(self.on_instance_toggle)
|
||||
overview_plugin_view.toggled.connect(self.on_plugin_toggle)
|
||||
|
||||
|
|
@ -491,9 +462,6 @@ class Window(QtWidgets.QDialog):
|
|||
self.plugin_proxy = plugin_proxy
|
||||
self.instance_model = instance_model
|
||||
|
||||
self.artist_proxy = artist_proxy
|
||||
self.artist_view = artist_view
|
||||
|
||||
self.presets_button = presets_button
|
||||
|
||||
self.animation_info_msg = animation_info_msg
|
||||
|
|
@ -510,12 +478,10 @@ class Window(QtWidgets.QDialog):
|
|||
self.perspective_widget = perspective_widget
|
||||
|
||||
self.tabs = {
|
||||
"artist": header_tab_artist,
|
||||
"overview": header_tab_overview,
|
||||
"terminal": header_tab_terminal
|
||||
}
|
||||
self.pages = (
|
||||
("artist", artist_page),
|
||||
("overview", overview_page),
|
||||
("terminal", terminal_page)
|
||||
)
|
||||
|
|
@ -1122,11 +1088,6 @@ class Window(QtWidgets.QDialog):
|
|||
for instance_id in existing_ids:
|
||||
self.instance_model.remove(instance_id)
|
||||
|
||||
if result.get("error"):
|
||||
# Toggle from artist to overview tab on error
|
||||
if self.tabs["artist"].isChecked():
|
||||
self.tabs["overview"].toggle()
|
||||
|
||||
result["records"] = self.terminal_model.prepare_records(
|
||||
result,
|
||||
self._suspend_logs
|
||||
|
|
@ -1274,7 +1235,6 @@ class Window(QtWidgets.QDialog):
|
|||
self.terminal_proxy.deleteLater()
|
||||
self.plugin_proxy.deleteLater()
|
||||
|
||||
self.artist_view.setModel(None)
|
||||
self.overview_instance_view.setModel(None)
|
||||
self.overview_plugin_view.setModel(None)
|
||||
self.terminal_view.setModel(None)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue