From e795cd90d7ab4500be9acad30a08517d8fcf9457 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 12 Nov 2018 23:37:13 +0100 Subject: [PATCH] PLN-198: Add quick icons for Loader/Manager in toolbox in Maya (draft) --- colorbleed/maya/__init__.py | 12 +++-- colorbleed/maya/customize.py | 76 +++++++++++++++++++++++++++- res/icons/colorbleed_logo_36x36.png | Bin 0 -> 20198 bytes res/icons/inventory.png | Bin 0 -> 15767 bytes res/icons/loader.png | Bin 0 -> 408 bytes 5 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 res/icons/colorbleed_logo_36x36.png create mode 100644 res/icons/inventory.png create mode 100644 res/icons/loader.png diff --git a/colorbleed/maya/__init__.py b/colorbleed/maya/__init__.py index 4e7bb677b4..6e6d0ca869 100644 --- a/colorbleed/maya/__init__.py +++ b/colorbleed/maya/__init__.py @@ -98,18 +98,24 @@ def on_init(_): utils.executeDeferred(_fn) except Exception as exc: print(exc) - + # Force load Alembic so referenced alembics # work correctly on scene open cmds.loadPlugin("AbcImport", quiet=True) cmds.loadPlugin("AbcExport", quiet=True) - + # Force load objExport plug-in (requested by artists) cmds.loadPlugin("objExport", quiet=True) - from .customize import override_component_mask_commands + from .customize import ( + override_component_mask_commands, + override_toolbox_ui + ) safe_deferred(override_component_mask_commands) + if not IS_HEADLESS: + safe_deferred(override_toolbox_ui) + def on_before_save(return_code, _): """Run validation for scene's FPS prior to saving""" diff --git a/colorbleed/maya/customize.py b/colorbleed/maya/customize.py index 64f33d5aae..4de78fba43 100644 --- a/colorbleed/maya/customize.py +++ b/colorbleed/maya/customize.py @@ -3,6 +3,7 @@ import maya.cmds as mc import maya.mel as mel from functools import partial +import os import logging @@ -17,7 +18,7 @@ def override_component_mask_commands(): This implements special behavior for Maya's component mask menu items where a ctrl+click will instantly make it an isolated behavior disabling all others. - + Tested in Maya 2016 and 2018 """ @@ -64,3 +65,76 @@ def override_component_mask_commands(): original = COMPONENT_MASK_ORIGINAL[btn] new_fn = partial(on_changed_callback, original) mc.iconTextCheckBox(btn, edit=True, cc=new_fn) + + +def override_toolbox_ui(): + """Add custom buttons in Toolbox as replacement for Maya web help icon.""" + + import colorbleed + res = os.path.join(os.path.dirname(os.path.dirname(colorbleed.__file__)), + "res") + icons = os.path.join(res, "icons") + + import avalon.tools.cbsceneinventory as inventory + import avalon.tools.cbloader as loader + + # Ensure the maya web icon on toolbox exists + web_button = "ToolBox|MainToolboxLayout|mayaWebButton" + if not mc.iconTextButton(web_button, query=True, exists=True): + return + + mc.iconTextButton(web_button, edit=True, visible=False) + + # real = 32, but 36 with padding - according to toolbox mel script + icon_size = 36 + parent = web_button.rsplit("|", 1)[0] + + # Ensure the parent is a formLayout + if not mc.objectTypeUI(parent) == "formLayout": + return + + # Create our controls + controls = [] + + control = mc.iconTextButton( + "colorbleed_toolbox_loader", + annotation="Loader", + label="Loader", + image=os.path.join(icons, "loader.png"), + command=lambda: loader.show(use_context=True), + width=icon_size, + height=icon_size, + parent=parent) + controls.append(control) + + control = mc.iconTextButton( + "colorbleed_toolbox_manager", + annotation="Inventory", + label="Inventory", + image=os.path.join(icons, "inventory.png"), + command=lambda: inventory.show(), + width=icon_size, + height=icon_size, + parent=parent) + controls.append(control) + + control = mc.iconTextButton( + "colorbleed_toolbox", + annotation="Colorbleed", + label="Colorbleed", + image=os.path.join(icons, "colorbleed_logo_36x36.png"), + width=icon_size, + height=icon_size, + parent=parent) + controls.append(control) + + # Add the buttons on the bottom and stack + # them above each other with side padding + controls.reverse() + for i, control in enumerate(controls): + previous = controls[i - 1] if i > 0 else web_button + + mc.formLayout(parent, edit=True, + attachControl=[control, "bottom", 1, previous], + attachForm=([control, "left", 1], + [control, "right", 1])) diff --git a/res/icons/colorbleed_logo_36x36.png b/res/icons/colorbleed_logo_36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..847a85c2282d4acd024bc8d719877c09660581df GIT binary patch literal 20198 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 literal 0 HcmV?d00001 diff --git a/res/icons/inventory.png b/res/icons/inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..34f6488233b392963ce954263e0218f0e0079885 GIT binary patch literal 15767 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