Hi @m_adam,
I found the solution below that allow to inject my custom menu just after the "IDM_SAVEALL" submenu of "File" menu, but the only problem now is with the following line:
FileMenu.InsData(c4d.MENURESOURCE_SUBTITLE, "File")
Because with this solution I must to rebuild all the "IDS_EDITOR_FILE" menu. and I'm searching how to grab the default sub-title of the "IDS_EDITOR_FILE" menu depending on the user interface language. So is there method to get the default subtitle of "IDS_EDITOR_FILE".
Thanks.
import c4d, os, sys
def GetMenuContainer(name):
mainMenu = c4d.gui.GetMenuResource("M_EDITOR")
customMenu = c4d.BaseContainer()
for bcMenuId, bcMenu in mainMenu:
if bcMenu[c4d.MENURESOURCE_SUBTITLE] == "IDS_EDITOR_FILE":
customMenu = mainMenu.GetContainerInstance(bcMenuId)
break
if customMenu is not None:
customMenu.FlushAll()
def AddsMenuToC4DMenu(MenuContainer):
MainMenu = c4d.gui.GetMenuResource("M_EDITOR")
FileMenu = c4d.BaseContainer()
FileMenu.InsData(c4d.MENURESOURCE_SUBTITLE, "File")
for bcMenuId, bcMenu in MainMenu:
if bcMenu[c4d.MENURESOURCE_SUBTITLE] == "IDS_EDITOR_FILE":
for _bcMenuId, _bcMenu in bcMenu:
if _bcMenu == "IDM_SAVEALL":
cs_menu = c4d.BaseContainer()
cs_menu.InsData(c4d.MENURESOURCE_SUBTITLE, "My Menu")
cs_menu.InsData(c4d.MENURESOURCE_COMMAND, "PLUGIN_CMD_{}".format(menu_id1))
cs_menu.InsData(c4d.MENURESOURCE_COMMAND, "PLUGIN_CMD_{}".format(menu_id2))
cs_menu.InsData(c4d.MENURESOURCE_SEPERATOR, 1) # Append separator
cs_menu.InsData(c4d.MENURESOURCE_COMMAND, "PLUGIN_CMD_{}".format(menu_id3))
FileMenu.InsData(1, cs_menu)
FileMenu.InsData(c4d.MENURESOURCE_SEPERATOR, 1)
FileMenu.InsData(_bcMenuId, _bcMenu)
MainMenu.InsDataAfter(c4d.MENURESOURCE_STRING, FileMenu, MenuContainer)
def PluginMessage(id, data):
if id == c4d.C4DPL_BUILDMENU:
MenuContainer = c4d.gui.SearchPluginMenuResource("IDS_EDITOR_FILE")
AddsMenuToC4DMenu(MenuContainer)
GetMenuContainer("IDS_EDITOR_FILE")
c4d.gui.UpdateMenus()