Eden Editor: Configuring Menu Bar

From Bohemia Interactive Community
Revision as of 16:09, 29 November 2020 by R3vo (talk | contribs) (fixed link to ct_menu_strip)
Jump to navigation Jump to search

Menu Bar is the central control element of the Eden Editor, where all available options and tools are available. When adding a new functionality to the editor, you should strongly consider listing the feature there.

The menu bar is configured as a CT_MENU_STRIP, and it is possible to freely modify it from an addon. Because anyone can access the configuration, remember to tag your class names to make them unique (i.e., MyTag_AwesomeTool instead of just AwesomeTool).

Following code examples will show the most common ways how to extend the menu bar.

Tool

When you're adding a tool which has its own isolated functionality, Tools section is the best place where to put it.

Single

3den menuBar tool.jpg

class ctrlMenuStrip;
class display3DEN
{
	class Controls
	{
		class MenuStrip: ctrlMenuStrip
		{
			class Items
			{
				class Tools
				{
					items[] += {"ME_MyTool"}; // += must be used; you want to expand the array, not override it!
				};
				class ME_MyTool
				{
					text = "My Awesome Tool"; // Item text
					picture = "\MyAddon\data\myAwesomeTool_ca.paa"; // Item picture
					action = "[] call ME_fnc_MyAwesomeTool;";// Expression called upon clicking; ideally, it should call your custom function
                    opensNewWindow = 1;// Adds ... to the name of the menu entry, indicating the user that a new window will be opened.
				};
			};
		};
	};
};

Folder

If your feature is more complex and one menu item would not be enough to control it, you can instead add a folder with all required options inside.

3den menuBar toolFolder.jpg

class ctrlMenuStrip;
class display3DEN
{
	class Controls
	{
		class MenuStrip: ctrlMenuStrip
		{
			class Items
			{
				class Tools
				{
					items[] += {"ME_MyFolder"};
				};
				class ME_MyFolder
				{
					text = "My Awesome Folder...";
					items[] = {"ME_MyTool1", "ME_MyTool1"}; // Links to items inside the folder
				};
				class ME_MyTool1
				{
					text = "My Awesome Tool 1";
				};
				class ME_MyTool2
				{
					text = "My Awesome Tool 1";
				};
			};
		};
	};
};

Separators

To ensure the user is not overwhelmed by the sheer amount of tools it is recommended to not only use folders, but also seperators. You can add a seperator like so:

class ctrlMenuStrip;
class display3DEN
{
	class Controls
	{
		class MenuStrip: ctrlMenuStrip
		{
			class Items
			{
				class Tools
				{
					items[] += {"ME_MyFolder"};
				};
				class ME_MyFolder
				{
					text = "My Awesome Folder...";
					items[] = {"ME_MyTool1","Separator","ME_MyTool1"}; // The seperator is treated like any other tool
				};
				class ME_MyTool1
				{
					text = "My Awesome Tool 1";
				};
				class ME_MyTool2
				{
					text = "My Awesome Tool 1";
				};
			};
		};
	};
};

Scenario Attributes

When you add a new window with scenario attributes (see Attributes Modding to learn how it can be achieved), the user will still need a way how to access it. The best way is to add a link to the window at the end of Attributes option.

3den menuBar attributes.jpg

class ctrlMenuStrip;
class display3DEN
{
	class Controls
	{
		class MenuStrip: ctrlMenuStrip
		{
			class Items
			{
				class Attributes
				{
					items[] += {"ME_MyAttributes"};
				};
				class ME_MyAttributes
				{
					text = "My Awesome Attributes";
					action = "edit3DENMissionAttributes 'MyScenarioAttributes';";
				};
			};
		};
	};
};