using PixiEditor.Extensions.CommonApi.Commands; using PixiEditor.Extensions.Sdk; namespace Sample8_Menu; public class CommandsSampleExtension : PixiEditorExtension { /// /// This method is called when extension is loaded. /// All extensions are first loaded and then initialized. This method is called before . /// public override void OnLoaded() { } /// /// This method is called when extension is initialized. After this method is called, you can use Api property to access PixiEditor API. /// public override void OnInitialized() { // A good practice is to use localization keys instead of hardcoded strings. // And add them to the localization file. Check Sample2_LocalizationSample for more information. CommandMetadata firstCommand = new CommandMetadata("Loggers.WriteHello"); firstCommand.DisplayName = "Write Hello"; // can be localized firstCommand.Description = "Writes Hello to the log"; // can be localized // Either an icon key (https://github.com/PixiEditor/PixiEditor/blob/master/src/PixiEditor.UI.Common/Fonts/PixiPerfectIcons.axaml) // or unicode character firstCommand.Icon = "icon-terminal"; firstCommand.MenuItemPath = "AWESOME_LOGGER/Write Hello"; // AWESOME_LOGGER is taken from localization, same can be done for the rest firstCommand.Shortcut = new Shortcut(Key.H, KeyModifiers.Control | KeyModifiers.Alt); Api.Commands.RegisterCommand(firstCommand, () => { Api.Logger.Log("Hello from the command!"); }); int clickedCount = 0; CommandMetadata secondCommand = new CommandMetadata("Loggers.WriteClickedCount"); secondCommand.DisplayName = "Write Clicked Count"; secondCommand.Description = "Writes clicked count to the log"; secondCommand.Icon = "icon-terminal"; secondCommand.MenuItemPath = "EDIT/Write Clicked Count"; // append to EDIT menu secondCommand.Order = 1000; // Last secondCommand.Shortcut = new Shortcut(Key.C, KeyModifiers.Control | KeyModifiers.Alt); Api.Commands.RegisterCommand(secondCommand, () => { clickedCount++; Api.Logger.Log($"Clicked {clickedCount} times"); }); } }