Plugin Cafe Homepage
Forum Home Forum Home > Plugin Cafe > SDK Help
  New Posts New Posts
  FAQ FAQ  Forum Search

Enhance Menu in the Plugin Menu

Author
Message
  Topic Search Topic Search
DSchmidt View Drop Down
Member
Member


Joined: 2012 Jun 19
Online Status: Offline
Posts: 135
Direct Link To This Post Topic: Enhance Menu in the Plugin Menu
    Posted: 2018 Jun 21 at 2:33pm

User Information:

Cinema 4D Version:   14 
Platform:    Mac  ;  
Language(s):     C++  ;   

---------

Hello, I'm trying to get more control of how my plugins look in the Plugins Menu.  I want to be able to have different plugins within different folders within the same compile.  I was hoping to be able to use the EnhanceMainMenu() example function from the cinema4dsdk examples to achieve this.   

So I want to create a folder under Plugins, not in the Menu bar.  My current issue is that it always adds the folder, named here "At the Bottom", to the bottom of the Plugins Menu, instead of between the separators.  I'd want the folder being inserted above or below "Cinema4dsdk" in this example.      

Any help would be appreciated!


My current code:  

void EnhanceMainMenu(void)
{
BaseContainer *bc;
bc = SearchPluginMenuResource()->GetContainer();
if (SearchMenuResource(bc,String("PLUGIN_CMD_1000472")))
return;

//I think this is whats wrong, not sure what to do

GeData *last = SearchPluginSubMenuResource(String("IDM_EXECUTE_LAST")); 

if (last)

{

BaseContainer sc;

        sc.InsData(MENURESOURCE_SUBTITLE,String("SDK Test"));

        sc.InsData(MENURESOURCE_COMMAND,String("IDM_NEU")); // add C4D's new scene command to menu

        sc.InsData(MENURESOURCE_SEPERATOR,TRUE);

        sc.InsData(MENURESOURCE_COMMAND,String("PLUGIN_CMD_1000472")); // add ActiveObject dialog to menu

        bc->InsDataAfter(MENURESOURCE_STRING,sc,last);

    }

else // user killed plugin menu - add as last overall entry 

    {

        BaseContainer sc;

        sc.InsData(MENURESOURCE_SUBTITLE,String("At the Bottom"));//To show that it's not working

        sc.InsData(MENURESOURCE_COMMAND,String("IDM_NEU")); // add C4D's new scene command to menu

sc.InsData(MENURESOURCE_SEPERATOR,TRUE);

        sc.InsData(MENURESOURCE_COMMAND,String("PLUGIN_CMD_1000472")); // add ActiveObject dialog to menu

        bc->InsData(MENURESOURCE_STRING,sc);

    }

}





Edited by DSchmidt - 2018 Jun 21 at 2:33pm
Back to Top
C4DS View Drop Down
Member
Member


Joined: 2015 Dec 01
Online Status: Offline
Posts: 235
Direct Link To This Post Posted: 2018 Jun 21 at 10:45pm
I have several plugins that show up with sub menu entries. As far as I remember I didn't use EnhanceMainMenu to achieve this. Just register the different plugins in your PluginStart, and they all should appear as child of the main plugin entry. Additionally, (in my cases) the main plugin entry is exactly where you wish these should appear ... without performing anything specific.

The only thing I did was to add an ordering to the list of the sub menu items.


In case of PolyGnome following are the string entries to sort the 3 plugins, using the "#$xx" prepending to sort them according value.

