mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 21:32:15 +01:00
78 lines
1.8 KiB
Python
78 lines
1.8 KiB
Python
import sys
|
|
import os
|
|
import logging
|
|
|
|
from avalon.vendor.Qt import QtWidgets, QtCore, QtGui
|
|
|
|
import maya.cmds as cmds
|
|
|
|
self = sys.modules[__name__]
|
|
self._menu = os.environ['PYPE_STUDIO_NAME']
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def _get_menu():
|
|
"""Return the menu instance if it currently exists in Maya"""
|
|
|
|
app = QtWidgets.QApplication.instance()
|
|
widgets = dict((w.objectName(), w) for w in app.allWidgets())
|
|
menu = widgets.get(self._menu)
|
|
return menu
|
|
|
|
|
|
def deferred():
|
|
|
|
log.info("Attempting to install scripts menu..")
|
|
|
|
try:
|
|
import scriptsmenu.launchformaya as launchformaya
|
|
import scriptsmenu.scriptsmenu as scriptsmenu
|
|
except ImportError:
|
|
log.warning("Skipping studio.menu install, because "
|
|
"'scriptsmenu' module seems unavailable.")
|
|
return
|
|
|
|
# load configuration of custom menu
|
|
config_path = os.path.join(os.path.dirname(__file__), "menu.json")
|
|
config = scriptsmenu.load_configuration(config_path)
|
|
|
|
# run the launcher for Maya menu
|
|
studio_menu = launchformaya.main(title=self._menu.title(),
|
|
objectName=self._menu)
|
|
|
|
# apply configuration
|
|
studio_menu.build_from_configuration(studio_menu, config)
|
|
|
|
|
|
def uninstall():
|
|
|
|
menu = _get_menu()
|
|
if menu:
|
|
log.info("Attempting to uninstall..")
|
|
|
|
try:
|
|
menu.deleteLater()
|
|
del menu
|
|
except Exception as e:
|
|
log.error(e)
|
|
|
|
|
|
def install():
|
|
|
|
if cmds.about(batch=True):
|
|
print("Skipping pype.menu initialization in batch mode..")
|
|
return
|
|
|
|
uninstall()
|
|
# Allow time for uninstallation to finish.
|
|
cmds.evalDeferred(deferred)
|
|
|
|
|
|
def popup():
|
|
"""Pop-up the existing menu near the mouse cursor"""
|
|
menu = _get_menu()
|
|
|
|
cursor = QtGui.QCursor()
|
|
point = cursor.pos()
|
|
menu.exec_(point)
|