From d1607f02a4ceefba768f30fdc82bc11f5ee3b465 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 3 Dec 2021 16:59:56 +0100 Subject: [PATCH 1/2] nuke complete menu to openpype --- openpype/hosts/nuke/api/menu.py | 129 +++++++++++++++----------------- 1 file changed, 61 insertions(+), 68 deletions(-) diff --git a/openpype/hosts/nuke/api/menu.py b/openpype/hosts/nuke/api/menu.py index 4636098604..8b5ab832ac 100644 --- a/openpype/hosts/nuke/api/menu.py +++ b/openpype/hosts/nuke/api/menu.py @@ -1,13 +1,11 @@ import os import nuke -from avalon.api import Session from avalon.nuke.pipeline import get_main_window from .lib import WorkfileSettings from openpype.api import Logger, BuildWorkfile, get_current_project_settings from openpype.tools.utils import host_tools -from avalon.nuke.pipeline import get_main_window log = Logger().get_logger(__name__) @@ -15,87 +13,82 @@ menu_label = os.environ["AVALON_LABEL"] def install(): + from openpype.hosts.nuke.api import reload_config + # uninstall original avalon menu + uninstall() + main_window = get_main_window() menubar = nuke.menu("Nuke") - menu = menubar.findItem(menu_label) + menu = menubar.addMenu(menu_label) - # replace reset resolution from avalon core to pype's - name = "Work Files..." - rm_item = [ - (i, item) for i, item in enumerate(menu.items()) if name in item.name() - ][0] - - log.debug("Changing Item: {}".format(rm_item)) - - menu.removeItem(rm_item[1].name()) - menu.addCommand( - name, - lambda: host_tools.show_workfiles(parent=main_window), - index=2 + label = "{0}, {1}".format( + os.environ["AVALON_ASSET"], os.environ["AVALON_TASK"] ) - menu.addSeparator(index=3) - # replace reset resolution from avalon core to pype's - name = "Reset Resolution" - new_name = "Set Resolution" - rm_item = [ - (i, item) for i, item in enumerate(menu.items()) if name in item.name() - ][0] - - log.debug("Changing Item: {}".format(rm_item)) - # rm_item[1].setEnabled(False) - menu.removeItem(rm_item[1].name()) - menu.addCommand( - new_name, - lambda: WorkfileSettings().reset_resolution(), - index=(rm_item[0]) - ) - - # replace reset frame range from avalon core to pype's - name = "Reset Frame Range" - new_name = "Set Frame Range" - rm_item = [ - (i, item) for i, item in enumerate(menu.items()) if name in item.name() - ][0] - log.debug("Changing Item: {}".format(rm_item)) - # rm_item[1].setEnabled(False) - menu.removeItem(rm_item[1].name()) - menu.addCommand( - new_name, - lambda: WorkfileSettings().reset_frame_range_handles(), - index=(rm_item[0]) - ) - - # add colorspace menu item - name = "Set Colorspace" - menu.addCommand( - name, lambda: WorkfileSettings().set_colorspace() - ) - log.debug("Adding menu item: {}".format(name)) - - # add item that applies all setting above - name = "Apply All Settings" - menu.addCommand( - name, - lambda: WorkfileSettings().set_context_settings() - ) - log.debug("Adding menu item: {}".format(name)) + context_action = menu.addCommand(label) + context_action.setEnabled(False) menu.addSeparator() - - # add workfile builder menu item - name = "Build Workfile" menu.addCommand( - name, lambda: BuildWorkfile().process() + "Work Files...", + lambda: host_tools.show_workfiles(parent=main_window) + ) + + menu.addSeparator() + menu.addCommand( + "Create...", + lambda: host_tools.show_creator(parent=main_window) + ) + menu.addCommand( + "Load...", + lambda: host_tools.show_loader( + parent=main_window, + use_context=True + ) + ) + menu.addCommand( + "Publish...", + lambda: host_tools.show_publish(parent=main_window) + ) + menu.addCommand( + "Manage...", + lambda: host_tools.show_scene_inventory(parent=main_window) + ) + + menu.addSeparator() + menu.addCommand( + "Set Resolution", + lambda: WorkfileSettings().reset_resolution() + ) + menu.addCommand( + "Set Frame Range", + lambda: WorkfileSettings().reset_frame_range_handles() + ) + menu.addCommand( + "Set Colorspace", + lambda: WorkfileSettings().set_colorspace() + ) + menu.addCommand( + "Apply All Settings", + lambda: WorkfileSettings().set_context_settings() + ) + + menu.addSeparator() + menu.addCommand( + "Build Workfile", + lambda: BuildWorkfile().process() ) - log.debug("Adding menu item: {}".format(name)) - # Add experimental tools action menu.addSeparator() menu.addCommand( "Experimental tools...", lambda: host_tools.show_experimental_tools_dialog(parent=main_window) ) + # add reload pipeline only in debug mode + if bool(os.getenv("NUKE_DEBUG")): + menu.addSeparator() + menu.addCommand("Reload Pipeline", reload_config) + # adding shortcuts add_shortcuts_from_presets() From cd55209e632526456574bbcc27914352fd5399b0 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 3 Dec 2021 17:34:11 +0100 Subject: [PATCH 2/2] fixing menu context label re-drawing --- openpype/hosts/nuke/api/__init__.py | 5 +++++ openpype/hosts/nuke/api/menu.py | 34 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/openpype/hosts/nuke/api/__init__.py b/openpype/hosts/nuke/api/__init__.py index e684b48fa3..1567189ed1 100644 --- a/openpype/hosts/nuke/api/__init__.py +++ b/openpype/hosts/nuke/api/__init__.py @@ -54,6 +54,10 @@ def install(): ''' Installing all requarements for Nuke host ''' + # remove all registred callbacks form avalon.nuke + from avalon import pipeline + pipeline._registered_event_handlers.clear() + log.info("Registering Nuke plug-ins..") pyblish.api.register_plugin_path(PUBLISH_PATH) avalon.api.register_plugin_path(avalon.api.Loader, LOAD_PATH) @@ -62,6 +66,7 @@ def install(): # Register Avalon event for workfiles loading. avalon.api.on("workio.open_file", lib.check_inventory_versions) + avalon.api.on("taskChanged", menu.change_context_label) pyblish.api.register_callback( "instanceToggled", on_pyblish_instance_toggled) diff --git a/openpype/hosts/nuke/api/menu.py b/openpype/hosts/nuke/api/menu.py index 8b5ab832ac..86293edb99 100644 --- a/openpype/hosts/nuke/api/menu.py +++ b/openpype/hosts/nuke/api/menu.py @@ -10,10 +10,43 @@ from openpype.tools.utils import host_tools log = Logger().get_logger(__name__) menu_label = os.environ["AVALON_LABEL"] +context_label = None + + +def change_context_label(*args): + global context_label + menubar = nuke.menu("Nuke") + menu = menubar.findItem(menu_label) + + label = "{0}, {1}".format( + os.environ["AVALON_ASSET"], os.environ["AVALON_TASK"] + ) + + rm_item = [ + (i, item) for i, item in enumerate(menu.items()) + if context_label in item.name() + ][0] + + menu.removeItem(rm_item[1].name()) + + context_action = menu.addCommand( + label, + index=(rm_item[0]) + ) + context_action.setEnabled(False) + + log.info("Task label changed from `{}` to `{}`".format( + context_label, label)) + + context_label = label + def install(): from openpype.hosts.nuke.api import reload_config + + global context_label + # uninstall original avalon menu uninstall() @@ -24,6 +57,7 @@ def install(): label = "{0}, {1}".format( os.environ["AVALON_ASSET"], os.environ["AVALON_TASK"] ) + context_label = label context_action = menu.addCommand(label) context_action.setEnabled(False)