Source code for shotgun_search_widget.hierarchical_search_widget
# Copyright (c) 2017 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.
import sgtk
from sgtk.platform.qt import QtCore
from .shotgun_search_widget import ShotgunSearchWidget
search_completer = sgtk.platform.current_bundle().import_module("search_completer")
[docs]class HierarchicalSearchWidget(ShotgunSearchWidget):
"""
A QT Widget deriving from :class:`~PySide.QtGui.QLineEdit` that creates
a hierarchical search input box with auto completion.
If defaults to searching inside the current context's project and to only show entities.
:signal: ``node_activated(str, int, str, str, list)`` - Fires when someone activates a
node inside the search results. The parameters are ``type``, ``id``, ``name``,
``label path`` and ``incremental_paths``. If the node activated is not an entity,
``type`` and ``id`` will be ``None``.
"""
# emitted when shotgun has been updated
node_activated = QtCore.Signal(str, int, str, str, list)
def __init__(self, parent):
"""
Uses the :class:`~search_completer.HierarchicalSearchCompleter` as the completer for searching
PTR entities.
:param parent: Qt parent object
:type parent: :class:`~PySide.QtGui.QWidget`
"""
# first, call the base class and let it do its thing.
super(HierarchicalSearchWidget, self).__init__(parent)
# configure our popup completer
self.setCompleter(search_completer.HierarchicalSearchCompleter(self))
# forward the completer's node_selected signals
self.completer().node_activated.connect(self.node_activated.emit)
# When the node is activated it queues an event to put the selection into the line edit.
# Queueing the event like this ensures we clean up the line edit after.
# Taken from:
# http://stackoverflow.com/questions/11865129/fail-to-clear-qlineedit-after-selecting-item-from-qcompleter
self.completer().node_activated.connect(self.clear, QtCore.Qt.QueuedConnection)
self.show_entities_only = True
self.search_root = sgtk.platform.current_bundle().context.project
def _get_search_root(self):
"""
The entity under which the search will be done. If ``None``, the search will be done
for the whole site.
The entity is a ``dict`` with keys ``id`` and ``type``. Note that only ``Project`` entities
are supported at the moment.
"""
return self.completer().search_root
def _set_search_root(self, entity):
"""
See getter documentation.
"""
self.completer().search_root = entity
search_root = property(_get_search_root, _set_search_root)
def _get_show_entities_only(self):
"""
Indicates if only entities will be shown in the search results.
If set to ``True``, only entities will be shown.
"""
self.completer().show_entities_only
def _set_show_entities_only(self, is_set):
"""
See getter documentation.
"""
self.completer().show_entities_only = is_set
show_entities_only = property(_get_show_entities_only, _set_show_entities_only)
def _get_seed_entity_field(self):
"""
The seed entity to use when searching for entity.
Can be ``PublishedFile.entity`` or ``Version.entity``.
"""
return self.completer().seed_entity_field
def _set_seed_entity_field(self, seed_entity_field):
"""
See setter documentation.
"""
self.completer().seed_entity_field = seed_entity_field
seed_entity_field = property(_get_seed_entity_field, _set_seed_entity_field)