public void Update()

in Clients/Xamarin.Interactive.Client.Windows/Views/MenuManager.cs [71:231]


        public void Update (IEditor editor = null)
        {
            rootMenu.Items.Clear ();
            fileMenu.Items.Clear ();

            // File
            if (ClientInfo.Flavor == ClientFlavor.Workbooks) {
                if (editor != null)
                    fileMenu.Items.Add (new MenuItem { Command = ApplicationCommands.New });

                fileMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Open });
                fileMenu.Items.Add (openRecentMenu);

                if (editor != null) {
                    fileMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Save });
                    fileMenu.Items.Add (new MenuItem { Command = ApplicationCommands.SaveAs });
                    fileMenu.Items.Add (new Separator ());
                    fileMenu.Items.Add (new MenuItem { Command = NuGetPackagesNode.AddPackage });
                    fileMenu.Items.Add (new Separator ());
                }
            }
            fileMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Close });
            rootMenu.Items.Add (fileMenu);

            if (editor != null) {
                // TODO: Re-enable when edit commands display properly for web editors
                //// Edit
                //var editMenu = new MenuItem { Header = "_Edit" };
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Undo });
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Redo });
                //editMenu.Items.Add (new Separator ());
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Cut });
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Copy });
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Paste });
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.Delete });
                //editMenu.Items.Add (new MenuItem { Command = ApplicationCommands.SelectAll });
                //rootMenu.Items.Add (editMenu);

                // Insert
                var insertMenu = new MenuItem { Header = "_Insert" };
                TryAddMenuItem (insertMenu, editor, "insertImage");
                TryAddMenuItem (insertMenu, editor, "insertHorizontalRule");
                if (insertMenu.Items.Count > 0)
                    rootMenu.Items.Add (insertMenu);

                // Format
                var formatMenu = new MenuItem {Header = "Fo_rmat"};

                var headingMenu = new MenuItem {Header = "Heading"};
                TryAddMenuItem (headingMenu, editor, "heading1");
                TryAddMenuItem (headingMenu, editor, "heading2");
                TryAddMenuItem (headingMenu, editor, "heading3");
                TryAddMenuItem (headingMenu, editor, "heading4");
                TryAddMenuItem (headingMenu, editor, "heading5");
                TryAddMenuItem (headingMenu, editor, "heading6");
                if (headingMenu.Items.Count > 0)
                    formatMenu.Items.Add (headingMenu);

                TryAddMenuItem (formatMenu, editor, "toggleStrong");
                TryAddMenuItem (formatMenu, editor, "toggleEm");
                TryAddMenuItem (formatMenu, editor, "toggleCode");
                TryAddMenuItem (formatMenu, editor, "toggleLink");

                if (formatMenu.Items.Count > 0)
                    rootMenu.Items.Add (formatMenu);
            }

            if (includeRunMenu) {
                var runMenu = new MenuItem { Header = "_Run" };
                runMenu.Items.Add (new MenuItem {
                    Header = "Run All",
                    Command = Commands.Commands.ExecuteAll,
                });
                rootMenu.Items.Add (runMenu);
            }

            // Tools
            var toolsMenu = new MenuItem { Header = "_Tools" };
            toolsMenu.Items.Add (new MenuItem {
                Header = "Preferences…",
                Command = Commands.Commands.ShowOptions,
            });
            rootMenu.Items.Add (toolsMenu);

            // Help
            var helpMenu = new MenuItem { Header = "_Help" };

            if (ClientInfo.Flavor == ClientFlavor.Workbooks) {
                var tutorialsItem = new MenuItem {
                    Header = "Tutorials"
                };

                try {
                    var workbookFiles = App.AppDirectory
                        .Combine ("Workbooks")
                        .EnumerateFiles ("*.workbook", SearchOption.TopDirectoryOnly);

                    foreach (var workbookFile in workbookFiles)
                        tutorialsItem.Items.Add (new MenuItem {
                            Header = workbookFile.NameWithoutExtension,
                            Command = Commands.Commands.OpenFile,
                            CommandParameter = workbookFile
                        });
                } catch (Exception e) {
                    Log.Error (nameof(MenuManager), e);
                }

                if (tutorialsItem.Items.Count > 0)
                    tutorialsItem.Items.Add (new Separator ());

                tutorialsItem.Items.Add (new MenuItem {
                    Header = ClientInfo.DownloadWorkbooksMenuLabel,
                    Command = Commands.Commands.OpenSampleWorkbooks
                });

                helpMenu.Items.Add (tutorialsItem);
            }

            helpMenu.Items.Add (new MenuItem {
                Header = "Support",
                Command = Commands.Commands.Help,
            });

            if (ClientInfo.Flavor != ClientFlavor.Inspector)
                helpMenu.Items.Add (new MenuItem {
                    Header = "Check for Updates",
                    Command = Commands.Commands.CheckForUpdates,
                    CommandParameter = window
                });

            helpMenu.Items.Add (new Separator ());

            helpMenu.Items.Add (new MenuItem {
                Header = Catalog.GetString ("Reveal Log File"),
                Command = new DelegateCommand (_ =>
                    Process.Start ("explorer.exe", $"/select,\"{ClientApp.SharedInstance.Paths.SessionLogFile}\"")),
            });

            helpMenu.Items.Add (new MenuItem {
                Header = Catalog.GetString ("Copy Version Information"),
                Command = new DelegateCommand (_ =>
                    Clipboard.SetDataObject (ClientApp.SharedInstance.IssueReport.GetEnvironmentMarkdown ())),
            });

            helpMenu.Items.Add (new Separator ());

            helpMenu.Items.Add (new MenuItem {
                Header = Catalog.GetString ("Report an Issue…"),
                Command = new DelegateCommand (_ =>
                    Process.Start (ClientApp.SharedInstance.IssueReport.GetIssueReportUrlForGitHub ())),
            });

            helpMenu.Items.Add (new Separator ());

            helpMenu.Items.Add (new MenuItem {
                Header = "About " + ClientInfo.FullProductName,
                Command = Commands.Commands.About,
                CommandParameter = window,
            });
            rootMenu.Items.Add (helpMenu);
        }