Source

MissileSharp / src / MissileSharp.Launcher / ViewModels / MainWindowViewModel.cs

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows.Input;
using MissileSharp.Launcher.Properties;
using MissileSharp.Launcher.Services;

namespace MissileSharp.Launcher.ViewModels
{
    public class MainWindowViewModel : INotifyPropertyChanged
    {
        private ICommandCenter model;
        private ICommandCenterService commandCenterService;
        private IConfigService configService;
        private IMessageService messageService;
        private IShutdownService shutdownService;

        public ObservableCollection<string> CommandSets { get; set; }

        public ICommand FireCommand { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;

        public MainWindowViewModel(ICommandCenterService commandCenterService, IConfigService configService, IMessageService messageService, IShutdownService shutdownService)
        {
            this.commandCenterService = commandCenterService;
            this.configService = configService;
            this.messageService = messageService;
            this.shutdownService = shutdownService;

            Initialize();
        }

        public void Initialize()
        {
            this.FireCommand = new RelayCommand(new Action<object>(this.FireMissile));

            try
            {
                this.model = this.commandCenterService.GetCommandCenter();
                this.model.LoadCommandSets(this.configService.GetConfig());
            }
            catch (Exception ex)
            {
                Shutdown(ex.Message);
                return;
            }

            if (!this.model.GetLoadedCommandSetNames().Any())
            {
                Shutdown(Resources.NoCommandSetsInConfig);
                return;
            }

            this.CommandSets = new ObservableCollection<string>(this.model.GetLoadedCommandSetNames());
        }

        private void FireMissile(Object obj)
        {
            this.model.RunCommandSet(obj.ToString());
        }

        private void Shutdown(string message)
        {
            this.messageService.ShowMessage(message);
            this.shutdownService.Shutdown();
        }
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.