ScpProfiler/MainWindow.xaml.cs (108 lines of code) (raw):

using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using ScpControl; using ScpControl.Shared.Core; using Xceed.Wpf.Toolkit; namespace ScpProfiler { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private readonly ScpProxy _proxy = new ScpProxy(); private DsPadId _currentPad; private readonly DualShockProfileViewModel _vm = new DualShockProfileViewModel(); public MainWindow() { InitializeComponent(); ProfilesCollectionControl.NewItemTypes = new List<Type>() {typeof (DualShockProfile)}; } private void Window_Initialized(object sender, EventArgs e) { _proxy.NativeFeedReceived += ProxyOnNativeFeedReceived; _proxy.Start(); MainGrid.DataContext = _vm; var list = _proxy.GetProfiles(); if (list == null) { list = new List<DualShockProfile>(); } else { _vm.Profiles = list.ToList(); } } private void ProxyOnNativeFeedReceived(object sender, ScpHidReport report) { if (_vm.CurrentProfile == null) return; if(report.PadId != _currentPad) return; _vm.CurrentProfile.Model = report.Model; _vm.CurrentProfile.MacAddress = string.Join(":", (from z in report.PadMacAddress.GetAddressBytes() select z.ToString("X2")).ToArray()); _vm.CurrentProfile.PadId = report.PadId; _vm.CurrentProfile.Remap(report); switch (report.Model) { case DsModel.DS3: _vm.CurrentProfile.Ps.CurrentValue = report[Ds3Button.Ps].Value; _vm.CurrentProfile.Circle.CurrentValue = report[Ds3Button.Circle].Value; _vm.CurrentProfile.Cross.CurrentValue = report[Ds3Button.Cross].Value; _vm.CurrentProfile.Square.CurrentValue = report[Ds3Button.Square].Value; _vm.CurrentProfile.Triangle.CurrentValue = report[Ds3Button.Triangle].Value; _vm.CurrentProfile.Select.CurrentValue = report[Ds3Button.Select].Value; _vm.CurrentProfile.Start.CurrentValue = report[Ds3Button.Start].Value; _vm.CurrentProfile.LeftShoulder.CurrentValue = report[Ds3Button.L1].Value; _vm.CurrentProfile.RightShoulder.CurrentValue = report[Ds3Button.R1].Value; _vm.CurrentProfile.LeftTrigger.CurrentValue = report[Ds3Button.L2].Value; _vm.CurrentProfile.RightTrigger.CurrentValue = report[Ds3Button.R2].Value; _vm.CurrentProfile.LeftThumb.CurrentValue = report[Ds3Button.L3].Value; _vm.CurrentProfile.RightThumb.CurrentValue = report[Ds3Button.R3].Value; _vm.CurrentProfile.Up.CurrentValue = report[Ds3Button.Up].Value; _vm.CurrentProfile.Right.CurrentValue = report[Ds3Button.Right].Value; _vm.CurrentProfile.Down.CurrentValue = report[Ds3Button.Down].Value; _vm.CurrentProfile.Left.CurrentValue = report[Ds3Button.Left].Value; break; case DsModel.DS4: _vm.CurrentProfile.Ps.CurrentValue = report[Ds4Button.Ps].Value; _vm.CurrentProfile.Circle.CurrentValue = report[Ds4Button.Circle].Value; _vm.CurrentProfile.Cross.CurrentValue = report[Ds4Button.Cross].Value; _vm.CurrentProfile.Square.CurrentValue = report[Ds4Button.Square].Value; _vm.CurrentProfile.Triangle.CurrentValue = report[Ds4Button.Triangle].Value; _vm.CurrentProfile.Select.CurrentValue = report[Ds4Button.Share].Value; _vm.CurrentProfile.Start.CurrentValue = report[Ds4Button.Options].Value; _vm.CurrentProfile.LeftShoulder.CurrentValue = report[Ds4Button.L1].Value; _vm.CurrentProfile.RightShoulder.CurrentValue = report[Ds4Button.R1].Value; _vm.CurrentProfile.LeftTrigger.CurrentValue = report[Ds4Button.L2].Value; _vm.CurrentProfile.RightTrigger.CurrentValue = report[Ds4Button.R2].Value; _vm.CurrentProfile.LeftThumb.CurrentValue = report[Ds4Button.L3].Value; _vm.CurrentProfile.RightThumb.CurrentValue = report[Ds4Button.R3].Value; _vm.CurrentProfile.Up.CurrentValue = report[Ds4Button.Up].Value; _vm.CurrentProfile.Right.CurrentValue = report[Ds4Button.Right].Value; _vm.CurrentProfile.Down.CurrentValue = report[Ds4Button.Down].Value; _vm.CurrentProfile.Left.CurrentValue = report[Ds4Button.Left].Value; break; } } private void CurrentPad_SelectionChanged(object sender, SelectionChangedEventArgs e) { _currentPad = (DsPadId)((ComboBox)sender).SelectedItem; } private void SaveButton_Click(object sender, RoutedEventArgs e) { _proxy.SubmitProfile(_vm.CurrentProfile); } private void EditButton_OnClick(object sender, RoutedEventArgs e) { EditProfileChildWindow.Show(); } private void ProfilesCollectionControl_OnItemAdded(object sender, ItemEventArgs e) { _proxy.SubmitProfile(e.Item as DualShockProfile); } private void ProfilesCollectionControl_OnItemDeleted(object sender, ItemEventArgs e) { _proxy.RemoveProfile(e.Item as DualShockProfile); } } }