private RadialMenuItem GetSettingsButton(OneLauncherViewModel vm)
        {
            var settingsButton = new RadialMenuItem
            {
                Header = "Settings",
                Icon   = new Image()
                {
                    Source = Resources.Settings.ToImageSource(),
                    Width  = 25,
                    Height = 25
                }
            };

            settingsButton.Click += (s, e) => vm.OpenSettingsCommand.Execute(null);

            return(settingsButton);
        }
        public IEnumerable <RadialMenuItem> BuildMenuItems(IEnumerable <LaunchersNode> launchers, OneLauncherViewModel vm)
        {
            var items = new List <RadialMenuItem>();

            if (launchers != null)
            {
                foreach (var item in launchers)
                {
                    items.Add(GetNodeMenuItem(item));
                }
            }

            var settingsButton = GetSettingsButton(vm);

            items.Add(settingsButton);

            return(items);
        }
示例#3
0
        public void ShouldInitializeLaunchersWhenLoaded(bool defaultSettings)
        {
            var settings = new Mock <ISettingsView>(MockBehavior.Strict);

            // When the settings are the default ones, it means it's the first time the app is launched
            // We'll open the settings view, before the load is completed, to let the user defines his repositories location
            if (defaultSettings)
            {
                settings
                .Setup(mock => mock.ShowDialog())
                .Returns(true)
                .Verifiable();
            }

            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterInstance(settings.Object).As <ISettingsView>();

            using (ContainerOverrider.Override(containerBuilder.Build()))
            {
                var launchersNodes = new[] { new LaunchersNode()
                                             {
                                                 Header = "Header1"
                                             } };

                var loader = new Mock <IConfigurationLoader>(MockBehavior.Strict);
                loader
                .Setup(mock => mock.LoadConfiguration(Environment.CurrentDirectory))
                .Returns(launchersNodes)
                .Verifiable();

                var context = new OneLaunchContextMock().WithUserSettings(new UserSettings()
                {
                    IsDefaultSettings = defaultSettings
                });

                var vm = new OneLauncherViewModel()
                {
                    ConfigurationLoader = loader.Object,
                    Context             = context
                };

                var builder  = new Mock <IRadialMenuItemBuilder>(MockBehavior.Strict);
                var menuItem = new RadialMenuItem();
                builder
                .Setup(mock => mock.BuildMenuItems(It.IsIn <IEnumerable <LaunchersNode> >(launchersNodes), It.IsIn(vm)))
                .Returns(new[] { menuItem })
                .Verifiable();

                vm.RadialMenuItemBuilder = builder.Object;

                // As long as the load is not completed, the VM should maintain the view closed
                Assert.That(vm.IsOpened, Is.False);

                var initialLaunchers = vm.Launchers;
                Assert.That(initialLaunchers, Has.Count.EqualTo(0));

                vm.LoadedCommand.Execute(null);

                WaitUtils.WaitFor(() => vm.IsOpened, 10, 1);

                Assert.That(vm.Launchers, Has.Count.EqualTo(1));
                Assert.That(vm.Launchers[0], Is.SameAs(menuItem));

                // Now it should be opened
                Assert.That(vm.IsOpened, Is.True);

                loader.VerifyAll();
                builder.VerifyAll();
                settings.VerifyAll();
            }
        }