public GamepadConfiguration(uint gamepadId, string mappingJsonRepresentation, HidDeviceRepresentation hidDevice)
 {
     GamepadId = gamepadId;
     HidDevice = hidDevice;
     var loadedMapping = JsonConvert.DeserializeObject<GamepadMapping>(mappingJsonRepresentation);
     Mapping = loadedMapping;
 }
        public GamepadConfiguration(uint gamepadId, string mappingJsonRepresentation, HidDeviceRepresentation hidDevice)
        {
            GamepadId = gamepadId;
            HidDevice = hidDevice;
            var loadedMapping = JsonConvert.DeserializeObject <GamepadMapping>(mappingJsonRepresentation);

            Mapping = loadedMapping;
        }
 private static async Task SaveConfigurationToFile(GamepadMapping configuration, string filename)
 {
     var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
     using (var outputFile = new StreamWriter(desktopPath + $"\\{filename}.mfimapping"))
     {
         await outputFile.WriteAsync(JsonConvert.SerializeObject(configuration, Formatting.Indented));
     }
 }
        private void BindMappingToUi(GamepadMapping mapping)
        {
            ListViewMappingItems = new ReactiveCollection<ListViewItem>();
            foreach (var mappingItem in mapping.MappingItems)
            {
                var item = new ListViewItem
                {
                    Content = mappingItem,
                    ContentTemplate = DataTemplateForMappingType(mappingItem.Type)
                };

                ListViewMappingItems.Add(item);
            }

            MappingItemsListView.ItemsSource = ListViewMappingItems;
            MappingItemsListView.AlternationCount = ListViewMappingItems.Count + 1;


            VirtualKeysListViewMappingItems = new ReactiveCollection<ListViewItem>();
            foreach (var virtualKeyMappingItem in mapping.VirtualKeysItems)
            {
                var item = new ListViewItem
                {
                    Content = virtualKeyMappingItem,
                    ContentTemplate = (DataTemplate) FindResource("VirtualKeysItemTemplate")
                };

                VirtualKeysListViewMappingItems.Add(item);
            }

            VirtualKeysItemsListView.ItemsSource = VirtualKeysListViewMappingItems;

            SaveButton.IsEnabled = true;
            AddNewItemButton.IsEnabled = true;
            AddNewVirtualKeyButton.IsEnabled = true;
        }
 private void NewButton_Click(object sender, RoutedEventArgs e)
 {
     var newMapping = new GamepadMapping(new List<GamepadMappingItem>(), new List<VirtualKeyMappingItem>());
     SaveButton_Click(null, null);
     BindMappingToUi(newMapping);
 }
        private async void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            var saveFileDialog = new SaveFileDialog
            {
                Filter = "MFI Mapping (*.mfimapping)|*.mfimapping"
            };

            if (saveFileDialog.ShowDialog() == true)
            {
                using (var outputFile = new StreamWriter(saveFileDialog.FileName))
                {
                    URLLabel.Content = saveFileDialog.FileName;
                    var mappingItems = MappingItemsListView.Items.SourceCollection.Cast<ListViewItem>().Select(item => item.Content as GamepadMappingItem).ToList();
                    var virtualKeysMappingItems = VirtualKeysItemsListView.Items.SourceCollection.Cast<ListViewItem>().Select(item => item.Content as VirtualKeyMappingItem).ToList();

                    var newMapping = new GamepadMapping(mappingItems, virtualKeysMappingItems);

                    await outputFile.WriteAsync(JsonConvert.SerializeObject(newMapping, Formatting.Indented));
                }
            }
        }