/// <summary> /// Check settings. /// </summary> /// <returns>True if settings changed.</returns> public bool CheckSettings(List<DeviceInstance> diInstances, List<DeviceInstance> diInstancesOld) { var updated = false; var ini2 = new Ini(IniFileName); var oldCount = diInstancesOld.Count; for (int i = 0; i < 4; i++) { var pad = string.Format("PAD{0}", i + 1); var section = ""; // If direct Input instance is connected. if (i < diInstances.Count) { var ig = diInstances[i].InstanceGuid; section = GetInstanceSection(ig); // If INI file contain settings for this device then... string sectionName = null; if (ContainsInstanceSection(ig, IniFileName, out sectionName)) { var samePosition = i < oldCount && diInstancesOld[i].InstanceGuid.Equals(diInstances[i].InstanceGuid); // Load settings. if (!samePosition) { MainForm.Current.SuspendEvents(); ReadPadSettings(IniFileName, section, i); MainForm.Current.ResumeEvents(); } } else { MainForm.Current.MainTabControl.SelectedIndex = i; MainForm.Current.SuspendEvents(); ClearPadSettings(i); MainForm.Current.ResumeEvents(); var f = new NewDeviceForm(); f.LoadData(diInstances[i], i); f.StartPosition = FormStartPosition.CenterParent; var result = f.ShowDialog(MainForm.Current); f.Dispose(); updated = (result == DialogResult.OK); } } else { MainForm.Current.SuspendEvents(); ClearPadSettings(i); MainForm.Current.ResumeEvents(); } // Update Mappings. ini2.SetValue(SettingName.Mappings, pad, section); } return updated; }
public void SetPadSetting(string padSectionName, DeviceInstance di) { var ini2 = new Ini(IniFileName); //ps.PadSettingChecksum = Guid.Empty; ini2.SetValue(padSectionName, SettingName.ProductName, di.ProductName); ini2.SetValue(padSectionName, SettingName.ProductGuid, di.ProductGuid.ToString()); ini2.SetValue(padSectionName, SettingName.InstanceGuid, di.InstanceGuid.ToString()); }
/// <summary> /// Set INI settings from PadSetting object by device Instance GUID. /// </summary> /// <param name="instanceGuid">Instance GUID.</param> /// <returns>PadSettings object.</returns> public void SetPadSetting(string padSectionName, PadSetting ps) { var ini2 = new Ini(IniFileName); //ps.PadSettingChecksum = Guid.Empty; ini2.SetValue(padSectionName, SettingName.AxisToDPadDeadZone, ps.AxisToDPadDeadZone); ini2.SetValue(padSectionName, SettingName.AxisToDPadEnabled, ps.AxisToDPadEnabled); ini2.SetValue(padSectionName, SettingName.AxisToDPadOffset, ps.AxisToDPadOffset); ini2.SetValue(padSectionName, SettingName.ButtonA, ps.ButtonA); ini2.SetValue(padSectionName, SettingName.ButtonB, ps.ButtonB); ini2.SetValue(padSectionName, SettingName.ButtonGuide, ps.ButtonBig); ini2.SetValue(padSectionName, SettingName.ButtonBack, ps.ButtonBack); ini2.SetValue(padSectionName, SettingName.ButtonStart, ps.ButtonStart); ini2.SetValue(padSectionName, SettingName.ButtonX, ps.ButtonX); ini2.SetValue(padSectionName, SettingName.ButtonY, ps.ButtonY); ini2.SetValue(padSectionName, SettingName.DPad, ps.DPad); ini2.SetValue(padSectionName, SettingName.DPadDown, ps.DPadDown); ini2.SetValue(padSectionName, SettingName.DPadLeft, ps.DPadLeft); ini2.SetValue(padSectionName, SettingName.DPadRight, ps.DPadRight); ini2.SetValue(padSectionName, SettingName.DPadUp, ps.DPadUp); ini2.SetValue(padSectionName, SettingName.ForceEnable, ps.ForceEnable); ini2.SetValue(padSectionName, SettingName.ForceOverall, ps.ForceOverall); ini2.SetValue(padSectionName, SettingName.ForceSwapMotor, ps.ForceSwapMotor); ini2.SetValue(padSectionName, SettingName.ForceType, ps.ForceType); ini2.SetValue(padSectionName, SettingName.GamePadType, ps.GamePadType); ini2.SetValue(padSectionName, SettingName.LeftMotorPeriod, ps.LeftMotorPeriod); ini2.SetValue(padSectionName, SettingName.LeftShoulder, ps.LeftShoulder); ini2.SetValue(padSectionName, SettingName.LeftThumbAntiDeadZoneX, ps.LeftThumbAntiDeadZoneX); ini2.SetValue(padSectionName, SettingName.LeftThumbAntiDeadZoneY, ps.LeftThumbAntiDeadZoneY); ini2.SetValue(padSectionName, SettingName.LeftThumbAxisX, ps.LeftThumbAxisX); ini2.SetValue(padSectionName, SettingName.LeftThumbAxisY, ps.LeftThumbAxisY); ini2.SetValue(padSectionName, SettingName.LeftThumbButton, ps.LeftThumbButton); ini2.SetValue(padSectionName, SettingName.LeftThumbDeadZoneX, ps.LeftThumbDeadZoneX); ini2.SetValue(padSectionName, SettingName.LeftThumbDeadZoneY, ps.LeftThumbDeadZoneY); ini2.SetValue(padSectionName, SettingName.LeftThumbDown, ps.LeftThumbDown); ini2.SetValue(padSectionName, SettingName.LeftThumbLeft, ps.LeftThumbLeft); ini2.SetValue(padSectionName, SettingName.LeftThumbRight, ps.LeftThumbRight); ini2.SetValue(padSectionName, SettingName.LeftThumbUp, ps.LeftThumbUp); ini2.SetValue(padSectionName, SettingName.LeftTrigger, ps.LeftTrigger); ini2.SetValue(padSectionName, SettingName.LeftTriggerDeadZone, ps.LeftTriggerDeadZone); ini2.SetValue(padSectionName, SettingName.PassThrough, ps.PassThrough); ini2.SetValue(padSectionName, SettingName.RightMotorPeriod, ps.RightMotorPeriod); ini2.SetValue(padSectionName, SettingName.RightShoulder, ps.RightShoulder); ini2.SetValue(padSectionName, SettingName.RightThumbAntiDeadZoneX, ps.RightThumbAntiDeadZoneX); ini2.SetValue(padSectionName, SettingName.RightThumbAntiDeadZoneY, ps.RightThumbAntiDeadZoneY); ini2.SetValue(padSectionName, SettingName.RightThumbAxisX, ps.RightThumbAxisX); ini2.SetValue(padSectionName, SettingName.RightThumbAxisY, ps.RightThumbAxisY); ini2.SetValue(padSectionName, SettingName.RightThumbButton, ps.RightThumbButton); ini2.SetValue(padSectionName, SettingName.RightThumbDeadZoneX, ps.RightThumbDeadZoneX); ini2.SetValue(padSectionName, SettingName.RightThumbDeadZoneY, ps.RightThumbDeadZoneY); ini2.SetValue(padSectionName, SettingName.RightThumbDown, ps.RightThumbDown); ini2.SetValue(padSectionName, SettingName.RightThumbLeft, ps.RightThumbLeft); ini2.SetValue(padSectionName, SettingName.RightThumbRight, ps.RightThumbRight); ini2.SetValue(padSectionName, SettingName.RightThumbUp, ps.RightThumbUp); ini2.SetValue(padSectionName, SettingName.RightTrigger, ps.RightTrigger); ini2.SetValue(padSectionName, SettingName.RightTriggerDeadZone, ps.RightTriggerDeadZone); }
/// <summary> /// Save setting from windows form control to current INI file. /// </summary> /// <param name="path">path of parameter (related to actual control)</param> /// <param name="dstIniSection">if not null then section will be different inside INI file than specified in path</param> public bool SaveSetting(Ini ini, string path) { var control = SettingsMap[path]; string key = path.Split('\\')[1]; string v = string.Empty; if (key == SettingName.HookMode || control.Name == "GamePadTypeComboBox" || control.Name == "ForceTypeComboBox") { var v1 = ((ComboBox)control).SelectedItem; if (v1 == null) { v = "0"; } else if (v1 is KeyValuePair) { v = ((KeyValuePair)v1).Value; } else { v = ((int)v1).ToString(); } } // If di menu strip attached. else if (control is ComboBox) { var cbx = (ComboBox)control; if (control.ContextMenuStrip == null) { v = control.Text; } else { v = new SettingsConverter(control.Text, key).ToIniSetting(); // make sure that disabled button value is "0". if (SettingName.IsButton(key) && string.IsNullOrEmpty(v)) v = "0"; } } else if (control is TextBox) { // if setting is readonly. if (key == SettingName.InstanceGuid || key == SettingName.ProductGuid) { v = string.IsNullOrEmpty(control.Text) ? Guid.Empty.ToString("D") : control.Text; } else v = control.Text; } else if (control is ListBox) { var lbx = (ListBox)control; v = string.Join(",", lbx.Items.Cast<string>().ToArray()); } else if (control is NumericUpDown) { NumericUpDown nud = (NumericUpDown)control; v = nud.Value.ToString(); } else if (control is TrackBar) { TrackBar tc = (TrackBar)control; // convert 100% to 256 if (key == SettingName.AxisToDPadDeadZone || key == SettingName.AxisToDPadOffset || key == SettingName.LeftTriggerDeadZone || key == SettingName.RightTriggerDeadZone) { v = System.Convert.ToInt32((float)tc.Value / 100F * 256F).ToString(); } // convert 100% to 500 else if (key == SettingName.LeftMotorPeriod || key == SettingName.RightMotorPeriod) { v = System.Convert.ToInt32((float)tc.Value / 100F * 500F).ToString(); } // Convert 100% to 32767 else if (key == SettingName.LeftThumbDeadZoneX || key == SettingName.LeftThumbDeadZoneY || key == SettingName.RightThumbDeadZoneX || key == SettingName.RightThumbDeadZoneY) { v = System.Convert.ToInt32((float)tc.Value / 100F * ((float)Int16.MaxValue)).ToString(); } else v = tc.Value.ToString(); } else if (control is CheckBox) { CheckBox tc = (CheckBox)control; v = tc.Checked ? "1" : "0"; } if (SettingName.IsThumbAxis(key)) { v = v.Replace(SettingName.SType.Axis, ""); } if (SettingName.IsDPad(key)) v = v.Replace(SettingName.SType.DPad, ""); if (v == "v1") v = "UP"; if (v == "v2") v = "RIGHT"; if (v == "v3") v = "DOWN"; if (v == "v4") v = "LEFT"; if (v == "") { if (key == SettingName.DPadUp) v = "UP"; if (key == SettingName.DPadDown) v = "DOWN"; if (key == SettingName.DPadLeft) v = "LEFT"; if (key == SettingName.DPadRight) v = "RIGHT"; } // add comment. //var l = SettingName.MaxNameLength - key.Length + 24; //v = string.Format("{0, -" + l + "} # {1} Default: '{2}'.", v, SettingName.GetDescription(key), SettingName.GetDefaultValue(key)); var section = path.Split('\\')[0]; var padIndex = SettingName.GetPadIndex(path); // If this is PAD section then if (padIndex > -1) { section = GetInstanceSection(padIndex); // If destination section is empty because controller is not connected then skip. if (string.IsNullOrEmpty(section)) return false; } var oldValue = ini.GetValue(section, key); var saved = false; if (oldValue != v) { ini.SetValue(section, key, v); saveCount++; saved = true; if (ConfigSaved != null) ConfigSaved(this, new SettingEventArgs(IniFileName, saveCount)); } // Flush XML too. SettingsFile.Current.Save(); return saved; }