Use enum in settings to toggle between the two menu build options

This commit is contained in:
Roy Nieterau 2024-04-03 22:55:44 +02:00
parent e80c400e5d
commit 0b16bfc42c
2 changed files with 26 additions and 18 deletions

View file

@ -215,11 +215,12 @@ def install(project_settings):
)
return
_menu = project_settings["maya"]["scriptsmenu"]["name"]
menu_settings = project_settings["maya"]["scriptsmenu"]
menu_name = menu_settings["name"]
config = menu_settings["definition"]
config = project_settings["maya"]["scriptsmenu"]["definition"]
if project_settings["maya"]["scriptsmenu"].get("use_json_definition"):
data = project_settings["maya"]["scriptsmenu"]["definition_json"]
if menu_settings.get("definition_type") == "definition_json":
data = menu_settings["definition_json"]
try:
config = json.loads(data)
except json.JSONDecodeError as exc:
@ -233,8 +234,8 @@ def install(project_settings):
# run the launcher for Maya menu
studio_menu = launchformaya.main(
title=_menu.title(),
objectName=_menu.title().lower().replace(" ", "_")
title=menu_name.title(),
objectName=menu_name.title().lower().replace(" ", "_")
)
# apply configuration

View file

@ -18,29 +18,36 @@ class ScriptsmenuSubmodel(BaseSettingsModel):
)
_definition_mode_type = [
{"value": "definition", "label": "Menu Builder"},
{"value": "definition_json", "label": "Raw JSON (advanced)"}
]
class ScriptsmenuModel(BaseSettingsModel):
"""Add a custom scripts menu to Maya"""
_isGroup = True
name: str = SettingsField(title="Menu Name")
use_json_definition: bool = SettingsField(
title="Use Raw JSON Definition",
description="When enabled, the definition field will be ignored. "
"Instead the menu will be build from the raw JSON "
"definition below it."
definition_type: str = SettingsField(
title="Define menu using",
description="Choose the way to define the custom scripts menu "
"via settings",
enum_resolver=lambda: _definition_mode_type,
conditionalEnum=True,
default="definition"
)
definition: list[ScriptsmenuSubmodel] = SettingsField(
default_factory=list,
title="Menu Definition",
description="Scriptmenu Items Definition"
)
definition_json: str = SettingsField(
"[]", title="Definition JSON", widget="textarea",
"[]", title="Menu Definition JSON", widget="textarea",
description=(
"When Use Raw JSON definition is enabled this field will be used "
"to put the direct JSON content instead of using the definition "
"menu builder UI above. For more details on the JSON format, see "
"Define the custom tools menu using a JSON list. "
"For more details on the JSON format, see "
"[here](https://github.com/Colorbleed/scriptsmenu?tab=readme-ov-file#configuration)." # noqa: E501
)
)
@ -64,7 +71,7 @@ class ScriptsmenuModel(BaseSettingsModel):
DEFAULT_SCRIPTSMENU_SETTINGS = {
"name": "Custom Tools",
"use_json_definition": False,
"definition_type": "definition",
"definition": [
{
"type": "action",
@ -78,5 +85,5 @@ DEFAULT_SCRIPTSMENU_SETTINGS = {
]
}
],
"definition_raw": ""
"definition_json": "[]"
}