public ConfigureController() { InitializeComponent(); this.PreviewKeyDown += new KeyEventHandler(HandleEsc); _timer.Tick += Timer_Tick; // get the mainwindow mw = Application.Current.Windows.OfType <MainWindow>().FirstOrDefault(); //Input.Initialize(mw); // set the controller definition from mainwindow if (mw.ControllerDefinition == null) { this.Close(); } ControllerDefinition = mw.ControllerDefinition; string vPortStr = ""; if (ControllerDefinition.VirtualPort > 0) { vPortStr = " - Virtual Port: " + ControllerDefinition.VirtualPort; } // set the title titleTextBlock.Text = "Configure " + ControllerDefinition.DeviceName + vPortStr; // headers Label headDesc = new Label(); headDesc.Content = "Binding"; headDesc.SetValue(Grid.ColumnProperty, 0); headDesc.SetValue(Grid.RowProperty, 0); DynamicDataGrid.Children.Add(headDesc); Label headConfig1 = new Label(); headConfig1.Content = "Primary"; headConfig1.SetValue(Grid.ColumnProperty, 1); headConfig1.SetValue(Grid.RowProperty, 0); DynamicDataGrid.Children.Add(headConfig1); Label headConfig2 = new Label(); headConfig2.Content = "Secondary"; headConfig2.SetValue(Grid.ColumnProperty, 2); headConfig2.SetValue(Grid.RowProperty, 0); DynamicDataGrid.Children.Add(headConfig2); Label headConfig3 = new Label(); headConfig3.Content = "Tertiary"; headConfig3.SetValue(Grid.ColumnProperty, 3); headConfig3.SetValue(Grid.RowProperty, 0); DynamicDataGrid.Children.Add(headConfig3); Label headCustom = new Label(); headCustom.Content = "Custom Insert"; headCustom.SetValue(Grid.ColumnProperty, 4); headCustom.SetValue(Grid.RowProperty, 0); DynamicDataGrid.Children.Add(headCustom); // loop through maplist and populate the dynamic data grid row by row for (int i = 0; i < ControllerDefinition.MapList.Count; i++) { // description Label desc = new Label(); desc.Content = ControllerDefinition.MapList[i].Description; desc.SetValue(Grid.ColumnProperty, 0); desc.SetValue(Grid.RowProperty, i + 1); ToolTip tt = new System.Windows.Controls.ToolTip(); tt.Content = ControllerDefinition.MapList[i].MednafenCommand; desc.ToolTip = tt; KeyboardNavigation.SetIsTabStop(desc, false); DynamicDataGrid.Children.Add(desc); // Config Primary TextBox configInfo = new TextBox(); configInfo.Name = "Primary_" + TranslateConfigName(ControllerDefinition.MapList[i].MednafenCommand); configInfo.Text = KeyboardTranslation.SDLCodetoDx(GetConfigItem(ControllerDefinition.MapList[i].MednafenCommand, ConfigOrder.Primary), KeyboardType.UK); //ControllerDefinition.MapList[i].Config; configInfo.GotFocus += TextBox_GotFocus; configInfo.LostFocus += TextBox_LostFocus; configInfo.KeyDown += TextBox_KeyDownHandler; configInfo.IsReadOnly = true; configInfo.MinWidth = 100; configInfo.SetValue(Grid.ColumnProperty, 1); configInfo.SetValue(Grid.RowProperty, i + 1); KeyboardNavigation.SetTabIndex(configInfo, i + 1); DynamicDataGrid.Children.Add(configInfo); // Config Secondary TextBox configInfo2 = new TextBox(); configInfo2.Name = "Secondary_" + TranslateConfigName(ControllerDefinition.MapList[i].MednafenCommand); configInfo2.Text = KeyboardTranslation.SDLCodetoDx(GetConfigItem(ControllerDefinition.MapList[i].MednafenCommand, ConfigOrder.Secondary), KeyboardType.UK); //ControllerDefinition.MapList[i].Config; configInfo2.GotFocus += TextBox_GotFocus; configInfo2.LostFocus += TextBox_LostFocus; configInfo2.KeyDown += TextBox_KeyDownHandler; configInfo2.IsReadOnly = true; configInfo2.MinWidth = 100; configInfo2.SetValue(Grid.ColumnProperty, 2); configInfo2.SetValue(Grid.RowProperty, i + 1); KeyboardNavigation.SetTabIndex(configInfo2, i + 1 + ControllerDefinition.MapList.Count); DynamicDataGrid.Children.Add(configInfo2); // Config Tertiary TextBox configInfo3 = new TextBox(); configInfo3.Name = "Tertiary_" + TranslateConfigName(ControllerDefinition.MapList[i].MednafenCommand); configInfo3.Text = KeyboardTranslation.SDLCodetoDx(GetConfigItem(ControllerDefinition.MapList[i].MednafenCommand, ConfigOrder.Tertiary), KeyboardType.UK); //ControllerDefinition.MapList[i].Config; configInfo3.GotFocus += TextBox_GotFocus; configInfo3.LostFocus += TextBox_LostFocus; configInfo3.KeyDown += TextBox_KeyDownHandler; configInfo3.IsReadOnly = true; configInfo3.MinWidth = 100; configInfo3.SetValue(Grid.ColumnProperty, 3); configInfo3.SetValue(Grid.RowProperty, i + 1); KeyboardNavigation.SetTabIndex(configInfo3, i + 1 + (ControllerDefinition.MapList.Count * 2)); DynamicDataGrid.Children.Add(configInfo3); // configure button Button btn = new Button(); btn.Content = "Configure"; btn.Name = "btn" + TranslateConfigName(ControllerDefinition.MapList[i].MednafenCommand); btn.Click += btnConfigureSingle_Click; btn.SetValue(Grid.ColumnProperty, 4); btn.SetValue(Grid.RowProperty, i + 1); KeyboardNavigation.SetIsTabStop(btn, false); DynamicDataGrid.Children.Add(btn); } // populate the image BitmapImage b = GetImage(ControllerDefinition.DeviceName); if (b != null) { img.Source = b; } }
/// <summary> /// handles conversions between how control bindings are displayed versus how mednafen stores them in its config file /// </summary> /// <param name="input"></param> /// <param name="conversionOrder"></param> /// <returns></returns> public static string ConvertText(string input, ConversionOrder conversionOrder) { // create the output string string output = input; switch (conversionOrder) { // Text is being loaded FROM mednafen config case ConversionOrder.Load: if (input.StartsWith("keyboard ")) { // keyboard binding output = KeyboardTranslation.SDLCodetoDx(input, KeyboardType.UK); } if (input.StartsWith("mouse ")) { // mouse binding if (input.Contains("mouse 0000000000000000 00000000")) { output = "LeftMouseButton"; } if (input.Contains("mouse 0000000000000000 00000001")) { output = "MiddleMouseButton"; } if (input.Contains("mouse 0000000000000000 00000002")) { output = "RightMouseButton"; } if (input.Contains("mouse 0000000000000000 00000003")) { output = "MouseScrollWheelUp"; } if (input.Contains("mouse 0000000000000000 00000004")) { output = "MouseScrollWheelDown"; } if (input.Contains("mouse 0000000000000000 00000005")) { output = "MouseButton3"; } if (input.Contains("mouse 0000000000000000 00000006")) { output = "MouseButton4"; } if (input.Contains("mouse 0000000000000000 00000007")) { output = "MouseButton5"; } if (input.Contains("mouse 0000000000000000 00008000")) { output = "MouseX-Axis"; } if (input.Contains("mouse 0000000000000000 00008001")) { output = "MouseY-Axis"; } } if (input.StartsWith("joystick ")) { // joystick binding - not currently used } break; // Text is being saved TO mednafen config case ConversionOrder.Save: if (input == "LeftMouseButton") { output = "mouse 0000000000000000 00000000"; return(output); } if (input == "MiddleMouseButton") { output = "mouse 0000000000000000 00000001"; return(output); } if (input == "RightMouseButton") { output = "mouse 0000000000000000 00000002"; return(output); } if (input == "MouseScrollWheelUp") { output = "mouse 0000000000000000 00000003"; return(output); } if (input == "MouseScrollWheelDown") { output = "mouse 0000000000000000 00000004"; return(output); } if (input == "MouseButton3") { output = "mouse 0000000000000000 00000005"; return(output); } if (input == "MouseButton4") { output = "mouse 0000000000000000 00000006"; return(output); } if (input == "MouseButton5") { output = "mouse 0000000000000000 00000007"; return(output); } if (input == "MouseX-Axis") { output = "mouse 0000000000000000 00008000"; return(output); } if (input == "MouseY-Axis") { output = "mouse 0000000000000000 00008001"; return(output); } if (!input.StartsWith("mouse ") && !input.StartsWith("joystick ")) { // assume keyboard output = KeyboardTranslation.DXtoSDLCode(input, KeyboardType.UK); } break; } return(output); }