STRINGTABLE
{
    // sorted entries in the plugin menu
    IDS_POLYGNOME_SORTED    "#$01PolyGnome";
    IDS_JUNKYARD_SORTED        "#$02Junkyard";
    IDS_ASSETIZER_SORTED    "#$03Assetizer";

These are the strings used during registering the plugin via RegisterCommandPlugin()


Back to Top
Andreas Block View Drop Down
Forum Moderator
Forum Moderator
Avatar

Joined: 2014 Oct 01
Location: Hannover
Online Status: Offline
Posts: 1878
Direct Link To This Post Posted: 2018 Jun 22 at 9:11am
Hi,

in general C4Ds is right, the plugins menu content is dynamically built and four grouping of plugins one does not need to do anything special, except having all plugins in one sub-folder in the plugins folder.

But I read the original question a bit differently. I think it's more about sorting the top level of the Plugins menu and having several plugins implemented in a single executable sorted into multiple sub-menus. That's probably not possible with the Plugins menu due to its dynamic nature.

Instead you could create your own menu in the main menu bar (note though, Cinema 4D knows a plethora of menu bar layouts belonging to different managers and/or window layouts).
I'll post some example code how to add to the main menu next week.
Cheers,
Andreas
SDK Support Engineer
Back to Top
DSchmidt View Drop Down
Member
Member


Joined: 2012 Jun 19
Online Status: Offline
Posts: 135
Direct Link To This Post Posted: 2018 Jun 25 at 8:53am
Hi Andreas,

I was trying to get the "#$xx" prepending to work in the past but it didn't seem to be doing what I wanted exactly.  The second picture you linked is what I'm trying to achieve in a single compile.

FOLDER
        PLUGIN 1
        PLUGIN 2
                SUBSUBFOLDER
                        PLUGIN 3
                        PLUGIN 4
        PLUGIN 5

From my attempts I was only able to get different subsubfolders with a separate compile and then I couldn't order them, the subsubfolders, so they weren't at the top of my folder.  Is this layout possible with just the "#$xx" prepending?
  

Back to Top
Andreas Block View Drop Down
Forum Moderator
Forum Moderator
Avatar

Joined: 2014 Oct 01
Location: Hannover
Online Status: Offline
Posts: 1878
Direct Link To This Post Posted: 2018 Jun 26 at 8:13am
Hi,

just to re-assure, C4DS, I guess, the "sub-sub-menus" were done via sub-commands, right?

So, these are basically the options you have in the Plugins menu. All plugins from one folder in the plugins directory, regardless if these are in one or multiple binaries, will appear in a folder in Plugins menu. These can be reordered as shown by C4DS, in you case these would be PLUGIN1, PLUGIN 2 and PLUGIN 5. The SUBSUBFOLDER (also visible in C4DS' screenshot on the right) to my knowledge can only be realized by sub-commands of a CommandData (GetSubContainer() and ExecuteSubID()). For ObjectData plugins for example I don't think this is directly possible. On the other hand you could hide such from the Plugins menu (PLUGINFLAG_HIDEPLUGINMENU) and then have commands creating these...

Cheers,
Andreas
SDK Support Engineer
Back to Top
C4DS View Drop Down
Member
Member


Joined: 2015 Dec 01
Online Status: Offline
Posts: 235
Direct Link To This Post Posted: 2018 Jun 26 at 10:24am
Ooooh-kay!
I didn't mean to bring up the sub-sub-menu thing by providing the screenshot I made. My only meaning was to show that by default my plugins (multiple plugins in one executable) are listed in the required location between the separators.

But OK, let's provide some details for that screenshot.

For the PolyGnome plugin, I simply register the different plugins (all CommandDatas) in the PluginStart of one executable. This gives a single entry in the main plugins folder, with the name that of the single executable.

For the Seamilar plugin, I used a separate CommandData which implements GetSubContainer and ExecuteSubID.
But I am not sure I would ever do that again in a next plugin, as the sub-sub-menu does have some side effects.



Back to Top
Andreas Block View Drop Down
Forum Moderator
Forum Moderator
Avatar

Joined: 2014 Oct 01
Location: Hannover
Online Status: Offline
Posts: 1878
Direct Link To This Post Posted: 2018 Jun 27 at 8:03am
Thanks for the info, C4DS.
May I ask, which side effects you encountered with sub-commands? So far we aren't aware of any.

Cheers,
Andreas
SDK Support Engineer
Back to Top
C4DS View Drop Down
Member
Member


Joined: 2015 Dec 01
Online Status: Offline
Posts: 235
Direct Link To This Post Posted: 2018 Jun 27 at 11:55am
Sorry Andreas, I don't have the details at hand. All issues were feedback from my plugin customers.

I remember vaguely an issue where undocking the plugin submenu resulted in some confusions to the customer. No more details I am afraid, but I just tried and it all comes back to me now.

With my Seamilar plugin, when I select the main plugin in the Cinema 4D plugins menu, the sub menu is shown, including the (collapsed) sub-sub menus.
If I now click on the "dot-bars"of the sub-menu, actually undocking the sub-menu, I loose the sub-sub menus.
Probably something missing in my code ... I guess.

Another point was that the using multi key short-cuts and "#$xx" to sort the plugins did display that sorting number in the short-cut popup window ... I think I mentioned it here at the forum and it was confirmed to be a bug. This might already be resolved, however.

I am trying to perform a search on these topics I but am unlucky in finding back these specific posts.
Back to Top
Andreas Block View Drop Down
Forum Moderator
Forum Moderator
Avatar

Joined: 2014 Oct 01
Location: Hannover
Online Status: Offline
Posts: 1878
Direct Link To This Post Posted: 2018 Jun 28 at 9:56am
No need to be sorry. Quite the opposite. Thanks for taking the time and pointing this out to us. Really appreciated.

Cheers,
Andreas
SDK Support Engineer
Back to Top

Forum Jump Forum Permissions View Drop Down

Bulletin Board Software by Web Wiz Forums® version 9.61 [Free Express Edition]
Copyright ©2001-2009 Web Wiz

This page was generated in 0.105 seconds.