/// <summary>
        /// Factory method to create the singleton instance
        /// </summary>
        /// <returns></returns>
        public static async Task Create()
        {
            if (Instance != null)
            {
                return;
            }
            var browserWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions
            {
                Title  = "ZX Spectrum IDE",
                Width  = 1152,
                Height = 864,
                Show   = true,
                Frame  = false
            });

            Instance = new AppWindow(browserWindow);
            browserWindow.OnReadyToShow += () =>
            {
                Console.WriteLine("OnReadyToShow invoked");
                browserWindow.Show();
            };
            browserWindow.OnFocus      += () => StateStore.Dispatch(new AppGotFocusAction());
            browserWindow.OnBlur       += () => StateStore.Dispatch(new AppLostFocusAction());
            browserWindow.OnRestore    += () => StateStore.Dispatch(new RestoreWindowAction());
            browserWindow.OnMaximize   += () => StateStore.Dispatch(new MaximizeWindowAction());
            browserWindow.OnMinimize   += () => StateStore.Dispatch(new MinimizeWindowAction());
            browserWindow.OnUnmaximize += () => StateStore.Dispatch(new RestoreWindowAction());
        }
Beispiel #2
0
        public void AllIsWell()
        {
            var store = new StateStore();

            store.AddController("CurrentHealth", new CurrentHealthController());

            store.Dispatch(new StoreAction {
                Type    = "UpdateCurrentHealth",
                Payload = 20f
            });

            Assert.AreEqual(store.GetState <float>("CurrentHealth"), 20f);
        }
        public void SetupMenu()
        {
            // --- Create the command structure that represents the main menu
            var aboutGroup = new UiMenuItem()
                             .Append(new AboutCommand());

            var preferencesGroup = new UiMenuItem()
                                   .Append(new OptionsCommand());

            var servicesGroup = new UiMenuItem()
                                .Append(new ElectronShellMenuItem(MenuRole.services));

            var appWindowGroup = new UiMenuItem()
                                 .Append(new ElectronShellMenuItem(MenuRole.hide))
                                 .Append(new ElectronShellMenuItem(MenuRole.hideothers))
                                 .Append(new ElectronShellMenuItem(MenuRole.unhide));

            var quitGroup = new UiMenuItem()
                            .Append(new ElectronShellMenuItem(MenuRole.quit, "E&xit"));

            var darwinMenu = new UiMenuItem("darwin", "ZX Spectrum IDE")
                             .Append(aboutGroup)
                             .Append(preferencesGroup)
                             .Append(servicesGroup)
                             .Append(appWindowGroup)
                             .Append(quitGroup);

            var createGroup = new UiMenuItem()
                              .Append(new NewProjectCommand())
                              .Append(new OpenProjectCommand());

            var closeGroup = new UiMenuItem()
                             .Append(new CloseProjectCommand());

            var fileGroup = new UiMenuItem("file", PlatformHelper.IsDarwin ? "File" : "&File")
                            .Append(createGroup)
                            .Append(closeGroup);

            if (!PlatformHelper.IsDarwin)
            {
                fileGroup.Append(preferencesGroup);
            }
            fileGroup.Append(quitGroup);

            var explorerGroup = new UiMenuItem()
                                .Append(new ShowExplorerCommand())
                                .Append(new ShowSpectrumEmulatorCommand());

            var spectrumWindowsGroup = new UiMenuItem()
                                       .Append(new ShowRegistersCommand())
                                       .Append(new ShowDisassemblyCommand())
                                       .Append(new ShowMemoryCommand());

            var devToolsGroup = new UiMenuItem()
                                .Append(new ShowDevToolsCommand());

            var viewGroup = new UiMenuItem("view", PlatformHelper.IsDarwin ? "View" : "&View")
                            .Append(explorerGroup)
                            .Append(spectrumWindowsGroup)
                            .Append(devToolsGroup);

            var help1Group = new UiMenuItem()
                             .Append(new UiMenuItem("help-topic-1", "Help topic #1"))
                             .Append(new UiMenuItem("help-topic-2", "Help topic #2").Enable(false));

            var help3SubGroup = new UiMenuItem("help-topic-3", "Help topic #&3")
                                .Append(new UiMenuItem("help-topic-31", "Help topic #31"))
                                .Append(new UiMenuItem("help-topic-32", "Help topic #32"))
                                .Append(new UiMenuItem("help-topic-33", "Help topic #33"));

            var help4SubGroup = new UiMenuItem("help-topic-4", "Help topic #4").Enable(false)
                                .Append(new UiMenuItem("help-topic-41", "Help topic #41"))
                                .Append(new UiMenuItem("help-topic-42", "Help topic #42"))
                                .Append(new UiMenuItem("help-topic-43", "Help topic #43"));

            var help2Group = new UiMenuItem()
                             .Append(help3SubGroup)
                             .Append(help4SubGroup);

            var helpMenu = new UiMenuItem("help", "H&elp")
                           .Append(help1Group)
                           .Append(help2Group);

            AppMenu = new UiMenuItem();
            if (PlatformHelper.IsDarwin)
            {
                AppMenu.Append(darwinMenu);
            }
            AppMenu
            .Append(fileGroup)
            .Append(viewGroup)
            .Append(helpMenu);

            // --- Convert the command structure into Electron menu
            BuildDefaultMenuFromCommands();

            // --- Now, set the menu
            try
            {
                Electron.Menu.SetApplicationMenu(_appMenu);
                Console.WriteLine("Electron menu set");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"App Menu Error: {ex}");
            }

            // --- Set the menu state
            Console.WriteLine("Setting app menu");
            StateStore.Dispatch(new SetAppMenuAction(AppMenu));
        }