Source code for overlay_widget.shotgun_model_overlay_widget
# Copyright (c) 2015 Shotgun Software Inc.
#
# CONFIDENTIAL AND PROPRIETARY
#
# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit
# Source Code License included in this distribution package. See LICENSE.
# By accessing, using, copying or modifying this work you indicate your
# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights
# not expressly granted therein are reserved by Shotgun Software Inc.
from sgtk.platform.qt import QtCore, QtGui
# load resources
from .ui import resources_rc
from .shotgun_overlay_widget import ShotgunOverlayWidget
[docs]class ShotgunModelOverlayWidget(ShotgunOverlayWidget):
"""
A convenience class specifically designed to work with a
:class:`~tk-framework-shotgunutils:shotgun_model.ShotgunModel`.
By using this class, multiple overlay widgets can be
easily created and connected to the same shotgun model.
"""
def __init__(self, sg_model, parent=None):
"""
:param sg_model: Shotgun model that this widget should connect to
:type sg_model: :class:`~tk-framework-shotgunutils:shotgun_model.ShotgunModel`
:param parent: Widget to attach the overlay to
:type parent: :class:`PySide.QtGui.QWidget`
"""
ShotgunOverlayWidget.__init__(self, parent)
# connect up to signals being emitted from Shotgun model:
self._model = None
self._connect_to_model(sg_model)
[docs] def set_model(self, sg_model):
"""
Set the model this widget should be connected to
:param sg_model: Shotgun model that this widget should connect to
:type sg_model: :class:`~tk-framework-shotgunutils:shotgun_model.ShotgunModel`
"""
self.hide()
self._connect_to_model(sg_model)
def _connect_to_model(self, sg_model):
"""
Connect to the signals emitted by the specified model
:param sg_model: Shotgun model that this widget should connect to
:type sg_model: :class:`~tk-framework-shotgunutils:shotgun_model.ShotgunModel`
"""
if sg_model == self._model:
# already connected!
return
if self._model:
# disconnect from the previous model:
self._model.query_changed.disconnect(self._model_query_changed)
self._model.data_refreshing.disconnect(self._model_refreshing)
self._model.data_refreshed.disconnect(self._model_refreshed)
self._model.data_refresh_fail.disconnect(self._model_refresh_failed)
self._model = None
self.hide(hide_errors=True)
if sg_model:
# connect to the new model:
self._model = sg_model
self._model.query_changed.connect(self._model_query_changed)
self._model.data_refreshing.connect(self._model_refreshing)
self._model.data_refreshed.connect(self._model_refreshed)
self._model.data_refresh_fail.connect(self._model_refresh_failed)
def _model_query_changed(self):
"""
Slot signaled when the query changes on the connected Shotgun model
"""
self.hide(hide_errors=True)
def _model_refreshing(self):
"""
Slot signaled when the connected Shotgun model starts refreshing
"""
if not self._model.is_data_cached():
self.start_spin()
def _model_refreshed(self, data_changed):
"""
Slot signaled when the data from the connected Shotgun model has
been refreshed
:param data_changed: True if the refresh resulted in the data changing
"""
self.hide(hide_errors=True)
def _model_refresh_failed(self, msg):
"""
Slot signaled when the connected Shotgun model refresh fails
:param msg: The reason the refresh failed
"""
self.show_error_message(msg)