Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Nuke: fixing menu re-drawing during context change #2374

Merged
merged 2 commits into from
Dec 6, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions openpype/hosts/nuke/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down
133 changes: 80 additions & 53 deletions openpype/hosts/nuke/api/menu.py
Original file line number Diff line number Diff line change
@@ -1,101 +1,128 @@
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__)

menu_label = os.environ["AVALON_LABEL"]
context_label = None


def install():
main_window = get_main_window()
def change_context_label(*args):
global context_label
menubar = nuke.menu("Nuke")
menu = menubar.findItem(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()
(i, item) for i, item in enumerate(menu.items())
if context_label 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(),

context_action = menu.addCommand(
label,
index=(rm_item[0])
)
context_action.setEnabled(False)

# 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())
log.info("Task label changed from `{}` to `{}`".format(
context_label, label))

context_label = label



def install():
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

too many blank lines (3)

from openpype.hosts.nuke.api import reload_config

global context_label

# uninstall original avalon menu
uninstall()

main_window = get_main_window()
menubar = nuke.menu("Nuke")
menu = menubar.addMenu(menu_label)

label = "{0}, {1}".format(
os.environ["AVALON_ASSET"], os.environ["AVALON_TASK"]
)
context_label = label
context_action = menu.addCommand(label)
context_action.setEnabled(False)

menu.addSeparator()
menu.addCommand(
new_name,
lambda: WorkfileSettings().reset_frame_range_handles(),
index=(rm_item[0])
"Work Files...",
lambda: host_tools.show_workfiles(parent=main_window)
)

# add colorspace menu item
name = "Set Colorspace"
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(
name, lambda: WorkfileSettings().set_colorspace()
"Publish...",
lambda: host_tools.show_publish(parent=main_window)
)
menu.addCommand(
"Manage...",
lambda: host_tools.show_scene_inventory(parent=main_window)
)
log.debug("Adding menu item: {}".format(name))

# add item that applies all setting above
name = "Apply All Settings"
menu.addSeparator()
menu.addCommand(
name,
"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()
)
log.debug("Adding menu item: {}".format(name))

menu.addSeparator()

# add workfile builder menu item
name = "Build Workfile"
menu.addCommand(
name, lambda: BuildWorkfile().process()
"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()

Expand Down