Source code for jukeboxcore.gui.reftrackitemdata

"""This module holds :class:`jukeboxcore.gui.treemodel.ItemData` subclasses that represent reftrack data,
e.g. a :class:`jukeboxcore.reftrack.Reftrack` object.
"""
from functools import partial

from PySide import QtCore, QtGui

from jukeboxcore import djadapter
from jukeboxcore.gui import filesysitemdata
from jukeboxcore.gui.treemodel import ItemData


UPTODATE_RGB = (53, 69, 41)
"""RGB values for the color, when a reftrack is uptodate"""
OUTDATED_RGB = (69, 41, 41)
"""RGB values for the color, when a reftrack is outdated"""


REFTRACK_OBJECT_ROLE = QtCore.Qt.UserRole + 1


[docs]def reftrack_type_data(rt, role): """Return the data for the type (e.g. Asset, Alembic, Camera etc) :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the type :rtype: depending on role :raises: None """ if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole: return rt.get_typ() elif role == QtCore.Qt.DecorationRole: return rt.get_typ_icon()
[docs]def reftrack_elementgrp_data(rt, role): """Return the data for the elementgrp (e.g. the Assettype or Sequence) :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the elementgrp :rtype: depending on role :raises: TypeError """ element = rt.get_element() if isinstance(element, djadapter.models.Shot): egrp = element.sequence elif isinstance(element, djadapter.models.Asset): egrp = element.atype elif element is not None: raise TypeError("Expected the element to be either Asset or Shot. Got %s" % type(element)) else: return if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole: return egrp.name
[docs]def reftrack_element_data(rt, role): """Return the data for the element (e.g. the Asset or Shot) :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the element :rtype: depending on role :raises: None """ element = rt.get_element() if element is None: return if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole: return element.name
[docs]def reftrack_task_data(rt, role): """Return the data for the task that is loaded by the reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the task :rtype: depending on role :raises: None """ tfi = rt.get_taskfileinfo() if not tfi: return return filesysitemdata.taskfileinfo_task_data(tfi, role)
[docs]def reftrack_rtype_data(rt, role): """Return the data for the releasetype that is loaded by the reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the releasetype :rtype: depending on role :raises: None """ tfi = rt.get_taskfileinfo() if not tfi: return return filesysitemdata.taskfileinfo_rtype_data(tfi, role)
[docs]def reftrack_descriptor_data(rt, role): """Return the data for the descriptor that is loaded by the reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the descriptor :rtype: depending on role :raises: None """ tfi = rt.get_taskfileinfo() if not tfi: return return filesysitemdata.taskfileinfo_descriptor_data(tfi, role)
[docs]def reftrack_version_data(rt, role): """Return the data for the version that is loaded by the reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the version :rtype: depending on role :raises: None """ tfi = rt.get_taskfileinfo() if not tfi: return return filesysitemdata.taskfileinfo_version_data(tfi, role)
[docs]def reftrack_status_data(rt, role): """Return the data for the status :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the status :rtype: depending on role :raises: None """ status = rt.status() if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole: if status: return status else: return "Not in scene!"
[docs]def reftrack_uptodate_data(rt, role): """Return the data for the uptodate status :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the uptodate status :rtype: depending on role :raises: None """ uptodate = rt.uptodate() if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole: if uptodate: return "Yes" else: return "No" if role == QtCore.Qt.ForegroundRole: if uptodate: return QtGui.QColor(*UPTODATE_RGB) elif rt.status(): return QtGui.QColor(*OUTDATED_RGB)
[docs]def reftrack_alien_data(rt, role): """Return the data for the alien status :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the alien status :rtype: depending on role :raises: None """ alien = rt.alien() if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole: if alien: return "Yes" else: return "No"
[docs]def reftrack_path_data(rt, role): """Return the data for the path that is loaded by the reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the path :rtype: depending on role :raises: None """ tfi = rt.get_taskfileinfo() if not tfi: return return filesysitemdata.taskfileinfo_path_data(tfi, role)
[docs]def reftrack_restricted_data(rt, role, attr): """Return the data for restriction of the given attr of the given reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the restriction :rtype: depending on role :raises: None """ if role == QtCore.Qt.DisplayRole: if rt.is_restricted(getattr(rt, attr, None)): return "Restricted" else: return "Allowed"
[docs]def reftrack_id_data(rt, role): """Return the data for the id of the reftrack :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the id :rtype: depending on the role :raises: None """ if role == QtCore.Qt.DisplayRole: return rt.get_id()
[docs]def reftrack_object_data(rt, role): """Return the reftrack for REFTRACK_OBJECT_ROLE :param rt: the :class:`jukeboxcore.reftrack.Reftrack` holds the data :type rt: :class:`jukeboxcore.reftrack.Reftrack` :param role: item data role :type role: QtCore.Qt.ItemDataRole :returns: data for the id :rtype: depending on the role :raises: None """ if role == QtCore.Qt.DisplayRole: return str(rt) if role == REFTRACK_OBJECT_ROLE: return rt
[docs]class ReftrackItemData(ItemData): """Item Data for :class:`jukeboxcore.gui.treemodel.TreeItem` that represents a :class:`jukeboxcore.reftrack.Reftrack` """ def __init__(self, reftrack): """Constructs a new item data for the reftrack :param reftrack: the reftrack to represent :type reftrack: :class:`jukeboxcore.reftrack.Reftrack` :raises: None """ super(ReftrackItemData, self).__init__() self._reftrack = reftrack columns = [reftrack_type_data, reftrack_elementgrp_data, reftrack_element_data, reftrack_task_data, reftrack_rtype_data, reftrack_descriptor_data, reftrack_version_data, reftrack_status_data, reftrack_uptodate_data, reftrack_alien_data, reftrack_path_data, partial(reftrack_restricted_data, attr='reference'), partial(reftrack_restricted_data, attr='load'), partial(reftrack_restricted_data, attr='unload'), partial(reftrack_restricted_data, attr='import_reference'), partial(reftrack_restricted_data, attr='import_taskfile'), partial(reftrack_restricted_data, attr='replace'), reftrack_id_data, reftrack_object_data]
[docs] def column_count(self, ): """Return the number of columns that can be queried for data :returns: the number of columns :rtype: int :raises: None """ return len(self.columns)
[docs] def data(self, column, role): """Return the data for the specified column and role The column addresses one attribute of the data. :param column: the data column :type column: int :param role: the data role :type role: QtCore.Qt.ItemDataRole :returns: data depending on the role :rtype: :raises: None """ return self.columns[column](self._reftrack, role)
[docs] def internal_data(self, ): """Return the taskfile :returns: the taskfile :rtype: :class:`jukeboxcore.djadapter.models.TaskFile` :raises: None """ return self._reftrack
[docs] def flags(self, column): """Return the item flags for the item Default is QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable :param column: the column to query :type column: int :returns: the item flags :rtype: QtCore.Qt.ItemFlags :raises: None """ return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
[docs]class ReftrackSortFilterModel(QtGui.QSortFilterProxyModel): """A sort filter proxy model, that can filter rows in a treemodel that uses ReftrackItemDatas. """ def __init__(self, parent=None): """Initialize a new reftrack sort filter model :param parent: the parent object :type parent: :class:`QtCore.QObject` :raises: None """ super(ReftrackSortFilterModel, self).__init__(parent) # lists of forbidden values for different attributes self._forbidden_status = [] self._forbidden_types = [] self._forbidden_uptodate = [] self._forbidden_alien = []
[docs] def filterAcceptsRow(self, row, parentindex): """Return True, if the filter accepts the given row of the parent :param row: the row to filter :type row: :class:`int` :param parentindex: the parent index :type parentindex: :class:`QtCore.QModelIndex` :returns: True, if the filter accepts the row :rtype: :class:`bool` :raises: None """ if not super(ReftrackSortFilterModel, self).filterAcceptsRow(row, parentindex): return False if parentindex.isValid(): m = parentindex.model() else: m = self.sourceModel() i = m.index(row, 18, parentindex) reftrack = i.data(REFTRACK_OBJECT_ROLE) if not reftrack: return True else: return self.filter_accept_reftrack(reftrack)
[docs] def filter_accept_reftrack(self, reftrack): """Return True, if the filter accepts the given reftrack :param reftrack: the reftrack to filter :type reftrack: :class:`jukeboxcore.reftrack.Reftrack` :returns: True, if the filter accepts the reftrack :rtype: :class:`bool` :raises: None """ if reftrack.status() in self._forbidden_status: return False if reftrack.get_typ() in self._forbidden_types: return False if reftrack.uptodate() in self._forbidden_uptodate: return False if reftrack.alien() in self._forbidden_alien: return False return True
[docs] def set_forbidden_statuses(self, statuses): """Set all forbidden status values :param statuses: a list with forbidden status values :type statuses: list :returns: None :rtype: None :raises: None """ if self._forbidden_status == statuses: return self._forbidden_status = statuses self.invalidateFilter()
[docs] def get_forbidden_statuses(self, ): """Return all forbidden status values :returns: a list with forbidden status values :rtype: list :raises: None """ return self._forbidden_status
[docs] def set_forbidden_types(self, types): """Set all forbidden type values :param typees: a list with forbidden type values :type typees: list :returns: None :rtype: None :raises: None """ if self._forbidden_types == types: return self._forbidden_types = types self.invalidateFilter()
[docs] def get_forbidden_types(self, ): """Return all forbidden type values :returns: a list with forbidden type values :rtype: list :raises: None """ return self._forbidden_types
[docs] def set_forbidden_uptodate(self, uptodate): """Set all forbidden uptodate values :param uptodatees: a list with forbidden uptodate values :uptodate uptodatees: list :returns: None :ruptodate: None :raises: None """ if self._forbidden_uptodate == uptodate: return self._forbidden_uptodate = uptodate self.invalidateFilter()
[docs] def get_forbidden_uptodates(self, ): """Return all forbidden uptodate values :returns: a list with forbidden uptodate values :ruptodate: list :raises: None """ return self._forbidden_uptodate
[docs] def set_forbidden_alien(self, alien): """Set all forbidden alien values :param alienes: a list with forbidden alien values :alien alienes: list :returns: None :ralien: None :raises: None """ if self._forbidden_alien == alien: return self._forbidden_alien = alien self.invalidateFilter()
[docs] def get_forbidden_aliens(self, ): """Return all forbidden alien values :returns: a list with forbidden alien values :ralien: list :raises: None """ return self._forbidden_alien