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

Commit

Permalink
Merge pull request #1945 from pypeclub/bugfix/maya_actions
Browse files Browse the repository at this point in the history
Maya: Menu actions fix
  • Loading branch information
iLLiCiTiT authored Aug 19, 2021
2 parents 691c28b + 126a874 commit b1c2f18
Showing 1 changed file with 55 additions and 6 deletions.
61 changes: 55 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,64 @@ 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 "System" menu 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

# Try to find "Project manager" action in "System" menu
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

# Remove "Project manager" action if was found
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 +160,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

0 comments on commit b1c2f18

Please sign in to comment.