1
0
Fork 0
mirror of https://github.com/hawkeye-stan/msfs-popout-panel-manager.git synced 2024-11-29 01:00:13 +00:00
msfs-popout-panel-manager/WpfApp/ViewModel/PanelSelectionViewModel.cs
2022-09-11 18:06:11 -04:00

206 lines
No EOL
14 KiB
C#

using MSFSPopoutPanelManager.Orchestration;
using MSFSPopoutPanelManager.Shared;
using Prism.Commands;
using System;
using System.Linq;
namespace MSFSPopoutPanelManager.WpfApp.ViewModel
{
public class PanelSelectionViewModel : ObservableObject
{
private MainOrchestrator _orchestrator;
public PanelSelectionViewModel(MainOrchestrator orchestrator)
{
_orchestrator = orchestrator;
AddProfileCommand = new DelegateCommand(OnAddProfile, () => FlightSimData.HasCurrentMsfsAircraft && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
DeleteProfileCommand = new DelegateCommand(OnDeleteProfile, () => ProfileData.HasActiveProfile && FlightSimData.HasCurrentMsfsAircraft && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => ProfileData.HasActiveProfile)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
ChangeProfileCommand = new DelegateCommand<object>(OnChangeProfile, (obj) => FlightSimData.HasCurrentMsfsAircraft && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
AddProfileBindingCommand = new DelegateCommand(OnAddProfileBinding, () => ProfileData.HasActiveProfile && FlightSimData.HasCurrentMsfsAircraft && ProfileData.IsAllowedAddAircraftBinding && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.HasActiveProfile)
.ObservesProperty(() => ProfileData.IsAllowedAddAircraftBinding)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
DeleteProfileBindingCommand = new DelegateCommand(OnDeleteProfileBinding, () => ProfileData.HasActiveProfile && ProfileData.IsAllowedDeleteAircraftBinding && ProfileData.ActiveProfile.BindingAircrafts.Count > 0 && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => ProfileData.HasActiveProfile)
.ObservesProperty(() => ProfileData.IsAllowedDeleteAircraftBinding)
.ObservesProperty(() => ProfileData.ActiveProfile.BindingAircrafts.Count)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
SetPowerOnRequiredCommand = new DelegateCommand(() => ProfileData.WriteProfiles(), () => FlightSimData.HasCurrentMsfsAircraft && ProfileData.HasActiveProfile && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
SetIncludeInGamePanelsCommand = new DelegateCommand(OnSetIncludeInGamePanels, () => FlightSimData.HasCurrentMsfsAircraft && ProfileData.HasActiveProfile && FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
StartPanelSelectionCommand = new DelegateCommand(OnStartPanelSelection, () => FlightSimData.HasCurrentMsfsAircraft && ProfileData.HasActiveProfile && ProfileData.ActiveProfile != null && FlightSimData.IsSimulatorStarted && FlightSimData.IsInCockpit)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.IsInCockpit);
StartPopOutCommand = new DelegateCommand(OnStartPopOut, () => FlightSimData.HasCurrentMsfsAircraft && ProfileData.HasActiveProfile && (ProfileData.ActiveProfile.PanelSourceCoordinates.Count > 0 || ProfileData.ActiveProfile.TouchPanelBindings.Count > 0 || ProfileData.ActiveProfile.IncludeInGamePanels) && FlightSimData.IsSimulatorStarted && FlightSimData.IsInCockpit)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => ProfileData.ActiveProfile.PanelSourceCoordinates.Count)
.ObservesProperty(() => ProfileData.ActiveProfile.TouchPanelBindings.Count)
.ObservesProperty(() => ProfileData.ActiveProfile.IncludeInGamePanels)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.IsInCockpit);
SaveAutoPanningCameraCommand = new DelegateCommand(OnSaveAutoPanningCamera, () => FlightSimData.HasCurrentMsfsAircraft && ProfileData.HasActiveProfile && ProfileData.ActiveProfile.PanelSourceCoordinates.Count > 0 && FlightSimData.IsSimulatorStarted && FlightSimData.IsInCockpit)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => ProfileData.ActiveProfile.PanelSourceCoordinates.Count)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.IsInCockpit);
EditPanelSourceCommand = new DelegateCommand(EditPanelSource, () => FlightSimData.HasCurrentMsfsAircraft && ProfileData.HasActiveProfile && ProfileData.ActiveProfile.PanelSourceCoordinates.Count > 0 && FlightSimData.IsSimulatorStarted && FlightSimData.IsInCockpit)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.ActiveProfile)
.ObservesProperty(() => ProfileData.ActiveProfile.PanelSourceCoordinates.Count)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted)
.ObservesProperty(() => FlightSimData.IsInCockpit);
OpenTouchPanelBindingCommand = new DelegateCommand(OnOpenTouchPanelBinding, () => FlightSimData.HasCurrentMsfsAircraft && FlightSimData.IsSimulatorStarted && ProfileData.HasActiveProfile && AppSettingData.AppSetting.TouchPanelSettings.EnableTouchPanelIntegration)
.ObservesProperty(() => FlightSimData.HasCurrentMsfsAircraft)
.ObservesProperty(() => ProfileData.HasActiveProfile)
.ObservesProperty(() => AppSettingData.AppSetting.TouchPanelSettings.EnableTouchPanelIntegration)
.ObservesProperty(() => FlightSimData.IsSimulatorStarted);
TouchPanelBindingViewModel = new TouchPanelBindingViewModel(_orchestrator);
}
public DelegateCommand AddProfileCommand { get; private set; }
public DelegateCommand DeleteProfileCommand { get; private set; }
public DelegateCommand<object> ChangeProfileCommand { get; private set; }
public DelegateCommand AddProfileBindingCommand { get; private set; }
public DelegateCommand DeleteProfileBindingCommand { get; private set; }
public DelegateCommand SetPowerOnRequiredCommand { get; private set; }
public DelegateCommand SetIncludeInGamePanelsCommand { get; private set; }
public DelegateCommand StartPanelSelectionCommand { get; private set; }
public DelegateCommand StartPopOutCommand { get; private set; }
public DelegateCommand SaveAutoPanningCameraCommand { get; private set; }
public DelegateCommand EditPanelSourceCommand { get; private set; }
public DelegateCommand OpenTouchPanelBindingCommand { get; private set; }
public ProfileData ProfileData { get { return _orchestrator.ProfileData; } }
public FlightSimData FlightSimData { get { return _orchestrator.FlightSimData; } }
public AppSettingData AppSettingData { get { return _orchestrator.AppSettingData; } }
public PanelSourceOrchestrator PanelSource { get { return _orchestrator.PanelSource; } }
public TouchPanelBindingViewModel TouchPanelBindingViewModel { get; private set; }
public event EventHandler OpenTouchPanelBindingDialog;
private void OnAddProfile()
{
var result = DialogHelper.AddProfileDialog(ProfileData.Profiles.ToList());
if (result != null)
_orchestrator.Profile.AddProfile(result.ProfileName, result.CopyProfileId);
}
private void OnDeleteProfile()
{
if (DialogHelper.ConfirmDialog("Confirm Delete", "Are you sure you want to delete the selected profile?"))
_orchestrator.Profile.DeleteActiveProfile();
}
private void OnChangeProfile(object commandParameter)
{
if (commandParameter == null)
return;
var profileId = Convert.ToInt32(commandParameter);
_orchestrator.Profile.ChangeProfile(profileId);
}
private void OnAddProfileBinding()
{
_orchestrator.Profile.AddProfileBinding(FlightSimData.CurrentMsfsAircraft);
}
private void OnDeleteProfileBinding()
{
_orchestrator.Profile.DeleteProfileBinding(FlightSimData.CurrentMsfsAircraft);
}
private void OnStartPanelSelection()
{
if (!ProfileData.HasActiveProfile)
return;
if (ProfileData.ActiveProfile.PanelSourceCoordinates.Count > 0 && !DialogHelper.ConfirmDialog("Confirm Overwrite", "WARNING! Are you sure you want to overwrite existing saved panel locations and all saved setttings for this profile?"))
return;
_orchestrator.PanelSource.StartPanelSelection();
}
private void OnStartPopOut()
{
_orchestrator.PanelPopOut.ManualPopOut();
}
private void OnSaveAutoPanningCamera()
{
if (!ProfileData.HasActiveProfile)
return;
if (ProfileData.ActiveProfile.PanelSourceCoordinates.Count > 0 && !DialogHelper.ConfirmDialog("Confirm Overwrite Auto Panning Camera", "WARNING! Are you sure you want to overwrite existing Auto Panning camera angle?"))
return;
_orchestrator.PanelSource.SaveAutoPanningCamera();
}
private void EditPanelSource()
{
_orchestrator.PanelSource.EditPanelSource();
}
private void OnOpenTouchPanelBinding()
{
OpenTouchPanelBindingDialog?.Invoke(this, null);
}
private void OnSetIncludeInGamePanels()
{
// Reset all in-game panels configuration
if (!ProfileData.ActiveProfile.IncludeInGamePanels)
ProfileData.ActiveProfile.PanelConfigs.RemoveAll(c => c.PanelType == PanelType.BuiltInPopout);
ProfileData.WriteProfiles();
}
}
}