public MainViewModel(ISettingsService settingsService, ITrayProcessCommunicationService trayProcessCommunicationService, IDialogService dialogService, IKeyboardCommandService keyboardCommandService, IApplicationView applicationView, IClipboardService clipboardService, ICommandHistoryService commandHistoryService) { _settingsService = settingsService; _trayProcessCommunicationService = trayProcessCommunicationService; _dialogService = dialogService; ApplicationView = applicationView; _clipboardService = clipboardService; _keyboardCommandService = keyboardCommandService; _commandHistoryService = commandHistoryService; _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewTab), async() => await AddDefaultProfileAsync(NewTerminalLocation.Tab)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewWindow), async() => await AddDefaultProfileAsync(NewTerminalLocation.Window)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewSshTab), async() => await AddSshProfileAsync(NewTerminalLocation.Tab)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewSshWindow), async() => await AddSshProfileAsync(NewTerminalLocation.Window)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewCustomCommandTab), async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Tab)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewCustomCommandWindow), async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Window)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ChangeTabTitle), async() => await SelectedTerminal.EditTitleAsync()); _keyboardCommandService.RegisterCommandHandler(nameof(Command.CloseTab), CloseCurrentTab); _keyboardCommandService.RegisterCommandHandler(nameof(Command.DuplicateTab), async() => await AddTabAsync(SelectedTerminal.ShellProfile.Clone())); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ReconnectTab), async() => { if (SelectedTerminal.ReconnectTabCommand.CanExecute(null)) { await SelectedTerminal.ReconnectTabAsync(); } }); // empty command handlers for copy and paste so that the main window does not execute these when copy keyboard shortcut is used in a popup search panel // in such a case an exception would be thrown if no handlers are available so these empty ones mitigate that. Also there is no need for these on the main window anyway // so leaving them empty is fine. _keyboardCommandService.RegisterCommandHandler(nameof(Command.Paste), () => { }); _keyboardCommandService.RegisterCommandHandler(nameof(Command.Copy), () => { }); // Add all of the commands for switching to a tab of a given ID, if there's one open there for (int i = 0; i < 9; i++) { var switchCmd = Command.SwitchToTerm1 + i; int tabNumber = i; // ReSharper disable once InconsistentNaming void handler() => SelectTabNumber(tabNumber); _keyboardCommandService.RegisterCommandHandler(switchCmd.ToString(), handler); } _keyboardCommandService.RegisterCommandHandler(nameof(Command.NextTab), SelectNextTab); _keyboardCommandService.RegisterCommandHandler(nameof(Command.PreviousTab), SelectPreviousTab); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ShowSettings), ShowSettings); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ToggleFullScreen), ToggleFullScreen); foreach (ShellProfile profile in _settingsService.GetShellProfiles()) { _keyboardCommandService.RegisterCommandHandler(profile.Id.ToString(), async() => await AddProfileByGuidAsync(profile.Id)); } foreach (SshProfile profile in _settingsService.GetSshProfiles()) { _keyboardCommandService.RegisterCommandHandler(profile.Id.ToString(), async() => await AddProfileByGuidAsync(profile.Id)); } var currentTheme = _settingsService.GetCurrentTheme(); var options = _settingsService.GetTerminalOptions(); UseAcrylicBackground = options.UseAcrylicBackground; BackgroundOpacity = options.BackgroundOpacity; _applicationSettings = _settingsService.GetApplicationSettings(); TabsPosition = _applicationSettings.TabsPosition; AddDefaultTabCommand = new RelayCommand(async() => await AddDefaultProfileAsync(NewTerminalLocation.Tab)); ApplicationView.CloseRequested += OnCloseRequest; ApplicationView.Closed += OnClosed; Terminals.CollectionChanged += OnTerminalsCollectionChanged; LoadKeyBindings(); _newDefaultTabCommand = new RelayCommand(async() => await AddDefaultProfileAsync(NewTerminalLocation.Tab)); _newDefaultWindowCommand = new RelayCommand(async() => await AddDefaultProfileAsync(NewTerminalLocation.Window)); _newRemoteTabCommand = new RelayCommand(async() => await AddSshProfileAsync(NewTerminalLocation.Tab)); _newRemoteWindowCommand = new RelayCommand(async() => await AddSshProfileAsync(NewTerminalLocation.Window)); _newQuickLaunchTabCommand = new RelayCommand(async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Tab)); _newQuickLaunchWindowCommand = new RelayCommand(async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Window)); _settingsCommand = new RelayCommand(ShowSettings); _aboutCommand = new AsyncRelayCommand(_dialogService.ShowAboutDialogAsync); _quitCommand = new AsyncRelayCommand(_trayProcessCommunicationService.QuitApplicationAsync); _defaultProfile = _settingsService.GetDefaultShellProfile(); CreateMenuViewModel(); WeakReferenceMessenger.Default.RegisterAll(this); }
public MainViewModel(ISettingsService settingsService, ITrayProcessCommunicationService trayProcessCommunicationService, IDialogService dialogService, IKeyboardCommandService keyboardCommandService, IApplicationView applicationView, IClipboardService clipboardService, ICommandHistoryService commandHistoryService, IAcceleratorKeyValidator acceleratorKeyValidator) { MessengerInstance.Register <ApplicationSettingsChangedMessage>(this, OnApplicationSettingsChanged); MessengerInstance.Register <ShellProfileAddedMessage>(this, OnShellProfileAdded); MessengerInstance.Register <ShellProfileDeletedMessage>(this, OnShellProfileDeleted); MessengerInstance.Register <ShellProfileChangedMessage>(this, OnShellProfileChanged); MessengerInstance.Register <DefaultShellProfileChangedMessage>(this, OnDefaultShellProfileChanged); MessengerInstance.Register <TerminalOptionsChangedMessage>(this, OnTerminalOptionsChanged); MessengerInstance.Register <CommandHistoryChangedMessage>(this, OnCommandHistoryChanged); MessengerInstance.Register <KeyBindingsChangedMessage>(this, OnKeyBindingChanged); _settingsService = settingsService; _trayProcessCommunicationService = trayProcessCommunicationService; _dialogService = dialogService; ApplicationView = applicationView; _clipboardService = clipboardService; _keyboardCommandService = keyboardCommandService; _commandHistoryService = commandHistoryService; _acceleratorKeyValidator = acceleratorKeyValidator; _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewTab), async() => await AddDefaultProfileAsync(NewTerminalLocation.Tab)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewWindow), async() => await AddDefaultProfileAsync(NewTerminalLocation.Window)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewSshTab), async() => await AddSshProfileAsync(NewTerminalLocation.Tab)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewSshWindow), async() => await AddSshProfileAsync(NewTerminalLocation.Window)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewCustomCommandTab), async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Tab)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.NewCustomCommandWindow), async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Window)); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ChangeTabTitle), async() => await SelectedTerminal.EditTitleAsync()); _keyboardCommandService.RegisterCommandHandler(nameof(Command.CloseTab), CloseCurrentTab); _keyboardCommandService.RegisterCommandHandler(nameof(Command.DuplicateTab), async() => await AddTabAsync(SelectedTerminal.ShellProfile.Clone())); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ReconnectTab), async() => { if (SelectedTerminal.ReconnectTabCommand.CanExecute()) { await SelectedTerminal.ReconnectTabAsync(); } }); // Add all of the commands for switching to a tab of a given ID, if there's one open there for (int i = 0; i < 9; i++) { var switchCmd = Command.SwitchToTerm1 + i; int tabNumber = i; // ReSharper disable once InconsistentNaming void handler() => SelectTabNumber(tabNumber); _keyboardCommandService.RegisterCommandHandler(switchCmd.ToString(), handler); } _keyboardCommandService.RegisterCommandHandler(nameof(Command.NextTab), SelectNextTab); _keyboardCommandService.RegisterCommandHandler(nameof(Command.PreviousTab), SelectPreviousTab); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ShowSettings), ShowSettings); _keyboardCommandService.RegisterCommandHandler(nameof(Command.ToggleFullScreen), ToggleFullScreen); foreach (ShellProfile profile in _settingsService.GetShellProfiles()) { _keyboardCommandService.RegisterCommandHandler(profile.Id.ToString(), async() => await AddProfileByGuidAsync(profile.Id)); } foreach (SshProfile profile in _settingsService.GetSshProfiles()) { _keyboardCommandService.RegisterCommandHandler(profile.Id.ToString(), async() => await AddProfileByGuidAsync(profile.Id)); } var currentTheme = _settingsService.GetCurrentTheme(); var options = _settingsService.GetTerminalOptions(); UseAcrylicBackground = options.UseAcrylicBackground; BackgroundOpacity = options.BackgroundOpacity; _applicationSettings = _settingsService.GetApplicationSettings(); TabsPosition = _applicationSettings.TabsPosition; AddDefaultTabCommand = new RelayCommand(async() => await AddDefaultProfileAsync(NewTerminalLocation.Tab)); ApplicationView.CloseRequested += OnCloseRequest; ApplicationView.Closed += OnClosed; Terminals.CollectionChanged += OnTerminalsCollectionChanged; LoadKeyBindings(); _newDefaultTabCommand = new RelayCommand(async() => await AddDefaultProfileAsync(NewTerminalLocation.Tab)); _newDefaultWindowCommand = new RelayCommand(async() => await AddDefaultProfileAsync(NewTerminalLocation.Window)); _newRemoteTabCommand = new RelayCommand(async() => await AddSshProfileAsync(NewTerminalLocation.Tab)); _newRemoteWindowCommand = new RelayCommand(async() => await AddSshProfileAsync(NewTerminalLocation.Window)); _newQuickLaunchTabCommand = new RelayCommand(async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Tab)); _newQuickLaunchWindowCommand = new RelayCommand(async() => await AddQuickLaunchProfileAsync(NewTerminalLocation.Window)); _settingsCommand = new RelayCommand(ShowSettings); _aboutCommand = new RelayCommand(async() => await _dialogService.ShowAboutDialogAsync()); _quitCommand = new AsyncCommand(() => _trayProcessCommunicationService.QuitApplicationAsync()); _defaultProfile = _settingsService.GetDefaultShellProfile(); CreateMenuViewModel(); }