Skip to content

hierarchy

FolderSelector

Bases: QWidget

Widget for selecting a folder from the project hierarchy.

Source code in client/ayon_unreal/api/hierarchy.py
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
class FolderSelector(QtWidgets.QWidget):
    """Widget for selecting a folder from the project hierarchy."""

    confirm_btn = None

    def __init__(self, controller=None, parent=None, project=None):
        if not project:
            raise ValueError("Project name not provided.")

        super(FolderSelector, self).__init__(parent)

        icon = QtGui.QIcon(resources.get_ayon_icon_filepath())
        self.setWindowIcon(icon)
        self.setWindowTitle("Folder Selector")
        self.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose, False)

        self.setStyleSheet(style.load_stylesheet())

        # Allow minimize
        self.setWindowFlags(
            QtCore.Qt.Window
            | QtCore.Qt.CustomizeWindowHint
            | QtCore.Qt.WindowTitleHint
            | QtCore.Qt.WindowMinimizeButtonHint
            | QtCore.Qt.WindowCloseButtonHint
        )

        content_body = QtWidgets.QWidget(self)

        # Folders
        folders_wrapper = QtWidgets.QWidget(content_body)

        folders_filter_text = PlaceholderLineEdit(folders_wrapper)
        folders_filter_text.setPlaceholderText("Filter folders...")

        folders_widget = SimpleFoldersWidget(
            controller=None, parent=folders_wrapper)
        folders_widget.set_project_name(project_name=project)

        folders_wrapper_layout = QtWidgets.QVBoxLayout(folders_wrapper)
        folders_wrapper_layout.setContentsMargins(0, 0, 0, 0)
        folders_wrapper_layout.addWidget(folders_filter_text, 0)
        folders_wrapper_layout.addWidget(folders_widget, 1)

        # Footer
        footer_widget = QtWidgets.QWidget(content_body)

        self.confirm_btn = ConfirmButton(footer_widget)

        footer_layout = QtWidgets.QHBoxLayout(footer_widget)
        footer_layout.setContentsMargins(0, 0, 0, 0)
        footer_layout.addWidget(self.confirm_btn, 0)

        # Main layout
        content_layout = QtWidgets.QVBoxLayout(content_body)
        content_layout.setContentsMargins(0, 0, 0, 0)
        content_layout.addWidget(folders_wrapper, 1)
        content_layout.addWidget(footer_widget, 0)

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(content_body, 1)

        folders_filter_text.textChanged.connect(
            self._on_filter_text_changed)

        self._controller = controller

        self._confirm_btn = self.confirm_btn
        self._folders_widget = folders_widget

        self.resize(300, 400)

        self.show()
        self.raise_()
        self.activateWindow()

    def _on_filter_text_changed(self, text):
        self._folders_widget.set_name_filter(text)

    def get_selected_folder(self):
        return self._folders_widget.get_selected_folder_path()

build_sequence_hierarchy()

Builds the sequence hierarchy by creating sequences from the root element.

Raises:

Type Description
ValueError

If the sequence root element is not found in the hierarchy.

Source code in client/ayon_unreal/api/hierarchy.py
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
def build_sequence_hierarchy():
    """
    Builds the sequence hierarchy by creating sequences from the root element.

    Raises:
        ValueError: If the sequence root element is not found in the hierarchy.
    """
    print("Building sequence hierarchy...")

    project = get_current_project_name()

    sequence_path = "/Game/Ayon/"

    folder_selector = FolderSelector(project=project)

    folder_selector.confirm_btn.clicked.connect(
        lambda: _on_confirm_clicked(folder_selector, sequence_path, project)
    )

find_level_sequence(asset_content)

Search level sequence already exists in the hierarchy

Parameters:

Name Type Description Default
asset_content list

List of asset contents

required
Source code in client/ayon_unreal/api/hierarchy.py
211
212
213
214
215
216
217
218
219
220
221
222
223
224
def find_level_sequence(asset_content):
    """
    Search level sequence already exists in the hierarchy

    Args:
        asset_content (list): List of asset contents
    """
    has_level_sequence = []
    ar = unreal.AssetRegistryHelpers.get_asset_registry()
    for asset in asset_content:
        content = ar.get_asset_by_object_path(asset).get_asset()
        if content.get_class().get_name() == "LevelSequence":
            has_level_sequence.append(content)
    return has_level_sequence

save_asset_and_load_level(asset_content, level_package, folder_selector)

Save asset contents and load master level thus close folder selector

Parameters:

Name Type Description Default
asset_content list

List of asset contents

required
level_package str

level package path

required
folder_selector(Object)

folder selector widget

required
Source code in client/ayon_unreal/api/hierarchy.py
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
def save_asset_and_load_level(asset_content, level_package, folder_selector):
    """Save asset contents and load master level thus close
    folder selector

    Args:
        asset_content (list): List of asset contents
        level_package (str): level package path
        folder_selector(Object): folder selector widget
    """
    for a in asset_content:
        unreal.EditorAssetLibrary.save_asset(a)

    # load the master level
    unreal.EditorLevelLibrary.load_level(level_package)

    folder_selector.close()