private async Task PopulateViewportsAsync() { var dispatcher = Dispatcher.CurrentDispatcher; await Task.Run(async() => { try { dispatcher.Invoke(() => ModuleViewports.Clear()); var viewportTemplates = _viewportController.GetViewportTemplates(); var installedModules = await SettingsController.GetInstalledAircraftModulesAsync(); await dispatcher.InvokeAsync(() => { foreach (var template in viewportTemplates) { var module = installedModules.First(m => m.ModuleId == template.ModuleId); var model = new ModuleViewportModel(template.TemplateName, template.ExampleImageUrl, module, template.Viewports.ToArray()); model.IsValidSetup.Value = _viewportController.IsValidViewports(model.Viewports.ToArray()); ModuleViewports.Add(model); } }); } catch (Exception e) { Tracer.Error(e); } }); }
private async void OnEditViewports(ModuleViewportModel value) { try { var viewports = await _viewportController.EditViewportsAsync(value); _viewportController.SaveViewports(value.Name.Value, value.Module.Value.ModuleId, viewports); await PopulateViewportsAsync(); } catch (Exception e) { GeneralExceptionHandler.Instance.OnError(e); } }
public async Task <Viewport[]> EditViewportsAsync(string templateName, string exampleImageUrl, Module module, Viewport[] viewports) { var deviceViewportMonitorIds = GetDeviceViewportMonitorIds(); var screens = Screen.AllScreens.Where(s => deviceViewportMonitorIds.Contains(s.DeviceName)).ToArray(); Array.ForEach(viewports, v => v.MonitorId = screens[0].DeviceName); var model = new ModuleViewportModel( templateName, exampleImageUrl, module, viewports); return(await EditViewportsAsync(model)); }
public override async Task ActivateAsync() { if (_templates.Length == 0) { await Controller.GoNextAsync(false); return; } var installedModules = await _dcsWorldService.GetInstalledAircraftModulesAsync(); foreach (var template in _templates) { var module = installedModules.First(m => m.ModuleId == template.ModuleId); var model = new ModuleViewportModel(template.TemplateName, template.ExampleImageUrl, module, template.Viewports, template); ModuleViewports.Add(model); } await base.ActivateAsync(); }
public override async Task ActivateAsync() { var defaultViewportTemplates = _profileSettingsService.GetDefaultViewportTemplates(); var installedModules = await _dcsWorldService.GetInstalledAircraftModulesAsync(); var templates = defaultViewportTemplates.Where(vp => installedModules.Any(m => m.ModuleId == vp.ModuleId)).ToArray(); if (templates.Length == 0) { await Controller.GoNextAsync(false); return; } foreach (var template in templates) { var module = installedModules.First(m => m.ModuleId == template.ModuleId); var model = new ModuleViewportModel(template.TemplateName, template.ExampleImageUrl, module, template.Viewports); ModuleViewports.Add(model); } await base.ActivateAsync(); }
public async Task <Viewport[]> EditViewportsAsync(ModuleViewportModel value) { if (!IsValidViewports(value.Viewports.ToArray())) { MessageBoxEx.Show($"One or more viewports were defined on a monitor that is no longer configured, they have been removed.{Environment.NewLine}Make sure you add any missing viewports before saving.", "Invalid Viewport"); } var tasks = new List <Task>(); var screenIds = GetDeviceViewportMonitorIds(); var devices = _profileSettingsService.GetViewportDevices(value.Module.Value.ModuleId).Where(d => value.Viewports.Any(v => v.SeatIndex == d.SeatIndex)).ToArray(); var windows = new List <Window>(); var viewModels = new List <ViewportEditorWindowViewModel>(); var editorScreens = Screen.AllScreens.Where(s => screenIds.Contains(s.DeviceName)); var overlayScreens = Screen.AllScreens.Where(s => !screenIds.Contains(s.DeviceName) && !value.Viewports.Select(v => v.MonitorId).Contains(s.DeviceName)); foreach (var screen in editorScreens) { var viewportModels = new List <ViewportModel>(); foreach (var viewport in value.Viewports.Where(v => v.MonitorId == screen.DeviceName)) { if (!screenIds.Contains(viewport.MonitorId)) { continue; } var model = new ViewportModel(); model.Height.Value = viewport.Height; model.InitFile.Value = viewport.RelativeInitFilePath; model.ImageUrl.Value = Path.Combine(ApplicationPaths.ViewportPath, $"Images/{value.Module.Value.ModuleId}/{viewport.ViewportName}.jpg"); model.Name.Value = viewport.ViewportName; model.Width.Value = viewport.Width; model.X.Value = viewport.X; model.Y.Value = viewport.Y; viewportModels.Add(model); } var window = new ViewportEditorWindow(); var vm = new ViewportEditorWindowViewModel(_container, false, screen.DeviceName, value.Module.Value, devices, viewportModels.ToArray()); vm.Viewports.CollectionChanged += (sender, args) => { OnViewportsChanged(vm, viewModels); }; window.Screen = screen; window.DataContext = vm; window.Show(); window.BringIntoView(); windows.Add(window); viewModels.Add(vm); tasks.Add(EventAsync.FromEvent( handler => window.Closed += handler, handler => window.Closed -= handler)); } foreach (var screen in overlayScreens) { var window = new MonitorOverlay { Screen = screen }; window.Show(); window.BringIntoView(); windows.Add(window); tasks.Add(EventAsync.FromEvent( handler => window.Closed += handler, handler => window.Closed -= handler)); } await Task.WhenAny(tasks); foreach (var window in windows) { try { window.Close(); } catch { } } var save = viewModels.Any(vm => vm.DialogResult.Value == true); var viewports = new List <Viewport>(); if (save) { foreach (var viewModel in viewModels) { var screen = Screen.AllScreens.First(s => s.DeviceName == viewModel.MonitorId); foreach (var viewportModel in viewModel.Viewports) { viewports.Add( new Viewport { Height = (int)viewportModel.Height.Value, MonitorId = screen.DeviceName, SeatIndex = viewportModel.SeatIndex.Value, OriginalDisplayHeight = (int)screen.Bounds.Height, OriginalDisplayWidth = (int)screen.Bounds.Width, RelativeInitFilePath = viewportModel.InitFile.Value, ViewportName = viewportModel.Name.Value, Width = (int)viewportModel.Width.Value, X = (int)viewportModel.X.Value, Y = (int)viewportModel.Y.Value }); } } return(viewports.ToArray()); } else { return(value.Viewports.ToArray()); } }