cemu-DS4Windows/DS4Windows/DS4Forms/AutoProfiles.xaml.cs

291 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Ookii.Dialogs.Wpf;
using DS4WinWPF.DS4Forms.ViewModels;
using Microsoft.Win32;
namespace DS4WinWPF.DS4Forms
{
/// <summary>
/// Interaction logic for AutoProfiles.xaml
/// </summary>
public partial class AutoProfiles : UserControl
{
protected String m_Profile = DS4Windows.Global.appdatapath + "\\Auto Profiles.xml";
public const string steamCommx86Loc = @"C:\Program Files (x86)\Steam\steamapps\common";
public const string steamCommLoc = @"C:\Program Files\Steam\steamapps\common";
private string steamgamesdir;
private AutoProfilesViewModel autoProfVM;
private AutoProfileHolder autoProfileHolder;
private ProfileList profileList;
private bool autoDebug;
public AutoProfileHolder AutoProfileHolder { get => autoProfileHolder;
set => autoProfileHolder = value; }
public AutoProfilesViewModel AutoProfVM { get => autoProfVM; }
public bool AutoDebug { get => autoDebug; }
public event EventHandler AutoDebugChanged;
public AutoProfiles()
{
InitializeComponent();
if (!File.Exists(DS4Windows.Global.appdatapath + @"\Auto Profiles.xml"))
DS4Windows.Global.CreateAutoProfiles(m_Profile);
//LoadP();
if (DS4Windows.Global.UseCustomSteamFolder &&
Directory.Exists(DS4Windows.Global.CustomSteamFolder))
steamgamesdir = DS4Windows.Global.CustomSteamFolder;
else if (Directory.Exists(steamCommx86Loc))
steamgamesdir = steamCommx86Loc;
else if (Directory.Exists(steamCommLoc))
steamgamesdir = steamCommLoc;
else
addProgramsBtn.ContextMenu.Items.Remove(steamMenuItem);
autoProfileHolder = new AutoProfileHolder();
}
public void SetupDataContext(ProfileList profileList)
{
autoProfVM = new AutoProfilesViewModel(autoProfileHolder, profileList);
programListLV.DataContext = autoProfVM;
programListLV.ItemsSource = autoProfVM.ProgramColl;
revertDefaultProfileOnUnknownCk.DataContext = autoProfVM;
autoProfVM.SearchFinished += AutoProfVM_SearchFinished;
autoProfVM.CurrentItemChange += AutoProfVM_CurrentItemChange;
this.profileList = profileList;
cont1AutoProfCol.Collection = profileList.ProfileListCol;
cont2AutoProfCol.Collection = profileList.ProfileListCol;
cont3AutoProfCol.Collection = profileList.ProfileListCol;
cont4AutoProfCol.Collection = profileList.ProfileListCol;
}
private void AutoProfVM_CurrentItemChange(AutoProfilesViewModel sender, ProgramItem item)
{
if (item != null)
{
if (item.MatchedAutoProfile != null)
{
ProfileEntity tempProf = null;
string profileName = item.MatchedAutoProfile.ProfileNames[0];
if (!string.IsNullOrEmpty(profileName) && profileName != "(none)")
{
tempProf = profileList.ProfileListCol.SingleOrDefault(x => x.Name == profileName);
if (tempProf != null)
{
item.SelectedIndexCon1 = profileList.ProfileListCol.IndexOf(tempProf) + 1;
}
}
else
{
item.SelectedIndexCon1 = 0;
}
profileName = item.MatchedAutoProfile.ProfileNames[1];
if (!string.IsNullOrEmpty(profileName) && profileName != "(none)")
{
tempProf = profileList.ProfileListCol.SingleOrDefault(x => x.Name == profileName);
if (tempProf != null)
{
item.SelectedIndexCon2 = profileList.ProfileListCol.IndexOf(tempProf) + 1;
}
}
else
{
item.SelectedIndexCon2 = 0;
}
profileName = item.MatchedAutoProfile.ProfileNames[2];
if (!string.IsNullOrEmpty(profileName) && profileName != "(none)")
{
tempProf = profileList.ProfileListCol.SingleOrDefault(x => x.Name == profileName);
if (tempProf != null)
{
item.SelectedIndexCon3 = profileList.ProfileListCol.IndexOf(tempProf) + 1;
}
}
else
{
item.SelectedIndexCon3 = 0;
}
profileName = item.MatchedAutoProfile.ProfileNames[3];
if (!string.IsNullOrEmpty(profileName) && profileName != "(none)")
{
tempProf = profileList.ProfileListCol.SingleOrDefault(x => x.Name == profileName);
if (tempProf != null)
{
item.SelectedIndexCon4 = profileList.ProfileListCol.IndexOf(tempProf) + 1;
}
}
else
{
item.SelectedIndexCon4 = 0;
}
}
editControlsPanel.DataContext = item;
editControlsPanel.IsEnabled = true;
}
else
{
editControlsPanel.DataContext = null;
editControlsPanel.IsEnabled = false;
cont1AutoProf.SelectedIndex = 0;
cont2AutoProf.SelectedIndex = 0;
cont3AutoProf.SelectedIndex = 0;
cont4AutoProf.SelectedIndex = 0;
}
}
private void AutoProfVM_SearchFinished(object sender, EventArgs e)
{
IsEnabled = true;
}
private void SteamMenuItem_Click(object sender, RoutedEventArgs e)
{
this.IsEnabled = false;
steamMenuItem.Visibility = Visibility.Collapsed;
programListLV.ItemsSource = null;
autoProfVM.SearchFinished += AppsSearchFinished;
autoProfVM.AddProgramsFromSteam(steamgamesdir);
}
private void BrowseProgsMenuItem_Click(object sender, RoutedEventArgs e)
{
this.IsEnabled = false;
VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog();
if (dialog.ShowDialog() == true)
{
//browseProgsMenuItem.Visibility = Visibility.Collapsed;
programListLV.ItemsSource = null;
autoProfVM.SearchFinished += AppsSearchFinished;
autoProfVM.AddProgramsFromDir(dialog.SelectedPath);
}
else
{
this.IsEnabled = true;
}
}
private void StartMenuItem_Click(object sender, RoutedEventArgs e)
{
this.IsEnabled = false;
startMenuItem.Visibility = Visibility.Collapsed;
programListLV.ItemsSource = null;
autoProfVM.SearchFinished += AppsSearchFinished;
autoProfVM.AddProgramsFromStartMenu();
}
private void AppsSearchFinished(object sender, EventArgs e)
{
autoProfVM.SearchFinished -= AppsSearchFinished;
programListLV.ItemsSource = autoProfVM.ProgramColl;
}
private void AddProgramsBtn_Click(object sender, RoutedEventArgs e)
{
addProgramsBtn.ContextMenu.IsOpen = true;
e.Handled = true;
}
private void HideUncheckedBtn_Click(object sender, RoutedEventArgs e)
{
programListLV.ItemsSource = null;
autoProfVM.RemoveUnchecked();
steamMenuItem.Visibility = Visibility.Visible;
startMenuItem.Visibility = Visibility.Visible;
browseProgsMenuItem.Visibility = Visibility.Visible;
programListLV.ItemsSource = autoProfVM.ProgramColl;
}
private void ShowAutoDebugCk_Click(object sender, RoutedEventArgs e)
{
bool state = showAutoDebugCk.IsChecked == true;
autoDebug = state;
AutoDebugChanged?.Invoke(this, EventArgs.Empty);
}
private void RemoveAutoBtn_Click(object sender, RoutedEventArgs e)
{
if (autoProfVM.SelectedItem != null)
{
editControlsPanel.DataContext = null;
autoProfVM.RemoveAutoProfileEntry(autoProfVM.SelectedItem);
autoProfVM.AutoProfileHolder.Save(DS4Windows.Global.appdatapath + @"\Auto Profiles.xml");
autoProfVM.SelectedItem = null;
}
}
private void SaveAutoBtn_Click(object sender, RoutedEventArgs e)
{
if (autoProfVM.SelectedItem != null)
{
if (autoProfVM.SelectedItem.MatchedAutoProfile == null)
{
autoProfVM.CreateAutoProfileEntry(autoProfVM.SelectedItem);
}
else
{
autoProfVM.PersistAutoProfileEntry(autoProfVM.SelectedItem);
}
autoProfVM.AutoProfileHolder.Save(DS4Windows.Global.appdatapath + @"\Auto Profiles.xml");
}
}
private void BrowseAddProgMenuItem_Click(object sender, RoutedEventArgs e)
{
this.IsEnabled = false;
OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect = false;
dialog.AddExtension = true;
dialog.DefaultExt = ".exe";
dialog.Filter = "Program (*.exe)|*.exe";
dialog.Title = "Select Program";
dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
if (dialog.ShowDialog() == true)
{
programListLV.ItemsSource = null;
autoProfVM.SearchFinished += AppsSearchFinished;
autoProfVM.AddProgramExeLocation(dialog.FileName);
}
else
{
this.IsEnabled = true;
}
}
private void MoveUpDownAutoBtn_Click(object sender, RoutedEventArgs e)
{
if (autoProfVM.SelectedItem != null && sender != null)
{
if(autoProfVM.MoveItemUpDown(autoProfVM.SelectedItem, ((sender as MenuItem).Name == "MoveUp") ? -1 : 1))
autoProfVM.AutoProfileHolder.Save(DS4Windows.Global.appdatapath + @"\Auto Profiles.xml");
}
}
}
}