public void PopulateMenu(ProjectItemBase item) { if (item == null) { return; } MenuItems.Clear(); MenuItemBase parentMenuItem = null; foreach (var command in item.OptionCommands) { MenuItemBase newMenuItem = null; // fake command definition if (command.CommandDefinition is FakeCommandDefinition) { // reset parent if (string.IsNullOrEmpty(command.CommandDefinition.Name)) { parentMenuItem = null; } // fake to add separator else if (command.CommandDefinition.Name == "|") { newMenuItem = new MenuItemSeparator(); } // fake to set parent else if (command.CommandDefinition.Name.Contains('|')) { // extract ancestors var parentNames = command.CommandDefinition.Name.Trim().Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); // reset parent if (parentNames.Length == 0) { parentMenuItem = null; } // find parent else { parentMenuItem = MenuItems.OfType <StandardMenuItem>().FirstOrDefault(p => p.Text == parentNames[0]); if (parentMenuItem == null) { parentMenuItem = new DisplayMenuItem(parentNames[0]); MenuItems.Add(parentMenuItem); } for (var i = 1; i < parentNames.Length; i++) { var nextMenuItem = parentMenuItem.Children.OfType <StandardMenuItem>().FirstOrDefault(p => p.Text == parentNames[i]); if (nextMenuItem == null) { nextMenuItem = new DisplayMenuItem(parentNames[i]); parentMenuItem.Children.Add(nextMenuItem); } parentMenuItem = nextMenuItem; } } } } else { newMenuItem = new Idealde.Modules.MainMenu.Models.CommandMenuItem(command); command.Tag = item; } if (newMenuItem == null) { continue; } if (parentMenuItem != null) { parentMenuItem.Children.Add(newMenuItem); } else { MenuItems.Add(newMenuItem); } } }
private void BuildMenu() { //< File menu var fileMenu = new Menu("File", Resources.FileMenuText); MainMenu.AddMenu(fileMenu); var fileNewMenu = new DisplayMenuItem("File.New", Resources.FileNewMenuText); var fileOpenMenu = new DisplayMenuItem("File.Open", Resources.FileOpenMenuText); var fileCloseMenu = new CommandMenuItem <CloseFileCommandDefinition>("File.Close"); var fileSaveMenu = new CommandMenuItem <SaveFileCommandDefinition>("File.Save"); var fileSaveAsMenu = new CommandMenuItem <SaveFileAsCommandDefinition>("File.SaveAs"); var fileExitMenu = new CommandMenuItem <ExitCommandDefinition>("File.Exit"); MainMenu.AddMenuItem(fileMenu, fileNewMenu, fileOpenMenu, new MenuItemSeparator("File.S1"), fileCloseMenu, new MenuItemSeparator("File.S2"), fileSaveMenu, fileSaveAsMenu, new MenuItemSeparator("File.S3"), fileExitMenu); //< File.New menu var fileNewCppProjectMenu = new CommandMenuItem <NewCppProjectCommandDefinition>("File.New.CppProject"); var fileNewCppHeaderMenu = new CommandMenuItem <NewCppHeaderCommandDefinition>("File.New.CppHeader"); var fileNewCppSourceMenu = new CommandMenuItem <NewCppSourceCommandDefinition>("File.New.CppSource"); MainMenu.AddMenuItem(fileNewMenu, fileNewCppProjectMenu, new MenuItemSeparator("File.New.S1"), fileNewCppHeaderMenu, fileNewCppSourceMenu); //> File.New menu //< File.Open menu var fileOpenProjectMenu = new CommandMenuItem <OpenProjectCommandDefinition>("File.Open.Project"); var fileOpenFileMenu = new CommandMenuItem <OpenFileCommandDefinition>("File.Open.File"); MainMenu.AddMenuItem(fileOpenMenu, fileOpenFileMenu, fileOpenProjectMenu); //> File.Open menu //> File menu //< Edit menu var editMenu = new Menu("Edit", Resources.EditMenuText); MainMenu.AddMenu(editMenu); var editUndoMenu = new CommandMenuItem <UndoCommandDefinition>("Edit.Undo"); var editRedoMenu = new CommandMenuItem <RedoCommandDefinition>("Edit.Redo"); var editCutMenu = new DisplayMenuItem("Edit.Cut", Resources.EditCutCommandText); var editCopyMenu = new DisplayMenuItem("Edit.Copy", Resources.EditCopyCommandText); var editPasteMenu = new DisplayMenuItem("Edit.Paste", Resources.EditPasteCommandText); var editSelectAllMenu = new DisplayMenuItem("Edit.SelectAll", Resources.EditSelectAllCommandText); var editGotoMenu = new DisplayMenuItem("Edit.Goto", Resources.EditGotoCommadText); var editFindAndReplaceMenu = new DisplayMenuItem("Edit.FindAndReplace", Resources.EditFindAndReplaceCommandText); MainMenu.AddMenuItem(editMenu, editUndoMenu, editRedoMenu, new MenuItemSeparator("Edit.S1"), editCutMenu, editCopyMenu, editPasteMenu, new MenuItemSeparator("Edit.S2"), editSelectAllMenu, new MenuItemSeparator("Edit.S3"), editGotoMenu, editFindAndReplaceMenu); //> Edit menu //< View menu var viewMenu = new Menu("View", Resources.ViewMenuText); MainMenu.AddMenu(viewMenu); var viewProjectExplorer = new CommandMenuItem <ViewProjectExplorerCommandDefinition>("View.ProjectExplorer"); var viewOutputMenu = new CommandMenuItem <ViewOutputCommandDefinition>("View.Output"); var viewErrorListMenu = new CommandMenuItem <ViewErrorListCommandDefinition>("View.ErrorList"); MainMenu.AddMenuItem(viewMenu, viewProjectExplorer, viewOutputMenu, viewErrorListMenu); //> View menu //< Run menu var runMenu = new Menu("Run", Resources.RunMenuText); MainMenu.AddMenu(runMenu); var runCompileSingleFileMenu = new CommandMenuItem <CompileSingleFileCommandDefinition>("Run.CompileSingleFile"); var runRunSingleFileMenu = new CommandMenuItem <RunSingleFileCommandDefinition>("Run.RunSingleFile"); var runCompileAndRunSingleFileMenu = new CommandMenuItem <CompileAndRunSingleFileCommandDefinition>("Run.CompileAndRunSingleFile"); var runCompileProjectMenu = new CommandMenuItem <CompileProjectCommandDefinition>("Run.CompileProject"); var runRunProjectMenu = new CommandMenuItem <RunProjectCommandDefinition>("Run.RunProject"); MainMenu.AddMenuItem(runMenu, runCompileSingleFileMenu, runRunSingleFileMenu, runCompileAndRunSingleFileMenu, new MenuItemSeparator("Run.S1"), runCompileProjectMenu, runRunProjectMenu); //> Run menu //< Tools menu var toolsMenu = new Menu("Tool", Resources.ToolsMenuText); MainMenu.AddMenu(toolsMenu); var toolsSettingsMenu = new CommandMenuItem <OpenSettingsCommandDefinition>("Tool.Settings"); MainMenu.AddMenuItem(toolsMenu, toolsSettingsMenu); //> Tools menu }