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

Maya: Menu actions fix #1945

Merged
merged 7 commits into from
Aug 19, 2021
Merged
Changes from 6 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
59 changes: 53 additions & 6 deletions openpype/hosts/maya/api/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,9 @@

def _get_menu(menu_name=None):
"""Return the menu instance if it currently exists in Maya"""

project_settings = get_project_settings(os.getenv("AVALON_PROJECT"))
_menu = project_settings["maya"]["scriptsmenu"]["name"]

if menu_name is None:
menu_name = _menu
menu_name = pipeline._menu

widgets = dict((
w.objectName(), w) for w in QtWidgets.QApplication.allWidgets())
menu = widgets.get(menu_name)
Expand Down Expand Up @@ -58,11 +55,62 @@ def launch_workfiles_app(*_args, **_kwargs):
parent=pipeline._parent
)

# Find the pipeline menu
top_menu = _get_menu()

# Try to find workfile tool action in the menu
workfile_action = None
for action in top_menu.actions():
if action.text() == "Work Files":
workfile_action = action
break

# Add at the top of menu if "Work Files" action was not found
after_action = ""
if workfile_action:
# Use action's object name for `insertAfter` argument
after_action = workfile_action.objectName()

# Insert action to menu
cmds.menuItem(
"Work Files",
parent=pipeline._menu,
command=launch_workfiles_app,
insertAfter=after_action
)

# Remove replaced action
if workfile_action:
top_menu.removeAction(workfile_action)

def remove_project_manager():
top_menu = _get_menu()

# Try to find workfile tool action in the menu
system_menu = None
for action in top_menu.actions():
if action.text() == "System":
system_menu = action
break

if system_menu is None:
return

project_manager_action = None
for action in system_menu.menu().children():
if hasattr(action, "text") and action.text() == "Project Manager":
project_manager_action = action
break

if project_manager_action is not None:
system_menu.menu().removeAction(project_manager_action)

log.info("Attempting to install scripts menu ...")

add_build_workfiles_item()
add_look_assigner_item()
modify_workfiles()
remove_project_manager()

try:
import scriptsmenu.launchformaya as launchformaya
Expand Down Expand Up @@ -110,7 +158,6 @@ def install():
log.info("Skipping openpype.menu initialization in batch mode..")
return

uninstall()
# Allow time for uninstallation to finish.
cmds.evalDeferred(deferred)

Expand Down