diff --git a/AppSettings.cs b/AppSettings.cs index 7334312..941c871 100644 --- a/AppSettings.cs +++ b/AppSettings.cs @@ -5,6 +5,7 @@ using System.Text; using System.Configuration; using System.Drawing; using System.Windows.Forms; +using static SCJMapper_V2.Layout.MapProps; namespace SCJMapper_V2 { @@ -12,12 +13,12 @@ namespace SCJMapper_V2 { FormSettings FS = null; // Settings form - + // Singleton private static readonly Lazy m_lazy = new Lazy( () => new AppSettings( ) ); public static AppSettings Instance { get => m_lazy.Value; } - private AppSettings( ) + private AppSettings() { if ( this.FirstRun ) { // migrate the settings to the new version if the app runs the first time @@ -66,10 +67,10 @@ namespace SCJMapper_V2 // manages Upgrade [UserScopedSetting( )] - [DefaultSettingValue( "True" )] + [DefaultSettingValue( "True" )] public bool FirstRun { - get { return ( bool )this["FirstRun"]; } + get { return (bool)this["FirstRun"]; } set { this["FirstRun"] = value; } } @@ -79,7 +80,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "1000, 900" )] public Size FormSize { - get { return ( Size )this["FormSize"]; } + get { return (Size)this["FormSize"]; } set { this["FormSize"] = value; } } @@ -87,7 +88,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "10, 10" )] public Point FormLocation { - get { return ( Point )this["FormLocation"]; } + get { return (Point)this["FormLocation"]; } set { this["FormLocation"] = value; } } @@ -96,7 +97,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "layout_joystick_spacesim" )] // from Game Bundle public string DefMappingName { - get { return ( string )this["DefMappingName"]; } + get { return (string)this["DefMappingName"]; } set { this["DefMappingName"] = value; } } @@ -104,7 +105,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "layout_my_joystick" )] // just a default public string MyMappingName { - get { return ( string )this["MyMappingName"]; } + get { return (string)this["MyMappingName"]; } set { this["MyMappingName"] = value; } } @@ -112,7 +113,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "True" )] public bool ShowJoystick { - get { return ( bool )this["ShowJoystick"]; } + get { return (bool)this["ShowJoystick"]; } set { this["ShowJoystick"] = value; } } @@ -120,7 +121,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "True" )] public bool ShowGamepad { - get { return ( bool )this["ShowGamepad"]; } + get { return (bool)this["ShowGamepad"]; } set { this["ShowGamepad"] = value; } } @@ -128,7 +129,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "True" )] public bool ShowKeyboard { - get { return ( bool )this["ShowKeyboard"]; } + get { return (bool)this["ShowKeyboard"]; } set { this["ShowKeyboard"] = value; } } @@ -136,7 +137,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "True" )] public bool ShowMouse // 20151220BM: add mouse device (from AC 2.0 defaultProfile usage) { - get { return ( bool )this["ShowMouse"]; } + get { return (bool)this["ShowMouse"]; } set { this["ShowMouse"] = value; } } @@ -144,7 +145,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "False" )] public bool ShowMapped { - get { return ( bool )this["ShowMapped"]; } + get { return (bool)this["ShowMapped"]; } set { this["ShowMapped"] = value; } } @@ -155,7 +156,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS1 { - get { return ( string )this["IgnoreJS1"]; } + get { return (string)this["IgnoreJS1"]; } set { this["IgnoreJS1"] = value; } } @@ -163,7 +164,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS2 { - get { return ( string )this["IgnoreJS2"]; } + get { return (string)this["IgnoreJS2"]; } set { this["IgnoreJS2"] = value; } } @@ -171,7 +172,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS3 { - get { return ( string )this["IgnoreJS3"]; } + get { return (string)this["IgnoreJS3"]; } set { this["IgnoreJS3"] = value; } } @@ -179,7 +180,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS4 { - get { return ( string )this["IgnoreJS4"]; } + get { return (string)this["IgnoreJS4"]; } set { this["IgnoreJS4"] = value; } } @@ -187,7 +188,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS5 { - get { return ( string )this["IgnoreJS5"]; } + get { return (string)this["IgnoreJS5"]; } set { this["IgnoreJS5"] = value; } } @@ -195,7 +196,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS6 { - get { return ( string )this["IgnoreJS6"]; } + get { return (string)this["IgnoreJS6"]; } set { this["IgnoreJS6"] = value; } } @@ -203,7 +204,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS7 { - get { return ( string )this["IgnoreJS7"]; } + get { return (string)this["IgnoreJS7"]; } set { this["IgnoreJS7"] = value; } } @@ -211,7 +212,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS8 { - get { return ( string )this["IgnoreJS8"]; } + get { return (string)this["IgnoreJS8"]; } set { this["IgnoreJS8"] = value; } } @@ -219,7 +220,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS9 { - get { return ( string )this["IgnoreJS9"]; } + get { return (string)this["IgnoreJS9"]; } set { this["IgnoreJS9"] = value; } } @@ -227,7 +228,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS10 { - get { return ( string )this["IgnoreJS10"]; } + get { return (string)this["IgnoreJS10"]; } set { this["IgnoreJS10"] = value; } } @@ -235,7 +236,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string IgnoreJS11 { - get { return ( string )this["IgnoreJS11"]; } + get { return (string)this["IgnoreJS11"]; } set { this["IgnoreJS11"] = value; } } @@ -269,7 +270,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string UserSCPath { - get { return ( string )this["UserSCPath"]; } + get { return (string)this["UserSCPath"]; } set { this["UserSCPath"] = value; } } @@ -277,7 +278,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "False" )] public bool UserSCPathUsed { - get { return ( bool )this["UserSCPathUsed"]; } + get { return (bool)this["UserSCPathUsed"]; } set { this["UserSCPathUsed"] = value; } } @@ -285,7 +286,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( ",default,multiplayer,singleplayer,player,flycam,vehicle_driver," )] // empty Note: comma separated list, must have a comma at the begining and the end (to find 'player' on its own...) public string IgnoreActionmaps { - get { return ( string )this["IgnoreActionmaps"]; } + get { return (string)this["IgnoreActionmaps"]; } set { this["IgnoreActionmaps"] = value; } } @@ -294,7 +295,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "False" )] public bool DetectGamepad { - get { return ( bool )this["DetectGamepad"]; } + get { return (bool)this["DetectGamepad"]; } set { this["DetectGamepad"] = value; } } @@ -302,7 +303,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "False" )] public bool UsePTU { - get { return ( bool )this["UsePTU"]; } + get { return (bool)this["UsePTU"]; } set { this["UsePTU"] = value; } } @@ -310,7 +311,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "False" )] public bool UseCSVListing { - get { return ( bool )this["UseCSVListing"]; } + get { return (bool)this["UseCSVListing"]; } set { this["UseCSVListing"] = value; } } @@ -318,7 +319,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "False" )] public bool ListModifiers { - get { return ( bool )this["ListModifiers"]; } + get { return (bool)this["ListModifiers"]; } set { this["ListModifiers"] = value; } } @@ -355,7 +356,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "1000, 900" )] public Size FormTableSize { - get { return ( Size )this["FormTableSize"]; } + get { return (Size)this["FormTableSize"]; } set { this["FormTableSize"] = value; } } @@ -363,7 +364,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "760, 320" )] public Point FormTableLocation { - get { return ( Point )this["FormTableLocation"]; } + get { return (Point)this["FormTableLocation"]; } set { this["FormTableLocation"] = value; } } @@ -371,7 +372,7 @@ namespace SCJMapper_V2 [DefaultSettingValue( "" )] public string FormTableColumnWidth { - get { return ( string )this["FormTableColumnWidth"]; } + get { return (string)this["FormTableColumnWidth"]; } set { this["FormTableColumnWidth"] = value; } } @@ -395,6 +396,137 @@ namespace SCJMapper_V2 } + //**** Form Layout + + [UserScopedSetting( )] + [DefaultSettingValue( "1000, 765" )] + public Size FormLayoutSize + { + get { return (Size)this["FormLayoutSize"]; } + set { this["FormLayoutSize"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "10, 10" )] + public Point FormLayoutLocation + { + get { return (Point)this["FormLayoutLocation"]; } + set { this["FormLayoutLocation"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "16" )] + public int LayoutFontSize + { + get { return (int)this["LayoutFontSize"]; } + set { this["LayoutFontSize"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,0,0,139|255,255,255,255" )] + public string GroupColor_00 + { + get { return (string)this["GroupColor_00"]; } + set { this["GroupColor_00"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,255,140,00|255,255,255,255" )] + public string GroupColor_01 + { + get { return (string)this["GroupColor_01"]; } + set { this["GroupColor_01"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,138,43,226|255,255,255,255" )] + public string GroupColor_02 + { + get { return (string)this["GroupColor_02"]; } + set { this["GroupColor_02"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,220,20,60|255,255,255,255" )] + public string GroupColor_03 + { + get { return (string)this["GroupColor_03"]; } + set { this["GroupColor_03"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,184,134,11|255,255,255,255" )] + public string GroupColor_04 + { + get { return (string)this["GroupColor_04"]; } + set { this["GroupColor_04"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,46,139,87|255,255,255,255" )] + public string GroupColor_05 + { + get { return (string)this["GroupColor_05"]; } + set { this["GroupColor_05"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,128,128,0|255,255,255,255" )] + public string GroupColor_06 + { + get { return (string)this["GroupColor_06"]; } + set { this["GroupColor_06"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,47,79,79|255,255,255,255" )] + public string GroupColor_07 + { + get { return (string)this["GroupColor_07"]; } + set { this["GroupColor_07"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,255,0,0|255,255,255,255" )] + public string GroupColor_08 + { + get { return (string)this["GroupColor_08"]; } + set { this["GroupColor_08"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,255,215,0|255,255,255,255" )] + public string GroupColor_09 + { + get { return (string)this["GroupColor_09"]; } + set { this["GroupColor_09"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "0|255,255,255,255" )] + public string GroupColor_10 + { + get { return (string)this["GroupColor_10"]; } + set { this["GroupColor_10"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,128,0,128|255,255,255,255" )] + public string GroupColor_11 + { + get { return (string)this["GroupColor_11"]; } + set { this["GroupColor_11"] = value; } + } + + [UserScopedSetting( )] + [DefaultSettingValue( "255,255,20,147|255,255,255,255" )] + public string GroupColor_12 + { + get { return (string)this["GroupColor_12"]; } + set { this["GroupColor_12"] = value; } + } + + #endregion diff --git a/Devices/DeviceList.cs b/Devices/DeviceList.cs index 3c111a2..3323a78 100644 --- a/Devices/DeviceList.cs +++ b/Devices/DeviceList.cs @@ -8,6 +8,24 @@ namespace SCJMapper_V2.Devices { public class DeviceList : List { + /// + /// Dumps the know GameDevices + /// + /// + public string DumpDevices() + { + this.Clear( ); + if ( AppSettings.Instance.DetectGamepad && ( DeviceInst.GamepadRef != null ) ) { + this.Add( DeviceInst.GamepadRef ); + } + this.AddRange( DeviceInst.JoystickListRef ); + this.Add( DeviceInst.MouseRef ); + string ret = $"DXInput Device Listing:\n"; + foreach(var dev in this ) { + ret += $"\t{(dev.DevClass+":").PadRight(10)}{dev.DevName}\n\t - Product: {dev.DevGUID} - Instance: {{{dev.DevInstanceGUID}}}\n"; + } + return ret; + } } } diff --git a/Devices/Mouse/MouseCls.cs b/Devices/Mouse/MouseCls.cs index a6050e5..5d65ec8 100644 --- a/Devices/Mouse/MouseCls.cs +++ b/Devices/Mouse/MouseCls.cs @@ -160,7 +160,7 @@ namespace SCJMapper_V2.Devices.Mouse /// /// The ProductGUID property /// - public override string DevGUID { get { return "{}"; } } // @@@ tbd + public override string DevGUID { get { return $"{{{m_device.Information.ProductGuid.ToString( )}}}"; } } // @@@ tbd /// /// The JS Instance GUID for multiple device support (VJoy gets 2 of the same name) /// diff --git a/Devices/UICustHeader.cs b/Devices/UICustHeader.cs index 0aaf524..055961d 100644 --- a/Devices/UICustHeader.cs +++ b/Devices/UICustHeader.cs @@ -151,6 +151,14 @@ namespace SCJMapper_V2.Devices + + + + + + + + */ @@ -171,6 +179,13 @@ namespace SCJMapper_V2.Devices // CIG adds them to export - so can we ... r += string.Format( "\t\t\n" ); r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); + r += string.Format( "\t\t\n" ); r += string.Format( "\t\t\n" ); r += string.Format( "\t\n" ); diff --git a/FormMain.Designer.cs b/FormMain.Designer.cs index dc709fa..1849cc5 100644 --- a/FormMain.Designer.cs +++ b/FormMain.Designer.cs @@ -146,6 +146,7 @@ this.meShowOptionsDialog = new System.Windows.Forms.ToolStripMenuItem(); this.meShowDeviceTuningDialog = new System.Windows.Forms.ToolStripMenuItem(); this.meShowDeviceMonitoringDialog = new System.Windows.Forms.ToolStripMenuItem(); + this.meShowLayoutDialog = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); this.msBtConfig = new System.Windows.Forms.ToolStripDropDownButton(); this.meSettingsDialog = new System.Windows.Forms.ToolStripMenuItem(); @@ -395,13 +396,13 @@ this.tmeWDown, this.toolStripSeparator4}); this.cmMouseEntry.Name = "cmMouseEntry"; - this.cmMouseEntry.Size = new System.Drawing.Size(172, 132); + this.cmMouseEntry.Size = new System.Drawing.Size(173, 132); this.cmMouseEntry.Opening += new System.ComponentModel.CancelEventHandler(this.cmMouseEntry_Opening); // // tmeK_Tab // this.tmeK_Tab.Name = "tmeK_Tab"; - this.tmeK_Tab.Size = new System.Drawing.Size(171, 22); + this.tmeK_Tab.Size = new System.Drawing.Size(172, 22); this.tmeK_Tab.Tag = "K_Tab"; this.tmeK_Tab.Text = "Kbd - TAB"; this.tmeK_Tab.Click += new System.EventHandler(this.tmeItem_Click); @@ -409,12 +410,12 @@ // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(168, 6); + this.toolStripSeparator7.Size = new System.Drawing.Size(169, 6); // // tmeXAxis // this.tmeXAxis.Name = "tmeXAxis"; - this.tmeXAxis.Size = new System.Drawing.Size(171, 22); + this.tmeXAxis.Size = new System.Drawing.Size(172, 22); this.tmeXAxis.Tag = "X"; this.tmeXAxis.Text = "X-Axis (horizontal)"; this.tmeXAxis.Click += new System.EventHandler(this.tmeItem_Click); @@ -422,7 +423,7 @@ // tmeYAxis // this.tmeYAxis.Name = "tmeYAxis"; - this.tmeYAxis.Size = new System.Drawing.Size(171, 22); + this.tmeYAxis.Size = new System.Drawing.Size(172, 22); this.tmeYAxis.Tag = "Y"; this.tmeYAxis.Text = "Y-Axis (vertical)"; this.tmeYAxis.Click += new System.EventHandler(this.tmeItem_Click); @@ -430,12 +431,12 @@ // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(168, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(169, 6); // // tmeWUp // this.tmeWUp.Name = "tmeWUp"; - this.tmeWUp.Size = new System.Drawing.Size(171, 22); + this.tmeWUp.Size = new System.Drawing.Size(172, 22); this.tmeWUp.Tag = "U"; this.tmeWUp.Text = "Wheel Up"; this.tmeWUp.Click += new System.EventHandler(this.tmeItem_Click); @@ -443,7 +444,7 @@ // tmeWDown // this.tmeWDown.Name = "tmeWDown"; - this.tmeWDown.Size = new System.Drawing.Size(171, 22); + this.tmeWDown.Size = new System.Drawing.Size(172, 22); this.tmeWDown.Tag = "D"; this.tmeWDown.Text = "Wheel Down"; this.tmeWDown.Click += new System.EventHandler(this.tmeItem_Click); @@ -451,14 +452,14 @@ // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(168, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(169, 6); // // cbxThrottle // this.cbxThrottle.AutoSize = true; this.cbxThrottle.Location = new System.Drawing.Point(107, 108); this.cbxThrottle.Name = "cbxThrottle"; - this.cbxThrottle.Size = new System.Drawing.Size(66, 17); + this.cbxThrottle.Size = new System.Drawing.Size(67, 17); this.cbxThrottle.TabIndex = 13; this.cbxThrottle.Tag = "§"; this.cbxThrottle.Text = "Throttle"; @@ -1353,7 +1354,8 @@ this.meShowToggleTable, this.meShowOptionsDialog, this.meShowDeviceTuningDialog, - this.meShowDeviceMonitoringDialog}); + this.meShowDeviceMonitoringDialog, + this.meShowLayoutDialog}); this.msBtShow.Image = global::SCJMapper_V2.Properties.Resources.Monitor; this.msBtShow.ImageTransparentColor = System.Drawing.Color.Magenta; this.msBtShow.Name = "msBtShow"; @@ -1394,6 +1396,13 @@ this.meShowDeviceMonitoringDialog.Text = "Show Device Monitoring Dialog..."; this.meShowDeviceMonitoringDialog.Click += new System.EventHandler(this.meShowDeviceMonitoringDialog_Click); // + // meShowLayoutDialog + // + this.meShowLayoutDialog.Name = "meShowLayoutDialog"; + this.meShowLayoutDialog.Size = new System.Drawing.Size(250, 22); + this.meShowLayoutDialog.Text = "Show Layout Dialog..."; + this.meShowLayoutDialog.Click += new System.EventHandler(this.meShowLayoutDialog_Click); + // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; @@ -1518,6 +1527,7 @@ this.IL2.Images.SetKeyName(0, "User"); this.IL2.Images.SetKeyName(1, "Locked"); this.IL2.Images.SetKeyName(2, "RSI"); + this.IL2.Images.SetKeyName(3, "Exported"); // // MainForm // @@ -1695,6 +1705,7 @@ private System.Windows.Forms.ToolStripMenuItem tdiExpandAll; private System.Windows.Forms.ToolStripMenuItem meShowDeviceMonitoringDialog; private System.Windows.Forms.Label lblPTU; + private System.Windows.Forms.ToolStripMenuItem meShowLayoutDialog; } } diff --git a/FormMain.cs b/FormMain.cs index 47b2bd7..5714094 100644 --- a/FormMain.cs +++ b/FormMain.cs @@ -23,6 +23,7 @@ using SCJMapper_V2.Devices.Options; using SCJMapper_V2.Devices.Monitor; using SCJMapper_V2.Translation; using System.Threading; +using SCJMapper_V2.Layout; namespace SCJMapper_V2 { @@ -310,7 +311,10 @@ namespace SCJMapper_V2 SCMappings.UpdateMappingNames( ); msSelectMapping.DropDownItems.Clear( ); foreach ( string s in SCMappings.MappingNames ) { - if ( !SCMappings.IsUserMapping( s ) ) { + if ( SCMappings.IsExportedMapping( s ) ) { + msSelectMapping.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ), IL2.Images["Exported"] ); + } + else if ( !SCMappings.IsUserMapping( s ) ) { msSelectMapping.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ), IL2.Images["RSI"] ); } else { @@ -598,7 +602,8 @@ namespace SCJMapper_V2 // there is a joystick device left.. DeviceInst.JoystickListRef[joyStickIndex].JSAssignment = joyStickIndex + 1; // assign number 1.. m_AT.ActionMaps.jsN[deviceTabIndex] = DeviceInst.JoystickListRef[joyStickIndex].DevName; - m_AT.ActionMaps.jsNGUID[deviceTabIndex] = DeviceInst.JoystickListRef[joyStickIndex].DevInstanceGUID; + m_AT.ActionMaps.jsN_instGUID[deviceTabIndex] = DeviceInst.JoystickListRef[joyStickIndex].DevInstanceGUID; + m_AT.ActionMaps.jsN_prodGUID[deviceTabIndex] = DeviceInst.JoystickListRef[joyStickIndex].DevGUID; joyStickIndex++; } } @@ -1036,7 +1041,10 @@ namespace SCJMapper_V2 private void meDumpLogfile_Click( object sender, EventArgs e ) { AutoTabXML_Assignment( EATabXML.Tab_XML ); - rtb.Text = string.Format( "-- {0} - SC Joystick AC Path and Logfile --\n\n{1}\n{2}", DateTime.Now, SCPath.Summary(), SCLogExtract.ExtractLog( ) ); + rtb.Text = $"-- {DateTime.Now} - SC Joystick AC Path and Logfile --\n"; + var devList = new DeviceList( ); + rtb.Text += $"\n{devList.DumpDevices( )}\n{SCPath.Summary( )}\n{SCLogExtract.ExtractLog( )}"; + devList = null; } private void meDumpDefaultProfile_Click( object sender, EventArgs e ) @@ -1148,6 +1156,15 @@ namespace SCJMapper_V2 timer1.Enabled = true; } + private void meShowLayoutDialog_Click( object sender, EventArgs e ) + { + timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy + var LAYOUT = new FormLayout { ActionList = m_AT.ReportActionsSItemText() }; + LAYOUT.ShowDialog( this ); + LAYOUT = null; // get rid and create a new one next time.. + timer1.Enabled = true; + } + // *** Settings @@ -1197,10 +1214,12 @@ namespace SCJMapper_V2 for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { j = DeviceInst.JoystickListRef.Find_InstanceForjsN( i + 1 ); if ( j != null ) { - newTree.ActionMaps.jsN[i] = j.DevName; newTree.ActionMaps.jsNGUID[i] = j.DevInstanceGUID; + newTree.ActionMaps.jsN[i] = j.DevName; + newTree.ActionMaps.jsN_instGUID[i] = j.DevInstanceGUID; + newTree.ActionMaps.jsN_prodGUID[i] = j.DevGUID; } else { - newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsNGUID[i] = ""; + newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsN_instGUID[i] = ""; newTree.ActionMaps.jsN_prodGUID[i] = ""; } } diff --git a/FormMain.resx b/FormMain.resx index 55b4ea2..6098778 100644 --- a/FormMain.resx +++ b/FormMain.resx @@ -128,7 +128,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8 - EAAAAk1TRnQBSQFMAgEBCQEAAVgBFAFYARQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + EAAAAk1TRnQBSQFMAgEBCQEAAWgBFAFoARQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -581,9 +581,9 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc - GQAAAk1TRnQBSQFMAgEBAwEAARgBAgEYAQIBMAEAATABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABwAMAATADAAEBAQABCAYAASQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACy + HQAAAk1TRnQBSQFMAgEBBAEAASgBAgEoAQIBMAEAATABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABwAMAAWADAAEBAQABCAYAAUgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm @@ -610,89 +610,105 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/2sAHP8JAAH/SAAB/wL0 - AfME8AHzAvQB/0MAAf8B8wG6HKwBugHzAf9KAAH/AfIBBwG0AYsMawGLAfcBvAHzAf8aAAH0AfABBwHv - ApIB7wEHAfAB9BgAAf8B8wGyIKwBsgHzAf9GAAHzAfcWawG7AfQVAAH/AfEB9wHvAQcCvALxArwBBwHv - AfcB8QH/FAAB/wEJJKwBCQH/QwAB9AG7GmsBuwH0EgAB8QGSAe8B8ArxAfAB7wGSAfESAAH/AQkmrAEJ - Af9BAAHzAmsaigJrAfQPAAH/AfAB7wHwDvEB8AHvAfAB/w8AAf8B8yisAfMB/0AAAfcBaxyKAWsBuw4A - AfQBvAEHBPEB8AH3AZABiwJrAosBkQG8BPEBBwG8AfQOAAH/KqwB/z8AAfQBax4GAWsB/wwAAf8BvAEH - BPEBkQprAZEBvAPxAQcBvAH/DQAB8yqsAfM/AAHzAWseigFrAfMMAAHwAQcD8QG7A2sCigGLAvMBiwOK - AmsBkQPxAQcB8A0AAboqrAG6PwAB9AFrHooBawHzCwAB8QHvA/EB9wFrAYoEBgG7Av8BtAQGAYoBawGR - A/EB7wHxCwAB/wGyBqwXsw6sAf8+AAH/AWseigFrAfQKAAH/AZIB8ALxAe8BawEGBYoBkALzAYsFigEG - AWsBkQLxAfABkgH/CgAB/wesAbMBZgINGWYBswesAf8/AAGQHooBiwsAAfEBBwPxAWsRBgGKAWsBvALx - AQcB8QoAAf8GrAGzAa0BDQEQBQ0GQwpmBUMBrQGzBqwB/z0AAf8B9AEHAYoBkBmKAYsBkAEGAbwKAAH/ - AZID8QGRE4oBBgGRA/EBkgH/CQAB/wasAbMBrQkNBUMIZgVDAQ0BrQGzBqwB/zgAAf8BGwEaAXkBUgMr - AWsCkBeLApABgQGRCwAB8wHvAvIB8QFrCYoCawmKAWsBvALyAe8B8wkAAf8GrAGzAa0NDQFDBWYCQwFm - AkMEDQGtAbMGrAH/NgAB8wGZAisBMQUyAUsBawKzAZATiwKQAbMBkAFrAfILAAHwAQcC8gHvAYoGiwGK - AYsBuwK8AbsBiwGKBosBigGRAvIBBwHwCQAB/wasArMODQJDA2YEQwUNArMGrAH/NAAB9AGZASsKMgFL - AWsBkAKzEZADswGKAWsB8gwAAQcB8ALyAZEBigWQAYoBiwG8BPEBvAGLAYoFkAGKAYsC8gHwAQcJAAH/ - BqwCsw8NBkMHDQKzBqwB/zMAAfMBKwExDDIBTAHqAYoFswmQBbMBgQFrAQcB/w0AAfcB8QLyAosBswG6 - AbMCkAEGAe8G8gHvAQYCkAGzAboBswGQAWsC8gHxAfcJAAH/BqwCswINAmUEDQRmAWUHZgENAmYBZQEN - ARACDQKzBqwB/zMAAXkQMgFMAeoBawGKAYEBkAGzB5ABswGQAbMBigFrAZEBvAH/DwABkgPyAYsBkAH0 - Af8BGQKzAWsB8AbyAfEBawKzAfQB/wEZAbMBawHwAvIBkgkAAf8GrAKzAQ0BQwGzAdsBiwINAWwBugHb - AbMDiwG0A7oB2wG0AUMBswHbAbMEDQKzBqwB/zIAAf8BKxIyATEBTAFKAQYJswGKAbsB8wH/EgABkgPy - AYsBswH0Af8BGQKzAWsB8gbzAfIBawKzAfQB/wEZAbMBawHwAvIBkgkAAf8GrAKzAg0BtAHbAbMCDQGz - A9sCkAGLAbQF2wFsAYsC2wFmAg8BDQKzBqwB/zIAAfMBKxQyAUoBigmzAYoBuxQAAfcB8gHzAfIBiwGQ - AbMBugOzAYoBuwH/BPMB/wG7AYoDswG6ArMBawHyAfMB8gH3CQAB/wasArMCDQGQAtsBZgENAbQC2wG0 - A4sBkAO0AtsBiwFsAtsBiwMPArMGrAH/MgAB9AErFDIBbAuzAWsB/xMAAQcB8AH0AfIBkQGQBrMBiwH0 - BP8B9AGLAZAGswGLAfIB9AHwAQcJAAH/BqwCswEPAQ0BbALbAbQBiwLbAbMHDQFmAtsBtAFmAtsBkAEK - Ag8CswasAf8yAAH/ASsTMgFSAWsLswGKAfMTAAHwAbwB9AHzAbsBigazAYoBiwG7AvMBuwGLAYoGswGB - AZEB8wH0AbwB8AkAAf8GrAKzAQ8BDQFmBtsBiwYNAYsD2wGzAQ0BtAHbAbQBDQIPArMGrAH/MwABUhMy - AVEBiguzAYoBuxMAAfMB7wH/AfMB8gFrAbMBuQazAYoCawGKCLMBigHwAfMB9AHvAfMJAAH/BqwCswEP - Ag0BugXbAbQBZgQNAZAD2wG0AWYBDQGRAtsBZgEKAQ8CswasAf8zAAEaATESMgFKAZAMswGREwAB/wGS - AfQB/wHzAbQBigHaAbkPswHaAbMBkQHzAf8B9AGSAf8JAAH/BqwBuQGzAg8BDQG0AtsBtATbAZABDQFm - AbQD2wGLAQ0BDwEKAYsC2wFsAQ4BDwGzAbkGrAH/MwAB/wErATIBUxAyAWwNswFrAf8TAAHxAbwB/wLz - AWsBswHaDrkB2gG5AWsB8AHzAf8BvAHxCgAB/wasAboBswEPAQ4BCgGLAtsBZgFsAbQD2wFsAboC2wG6 - AWwEDQFmAtsBkAEKAQ8BswG6BqwB/zQAARoBKwJZD1MBbA2zAQYB9BMAAf8BkgH0Af8B8wG7AWsC2gW5 - AvQFuQLaAYoB9wHzAf8B9AGSAf8KAAH/BqwBugGzAQ8CCgFsAtsBiwENAQ8BiwLbAZABugHbAboBFQYN - AboB2wG0AQ0BDwGzAboGrAH/NQABGgErATICWQ1TAWwNswGKAfMUAAGSAQcC/wHzAbUBawG5AtoCuQHc - Av8B3AK5A9oBigGRAfMC/wEHAZILAAH/BqwBugGzAQ4BCgEPAUMD2wO6AtsCtALbBLoDiwG0AtsBDQEP - AbMBugasAf82AAH0AZkBMQVZCVMBbA2zAYoB8hQAAfcB7wG8Av8B8wG7AWsBkAPaAdsC9ATaAbMBawH3 - AfMC/wG8Ae8BkgsAAf8GrAG6AbMBDgEKAQ4BDQG6BdwC2wG6AZEB3AHbA9wB4QG0ApEBtALcAWwBCgGz - AboGrAH/OAAB9AGZASsBMQEyAVMBWQdTAVkBbAGzDLkBigHyFAABkgHxAe8B8QL/AvMBtAFrAZACuQLf - ArkBswGKAZEB8QHzAv8B8QHvAfEBkgsAAf8GrAG6AbMBDgMKAZEB3AbbAbQBZgG6BNsB3AG0A5EBugHc - AYsBDQGzAboGrAH/OgAB/wHzARoBMQlTAWwBswy5AYoB9BQAAZIB8gHwAe8BvAL/AfQC8wG7AZEBiwJr - AYsBkAG1AfIB8wH0Av8BvAHvAfAB8gGSCwAB/wasAboBswEOAgoCDQdDAw0CQwNmAUMBDQFDAQ0CQwIN - AbMBugasAf88AAGZATEJUwFLAZAB2gm5AdoBuQFrAf8UAAGSAvIB8QHvAQcB9AL/AfQI8wH0Av8B9AEH - Ae8B8QLyAZILAAH/BqwBugGzAg4BCgcOAQ8CDQIPAQ4FDQEPAQ0BDwEQAQ8CCgGzAboGrAH/PAABUgpT - AVIBawLaCLkB2gGzAbsVAAGSBPICkgEHAfQK/wH0AQcCkgTyAZILAAH/BqwBugGzCgoCDwINAg4BDwQN - AQ8CDgEPAQoCDgGzAboGrAH/OwAB9gExC1kBSgGBA9oEuQPaAYoB9BUAAZIB8gHzAvIBkgH/AfEB9wHv - AbwC8wL/AvMBvAHvAfcB8QH/AZIC8gHzAfIBkgsAAf8GrAG6AbkBCgIOBwoBDgEPAQ0BDwIKAQ4BDwIN - Ag8BDgEKAQ4CCgEOAbkBugasAf87AAEbATELWQFSAewBgQHaAd8E2gHfAbkBBgG8FgAB7wHxAfMC8gHv - AfQCAAH0AfABBwHvApIB7wEHAfAB9AIAAfQB7wLyAfMB8QHvCwAB/wasAdsBuQEKAQ4BCgUOAQoBDgMP - AQ4BCgEOAQoBDgIPAQ0BDwMKAw4BuQHbBqwB/zsAAZkBUgtZAVMBdAG8AYsBBgGQAbkBswGBAQYBkQHy - FwABBwHwAfQC8gEHAfIOAAHyAQcC8gH0AfABBwsAAf8GrAK6AQ4BAAYKAQ4BCgMOAQoBDgIKAQ4CCgIO - AQoDDgIAAroGrAH/OwABdAFTDFkBKwH/AQAB8wHwAbsBvAHzAf8ZAAHxAQcB/wLzArwOAAK8AvMB/wEH - AfELAAH/BqwBswHbAWwaDQFsAdsBswasAf87AAFSDVkBMQH/IAAB9AHvAf8B9AHzAfIB7wHzDAAB8wHv - AfIB8wH0Af8B7wH0CwAB/wesAbkB2xq6AdsBuQesAf87AAFSDVkBMQHzIQABBwHyAf8C8wHwAfcB9AoA - AfQB9wHwAvMB/wHyAQcMAAH/CKwBshqzAbIIrAH/OwABUg1ZATEBGyEAAfMB7wL/AvMBvAH3AfMIAAHz - AfcBvALzAv8B7wHzDAAB/yysAf87AAFSDVkBMQEbIgAC8AH/AfQC8wHwAe8BvAHyAfQC/wH0AfIBvAHv - AfAC8wH0Af8C8A4AAboqrAG6PAABeQFTDFkBMQH0IgAB9AGSAfMB/wH0A/MB8AEHAe8CkgHvAQcB8APz - AfQB/wHzAZIB9A4AAfMqrAHzPAABGgFSDFkBKwH/IwAB8gH3AfIC/wzzAv8B8gH3AfIPAAH/KqwB/zwA - Af8BMQxZAZklAAHzAZIB8AP/CPMD/wHwAZIB8xAAAf8B8yisAfMB/z0AARoBUgFeCVkBMQH0JgAB9AHw - Ae8B8gT/AvQE/wHyAe8B8AH0EgAB/wEJJqwBCQH/PwABmQFSAV4G5QFZATEBGikAAfMBBwH3AbwB8gHz - Av8B8wHyAbwB9wEHAfMVAAH/AQkkrAEJAf9BAAEaAVIBMQFSAVkBWAFSATEBdAEbLAAB/wHxAQcB7wKS - Ae8BBwHxAf8YAAH/AfMBsiCsAbIB8wH/RAAB8wEaAZkBGgHzAf9SAAH/AfMBuxusAbMBuwHzAf+hABz/ - OgABQgFNAT4HAAE+AwABKAMAAcADAAEwAwABAQEAAQEFAAGAAQQWAAP/AQAN/wHAAgABAwH+BgAD/wEA - AQ8H/wH+BAABfwYAAv8B4AIAAX8C/wHgAQcC/wH4BAABHwYAAv8BgAIAAR8C/wIAAv8B8AQAAQ8GAAH/ - Af4DAAEHAf8B/gIAAX8B/wHgBAABBwYAAf8B/AMAAQMB/wH4AgABHwH/AcAEAAEDBgAB/wH8AwABAwH/ - AfACAAEPAf8BwAQAAQMGAAH/AfgDAAEBAf8B4AIAAQcB/wHABAABAwYAAf8B+AMAAQEB/wHgAgABBwH/ - AcAEAAEDBgAB/wH4AwABAQH/AcACAAEDAf8BgAQAAQEGAAH/AfgDAAEBAf8BgAIAAQEB/wGABAABAQYA - Af8B/AMAAQMB/wGAAgABAQH/AYAEAAEBBgAB/wHwAwABAwH/BAAB/wGABAABAQYAAf4EAAEHAf8EAAH/ - AYAEAAEBBgAB+AQAAQcB/wQAAf8BgAQAAQEGAAHgBAABDwH/BAAB/wGABAABAQYAAcAEAAEfAf8EAAH/ - AYAEAAEBBgABwAQAAX8B/wQAAf8BgAQAAQEGAAGAAwABAwL/BAAB/wGABAABAQYAAYADAAEPAv8EAAH/ - AYAEAAEBBgABgAMAAQcC/wQAAf8BgAQAAQEGAAGAAwABBwL/BAAB/wGABAABAQYAAcADAAEHAv8EAAH/ - AYAEAAEBBgABwAMAAQcC/wQAAf8BgAQAAQEGAAHAAwABAwL/AYACAAEBAf8BgAQAAQEGAAHgAwABAwL/ - AYACAAEBAf8BgAQAAQEGAAHwAwABAwL/AcACAAEDAf8BgAQAAQEGAAH4AwABAwL/AcACAAEDAf8BgAQA - AQEGAAH+AwABAwL/AcACAAEDAf8BgAQAAQEGAAH/AYACAAEDAv8BwAIAAQMB/wGABAABAQYAAf8B4AIA - AQMC/wHAAgABAwH/AYAEAAEBBgAB/wHgAgABBwL/AcACAAEDAf8BgAQAAQEGAAH/AcACAAEHAv8BwAIA - AQMB/wGABAABAQYAAf8BwAIAAQ8C/wHAAWABBgEDAf8BgAQAAQEGAAH/AcACAAEfAv8BwAF/Af4BAwH/ - AYAEAAEBBgAB/wHAAQABIAF/Av8BwAF/Af4BAwH/AYAEAAEBBgAB/wHAAQABPwP/AcABPwH8AQMB/wGA - BAABAQYAAf8BwAEAAT8D/wHgAR8B+AEHAf8BgAQAAQEGAAH/AcABAAE/A/8B4AEPAfABBwH/AYAEAAEB - BgAB/wHAAQABPwP/AfACAAEPAf8BwAQAAQMGAAH/AcABAAE/A/8B8AIAAQ8B/wHABAABAwYAAf8BwAEA - AT8D/wH4AgABHwH/AcAEAAEDBgAB/wHAAQABfwP/AfwCAAE/Af8BwAQAAQMGAAH/AeABAAF/A/8B/gIA - AX8B/wHgBAABBwYAAf8B8AEABf8BgAEBAv8B8AQAAQ8GAAH/AfgBAQX/AeABBwL/AfgEAAEfBgAB/wH+ - AQcJ/wH+BAABfwYADf8BwAIAAQMB/wYACw== + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AI8A + HP8JAAH/EgAD9AHzBPAB8wP0KgAB/wL0AfME8AHzAvQB/0MAAf8B8wG6HKwBugHzAf8TAAH0AfABuwGR + D2sBiwGRAbsB8QH0HwAB/wHyAQcBtAGLDGsBiwH3AbwB8wH/GgAB9AHwAQcB7wKSAe8BBwHwAfQYAAH/ + AfMBsiCsAbIB8wH/DQAB9QHuAZEZawFsAZEB8AH/GQAB8wH3FmsBuwH0FQAB/wHxAfcB7wEHArwC8QK8 + AQcB7wH3AfEB/xQAAf8BCSSsAQkB/woAAfIBkSBrAbsB9BUAAfQBuxprAbsB9BIAAfEBkgHvAfAK8QHw + Ae8BkgHxEgAB/wEJJqwBCQH/BwAB9AG7JGsBuwH/EgAB8wJrGooCawH0DwAB/wHwAe8B8A7xAfAB7wHw + Af8PAAH/AfMorAHzAf8FAAHxAmskigFrAfcB8xEAAfcBaxyKAWsBuw4AAfQBvAEHBPEB8AH3AZABiwJr + AosBkQG8BPEBBwG8AfQOAAH/KqwB/wQAAfQCayaKAmsB/w8AAfQBax4GAWsB/wwAAf8BvAEHBPEBkQpr + AZEBvAPxAQcBvAH/DQAB8yqsAfMEAAG7AWsoBgFrAfAPAAHzAWseigFrAfMMAAHwAQcD8QG7A2sCigGL + AvMBiwOKAmsBkQPxAQcB8A0AAboqrAG6BAABiyoGAZAPAAH0AWseigFrAfMLAAHxAe8D8QH3AWsBigQG + AbsC/wG0BAYBigFrAZED8QHvAfELAAH/AbIGrBezDqwB/wMAAWsqigFrDwAB/wFrHooBawH0CgAB/wGS + AfAC8QHvAWsBBgWKAZAC8wGLBYoBBgFrAZEC8QHwAZIB/woAAf8HrAGzAWYCDRlmAbMHrAH/AgAB/wFr + KooBawH/DwABkB6KAYsLAAHxAQcD8QFrEQYBigFrAbwC8QEHAfEKAAH/BqwBswGtAQ0BEAUNBkMKZgVD + Aa0BswasAf8DAAGLAoonBgGKAWwOAAH/AfQBBwGKAZAZigGLAZABBgG8CgAB/wGSA/EBkROKAQYBkQPx + AZIB/wkAAf8GrAGzAa0JDQVDCGYFQwENAa0BswasAf8DAAGRKooBkAkAAf8BGwEaAXkBUgMrAWsCkBeL + ApABgQGRCwAB8wHvAvIB8QFrCYoCawmKAWsBvALyAe8B8wkAAf8GrAGzAa0NDQFDBWYCQwFmAkMEDQGt + AbMGrAH/AwABuwEGKYoBuwcAAfMBmQIrATEFMgFLAWsCswGQE4sCkAGzAZABawHyCwAB8AEHAvIB7wGK + BosBigGLAbsCvAG7AYsBigaLAYoBkQLyAQcB8AkAAf8GrAKzDg0CQwNmBEMFDQKzBqwB/wMAAfQBayiK + AWsB8wUAAfQBmQErCjIBSwFrAZACsxGQA7MBigFrAfIMAAEHAfAC8gGRAYoFkAGKAYsBvATxAbwBiwGK + BZABigGLAvIB8AEHCQAB/wasArMPDQZDBw0CswasAf8EAAGRAYoBkCSKAZABigGRBQAB8wErATEMMgFM + AeoBigWzCZAFswGBAWsBBwH/DQAB9wHxAvICiwGzAboBswKQAQYB7wbyAe8BBgKQAbMBugGzAZABawLy + AfEB9wkAAf8GrAKzAg0CZQQNBGYBZQdmAQ0CZgFlAQ0BEAINArMGrAH/BAAB8gFrApAiiwKQAWsB8gUA + AXkQMgFMAeoBawGKAYEBkAGzB5ABswGQAbMBigFrAZEBvAH/DwABkgPyAYsBkAH0Af8BGQKzAWsB8Aby + AfEBawKzAfQB/wEZAbMBawHwAvIBkgkAAf8GrAKzAQ0BQwGzAdsBiwINAWwBugHbAbMDiwG0A7oB2wG0 + AUMBswHbAbMEDQKzBqwB/wUAAbsBigGzAZAfiwGQArMBigEHBQAB/wErEjIBMQFMAUoBBgmzAYoBuwHz + Af8SAAGSA/IBiwGzAfQB/wEZArMBawHyBvMB8gFrArMB9AH/ARkBswFrAfAC8gGSCQAB/wasArMCDQG0 + AdsBswINAbMD2wKQAYsBtAXbAWwBiwLbAWYCDwENArMGrAH/BgABuwEGArMekAKzAWsB7gYAAfMBKxQy + AUoBigmzAYoBuxQAAfcB8gHzAfIBiwGQAbMBugOzAYoBuwH/BPMB/wG7AYoDswG6ArMBawHyAfMB8gH3 + CQAB/wasArMCDQGQAtsBZgENAbQC2wG0A4sBkAO0AtsBiwFsAtsBiwMPArMGrAH/BwABuwGKA7MZkAOz + AYoBawHxBwAB9AErFDIBbAuzAWsB/xMAAQcB8AH0AfIBkQGQBrMBiwH0BP8B9AGLAZAGswGLAfIB9AHw + AQcJAAH/BqwCswEPAQ0BbALbAbQBiwLbAbMHDQFmAtsBtAFmAtsBkAEKAg8CswasAf8IAAHyAZEBigSz + E5AEswGBAWsBBwH/CAAB/wErEzIBUgFrC7MBigHzEwAB8AG8AfQB8wG7AYoGswGKAYsBuwLzAbsBiwGK + BrMBgQGRAfMB9AG8AfAJAAH/BqwCswEPAQ0BZgbbAYsGDQGLA9sBswENAbQB2wG0AQ0CDwKzBqwB/woA + AfIBkQGKAYEFswqQBrMBgQGKAYsBvAH/CwABUhMyAVEBiguzAYoBuxMAAfMB7wH/AfMB8gFrAbMBuQaz + AYoCawGKCLMBigHwAfMB9AHvAfMJAAH/BqwCswEPAg0BugXbAbQBZgQNAZAD2wG0AWYBDQGRAtsBZgEK + AQ8CswasAf8MAAH1Ae4BkQFrAooBswqQAbMBkAGKAQYBiwGRAe4B9A4AARoBMRIyAUoBkAyzAZETAAH/ + AZIB9AH/AfMBtAGKAdoBuQ+zAdoBswGRAfMB/wH0AZIB/wkAAf8GrAG5AbMCDwENAbQC2wG0BNsBkAEN + AWYBtAPbAYsBDQEPAQoBiwLbAWwBDgEPAbMBuQasAf8QAAH0AYoMswKQAfQSAAH/ASsBMgFTEDIBbA2z + AWsB/xMAAfEBvAH/AvMBawGzAdoOuQHaAbkBawHwAfMB/wG8AfEKAAH/BqwBugGzAQ8BDgEKAYsC2wFm + AWwBtAPbAWwBugLbAboBbAQNAWYC2wGQAQoBDwGzAboGrAH/EAABuwEGDbMBBgHzEwABGgErAlkPUwFs + DbMBBgH0EwAB/wGSAfQB/wHzAbsBawLaBbkC9AW5AtoBigH3AfMB/wH0AZIB/woAAf8GrAG6AbMBDwIK + AWwC2wGLAQ0BDwGLAtsBkAG6AdsBugEVBg0BugHbAbQBDQEPAbMBugasAf8QAAGLAZANswGKAbsUAAEa + ASsBMgJZDVMBbA2zAYoB8xQAAZIBBwL/AfMBtQFrAbkC2gK5AdwC/wHcArkD2gGKAZEB8wL/AQcBkgsA + Af8GrAG6AbMBDgEKAQ8BQwPbA7oC2wK0AtsEugOLAbQC2wENAQ8BswG6BqwB/w8AAfQBig+zAWsB/xQA + AfQBmQExBVkJUwFsDbMBigHyFAAB9wHvAbwC/wHzAbsBawGQA9oB2wL0BNoBswFrAfcB8wL/AbwB7wGS + CwAB/wasAboBswEOAQoBDgENAboF3ALbAboBkQHcAdsD3AHhAbQCkQG0AtwBbAEKAbMBugasAf8PAAHw + AYoPswEGAfMWAAH0AZkBKwExATIBUwFZB1MBWQFsAbMMuQGKAfIUAAGSAfEB7wHxAv8C8wG0AWsBkAK5 + At8CuQGzAYoBkQHxAfMC/wHxAe8B8QGSCwAB/wasAboBswEOAwoBkQHcBtsBtAFmAboE2wHcAbQDkQG6 + AdwBiwENAbMBugasAf8PAAG7AZAPswGKAbsYAAH/AfMBGgExCVMBbAGzDLkBigH0FAABkgHyAfAB7wG8 + Av8B9ALzAbsBkQGLAmsBiwGQAbUB8gHzAfQC/wG8Ae8B8AHyAZILAAH/BqwBugGzAQ4CCgINB0MDDQJD + A2YBQwENAUMBDQJDAg0BswG6BqwB/w8AAZARswGRGgABmQExCVMBSwGQAdoJuQHaAbkBawH/FAABkgLy + AfEB7wEHAfQC/wH0CPMB9AL/AfQBBwHvAfEC8gGSCwAB/wasAboBswIOAQoHDgEPAg0CDwEOBQ0BDwEN + AQ8BEAEPAgoBswG6BqwB/w4AAf8BaxGzAWsB/xkAAVIKUwFSAWsC2gi5AdoBswG7FQABkgTyApIBBwH0 + Cv8B9AEHApIE8gGSCwAB/wasAboBswoKAg8CDQIOAQ8EDQEPAg4BDwEKAg4BswG6BqwB/w4AAfQBihGz + AYoB8xgAAfYBMQtZAUoBgQPaBLkD2gGKAfQVAAGSAfIB8wLyAZIB/wHxAfcB7wG8AvMC/wLzAbwB7wH3 + AfEB/wGSAvIB8wHyAZILAAH/BqwBugG5AQoCDgcKAQ4BDwENAQ8CCgEOAQ8CDQIPAQ4BCgEOAgoBDgG5 + AboGrAH/DgAB8QGKEbMBigHwGAABGwExC1kBUgHsAYEB2gHfBNoB3wG5AQYBvBYAAe8B8QHzAvIB7wH0 + AgAB9AHwAQcB7wKSAe8BBwHwAfQCAAH0Ae8C8gHzAfEB7wsAAf8GrAHbAbkBCgEOAQoFDgEKAQ4DDwEO + AQoBDgEKAQ4CDwENAQ8DCgMOAbkB2wasAf8OAAG8AYoRswGQAbsYAAGZAVILWQFTAXQBvAGLAQYBkAG5 + AbMBgQEGAZEB8hcAAQcB8AH0AvIBBwHyDgAB8gEHAvIB9AHwAQcLAAH/BqwCugEOAQAGCgEOAQoDDgEK + AQ4CCgEOAgoCDgEKAw4CAAK6BqwB/w4AAQcBkBKzAbsYAAF0AVMMWQErAf8BAAHzAfABuwG8AfMB/xkA + AfEBBwH/AvMCvA4AArwC8wH/AQcB8QsAAf8GrAGzAdsBbBoNAWwB2wGzBqwB/w4AAbsBkBKzAfcYAAFS + DVkBMQH/IAAB9AHvAf8B9AHzAfIB7wHzDAAB8wHvAfIB8wH0Af8B7wH0CwAB/wesAbkB2xq6AdsBuQes + Af8OAAHuAZASswG0GAABUg1ZATEB8yEAAQcB8gH/AvMB8AH3AfQKAAH0AfcB8ALzAf8B8gEHDAAB/wis + AbIaswGyCKwB/w4AAfABihG5AbMBtRgAAVINWQExARshAAHzAe8C/wLzAbwB9wHzCAAB8wH3AbwC8wL/ + Ae8B8wwAAf8srAH/DgAB8wEGEbkBkAG7GAABUg1ZATEBGyIAAvAB/wH0AvMB8AHvAbwB8gH0Av8B9AHy + AbwB7wHwAvMB9AH/AvAOAAG6KqwBug8AAf8BaxG5AYoB8RgAAXkBUwxZATEB9CIAAfQBkgHzAf8B9APz + AfABBwHvApIB7wEHAfAD8wH0Af8B8wGSAfQOAAHzKqwB8xAAAfcBswHaDbkC2gFrAf8YAAEaAVIMWQEr + Af8jAAHyAfcB8gL/DPMC/wHyAfcB8g8AAf8qrAH/EAAB8wGKAtoMuQHaAbMBuxkAAf8BMQxZAZklAAHz + AZIB8AP/CPMD/wHwAZIB8xAAAf8B8yisAfMB/xEAAbsBswLaCrkC2gGKAfQaAAEaAVIBXglZATEB9CYA + AfQB8AHvAfIE/wL0BP8B8gHvAfAB9BIAAf8BCSasAQkB/xIAAfQBuwGzDNoBBgG7HAABmQFSAV4G5QFZ + ATEBGikAAfMBBwH3AbwB8gHzAv8B8wHyAbwB9wEHAfMVAAH/AQkkrAEJAf8UAAH0AbsBgQHaAd8F2gLf + AbkBBgG7HgABGgFSATEBUgFZAVgBUgExAXQBGywAAf8B8QEHAe8CkgHvAQcB8QH/GAAB/wHzAbIgrAGy + AfMB/xcAAfABkAEGAZABswK5ApABawG7AfQhAAHzARoBmQEaAfMB/1IAAf8B8wG7G6wBswG7AfMB/xsA + AfQB8AG8ArsB8AHyAf9+ABz/OgABQgFNAT4HAAE+AwABKAMAAcADAAFgAwABAQEAAQEGAAEJFgAD//8A + /wD/AP8AhQAN/wHAAgABAwH+Av8BwAEDBf8BAAEPB/8B/gQAAX8B/wHwAgABDwP/AeACAAF/Av8B4AEH + Av8B+AQAAR8B/wQAA/8BgAIAAR8C/wIAAv8B8AQAAQ8B/AQAAT8B/wH+AwABBwH/Af4CAAF/Af8B4AQA + AQcB8AQAAQ8B/wH8AwABAwH/AfgCAAEfAf8BwAQAAQMB4AQAAQcB/wH8AwABAwH/AfACAAEPAf8BwAQA + AQMBwAQAAQMB/wH4AwABAQH/AeACAAEHAf8BwAQAAQMBwAQAAQMB/wH4AwABAQH/AeACAAEHAf8BwAQA + AQMBwAQAAQMB/wH4AwABAQH/AcACAAEDAf8BgAQAAQEBwAQAAQMB/wH4AwABAQH/AYACAAEBAf8BgAQA + AQEBgAQAAQEB/wH8AwABAwH/AYACAAEBAf8BgAQAAQEBwAQAAQMB/wHwAwABAwH/BAAB/wGABAABAQHA + BAABAwH+BAABBwH/BAAB/wGABAABAQHABAABAwH4BAABBwH/BAAB/wGABAABAQHABAABAwHgBAABDwH/ + BAAB/wGABAABAQHgBAABBwHABAABHwH/BAAB/wGABAABAQHgBAABBwHABAABfwH/BAAB/wGABAABAQHw + BAABDwGAAwABAwL/BAAB/wGABAABAQH4BAABHwGAAwABDwL/BAAB/wGABAABAQH8BAABPwGAAwABBwL/ + BAAB/wGABAABAQH+BAABfwGAAwABBwL/BAAB/wGABAABAQH/AYACAAEBAf8BwAMAAQcC/wQAAf8BgAQA + AQEB/wHgAgABDwH/AcADAAEHAv8EAAH/AYAEAAEBAf8B/gIAAv8BwAMAAQMC/wGAAgABAQH/AYAEAAEB + Af8B/gIAAv8B4AMAAQMC/wGAAgABAQH/AYAEAAEBAf8B/gIAAv8B8AMAAQMC/wHAAgABAwH/AYAEAAEB + Af8B/AIAAX8B/wH4AwABAwL/AcACAAEDAf8BgAQAAQEB/wH8AgABfwH/Af4DAAEDAv8BwAIAAQMB/wGA + BAABAQH/AfwCAAF/Av8BgAIAAQMC/wHAAgABAwH/AYAEAAEBAf8B/AIAAX8C/wHgAgABAwL/AcACAAED + Af8BgAQAAQEB/wH4AgABPwL/AeACAAEHAv8BwAIAAQMB/wGABAABAQH/AfgCAAE/Av8BwAIAAQcC/wHA + AgABAwH/AYAEAAEBAf8B+AIAAT8C/wHAAgABDwL/AcABYAEGAQMB/wGABAABAQH/AfgCAAE/Av8BwAIA + AR8C/wHAAX8B/gEDAf8BgAQAAQEB/wH4AgABPwL/AcABAAEgAX8C/wHAAX8B/gEDAf8BgAQAAQEB/wH4 + AgABPwL/AcABAAE/A/8BwAE/AfwBAwH/AYAEAAEBAf8B+AIAAT8C/wHAAQABPwP/AeABHwH4AQcB/wGA + BAABAQH/AfgCAAE/Av8BwAEAAT8D/wHgAQ8B8AEHAf8BgAQAAQEB/wH4AgABPwL/AcABAAE/A/8B8AIA + AQ8B/wHABAABAwH/AfgCAAE/Av8BwAEAAT8D/wHwAgABDwH/AcAEAAEDAf8B/AIAAT8C/wHAAQABPwP/ + AfgCAAEfAf8BwAQAAQMB/wH8AgABfwL/AcABAAF/A/8B/AIAAT8B/wHABAABAwH/Af4CAAF/Av8B4AEA + AX8D/wH+AgABfwH/AeAEAAEHAf8B/gIAA/8B8AEABf8BgAEBAv8B8AQAAQ8C/wEAAQED/wH4AQEF/wHg + AQcC/wH4BAABHwL/AcABAwP/Af4BBwn/Af4EAAF/Av8B8AEPD/8BwAIAAQMH/ws= diff --git a/Layout/ActionGroups.cs b/Layout/ActionGroups.cs new file mode 100644 index 0000000..ca7f539 --- /dev/null +++ b/Layout/ActionGroups.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// defines the action grouping + /// + class ActionGroups + { + /// + /// All actionmap groups + /// + public enum EGroup + { + SpaceFlight = 0, + SpaceDefensive, + SpaceTargeting, + SpaceWeapons, + SpaceMining, + Player, + EVA, + Vehicle, + VehicleWeapons, + Lights, + Interaction, + Spectator, + Others, + } + + private static Dictionary> m_actionDict; + + /// + /// cTor + /// + static ActionGroups() + { + m_actionDict = new Dictionary>( ); + // Define which maps belongs to which group + var x = new List( ) { "spaceship_general", "spaceship_view", "spaceship_movement", "spaceship_docking", "spaceship_power", "IFCS_controls" }; + m_actionDict.Add( EGroup.SpaceFlight, x ); + x = new List( ) { "spaceship_targeting", "spaceship_target_hailing", "spaceship_scanning", "spaceship_ping", "spaceship_radar" }; + m_actionDict.Add( EGroup.SpaceTargeting, x ); + x = new List( ) { "spaceship_mining" }; + m_actionDict.Add( EGroup.SpaceMining, x ); + x = new List( ) { "spaceship_turret", "spaceship_weapons", "spaceship_missiles", "spaceship_auto_weapons" }; + m_actionDict.Add( EGroup.SpaceWeapons, x ); + x = new List( ) { "spaceship_defensive" }; + m_actionDict.Add( EGroup.SpaceDefensive, x ); + x = new List( ) { "lights_controller" }; + m_actionDict.Add( EGroup.Lights, x ); + x = new List( ) { "default", "prone", "player", "player_choice", "player_emotes", "player_input_optical_tracking" }; + m_actionDict.Add( EGroup.Player, x ); + x = new List( ) { "zero_gravity_eva" }; + m_actionDict.Add( EGroup.EVA, x ); + x = new List( ) { "vehicle_general", "vehicle_driver" }; + m_actionDict.Add( EGroup.Vehicle, x ); + x = new List( ) { "vehicle_gunner" }; + m_actionDict.Add( EGroup.VehicleWeapons, x ); + x = new List( ) { "spaceship_hud", "ui_textfield", "ui_notification" }; + m_actionDict.Add( EGroup.Interaction, x ); + x = new List( ) { "spectator", "flycam", "view_director_mode" }; + m_actionDict.Add( EGroup.Spectator, x ); + x = new List( ) { }; + m_actionDict.Add( EGroup.Others, x ); + } + + /// + /// Return the names of the groups + /// + /// + public static List ActionGroupNames() + { + return Enum.GetNames( typeof( EGroup ) ).ToList( ); + } + + /// + /// Returns the list of actionmaps of a group + /// + /// + /// + public static List ActionmapNames( EGroup eClass ) + { + return m_actionDict[eClass]; + } + + /// + /// Returns the group from the actionmap + /// + /// + /// + public static EGroup MapNameToGroup( string actionmap ) + { + foreach ( var kv in m_actionDict ) { + if ( kv.Value.Contains( actionmap ) ) + return kv.Key; + } + return EGroup.Others; + } + + /// + /// Returns the group from the actiongroup name + /// + /// + /// + public static EGroup GroupNameToGroup( string actiongroup ) + { + foreach ( var kv in m_actionDict ) { + if ( kv.Key.ToString( ) == actiongroup ) + return kv.Key; + } + return EGroup.Others; + } + + + + } +} diff --git a/Layout/ActionItem.cs b/Layout/ActionItem.cs new file mode 100644 index 0000000..fe66183 --- /dev/null +++ b/Layout/ActionItem.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// One Action Item for the Layout process + /// + class ActionItem + { + /// + /// The Text Shown in the Map + /// + public string DispText { get; set; } + /// + /// The action map this item belongs to + /// + public string ActionMap { get; set; } = ""; // TODO may be set a color for this one later + + // Input Device Refs + public string DeviceName { get; set; } = ""; // Device Name + public string DeviceProdGuid { get; set; } = ""; // Device Product GUID + public string InputType { get; set; } = ""; // K, M, J, G (keyb, mouse, joystick, gamepad) + // Command Input Ref - match required to find the display location + public string ControlInput { get; set; } = ""; // buttonN, hatN_up,_right,_down,_left, [rot]xyz, sliderN (CryInput notification) + + } +} diff --git a/Layout/ActionItemList.cs b/Layout/ActionItemList.cs new file mode 100644 index 0000000..3796f4a --- /dev/null +++ b/Layout/ActionItemList.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// A list of ActionItems + /// + class ActionItemList : List + { + /// + /// Get the Devices contained in the List + /// + public List Devices + { + get { + var list = new List( ); + foreach ( var si in this ) { + if ( !list.Contains( si.DeviceName ) ) { + list.Add( si.DeviceName ); + } + } + return list; + } + } + } +} diff --git a/Layout/ControllerJson.cs b/Layout/ControllerJson.cs new file mode 100644 index 0000000..e1d5348 --- /dev/null +++ b/Layout/ControllerJson.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// Reads a DeviceFile from a file or stream + /// + class ControllerJson + { + + /// + /// Reads from a file one Controller entry + /// + /// The Json Filename + /// A Controller obj or null for errors + public static DeviceFile FromJson( string jFilename ) + { + DeviceFile c = null; + string fn = jFilename; + if ( !File.Exists( jFilename ) ) { + fn = Path.Combine( TheUser.LayoutsDir, fn ); // if it is not found use the default path + } + if ( File.Exists( fn ) ) { + using ( var ts = File.OpenRead( jFilename ) ) { + c = FromJson( ts ); + } + } + return c; + } + + + /// + /// Reads from the open stream one Controller entry + /// + /// An open stream at position + /// A Controller obj or null for errors + public static DeviceFile FromJson( Stream jStream ) + { + try { + var jsonSerializer = new DataContractJsonSerializer( typeof( DeviceFile ) ); + object objResponse = jsonSerializer.ReadObject( jStream ); + var jsonResults = objResponse as DeviceFile; + return jsonResults; + } + catch ( Exception e ) { + return null; + } + } + + } +} diff --git a/Layout/DeviceFile.cs b/Layout/DeviceFile.cs new file mode 100644 index 0000000..c0fef4b --- /dev/null +++ b/Layout/DeviceFile.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + // The Json file for a controller + + /* + { + "InputDevice" : { + "InputType": "Joystick", + "DeviceName": "SaitekX55Joystick", + "DeviceProdGuid": "{6dfb1c7b-7808-4f43-9dec-e9a4d83fcf4f}", + "MapImage": "x55-joystick.jpg", + "Controls": [ + { "Input": "B1", "Type": "Digital", "X": 2044, "Y": 604, "Width": 642, "Height": 108, "Cmt": "Primary trigger" }, + ... + ] + } + } + + */ + [DataContract] + class DeviceFile + { + [DataMember( IsRequired = true )] + public string MapName { get; set; } + [DataMember( IsRequired = true )] + public string MapImage { get; set; } // The map Image + [DataMember] + public List InputDevices { get; set; } = new List( ); + + /// + /// Create all possible ShapeItems for this Device + /// + public void CreateShapes() + { + for ( int i = 0; i < InputDevices.Count; i++ ) { + InputDevices[i].CreateShapes( ); + } + } + + /// + /// Find a Control entry with the given product guid and input command + /// + /// the Device Prduct GUID + /// the Item (device property) + /// The found Control or Null + public Control FindItem( string pGuid, string item ) + { + if ( string.IsNullOrEmpty( pGuid ) ) return null; + if ( string.IsNullOrEmpty( item ) ) return null; + + for ( int i = 0; i < InputDevices.Count; i++ ) { + if ( InputDevices[i].DevicePIDVID.Contains( pGuid.Substring(1,8).ToLowerInvariant( ) ) ) { + return InputDevices[i].FindItem( item ); + } + } + return null; + } + + } + + [DataContract] + class Device + { + [DataMember] + public string InputType { get; set; } // Joystick, Throttle, Pedal, Gamepad, Keyboard, Other + [DataMember] + public string DeviceName { get; set; } // The device name + [DataMember] + public List DeviceProdGuid { get; set; } = new List( ); // The device product GUIDs as read by DirecInput + [DataMember] + public List Controls { get; set; } = new List( );// The list of Controls supported (see below) + + // non Json + + /// + /// returns the PID VID part of the GUID (seems how this is composed in Win) + /// + public List DevicePIDVID + { + get { + var ret = new List( ); + foreach ( string s in DeviceProdGuid ) { + string pv = s.Substring( 1, 8 ).ToLowerInvariant(); // this is "{12345678-0000-0000 etc} + ret.Add( pv ); + } + return ret; + } + } + + /// + /// Find a Control entry with the given input command + /// + /// the Item (device property) + /// The found Control or Null + public Control FindItem( string item ) + { + for ( int i = 0; i < Controls.Count; i++ ) { + if ( Controls[i].Input == item ) { + return Controls[i]; + } + } + return null; + } + + + /// + /// Create all possible ShapeItems for this Device + /// + public void CreateShapes() + { + for ( int i = 0; i < Controls.Count; i++ ) { + Controls[i].CreateShapes( ); + } + } + + } + + /// + /// One Device Input (command) + /// + [DataContract] + class Control + { + [DataMember] + public string Input { get; set; } = ""; // buttonN, hatN_up,_right,_down,_left, [rot]xyz, sliderN (CryInput notification) + [DataMember] + public string Type { get; set; } = ""; // "" or Analog or Digital + [DataMember] + public int X { get; set; } = 0; // X label pos (left=0) + [DataMember] + public int Y { get; set; } = 0; // Y label pos (top=0) + [DataMember] + public int Width { get; set; } = 600; // Label field width + [DataMember] + public int Height { get; set; } = 54; // Label field height + [DataMember] + public string Cmt { get; set; } // Comment + + + // non Json + + /// + /// A queue with all available text fields + /// Take one and Insert the Display text and then add it to the DisplayList + /// If exhausted - well bad luck.. + /// + public Queue ShapeItems = null; + + // Base layout values to get enough fields and still have readable text + private const float c_baseFontSize = 16F; + + /// + /// Create all possible ShapeItems for this Control + /// + public void CreateShapes() + { + // this is a bit messy... + // have to allocate a number of Rectangles to draw into but the layout rects are very different in size.. + this.ShapeItems = new Queue( ); // get rid of previous ones + // create a reference font + int baseHeight = MapProps.MapFont.Height; + int baseWidth = MapProps.MapFont.Height * 12; // Lets see if this is good or needs adjustment + + // live values from base + int nCols = Width / baseWidth; + int nLines = Height / baseHeight; + + for ( int l = 0; l < nLines; l++ ) { + for ( int c = 0; c < nCols; c++ ) { + var sh = new ShapeItem { + X = X + c * baseWidth, + Y = Y + l * baseHeight, + Width = baseWidth, + Height = baseHeight + }; + ShapeItems.Enqueue( sh ); + } + } + } + + + } +} diff --git a/Layout/DeviceLayout.cs b/Layout/DeviceLayout.cs new file mode 100644 index 0000000..dfa28aa --- /dev/null +++ b/Layout/DeviceLayout.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SCJMapper_V2.Properties; + +namespace SCJMapper_V2.Layout +{ + /// + /// One Device Layout (from Json description) + /// + class DeviceLayout + { + public DeviceFile DeviceController { get; set; } = new DeviceFile( ); + public string Filename { get; set; } = ""; + + /// + /// Returns the Display string for this object + /// + /// + public override string ToString() + { + return DeviceController.MapName; + } + + /// + /// Returns the background image from the appropriate folder + /// + /// The image filename + /// An image or a dummy one if it does not exist + public Image Image + { + get { + string fn = this.DeviceController.MapImage; + if ( !File.Exists( fn ) ) { + fn = Path.Combine( TheUser.LayoutsDir, fn ); // if it is not found use the default path + } + if ( File.Exists( fn ) ) { + return Image.FromFile( fn ); + } + else { + return Resources.page_notdefined; + } + + } + } + + } +} diff --git a/Layout/DisplayList.cs b/Layout/DisplayList.cs new file mode 100644 index 0000000..d0f1526 --- /dev/null +++ b/Layout/DisplayList.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// A display list of items to be drawn in the paint event + /// + class DisplayList : List + { + + /// + /// Draw all items in the list + /// + /// Graphics context to draw to + public void DrawList( Graphics g ) + { + foreach ( var item in this ) { + item.DrawShape( g ); + } + } + + + } +} diff --git a/Layout/DrawPanel.cs b/Layout/DrawPanel.cs new file mode 100644 index 0000000..887d40c --- /dev/null +++ b/Layout/DrawPanel.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// Subclassing the Panel to draw on it + /// Sets the graphics props to avoid flicker + /// + class DrawPanel : System.Windows.Forms.Panel + { + public DrawPanel() + { + this.SetStyle( + System.Windows.Forms.ControlStyles.UserPaint | + System.Windows.Forms.ControlStyles.AllPaintingInWmPaint | + System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer, + true ); + } + + public Image BackgroundImageResized + { + get => base.BackgroundImage; + set { + base.BackgroundImage = value; + this.Size = base.BackgroundImage.Size; // autosize the panel to the image size + this.Refresh( ); + + } + } + + } +} \ No newline at end of file diff --git a/Layout/FormLayout.Designer.cs b/Layout/FormLayout.Designer.cs new file mode 100644 index 0000000..e713e96 --- /dev/null +++ b/Layout/FormLayout.Designer.cs @@ -0,0 +1,387 @@ +namespace SCJMapper_V2.Layout +{ + partial class FormLayout + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose( bool disposing ) + { + if ( disposing && ( components != null ) ) { + components.Dispose( ); + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormLayout)); + this.tlPanel = new System.Windows.Forms.TableLayoutPanel(); + this.chkLbActionGroups = new System.Windows.Forms.ListView(); + this.chkLbActionMaps = new System.Windows.Forms.ListView(); + this.pnlInput = new System.Windows.Forms.Panel(); + this.btColors = new System.Windows.Forms.Button(); + this.btSave = new System.Windows.Forms.Button(); + this.btLayout = new System.Windows.Forms.Button(); + this.cbxLayouts = new System.Windows.Forms.ComboBox(); + this.drawPanel = new System.Windows.Forms.Panel(); + this.gbxColors = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.btAcceptColors = new System.Windows.Forms.Button(); + this.lblTextColor = new System.Windows.Forms.Label(); + this.lblTest = new System.Windows.Forms.Label(); + this.lblBackColor = new System.Windows.Forms.Label(); + this.chkLbActionGroupsColor = new System.Windows.Forms.ListView(); + this.btCancelColors = new System.Windows.Forms.Button(); + this.SFD = new System.Windows.Forms.SaveFileDialog(); + this.colDlg = new System.Windows.Forms.ColorDialog(); + this.tbFontSize = new System.Windows.Forms.TrackBar(); + this.lblFontSize = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.tlPanel.SuspendLayout(); + this.pnlInput.SuspendLayout(); + this.drawPanel.SuspendLayout(); + this.gbxColors.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tbFontSize)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // tlPanel + // + this.tlPanel.ColumnCount = 2; + this.tlPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 180F)); + this.tlPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlPanel.Controls.Add(this.chkLbActionGroups, 0, 1); + this.tlPanel.Controls.Add(this.chkLbActionMaps, 0, 2); + this.tlPanel.Controls.Add(this.pnlInput, 0, 0); + this.tlPanel.Controls.Add(this.drawPanel, 1, 1); + this.tlPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlPanel.Location = new System.Drawing.Point(0, 0); + this.tlPanel.Name = "tlPanel"; + this.tlPanel.RowCount = 3; + this.tlPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tlPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 75F)); + this.tlPanel.Size = new System.Drawing.Size(1298, 640); + this.tlPanel.TabIndex = 0; + // + // chkLbActionGroups + // + this.chkLbActionGroups.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.chkLbActionGroups.CheckBoxes = true; + this.chkLbActionGroups.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkLbActionGroups.FullRowSelect = true; + this.chkLbActionGroups.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.chkLbActionGroups.HideSelection = false; + this.chkLbActionGroups.HoverSelection = true; + this.chkLbActionGroups.LabelWrap = false; + this.chkLbActionGroups.Location = new System.Drawing.Point(3, 83); + this.chkLbActionGroups.MultiSelect = false; + this.chkLbActionGroups.Name = "chkLbActionGroups"; + this.chkLbActionGroups.ShowGroups = false; + this.chkLbActionGroups.Size = new System.Drawing.Size(174, 134); + this.chkLbActionGroups.TabIndex = 5; + this.chkLbActionGroups.UseCompatibleStateImageBehavior = false; + this.chkLbActionGroups.View = System.Windows.Forms.View.Details; + this.chkLbActionGroups.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.chkLbActionGroups_ItemCheck); + // + // chkLbActionMaps + // + this.chkLbActionMaps.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.chkLbActionMaps.CheckBoxes = true; + this.chkLbActionMaps.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkLbActionMaps.FullRowSelect = true; + this.chkLbActionMaps.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.chkLbActionMaps.HideSelection = false; + this.chkLbActionMaps.HoverSelection = true; + this.chkLbActionMaps.LabelWrap = false; + this.chkLbActionMaps.Location = new System.Drawing.Point(3, 223); + this.chkLbActionMaps.MultiSelect = false; + this.chkLbActionMaps.Name = "chkLbActionMaps"; + this.chkLbActionMaps.ShowGroups = false; + this.chkLbActionMaps.ShowItemToolTips = true; + this.chkLbActionMaps.Size = new System.Drawing.Size(174, 414); + this.chkLbActionMaps.TabIndex = 6; + this.chkLbActionMaps.UseCompatibleStateImageBehavior = false; + this.chkLbActionMaps.View = System.Windows.Forms.View.Details; + // + // pnlInput + // + this.tlPanel.SetColumnSpan(this.pnlInput, 2); + this.pnlInput.Controls.Add(this.pictureBox1); + this.pnlInput.Controls.Add(this.btColors); + this.pnlInput.Controls.Add(this.btSave); + this.pnlInput.Controls.Add(this.btLayout); + this.pnlInput.Controls.Add(this.cbxLayouts); + this.pnlInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlInput.Location = new System.Drawing.Point(3, 3); + this.pnlInput.Name = "pnlInput"; + this.pnlInput.Size = new System.Drawing.Size(1292, 74); + this.pnlInput.TabIndex = 1; + // + // btColors + // + this.btColors.Image = global::SCJMapper_V2.Properties.Resources.Settings; + this.btColors.Location = new System.Drawing.Point(651, 15); + this.btColors.Name = "btColors"; + this.btColors.Size = new System.Drawing.Size(80, 54); + this.btColors.TabIndex = 5; + this.btColors.UseVisualStyleBackColor = true; + this.btColors.Click += new System.EventHandler(this.btColors_Click); + // + // btSave + // + this.btSave.Image = ((System.Drawing.Image)(resources.GetObject("btSave.Image"))); + this.btSave.Location = new System.Drawing.Point(534, 15); + this.btSave.Name = "btSave"; + this.btSave.Size = new System.Drawing.Size(80, 54); + this.btSave.TabIndex = 4; + this.btSave.UseVisualStyleBackColor = true; + this.btSave.Click += new System.EventHandler(this.btSave_Click); + // + // btLayout + // + this.btLayout.Image = ((System.Drawing.Image)(resources.GetObject("btLayout.Image"))); + this.btLayout.Location = new System.Drawing.Point(383, 16); + this.btLayout.Name = "btLayout"; + this.btLayout.Size = new System.Drawing.Size(80, 53); + this.btLayout.TabIndex = 3; + this.btLayout.UseVisualStyleBackColor = true; + this.btLayout.Click += new System.EventHandler(this.btLayout_Click); + // + // cbxLayouts + // + this.cbxLayouts.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbxLayouts.FormattingEnabled = true; + this.cbxLayouts.Location = new System.Drawing.Point(91, 30); + this.cbxLayouts.Name = "cbxLayouts"; + this.cbxLayouts.Size = new System.Drawing.Size(269, 25); + this.cbxLayouts.TabIndex = 1; + this.cbxLayouts.SelectedIndexChanged += new System.EventHandler(this.cbxLayouts_SelectedIndexChanged); + // + // drawPanel + // + this.drawPanel.AutoScroll = true; + this.drawPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.drawPanel.Controls.Add(this.gbxColors); + this.drawPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.drawPanel.Location = new System.Drawing.Point(183, 83); + this.drawPanel.Name = "drawPanel"; + this.tlPanel.SetRowSpan(this.drawPanel, 2); + this.drawPanel.Size = new System.Drawing.Size(1112, 554); + this.drawPanel.TabIndex = 2; + // + // gbxColors + // + this.gbxColors.BackColor = System.Drawing.Color.Gray; + this.gbxColors.Controls.Add(this.lblFontSize); + this.gbxColors.Controls.Add(this.tbFontSize); + this.gbxColors.Controls.Add(this.label2); + this.gbxColors.Controls.Add(this.btAcceptColors); + this.gbxColors.Controls.Add(this.lblTextColor); + this.gbxColors.Controls.Add(this.lblTest); + this.gbxColors.Controls.Add(this.lblBackColor); + this.gbxColors.Controls.Add(this.chkLbActionGroupsColor); + this.gbxColors.Controls.Add(this.btCancelColors); + this.gbxColors.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.gbxColors.Location = new System.Drawing.Point(17, 16); + this.gbxColors.Name = "gbxColors"; + this.gbxColors.Size = new System.Drawing.Size(534, 418); + this.gbxColors.TabIndex = 0; + this.gbxColors.TabStop = false; + this.gbxColors.Text = "Layout Settings"; + this.gbxColors.Visible = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(248, 243); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(247, 78); + this.label2.TabIndex = 12; + this.label2.Text = "Select an entry in the list and then click above \r\nto assing colors.\r\n\r\nNote: \r\nW" + + "hite background is treated as Transparent\r\nwhile drawing items to the image."; + // + // btAcceptColors + // + this.btAcceptColors.Location = new System.Drawing.Point(234, 370); + this.btAcceptColors.Name = "btAcceptColors"; + this.btAcceptColors.Size = new System.Drawing.Size(129, 26); + this.btAcceptColors.TabIndex = 11; + this.btAcceptColors.Text = "Accept"; + this.btAcceptColors.UseVisualStyleBackColor = true; + this.btAcceptColors.Click += new System.EventHandler(this.btAcceptColors_Click); + // + // lblTextColor + // + this.lblTextColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lblTextColor.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblTextColor.Location = new System.Drawing.Point(281, 181); + this.lblTextColor.Name = "lblTextColor"; + this.lblTextColor.Size = new System.Drawing.Size(157, 32); + this.lblTextColor.TabIndex = 8; + this.lblTextColor.Text = "Text Color"; + this.lblTextColor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblTextColor.Click += new System.EventHandler(this.lblTextColor_Click); + // + // lblTest + // + this.lblTest.BackColor = System.Drawing.Color.Transparent; + this.lblTest.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lblTest.Font = new System.Drawing.Font("Tahoma", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblTest.Location = new System.Drawing.Point(234, 89); + this.lblTest.Name = "lblTest"; + this.lblTest.Size = new System.Drawing.Size(245, 49); + this.lblTest.TabIndex = 10; + this.lblTest.Text = "Color Test Label"; + this.lblTest.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblBackColor + // + this.lblBackColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lblBackColor.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblBackColor.Location = new System.Drawing.Point(251, 162); + this.lblBackColor.Name = "lblBackColor"; + this.lblBackColor.Size = new System.Drawing.Size(211, 71); + this.lblBackColor.TabIndex = 9; + this.lblBackColor.Text = "Background Color"; + this.lblBackColor.TextAlign = System.Drawing.ContentAlignment.BottomCenter; + this.lblBackColor.Click += new System.EventHandler(this.lblBackColor_Click); + // + // chkLbActionGroupsColor + // + this.chkLbActionGroupsColor.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.chkLbActionGroupsColor.FullRowSelect = true; + this.chkLbActionGroupsColor.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.chkLbActionGroupsColor.HideSelection = false; + this.chkLbActionGroupsColor.HoverSelection = true; + this.chkLbActionGroupsColor.LabelWrap = false; + this.chkLbActionGroupsColor.Location = new System.Drawing.Point(20, 30); + this.chkLbActionGroupsColor.MultiSelect = false; + this.chkLbActionGroupsColor.Name = "chkLbActionGroupsColor"; + this.chkLbActionGroupsColor.ShowGroups = false; + this.chkLbActionGroupsColor.Size = new System.Drawing.Size(189, 291); + this.chkLbActionGroupsColor.TabIndex = 7; + this.chkLbActionGroupsColor.UseCompatibleStateImageBehavior = false; + this.chkLbActionGroupsColor.View = System.Windows.Forms.View.Details; + this.chkLbActionGroupsColor.ItemActivate += new System.EventHandler(this.chkLbActionGroupsColor_ItemActivate); + // + // btCancelColors + // + this.btCancelColors.Location = new System.Drawing.Point(382, 370); + this.btCancelColors.Name = "btCancelColors"; + this.btCancelColors.Size = new System.Drawing.Size(129, 26); + this.btCancelColors.TabIndex = 6; + this.btCancelColors.Text = "Cancel"; + this.btCancelColors.UseVisualStyleBackColor = true; + this.btCancelColors.Click += new System.EventHandler(this.btCloseColors_Click); + // + // SFD + // + this.SFD.DefaultExt = "png"; + this.SFD.SupportMultiDottedExtensions = true; + this.SFD.Title = "Save Map Image"; + // + // colDlg + // + this.colDlg.AnyColor = true; + this.colDlg.FullOpen = true; + // + // tbFontSize + // + this.tbFontSize.LargeChange = 2; + this.tbFontSize.Location = new System.Drawing.Point(248, 30); + this.tbFontSize.Maximum = 22; + this.tbFontSize.Minimum = 12; + this.tbFontSize.Name = "tbFontSize"; + this.tbFontSize.Size = new System.Drawing.Size(160, 45); + this.tbFontSize.SmallChange = 2; + this.tbFontSize.TabIndex = 13; + this.tbFontSize.TickFrequency = 2; + this.tbFontSize.TickStyle = System.Windows.Forms.TickStyle.Both; + this.tbFontSize.Value = 16; + this.tbFontSize.Scroll += new System.EventHandler(this.tbFontSize_Scroll); + // + // lblFontSize + // + this.lblFontSize.AutoSize = true; + this.lblFontSize.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblFontSize.Location = new System.Drawing.Point(428, 35); + this.lblFontSize.Name = "lblFontSize"; + this.lblFontSize.Size = new System.Drawing.Size(37, 30); + this.lblFontSize.TabIndex = 14; + this.lblFontSize.Text = "16"; + // + // pictureBox1 + // + this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage"))); + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox1.Location = new System.Drawing.Point(3, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(82, 71); + this.pictureBox1.TabIndex = 6; + this.pictureBox1.TabStop = false; + // + // FormLayout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1298, 640); + this.Controls.Add(this.tlPanel); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimizeBox = false; + this.Name = "FormLayout"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Device Layout"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormLayout_FormClosing); + this.Load += new System.EventHandler(this.FormLayout_Load); + this.tlPanel.ResumeLayout(false); + this.pnlInput.ResumeLayout(false); + this.drawPanel.ResumeLayout(false); + this.gbxColors.ResumeLayout(false); + this.gbxColors.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tbFontSize)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tlPanel; + private System.Windows.Forms.Panel pnlInput; + private System.Windows.Forms.Button btLayout; + private System.Windows.Forms.ComboBox cbxLayouts; + private System.Windows.Forms.Panel drawPanel; + private System.Windows.Forms.ListView chkLbActionMaps; + private System.Windows.Forms.ListView chkLbActionGroups; + private System.Windows.Forms.Button btSave; + private System.Windows.Forms.SaveFileDialog SFD; + private System.Windows.Forms.Button btColors; + private System.Windows.Forms.GroupBox gbxColors; + private System.Windows.Forms.Button btCancelColors; + private System.Windows.Forms.Label lblTest; + private System.Windows.Forms.ListView chkLbActionGroupsColor; + private System.Windows.Forms.Label lblBackColor; + private System.Windows.Forms.Label lblTextColor; + private System.Windows.Forms.ColorDialog colDlg; + private System.Windows.Forms.Button btAcceptColors; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TrackBar tbFontSize; + private System.Windows.Forms.Label lblFontSize; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/Layout/FormLayout.cs b/Layout/FormLayout.cs new file mode 100644 index 0000000..b61bd11 --- /dev/null +++ b/Layout/FormLayout.cs @@ -0,0 +1,351 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Imaging; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +using SCJMapper_V2.Common; +using SCJMapper_V2.Translation; +using SCJMapper_V2.Actions; +using SCJMapper_V2.SC; +using static SCJMapper_V2.Layout.ActionGroups; +using System.IO; + +namespace SCJMapper_V2.Layout +{ + public partial class FormLayout : Form + { + // Graphics + private DrawPanel m_dPanel = new DrawPanel( ); // draw panel + private DrawPanel m_sPanel = new DrawPanel( ); // show panel + private DisplayList m_displayList = new DisplayList( ); + private readonly Color COL_OK = Color.LightGreen; + private readonly Color COL_ERR = Color.Gold; + + private Layouts m_layouts = null; + + internal ActionItemList ActionList { get; set; } = null; + + public FormLayout() + { + InitializeComponent( ); + } + + /// + /// Local to support the handling + /// + private class ActionMapItem + { + public string ActionMap = ""; + public string ActionMapDisp = ""; + public override string ToString() + { + return ActionMapDisp; + } + } + + // the item index is shared with the checkbox list in the GUI + private List m_chkLbActionMaps = new List( ); + + private void FormLayout_Load( object sender, EventArgs e ) + { + Tx.LocalizeControlTree( this ); + + AppSettings.Instance.Reload( ); + + // Assign Size property - check if on screen, else use defaults + if ( Commons.IsOnScreen( new Rectangle( AppSettings.Instance.FormLayoutLocation, AppSettings.Instance.FormLayoutSize ) ) ) { + this.Size = AppSettings.Instance.FormLayoutSize; + this.Location = AppSettings.Instance.FormLayoutLocation; + } + + // Action Groups + // Main dialog + chkLbActionGroups.Items.Clear( ); + chkLbActionGroups.Columns.Add( "Actiongroups", chkLbActionMaps.Width ); + foreach ( var s in ActionGroups.ActionGroupNames( ) ) { + var item = chkLbActionGroups.Items.Add( s ); + item.ForeColor = MapProps.GroupColor( GroupNameToGroup( s ) ).ForeColor; + item.BackColor = MapProps.GroupColor( GroupNameToGroup( s ) ).BackColor; + } + // color settings + chkLbActionGroupsColor.Items.Clear( ); + chkLbActionGroupsColor.Columns.Add( "Actiongroups", chkLbActionMaps.Width ); + foreach ( var s in ActionGroups.ActionGroupNames( ) ) { + var item = chkLbActionGroupsColor.Items.Add( s ); + item.ForeColor = MapProps.GroupColor( GroupNameToGroup( s ) ).ForeColor; + item.BackColor = MapProps.GroupColor( GroupNameToGroup( s ) ).BackColor; + } + + // Action Maps + chkLbActionMaps.Items.Clear( ); m_chkLbActionMaps.Clear( ); + chkLbActionMaps.Columns.Add( "Actionmaps", chkLbActionMaps.Width ); + foreach ( EGroup g in Enum.GetValues( typeof( EGroup ) ) ) { + var aMaps = ActionmapNames( g ); + foreach ( var aMap in aMaps ) { + if ( !AppSettings.Instance.IgnoreActionmaps.Contains( "," + aMap + "," ) ) { + var ami = new ActionMapItem( ) { + ActionMap = aMap, + ActionMapDisp = SCUiText.Instance.Text( aMap ) + }; + m_chkLbActionMaps.Add( ami ); + var item = chkLbActionMaps.Items.Add( ami.ActionMapDisp ); + item.ToolTipText = ami.ActionMap; + item.ForeColor = MapProps.MapColor( ami.ActionMap ).ForeColor; + item.BackColor = MapProps.MapColor( ami.ActionMap ).BackColor; + } + } + } + + // Layouts + m_layouts = new Layouts( ); + foreach ( var l in m_layouts ) { + cbxLayouts.Items.Add( l ); + } + if ( cbxLayouts.Items.Count > 0 ) cbxLayouts.SelectedIndex = 0; + + // Draw Panel + // drawPanel.Controls.Add( m_dPanel ); + // m_dPanel.Top = 0; m_dPanel.Left = 0; + this.Controls.Add( m_dPanel ); + m_dPanel.Top = 0; m_dPanel.Left = this.Width + 2000; // out of view + m_dPanel.Visible = false; + m_dPanel.AutoSize = true; + m_dPanel.BackgroundImageLayout = ImageLayout.None; + m_dPanel.BackColor = Color.SpringGreen; + m_dPanel.BackgroundImageResized = ( cbxLayouts.SelectedItem as DeviceLayout ).Image; + + m_dPanel.Paint += M_dPanel_Paint; + + drawPanel.Controls.Add( m_sPanel ); + m_sPanel.Top = 0; m_sPanel.Left = 0; + m_sPanel.AutoSize = false; + m_sPanel.Dock = DockStyle.Fill; + m_sPanel.BackgroundImageLayout = ImageLayout.Zoom; + + RefreshPanel( ); + } + + private void FormLayout_FormClosing( object sender, FormClosingEventArgs e ) + { + // don't record minimized, maximized forms + if ( this.WindowState == FormWindowState.Normal ) { + AppSettings.Instance.FormLayoutSize = this.Size; + AppSettings.Instance.FormLayoutLocation = this.Location; + } + AppSettings.Instance.Save( ); + } + + + + #region dPanel Events + + private void M_dPanel_Paint( object sender, PaintEventArgs e ) + { + Graphics g = e.Graphics; + m_displayList.DrawList( g ); + } + + + private void RefreshPanel() + { + m_dPanel.Refresh( ); + var b = new Bitmap( m_dPanel.Width, m_dPanel.Height ); + m_dPanel.DrawToBitmap( b, new Rectangle( 0, 0, b.Width, b.Height ) ); + m_sPanel.BackgroundImage = b; + } + + #endregion + + /// + /// Matches for any selection possible + /// e.g. action maps selected etc. + /// + /// The actionItem + /// True to map + private bool MatchCriteria( ActionItem action ) + { + // is the map checked? + foreach ( int idx in chkLbActionMaps.CheckedIndices ) { + if ( m_chkLbActionMaps[idx].ActionMap == action.ActionMap ) return true; + } + return false; // TODO (add criterias) + } + + + /// + /// Populate the display list from the Items found in the ActionTree + /// + private void Populate() + { + // for all actions found from action tree + m_displayList.Clear( ); + ( cbxLayouts.SelectedItem as DeviceLayout ).DeviceController.CreateShapes( ); + foreach ( var si in ActionList ) { + // if ( si.DeviceName == cbxDevices.SelectedItem.ToString( ) ) { + // matches the selected device + if ( MatchCriteria( si ) ) { + var ctrl = ( cbxLayouts.SelectedItem as DeviceLayout ).DeviceController.FindItem( si.DeviceProdGuid, si.ControlInput ); + if ( ctrl != null ) { + if ( ctrl.ShapeItems.Count > 0 ) { + var shape = ctrl.ShapeItems.Dequeue( ); + shape.DispText = si.DispText; + shape.TextColor = MapProps.MapForeColor( si.ActionMap ); + shape.BackColor = MapProps.MapBackColor( si.ActionMap ); + m_displayList.Add( shape ); + } + } + } + // } + } + } + + // Event Handlers + + private void btLayout_Click( object sender, EventArgs e ) + { + Populate( ); + RefreshPanel( ); + } + + private void cbxLayouts_SelectedIndexChanged( object sender, EventArgs e ) + { + m_displayList.Clear( ); + m_dPanel.BackgroundImageResized = ( cbxLayouts.SelectedItem as DeviceLayout ).Image; + RefreshPanel( ); + } + + private void chkLbActionGroups_ItemCheck( object sender, ItemCheckEventArgs e ) + { + var group = (EGroup)e.Index; + var gNames = ActionmapNames( group ); + for ( int idx = 0; idx < chkLbActionMaps.Items.Count; idx++ ) { + if ( gNames.Contains( m_chkLbActionMaps[idx].ActionMap ) ) { + chkLbActionMaps.Items[idx].Checked = ( e.NewValue == CheckState.Checked ) ? true : false; + } + } + } + + private void btSave_Click( object sender, EventArgs e ) + { + SFD.Filter = "PNG Files|*.png|Jpg Files|*.jpg|All Files|*.*"; + SFD.DefaultExt = "png"; + if ( SFD.ShowDialog( this ) == DialogResult.OK ) { + var b = new Bitmap( m_dPanel.Width, m_dPanel.Height ); + m_dPanel.DrawToBitmap( b, new Rectangle( 0, 0, b.Width, b.Height ) ); + string ext = Path.GetExtension( SFD.FileName ); + if ( ext.ToLowerInvariant( ) == ".jpg" ) { + b.Save( SFD.FileName, ImageFormat.Jpeg ); + } + else if ( ext.ToLowerInvariant( ) == ".png" ) { + b.Save( SFD.FileName, ImageFormat.Png ); + } + else { + MessageBox.Show( "Unkown fileformat - use jpg or png please", "Save Image Error", MessageBoxButtons.OK, MessageBoxIcon.Error ); + } + + } + + } + + #region Color Setting Handling + + private int m_colSelGroup = -1; // index of selected group + + private void btColors_Click( object sender, EventArgs e ) + { + pnlInput.Enabled = false; + m_sPanel.Visible = false; + tbFontSize.Value = MapProps.FontSize; lblFontSize.Text = MapProps.FontSize.ToString( ); + lblTest.Font = MapProps.MapFont; + gbxColors.Visible = true; + } + + + private void btCloseColors_Click( object sender, EventArgs e ) + { + gbxColors.Visible = false; + pnlInput.Enabled = true; + m_sPanel.Visible = true; + } + + private void btAcceptColors_Click( object sender, EventArgs e ) + { + // carry values to MapProps + MapProps.FontSize = int.Parse( lblFontSize.Text ); + + foreach ( ListViewItem lv in chkLbActionGroupsColor.Items ) { + MapProps.SetMapColor( (EGroup)lv.Index, lv.ForeColor, lv.BackColor ); + } + MapProps.SaveToSettings( ); + + // recolor the selection in main + foreach ( ListViewItem item in chkLbActionGroups.Items ) { + item.ForeColor = MapProps.GroupColor( (EGroup)item.Index ).ForeColor; + item.BackColor = MapProps.GroupColor( (EGroup)item.Index ).BackColor; + } + + foreach ( ListViewItem item in chkLbActionMaps.Items ) { + item.ForeColor = MapProps.GroupColor( MapNameToGroup( item.ToolTipText) ).ForeColor; + item.BackColor = MapProps.GroupColor( MapNameToGroup( item.ToolTipText ) ).BackColor; + } + + gbxColors.Visible = false; + pnlInput.Enabled = true; + m_sPanel.Visible = true; + } + + + private void lblTextColor_Click( object sender, EventArgs e ) + { + if ( m_colSelGroup >= 0 ) { + colDlg.Color = lblTest.ForeColor; + if ( colDlg.ShowDialog( this ) == DialogResult.OK ) { + lblTest.ForeColor = colDlg.Color; + chkLbActionGroupsColor.Items[m_colSelGroup].ForeColor = colDlg.Color; + } + } + else { + MySounds.PlayCannot( ); + } + } + + private void lblBackColor_Click( object sender, EventArgs e ) + { + if ( m_colSelGroup >= 0 ) { + colDlg.Color = lblTest.BackColor; + if ( colDlg.ShowDialog( this ) == DialogResult.OK ) { + lblTest.BackColor = colDlg.Color; + chkLbActionGroupsColor.Items[m_colSelGroup].BackColor = colDlg.Color; + } + } + else { + MySounds.PlayCannot( ); + } + } + + private void chkLbActionGroupsColor_ItemActivate( object sender, EventArgs e ) + { + foreach ( ListViewItem item in chkLbActionGroupsColor.SelectedItems ) { + m_colSelGroup = item.Index; + lblTest.Text = item.Text; + lblTest.ForeColor = item.ForeColor; lblTextColor.BackColor = item.ForeColor; + lblTest.BackColor = item.BackColor; lblBackColor.BackColor = item.BackColor; + } + } + + private void tbFontSize_Scroll( object sender, EventArgs e ) + { + lblFontSize.Text = tbFontSize.Value.ToString( ); + lblTest.Font = new Font( lblTest.Font.FontFamily, tbFontSize.Value ); ; + } + + #endregion + + } +} diff --git a/Layout/FormLayout.resx b/Layout/FormLayout.resx new file mode 100644 index 0000000..092f3dc --- /dev/null +++ b/Layout/FormLayout.resx @@ -0,0 +1,830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAASaSURBVGhD1Zn9T1tVGMeLRuOii1mMMSYCi+8mvqBRY3zdmGiMS/zBn/1HdL8YwfmCQ8PccCHM + uBiNW1ic6OILhtCtbBVKW1s7GAFCZJeWl7YWZF0bHs/3ZHeee865d8dabtqbfEJ7ePp9vh9S1o4GiKiu + 0R7WE9rDekJ7WE9oD+sJ5SD6ZsDmBcbXjD8ZZDPSsY2GOhs3DeSL+xjYjx7ow7uJfR13wOWh9uTeLZSN + P0eX8q+z4zeugCXLy8vsdvWvXC7H88V92I8e6INeJgKtqQ9vorK1m8h6jSj5CpUjL1Nx9CUOFkQiEYrF + YpRMJmliYoJmZmZofn6eMpkML7G2tkbFYpHK5TJtbGxwcBtn+B5mFhcX+WPw2MnJSZ6FTOTbu7AX+9Gj + vLCbznVuhUSb2NdRHrCBo7kfWojOv0qlMRb0W5uDSgTwGBlPAWkneqBP7uSjEOgX+zrKAzaQWz+9gyjG + yodfVMCCSgTkDE8BYdYGfdZDOyFQEPs6ygM2QMUzu+jS2V38q0zFAlKGp4Awa2P3QT+x75UbNlxgZKcr + FQtIGZ4CwqyMkcBF9hRyo1IBOcNLQJyVMRMIPu9KxQJShqeAMCtjJjD8rCsVC0gZngLCrIyZwNDTrgS7 + mmksfOq/CwgZbgLRyFkK7mtyzMqYCfz6lCvx3nsp/OMBYwFcKCxTKpUUgdGfe3i+bq+NmcAvT7qSPv4I + DR9kP4nRU8YCbpcokIieoeDBZ3i+bq+NmcBPj3ty/ov7abi7hSKDPZSKj3gK4CkEcBtn+B5m7KfQVGqM + YkO9NLy/hefq9omYCZx87Kpkjj1E8UN30+mPm7VPEVPweOQgT7dHxkhg/fuWmsVM4LuHaxYzgW8frFnM + BPofqFnMBI7dV7OYCXxzjyvpI3fR7we2U6irSfuvSqUgD7nI1+21MRL4+6s7tUx+1kwjPU9Q5twJuliw + 2Hj1LuQhF/nYo9sPzAS+3K6wcLiZwn07qLSeZWPEX5Ty+Txls9n/DXKQhwv54cOtZPUxCU0PM4EjTQrx + /Y00nzjOX1XxSrqyslJ1kIv8C8kTFOtu1PYwE/j8DoXgR42UvjBLhUKBlpaWNg3kZ6w5vk/Xw0yg73YF + /KLhvQ7ew+DrZmHnY5+uh5lA720KCEyn0xzLsigUClUdOx9wAU0PI4G1Q7cqIBDF/QL7dD3MBHpuUUAg + 3v76BRfQ9DAT+HSbAgLn5uZ8gwtoepgJdN+sgMDZ2Vnf4AKaHmYCn2xVQOD09DRnamqKBgcHq46dD7iA + poeZQNeNCghEcb/gApoeZgL7tiggEP+B9wsuoOlhJtB5gwICU6mUb3ABTQ8jgdUPrldAIP6M4hfYp+th + IpD7673raPV9JwhMJBKceDxOAwMDVcfOB1xA6oBerN9VPx/oT79zDa3uvdYBAlHcL7iA1AG90E/s6ygP + 2EDbH3sClO9gEu/+CwKj0ahvcAFhP/qgF/qJfR3lARsA7Ym3ArTwdgPl2xtotaOBB46Pj/sGF2B7sR89 + 0Ae90E/s67gDLguAVsZRhsXY9M+HZYTPi7EfPdCHdxP7Ou7UI9rD+oEC/wDpn39oHcs5EQAAAABJRU5E + rkJggg== + + + + + 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 + 0HW+PUD8F0cdfEVoSwiLAAAAAElFTkSuQmCC + + + + 17, 17 + + + 90, 17 + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvc + 3yTb2+Ak29viJNvb4iTb2+Mk29rlJNvb5iTb3OYk29zmJNvd5yTb3uck293nJNvd5yTb3egk29vgJNvb + 3STb2+Ak29vhJNvb4STb2+Ak29vhJNvb4CTb298k29vgJNvb3yTb294k29vfJNvb3STb290k29veJNvb + 3STb298k29vhJNvb5CTb2+Yk29vmJNvb5CTb2+Ik29viJNvb4STb294k29vbJNvb2yTb29sk29vbJNvb + 2yTb29sk29vbJNvb3STb294k29vcJNvb3iTb294k29vfJNvb3yTb298k29vfJNvb3STb29sk29vbJNvb + 2yTb29sk29vbJNvb3CQHCDn6BQU/+gUFRvoFBE36BQlW+gUTYfoFHGj6BR1q+gUjbvoFKnX6BSp0+gUp + cvoFKXP6BSh0+gUWVPoFBDD6BQU7+gUFQfoFBUn6BQVE+gUFR/oFBUP6BQU7+gUFP/oFBTz6BQU4+gUF + NvoFBS36BQUv+gUFM/oFBTb6BQVB+gUFUvoFBWL6BQdx+gUGcfoFBVv6BQVO+gUFTPoFBUb6BQU1+gUF + KPoFBRr6BQUQ+gUFDvoFBQj6BQUG+gUFDfoFBSH6BQUw+gUFK/oFBTP6BQU4+gUFOfoFBT36BQU++gUF + NvoFBSX6BQUR+gUFCPoFBQX6BQUF+gUFBfoFBQb6AABE/wAASv8AAFH/AApZ/wAWZv8AI2//ACh2/wAn + dv8AL33/ADWD/wA1gv8AMX7/ADN//wAwfP8AKHT/AANI/wAAP/8AAEf/AABR/wAATf8AAEr/AABM/wAA + T/8AAE3/AABD/wAAQf8AAD7/AAA9/wAAOv8AADz/AABC/wAAUP8AAGX/AAB2/wAOhP8ACYD/AABj/wAA + Vv8AAFH/AABM/wAAQv8AADP/AAAg/wAAD/8AAAb/AAAH/wAADP8AABP/AAAj/wAALP8AADH/AAA4/wAA + P/8AAEL/AABE/wAAP/8AAB//AAAF/wAABP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIDU/8AA1b/ABRh/wAk + bv8AMHj/ADR9/wA1gf8ANYH/ADiF/wA/if8AQor/AD2G/wA+h/8AOoT/ADaA/wAcZv8AAEz/AABU/wAA + Vv8AAFP/AABS/wAAVP8AAF3/AABZ/wAAT/8AAEr/AABK/wAAUP8AAEz/AABL/wAAVP8AAGX/AAB0/wAO + g/8AIJL/ABiL/wADcf8AAF7/AABV/wAATv8AAEj/AAA5/wAAI/8AABH/AAAH/wAADP8AABX/AAAk/wAA + Lv8AADb/AAA4/wAAOf8AADf/AAA5/wAAN/8AAC3/AAAM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + Af8CC13/AA5f/wAhbP8ALXn/ADWA/wA5hP8AOob/AD6K/wBCjP8ASI//AEqS/wBFjf8AQIn/ADqD/wA3 + gP8AMXv/AAZX/wAAVv8AAFP/AABS/wAAVP8AAFf/AABc/wAAW/8AAFj/AABX/wAAW/8AAGL/AABd/wAA + X/8AAmn/AAZ5/wAMgv8AHI7/AC2e/wAnl/8ACnv/AABl/wAAW/8AAFH/AABK/wAAPf8AACn/AAAd/wAA + Ev8AABH/AAAY/wAAKv8AADf/AAA8/wAAOP8AAC7/AAAe/wAAFv8AABD/AAAI/wAAAv8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAH/Ahln/wAYaP8AHmz/AC55/wA2gv8AOIX/ADqG/wBBi/8AR5D/AEuS/wBM + lP8ASpP/AEKL/wA6hP8AN4L/ADeB/wAaY/8AAEz/AABW/wAAUf8AAFT/AABa/wAAXf8AAFz/AABe/wAG + bf8ABG7/AAZv/wAGbv8AB3P/ABaB/wAaiv8AH5L/AC2e/wBArf8AOan/AByM/wAHc/8AAWr/AABg/wAA + Wf8AAFb/AABG/wAAL/8AACP/AAAn/wAAM/8AADX/AAA5/wAAOP8AADr/AAA2/wAAH/8AAA//AAAC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wIYZ/8AFmn/ABlo/wAjb/8AMHv/ADSB/wA8 + hv8ARI3/AEqT/wBNlf8ATZb/AEyT/wBEi/8APYb/ADuE/wA+hv8AM33/AAJJ/wAATv8AAFP/AABU/wAA + XP8AAF3/AABj/wAAZ/8ADHX/AA95/wATfP8AGIH/ABuE/wAmlP8ALJz/ADGi/wBArv8AVL3/AFC5/wAy + n/8AHIb/ABV//wAQev8AA2//AABn/wAAXv8AAEv/AABE/wAARf8AAEj/AAA//wAAPf8AADz/AABD/wAA + Pv8AACf/AAAW/wAACv8AAAf/AAAQ/wAADP8AAAP/AAAA/wAAAP8AAAD/AAAA/wAAAf8CHGv/AB1r/wAh + bf8AJ3D/ADF4/wAzfP8AOYD/AEKJ/wBJkv8AS5P/AE2U/wBNk/8ASY//AESM/wBGjP8ASI7/AESM/wAT + W/8AAEj/AABS/wAAXf8AAGH/AABn/wAAb/8AAnL/AAt8/wAQfv8AIYn/ACyV/wA1m/8AO6T/AESt/wBM + tf8AWL//AG3K/wBuyP8AULT/ADyd/wA3lv8ALpP/AByH/wAPe/8ACnX/AAlt/wAIZ/8ABGH/AAJb/wAB + WP8AAFb/AABQ/wAARf8AADb/AAAn/wAAH/8AABf/AAAV/wAAG/8AAAv/AAAB/wAAAP8AAAD/AAAA/wAA + AP8AAAH/Ai13/wAod/8AKXf/AC54/wA1fP8AO4H/ADuC/wBFif8AUJX/AFWX/wBZmf8AXJr/AFyY/wBZ + mP8AV5j/AFWY/wBRlv8AMHz/AABS/wAAXv8AAGf/AABt/wAAc/8ABXj/AA5+/wAUhf8AGoj/AC2V/wA7 + of8ARKj/AFK0/wBjwf8Ab8v/AHnT/wCR3P8Ak9z/AHrN/wBmuv8AWrH/AE2p/wBAov8AO5v/ADiX/wA1 + k/8ALYr/ACSA/wAVeP8ABnD/AAFi/wAAU/8AAEX/AAAw/wAAKv8AACf/AAAi/wAAGv8AABX/AAAE/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAB/wITQf8AEUD/ABRH/wAUTv8AGlX/ACJh/wAnav8AOHj/AFCK/wVj + mf8QcKL/EnWn/wxzpv8Gbab/AGSi/wBhoP8AXqD/AFWZ/wARc/8ACXT/ABF7/wATgP8AFYH/AB2K/wAg + jv8AI5H/ACeU/wA2nv8AQqb/AFWw/wBuxv8AUrv/ADKs/wBDs/8AcM//BJLb/wCD0/8AaMH/AHXF/wBw + wf8Abb3/AGu7/wBkuP8AWbD/AEql/wA2lf8AIYH/AA1z/wABZf8AAFL/AABE/wAAM/8AACz/AAAm/wAA + Jf8AACf/AAAv/wAAHf8AAAj/AAAA/wAAAP8AAAD/AAAA/wAAAf8BABP/AAAP/wAAF/8AACL/AAAt/wAA + PP8ADE//AClm/wBEfP8BWIz/BGOW/wRlmv8CWpf/AU2R/wBHk/8APY//AEaV/wBUnf8AUJz/AFWh/wBi + q/8AZq//AF6s/wBarP8AWK3/AFCq/wBQq/8AUq//AF60/wBww/8AQ63/ABaM/wEnmf8AP6r/Ale8/xOG + 0v8KbsH/B2q1/wKZ0/8AoNr/AJrY/wCO0/8AgMr/AGq//wBSrv8APZz/ACqK/wAXeP8ABWf/AABZ/wAA + Tf8AAD7/AAA1/wAALf8AACn/AAAf/wAAG/8AABD/AAAE/wAAAP8AAAD/AAAA/wAAAP8AAAH/AQIH/wAA + B/8AAAz/AAAT/wAAHv8AATf/ABJR/wAmYf8AN3L/ADt4/wA1d/8AMHf/ADF6/wAtef8AMoD/ADaG/wBB + k/8ATJv/AF6n/wBys/8CicP/CpfO/w2Z0P8Jlc7/BZHN/wKNzf8Aicv/AIvM/wCOz/8AUKf/ADWS/wBi + tP8Hh87/AIjU/zW75/+Q7vv/auH3/1bZ9f9Kz/D/Ncft/xm36P8Fotz/AIrR/wB1xf8AXrb/AEyn/wA7 + mf8AJ4j/ABZ3/wADa/8AAF3/AABQ/wAAQP8AAC//AAAj/wAAFP8AAA7/AAAF/wAADP8AABj/AAAK/wAA + AP8AAAD/AAAB/wICHP8AABz/AAAp/wABM/8ACj7/ABhS/wAgWv8AJGH/ACZn/wAhZP8AIWP/ACtt/wA7 + ff8AQ4X/AFCP/wBbmv8AWZz/AFuf/wBco/8AVKL/AGWu/wN5u/8Ih8T/CpTL/w+e0/8Podb/CaDW/w+l + 2/8Bcrv/AFWh/wBwt/8Ag8j/AJrZ/wKx5/9S2fT/5v7//8D1/v+g7Pv/geT5/2DX8/87xez/GLLj/wKg + 2v8AjdL/AHzE/wBsuf8AW67/AEqf/wA5kv8AJYP/ABZz/wASbv8AClz/AAVG/wACOf8AASX/AAAQ/wAA + F/8AACT/AAAe/wAABf8AAAD/AAAA/wAAAf8BAiP/AAAo/wAAOv8AC0n/ABxZ/wAqZP8ALmf/ACNj/wAd + Yf8AJmX/ADFt/wA/ev8ATIj/AE2O/wBRkv8AYJ7/AnGr/wd7s/8MgLn/D4O9/wyFv/8Dg7//BonD/xmZ + zv8jpNb/KKnZ/yWs2/8Fi8v/BHm6/wuUy/8Qo9f/Hq3e/xm45/820/T/w/T8///////p/v7/sO/8/37g + 9v9X0PD/Nb/o/xuv4f8En9j/AI/O/wB7wv8Aa7j/AF+w/wBVpv8ASZv/ADuR/wAxiP8AJnz/ABtx/wAQ + Zf8AB1f/AARN/wAAP/8AAkn/AAFC/wAALP8AABP/AAAC/wAAAf8AAAP/AQIZ/wAAKv8ABEL/ABtX/wAo + Y/8ALmf/AChh/wAeWv8AE1P/ABFV/wATWv8AFWH/ABpn/wAca/8AIXH/ADCA/wBNl/8BaKr/Bn65/xaR + xf8hmsz/HJvO/xyczv81rNj/R7je/1fB4/8tr9v/IaLQ/0G43f9BwOX/YdHu/4zo+f9x5fj/uvX9//// + ////////9v///7vy/P+C4Pb/Vc3u/zK85f8Tqdz/BZTS/wGGxv8AdL7/AGW0/wBdrv8ATqL/AESY/wA+ + j/8ANoj/AC5+/wAldP8AGmn/AAxd/wAEVP8AAVL/AABM/wAAQP8AADP/AAAi/wAADP8AAAb/AgIM/wEB + Cv8AAB3/AAQ9/wAMS/8AFlL/ABlT/wASTP8ADkb/AA9J/wAOTf8ABkf/AAA7/wAARP8ABlj/ABhs/wAp + e/8APov/AFCb/wBfp/8AcbL/BoO9/xaSx/8uodD/SrHa/2PA4v9Etd7/PK/X/1m93/9vyuf/Ycjo/4XZ + 8f9g1PH/feD2//b9/////////////+7+///B9P3/kOX5/2nW8v9Ox+v/Lrbk/xOm3P8Jntb/AI3N/wB6 + v/8AbLX/AFWk/wBHmP8AOo7/ACyC/wAgdf8AFmr/AA5g/wAJVv8AA0j/AANK/wABRP8AADn/AAAx/wAA + K/8AACP/AAAZ/wICGf8BAB//AAA1/wAUU/8AHlv/AB9c/wAYVv8ABUX/AAE+/wABPv8AADb/AAAo/wAD + MP8ABUv/AApf/wAOZv8AEGj/ABxz/wAuhP8AQpL/AFSd/wBqq/8Lgrn/NJvJ/0+s1f8+p9P/QqfQ/3TC + 4P+Ayub/gc7p/3/M5/990u3/XMrr/7zs+P/9////+v////T////Y+f7/sO/8/4ji9/9m1PL/SMXr/yay + 4v8IoNf/ApXS/wCIy/8AfML/AG+5/wBeqP8AVJ7/AEuW/wBAif8ANHz/ACZv/wAbZf8AFlr/AAtH/wAH + O/8AAy//AAEn/wAAHv8AACD/AAAp/wAAMP8CAzX/Aixn/wAybP8AQHf/AEl//wBIgf8AN3P/ACFe/wAb + WP8AE1X/AAxP/wANUf8AEFz/AA5g/wAKX/8AC2H/ABxw/wAyhf8APo//AEqW/wBgov8OerL/LJDA/zCT + xv8pksP/UabP/3/B3/+Ozef/gszn/3TF4/+Z1uz/e87r/5TZ8P/p/P7/8v///+/////c+v7/wvP9/6Ho + +P932fP/Scbr/y+45f8Uq93/AJrU/wCJyv8AecD/AGu0/wBZpv8ATJj/AEWQ/wBAjP8AOIP/ADF5/wAs + cP8AKG3/ACRn/wAaYP8ADU//AAM//wABOP8AAjP/AAU7/wAIPf8AAi7/AQMe/wJYkP8AX5T/AGaX/wBr + nf8Ab6H/AGue/wBjlv8DZ5f/C2uc/wFPjP8ANnn/ACZv/wAfa/8AIW//ACNw/wAsdP8AO4D/AEaJ/wBa + mP8Jcaj/JYW3/zeWxP85k8L/Z6/P/4DB3/9qutz/OaHO/yyZyf+Ax+L/i9Tr/1jA5P9JvOT/WsHn/6fh + 8v+m4PT/xvP8/7rw/f+T4fX/Zs3u/ze35P8TpNn/AJXQ/wCMzP8Ahcb/AH3B/wBos/8AVaL/AEaT/wA3 + hP8ALnn/ACVv/wAgZv8AHGD/ACNm/wAhZv8AF1z/AApJ/wAEPv8AAz3/AANC/wACQ/8AA0D/AAI+/wIE + Nv8CVov/AFuP/wBhlv8AYZj/AGGY/wBil/8FaJr/HHqp/xlonP8CSon/AEqI/wBSj/8AWJP/AFuV/wBa + k/8AVo7/AFqR/wBHgf8AMGv/AlOI/x56qf9Mm8L/dLPT/4TC3f9Op87/EHiy/wBZnv8AXaD/F4i//xuM + xf8QgsL/AHG7/wBgt/8Aa7z/AG/B/ziZ0v+b3PL/jN/2/1HB5/8jqtz/CprS/wCBxP8Ab7n/AGaw/wBm + r/8AXav/AFWi/wBKl/8AOIX/ACly/wAeZv8AFFv/AA1S/wAPU/8ADVL/AAVH/wACQP8AATz/AAI6/wAC + Of8AADT/AAAw/wAAMv8CAzP/AluP/wBjkv8AbJr/AGyd/wBnmv8BYJT/GmmW/y5/p/8ocpr/JWiS/x5g + jv8XXYv/EF2L/wdcjP8GXoz/CGqV/wBEcv8ADDf/AClc/xpsmP9DkLb/cK/O/3O31P8/nMf/BVub/wAv + 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 + AP8AAAD/AAAA/wAAAP8AAAD/AAAK/wADMv8GM3X/LpfC/y2YxP8Sfq7/AHGk/wBsov8AbqX/AG6m/wBp + pP8AZZ//AGGf/wBamv8AVZP/AFSO/wBSjv8AU5T/AE6P/wBMjf8AV5j/AEiJ/wA5ff8AMnP/ACNk/wAY + WP8ADEn/AAQ7/wACNv8ABDL/AAQp/wIFJv8CWJn/ADp2/wA6af8QU3z/F2CL/xVdh/8WYIT/F2SI/xFa + g/8DOVn/AA0X/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAUJ/x5kff9HncD/GkRz/wAAAP8AAAD/AAAA/wIS + IP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8AAAD/AAAC/wAPNf8AIF//KoO0/zqjz/8njLz/DXir/wBr + nv8AZpv/AGmh/wBrpf8AaaP/AGOc/wBdmf8AW5X/AFeQ/wBVjv8AVo//AFiW/wBbm/8AW5r/AFWW/wBQ + jv8AR4L/ADV3/wAlaf8AFlb/AAtA/wAGMP8ABDD/AAIv/wAAKv8CAi3/Aj96/wAuZf8AJ1f/BDhi/w9M + df8RT3j/Dkty/w9UeP8ENU7/AAQI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wcNEf8OLDr/L3mZ/zuI + ov8eUG3/Bhov/wIJEP8CERv/AAML/wAAAP8AAAD/AAAA/wAAAP8AAAX/AQkP/wIcNf8VSHj/NI27/z2g + zP8okcL/FICx/wRuov8AZpn/AGSY/wBnnf8AaqP/AGym/wBnn/8AZJv/AGOa/wBimP8BXpb/AVyW/wBa + lv8AV5P/AFKM/wBOh/8ATIb/AEiD/wA/ff8ANHT/ACtn/wAhXP8AGFj/AAxS/wACSv8AADz/AgMx/wIi + WP8AHE//AB9O/wAmVv8BOmT/Bj1o/wQsV/8AFCX/AAAA/wAAAP8AAAD/AAMJ/wABCP8GAgH/BgoL/wAD + CP8KJS3/ByU3/xYzSf8waoH/LnOW/0aMrv9Nian/OWuI/yJPbv8TLUL/Chgm/wkZIv8hQVb/O3CO/0aL + r/8+irH/P5O9/zWTvv8ki7v/GYK2/whwo/8AXpL/AFWK/wBPhv8AU4r/AFiR/wFYk/8AUo7/AE6I/wBN + h/8ATYn/AE+M/wBUjf8AVpL/AFaS/wBWjP8AVov/AFeM/wBTif8ASIH/ADt0/wApZf8AGFX/AA1E/wAE + NP8AACf/AAAa/wEBEv8CHlX/ABpR/wAeU/8AH1L/AB9I/wAaPv8ABhT/AAAA/wAAAP8DCxP/ABkv/wBE + b/8AQHL/Ay5X/wMLGP8AAAD/AAAA/wALFf8TRWP/JWqM/y54mf82fJ3/OH2c/z2Bof8+g6b/PYWp/zuB + p/87g6f/RpC1/0GMs/8ygqn/J3un/xpyo/8QbaP/CW2k/wVnoP8BU4z/AER7/wBCd/8AQXn/AEaB/wBR + iv8AWI7/AFiP/wBVjf8AU4v/AFOL/wBOiP8ASoX/AEmG/wBCgP8AN3P/AC9q/wAmX/8AHlX/ABNH/wAK + Pv8ABC//AAEY/wAABP8AAAD/AAAA/wAAAP8AAAD/AhlY/wAVT/8AEUL/AAg2/wACFv8AAAP/AAAA/wAA + AP8AAQH/CDha/wA8cf8APWT/ADJN/wAXIf8AAAD/AAMJ/wAZLv8ANlr/Bkxv/wtFaf8HPmb/BkJp/wNB + Z/8ERmz/B091/wxagf8WZYr/G2qP/xhskf8WbJX/D2qW/wdpl/8DZZn/AGGW/wBgmf8AWpf/AEeB/wA5 + b/8ANGr/AC9o/wAuav8AL27/ACxq/wAmZP8AIF3/ABlW/wATUP8ADUX/AAhE/wAFRf8AA0X/AAA7/wAA + Mv8AACX/AAAd/wAAGf8AABv/AAAR/wAAAf8AAAD/AAAA/wAAAP8AAAD/AAAB/wIZYf8ACEf/AAEx/wAB + Nv8AACb/AAAM/wAAAP8ACSj/AAs6/wAIGf8AECn/AAYJ/wAAAP8AAAL/AA4k/wAiRP8ALlP/AC1R/wAr + Tf8AHz//ACBA/wAjRf8AJkf/ACtK/wAvUv8BNFn/AjRb/wIxXP8BL1//ASxg/wAqY/8AJWL/AB5b/wAY + W/8AFmX/ABFk/wAHRf8AAi//AAEn/wAALP8AAC//AAAz/wAANP8AADH/AAAu/wAAJ/8AACP/AAAe/wAA + Hv8AACD/AAAe/wAAGP8AABb/AAAU/wAADP8AAAb/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + Af8CJ3X/AA5c/wAGTP8ADlb/AApS/wAAHv8AAAD/AAYQ/wAJJf8AAAD/AAAA/wAABf8ACSb/ABVD/wAe + SP8AIUb/ACNK/wAkTP8AHT//AAAG/wAAAv8AAAL/AAAC/wAAAf8AAAT/AAAK/wAADv8AABP/AAAb/wAA + If8AACf/AAAl/wAAJ/8AADH/AABG/wAASP8AACv/AAAX/wAAFv8AABz/AAAh/wAAJv8AACj/AAAl/wAA + If8AAB3/AAAa/wAAGv8AABr/AAAX/wAAD/8AAAf/AAAB/wAABP8AAAL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAH/AiJy/wAZa/8AF2f/ABdo/wAGOP8AAAD/AAED/wADGP8AAAD/AAAH/wAI + Kv8AE0n/ABxT/wAeUP8AHk//ACBN/wAiTf8AI1H/ABYz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAv8AAAn/AAAN/wAADP8AABH/AAAf/wAANv8AADn/AAAg/wAAE/8AABf/AAAc/wAA + HP8AAB7/AAAf/wAAHv8AABz/AAAa/wAAHf8AAB7/AAAf/wAAIv8AAB7/AAAV/wAAC/8AAAb/AAAB/wAA + Af8AAAX/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wIcbv8AFmn/ABFf/wATYv8DD0n/ChIe/wAB + AP8AEEH/AAtD/wAVUf8AGlz/ABpX/wAcUv8AH1T/AB9W/wAiV/8AI1X/ACFV/wALIP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAC/wAAEf8AACn/AAAu/wAA + Gf8AAA//AAAW/wAAIP8AAB//AAAa/wAAGv8AAB3/AAAb/wAAHf8AACr/AAAs/wAALP8AAC//AAAk/wAA + Hv8AABj/AAAN/wAAB/8AAAT/AAAE/wAAAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8CEWf/AAlf/wAI + WP8AC1j/AxVc/wgZXP8AACL/AAYl/wAVXv8AG13/ABdY/wAVVP8AF1H/ABtT/wAdVP8AHlT/ABxQ/wAX + Sf8AAgv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAv/AAAf/wAAI/8AAA//AAAG/wAAD/8AABn/AAAh/wAAGf8AABH/AAAQ/wAAEf8AAB7/AAAt/wAA + Lv8AADH/AAAn/wAAG/8AABT/AAAQ/wAAC/8AAAz/AAAJ/wAAB/8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAH/AgRc/wAAU/8AAFD/AABN/wACTf8AAEX/AABC/wADQv8ADlL/ABFS/wAPUP8ADlD/ABFM/wAW + Tv8AF0z/ABZK/wAVSf8ACzH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAF/wAAGP8AABn/AAAD/wAAAP8AAAX/AAAN/wAAGP8AAA3/AAAD/wAA + AP8AAAr/AAAb/wAAFP8AABf/AAAk/wAAGP8AAAz/AAAJ/wAAB/8AAAb/AAAL/wAACP8AAAb/AAAD/wAA + Af8AAAD/AAAA/wAAAP8AAAD/AAAB/wAAQ/8AADv/AAAy/wAALv8AACr/AAAl/wAAKv8AADj/AABA/wAA + QP8AAEH/AABA/wAEQP8ABD//AAM7/wACOv8AAjX/AAAM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAb/AAAG/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAv8AAAD/AAAA/wAACf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + Af8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8fIUnlHR9D5R0fPOUdHznlHR855R0f + PuUdH0blHR9M5R0fVOUdH1XlHR9S5R0fUuUeIVXlHiJU5R4gTuUeH0zlHR495RoaHOUaGhvlGhob5Roa + G+UaGhvlGhob5RoaG+UaGhvlGhob5RoaG+UaGhvlGhsc5RobHOUaGxzlGhsc5RobHOUaGxzlGhse5Rob + IeUaGxzlGhsb5RobHOUaGxvlGhsb5RobG+UaGxzlGhsc5RobG+UaGxvlGhob5R0hJuUbHB7lGhsb5Rob + HOUaGxzlGhsc5RobHOUaGx3lGhsc5RobHeUaGxzlGhsc5RobHOUaGxzlGhob5RoaG+UaGhvl9fb3DPX2 + 9wz19vcM9fb3DPX29wz19vgM9fb4DPX2+Az19vgM9fb4DPX2+Az19vgM9fb4DPX2+Az19vcM9fb3DPX1 + 9Qzz8/MM8/PzDPPz8wzz8/MM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz + 9Azz8/QM8/P0DPP09Azz9PQM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/T0DPPz + 9Az19/gM8/T1DPPz9Azz8/QM8/P0DPPz9Azz9PQM8/T0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz + 9Azz8/QM8/PzDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8= + + + \ No newline at end of file diff --git a/Layout/IShape.cs b/Layout/IShape.cs new file mode 100644 index 0000000..8c907ee --- /dev/null +++ b/Layout/IShape.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// The shape drawing/interaction interface + /// + interface IShape + { + bool IsValid { get; } + + /// + /// Draws the shape + /// + void DrawShape( Graphics g ); + + /// + /// Sets X,Y from Mouse location - shape is centered + /// + /// + void SetMouseLocation( Point loc ); + + /// + /// Returns true if the item contains the location + /// + /// A location point + /// True if the location is with the item area + bool HitTest( Point location ); + + /// + /// Offset of click location vs. middle of the rectangle + /// to move it seamlessly + /// + /// Click location + /// Movement offset + Point ClickOffset( Point location ); + + } +} diff --git a/Layout/Layouts.cs b/Layout/Layouts.cs new file mode 100644 index 0000000..6d7c739 --- /dev/null +++ b/Layout/Layouts.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + class Layouts : List + { + /// + /// cTor: Collect all Layouts in the distribution folder + /// + public Layouts() + { + this.Clear( ); + if ( !Directory.Exists( TheUser.LayoutsDir ) ) return; + + var jsons = Directory.EnumerateFiles( TheUser.LayoutsDir, "*.json" ); + foreach ( var f in jsons ) { + var devLayout = new DeviceLayout { + Filename = f, + DeviceController = ControllerJson.FromJson( f ) + }; + if ( devLayout.DeviceController != null ) { + this.Add( devLayout ); + } + } + } + + + } +} diff --git a/Layout/MapProps.cs b/Layout/MapProps.cs new file mode 100644 index 0000000..561361d --- /dev/null +++ b/Layout/MapProps.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static SCJMapper_V2.Layout.ActionGroups; + +namespace SCJMapper_V2.Layout +{ + /// + /// Maintains the colormap for the Layout + /// + class MapProps + { + /// + /// Save Color Settings for the Layout + /// + public struct ColorPair + { + public Color ForeColor; + public Color BackColor; + + public ColorPair( Color fColor, Color bColor ) + { + ForeColor = fColor; + BackColor = bColor; + } + } + + private static int m_fontSize = 16; // maintained as int to support the TrackBar Value property) + private static Font m_font = new Font( "Tahoma", m_fontSize ); // real fontsize will be scaled to float but not used outside + + // all known actionmaps with it's classification + private static Dictionary m_amColors; + + /// + /// cTor: Load Colors from AppSettings + /// + static MapProps() + { + AppSettings.Instance.Reload( ); + + FontSize = AppSettings.Instance.LayoutFontSize; // also creates the MapFont property + + m_amColors = new Dictionary { + { EGroup.SpaceFlight, ConvertFromString(AppSettings.Instance.GroupColor_00) }, + { EGroup.SpaceDefensive, ConvertFromString(AppSettings.Instance.GroupColor_01) }, + { EGroup.SpaceTargeting, ConvertFromString(AppSettings.Instance.GroupColor_02) }, + { EGroup.SpaceWeapons, ConvertFromString(AppSettings.Instance.GroupColor_03) }, + { EGroup.SpaceMining, ConvertFromString(AppSettings.Instance.GroupColor_04) }, + { EGroup.Player, ConvertFromString(AppSettings.Instance.GroupColor_05) }, + { EGroup.EVA, ConvertFromString(AppSettings.Instance.GroupColor_06) }, + { EGroup.Vehicle, ConvertFromString(AppSettings.Instance.GroupColor_07) }, + { EGroup.VehicleWeapons, ConvertFromString(AppSettings.Instance.GroupColor_08) }, + { EGroup.Lights, ConvertFromString(AppSettings.Instance.GroupColor_09) }, + { EGroup.Interaction, ConvertFromString(AppSettings.Instance.GroupColor_10) }, + { EGroup.Spectator, ConvertFromString(AppSettings.Instance.GroupColor_11) }, + { EGroup.Others, ConvertFromString(AppSettings.Instance.GroupColor_12) } + }; + } + + /// + /// Save color map settings for the Layout + /// + public static void SaveToSettings() + { + AppSettings.Instance.LayoutFontSize = m_fontSize; + + AppSettings.Instance.GroupColor_00 = ConvertToString( m_amColors[EGroup.SpaceFlight] ); + AppSettings.Instance.GroupColor_01 = ConvertToString( m_amColors[EGroup.SpaceDefensive] ); + AppSettings.Instance.GroupColor_02 = ConvertToString( m_amColors[EGroup.SpaceTargeting] ); + AppSettings.Instance.GroupColor_03 = ConvertToString( m_amColors[EGroup.SpaceWeapons] ); + AppSettings.Instance.GroupColor_04 = ConvertToString( m_amColors[EGroup.SpaceMining] ); + AppSettings.Instance.GroupColor_05 = ConvertToString( m_amColors[EGroup.Player] ); + AppSettings.Instance.GroupColor_06 = ConvertToString( m_amColors[EGroup.EVA] ); + AppSettings.Instance.GroupColor_07 = ConvertToString( m_amColors[EGroup.Vehicle] ); + AppSettings.Instance.GroupColor_08 = ConvertToString( m_amColors[EGroup.VehicleWeapons] ); + AppSettings.Instance.GroupColor_09 = ConvertToString( m_amColors[EGroup.Lights] ); + AppSettings.Instance.GroupColor_10 = ConvertToString( m_amColors[EGroup.Interaction] ); + AppSettings.Instance.GroupColor_11 = ConvertToString( m_amColors[EGroup.Spectator] ); + AppSettings.Instance.GroupColor_12 = ConvertToString( m_amColors[EGroup.Others] ); + + AppSettings.Instance.Save( ); + } + + /// + /// Cheap serializing... + /// Converts from a ColorPair to a string + /// + /// A ColorPair + /// A serialized string + private static string ConvertToString( ColorPair colPair ) + { + string f = TypeDescriptor.GetConverter( typeof( Color ) ).ConvertToInvariantString( colPair.ForeColor ); + string b = TypeDescriptor.GetConverter( typeof( Color ) ).ConvertToInvariantString( colPair.BackColor ); + return $"{f}|{b}"; + } + /// + /// Cheap deserializing... + /// Converts from a string to a ColorPair + /// + /// A serialized string + /// A ColorPair + private static ColorPair ConvertFromString( string colPairS ) + { + string[] e = colPairS.Split( new char[] { '|' } ); + if ( e.Length == 2 ) { + var f = (Color)TypeDescriptor.GetConverter( typeof( Color ) ).ConvertFromInvariantString( e[0] ); + var b = (Color)TypeDescriptor.GetConverter( typeof( Color ) ).ConvertFromInvariantString( e[1] ); + return new ColorPair( f, b ); + } + else { + return new ColorPair( Color.Pink, Color.Transparent ); + } + } + + // Handle Layout Font + /// + /// Returns the Display Font for the layout + /// + public static Font MapFont { get => m_font; } + + /// + /// FontSize property + /// creates a new MapFont property to use + /// + public static int FontSize + { + get => m_fontSize; + set { + m_fontSize = value; + m_font = new Font( m_font.FontFamily, m_fontSize ); + } + } + + // Handle Layout Colors + + public static void SetMapColor( EGroup eGroup, ColorPair colorPair ) + { + m_amColors[eGroup] = colorPair; + } + + public static void SetMapColor( EGroup eGroup, Color fcolor, Color bcolor ) + { + m_amColors[eGroup] = new ColorPair( fcolor, bcolor ); + } + + public static void SetMapForeColor( EGroup eGroup, Color color ) + { + var copy = m_amColors[eGroup]; + copy.ForeColor = color; + m_amColors[eGroup] = copy; + } + + public static void SetMapBackColor( EGroup eGroup, Color color ) + { + var copy = m_amColors[eGroup]; + copy.BackColor = color; + m_amColors[eGroup] = copy; + } + + public static ColorPair MapColor( string actionmap ) + { + var acls = ActionGroups.MapNameToGroup( actionmap ); + return m_amColors[acls]; + } + + + /// + /// Returns the text color for an actionmap + /// + /// + public static Color MapForeColor( string actionmap ) + { + var acls = ActionGroups.MapNameToGroup( actionmap ); + return m_amColors[acls].ForeColor; + } + + public static Color MapBackColor( string actionmap ) + { + var acls = ActionGroups.MapNameToGroup( actionmap ); + return m_amColors[acls].BackColor; + } + + + public static ColorPair GroupColor( EGroup eGroup ) + { + return m_amColors[eGroup]; + } + + public static Color GroupForeColor( EGroup eGroup ) + { + return m_amColors[eGroup].ForeColor; + } + + public static Color GroupBackColor( EGroup eGroup ) + { + return m_amColors[eGroup].BackColor; + } + + } +} diff --git a/Layout/ShapeItem.cs b/Layout/ShapeItem.cs new file mode 100644 index 0000000..d95fdc8 --- /dev/null +++ b/Layout/ShapeItem.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// Controller Input + /// contains a text to display at a position within a rectangle + /// + class ShapeItem : IShape + { + /// + /// The Text Shown in the Map + /// + public string DispText { get; set; } + + /// + /// Location Left + /// + public int X { get; set; } = 0; + /// + /// Location Top + /// + public int Y { get; set; } = 0; + /// + /// Width + /// + public int Width { get; set; } = 0; + /// + /// Height + /// + public int Height { get; set; } = 0; + + public Point Location + { + get { return new Point( X, Y ); } + set { X = value.X; Y = value.Y; } + } + public Size Size + { + get { return new Size( Width, Height ); } + set { Width = value.Width; Height = value.Height; } + } + public Rectangle Rectangle + { + get { return new Rectangle( X, Y, Width, Height ); } + set { X = value.X; Y = value.Y; Width = value.Width; Height = value.Height; } + } + + public bool IsValid { get => !string.IsNullOrEmpty( DispText ); } + + private Brush m_textBrush = Brushes.Black; + private Color m_textColor = Color.DarkBlue; + + private Brush m_backBrush = Brushes.White; + private Color m_backColor = Color.White; + + /// + /// Set the Textcolor + /// + public Color TextColor + { + get => m_textColor; + set { + m_textColor = value; + m_textBrush.Dispose( ); + m_textBrush = new SolidBrush( m_textColor ); // set the text brush as well + } + } + + /// + /// Set the Textcolor + /// + public Color BackColor + { + get => m_backColor; + set { + m_backColor = value; + m_backBrush.Dispose( ); + m_backBrush = new SolidBrush( m_backColor ); // set the text brush as well + } + } + + /// + /// Returns the drawn text size for this item + /// + /// + /// + public SizeF MeasureShape( Graphics g ) + { + return g.MeasureString( DispText, MapProps.MapFont ); + } + + #region IShape Implementation + + /// + /// Draws the shape + /// + public void DrawShape( Graphics g ) + { + if ( IsValid ) { + if ( m_backColor!= Color.White ) { + g.FillRectangle( m_backBrush, Rectangle ); + } + g.DrawString( DispText, MapProps.MapFont, m_textBrush, Rectangle ); // write into the rectangle + } + } + + /// + /// Sets X,Y from Mouse location - shape is centered + /// + /// + public void SetMouseLocation( Point loc ) + { + } + + /// + /// Returns true if the item contains the location + /// + /// A location point + /// True if the location is with the item area + public bool HitTest( Point location ) + { + return new Rectangle( X, Y, Width, Height ).Contains( location ); + } + + /// + /// Offset of click location vs. middle of the rectangle + /// to move it seamlessly + /// + /// Click location + /// Movement offset + public Point ClickOffset( Point location ) + { + return new Point( -( location.X - X - Width / 2 ), + -( location.Y - Y - Height / 2 ) ); + } + + #endregion + + } +} diff --git a/Layout/ShapeItemList.cs b/Layout/ShapeItemList.cs new file mode 100644 index 0000000..a9c5c69 --- /dev/null +++ b/Layout/ShapeItemList.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SCJMapper_V2.Layout +{ + /// + /// A list of ShapeItems + /// + class ShapeItemList : List + { + + } +} diff --git a/OGL/FormJSCalCurve.cs b/OGL/FormJSCalCurve.cs index d61ab82..48fdd06 100644 --- a/OGL/FormJSCalCurve.cs +++ b/OGL/FormJSCalCurve.cs @@ -44,10 +44,21 @@ namespace SCJMapper_V2.OGL uint TMU0_Handle; TextureTarget TMU0_Target; - private string[] SBFiles = { "graphics/SB_SC_BrokenMoon.dds","graphics/SB_SC_DyingStar.dds","graphics/SB_SC_Demien.dds","graphics/SB_SC_Area18.dds", - "graphics/SB_OutThere1.dds", "graphics/SB_OutThere3.dds", "graphics/SB_Canyon.dds", - "graphics/SB_Shiodome.dds", "graphics/SB_Highway.dds", "graphics/SB_BigSight.dds", "graphics/SB_LA_Helipad.dds", "graphics/SB_Sunset.dds", - "graphics/Skybox.dds" }; + private string[] SBFiles = { + Path.Combine(TheUser.GraphicsDir, "SB_SC_BrokenMoon.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_SC_DyingStar.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_SC_Demien.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_SC_Area18.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_OutThere1.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_OutThere3.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_Canyon.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_Shiodome.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_Highway.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_BigSight.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_LA_Helipad.dds"), + Path.Combine(TheUser.GraphicsDir, "SB_Sunset.dds"), + Path.Combine(TheUser.GraphicsDir, "Skybox.dds" ) + }; // index into SBFiles const int SB_BrokenMoon = 0; const int SB_DyingStar = SB_BrokenMoon + 1; @@ -994,7 +1005,7 @@ namespace SCJMapper_V2.OGL private void UpdateMouseTargetRect() { - DeviceInst.MouseRef.SetTargetRectForCmdData( new Rectangle( glControl1.PointToScreen( new Point(0,0) ), glControl1.Size ) ); + DeviceInst.MouseRef.SetTargetRectForCmdData( new Rectangle( glControl1.PointToScreen( new Point( 0, 0 ) ), glControl1.Size ) ); } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 0837147..d28c2f6 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration( "" )] [assembly: AssemblyCompany( "Cassini (SC handle)" )] [assembly: AssemblyProduct( "SCJMapper" )] -[assembly: AssemblyCopyright( "Copyright (c) 2019 M.Burri + see LICENSE file" )] +[assembly: AssemblyCopyright( "Copyright (c) 2020 M.Burri + see LICENSE file" )] [assembly: AssemblyTrademark( "" )] [assembly: AssemblyCulture( "" )] @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "2.43.0.78" )] -[assembly: AssemblyFileVersion( "2.43.0.78" )] +[assembly: AssemblyVersion( "2.44.0.79" )] +[assembly: AssemblyFileVersion( "2.44.0.79" )] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 882bd21..ba9a99d 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -93,19 +93,18 @@ namespace SCJMapper_V2.Properties { /// /// Looks up a localized string similar to <profile version="1" optionsVersion="2" rebindVersion="2" > /// <platforms > - /// <PC keyboard="1" mouse="1" xboxpad="1" ps3pad="0" joystick="1" /> - /// <Xbox keyboard="1" xboxpad="1" ps3pad="0" /> - /// <PS3 keyboard="1" xboxpad="0" ps3pad="1" /> + /// <PC keyboard="1" mouse="1" gamepad="1" joystick="1" /> + /// <XboxOne keyboard="1" mouse="0" gamepad="1" joystick="0" /> + /// <PS4 keyboard="1" mouse="0" gamepad="1" joystick="0" /> /// </platforms> /// /// <actiongroup action="v_attack1" > /// <action name="v_attack1_group1" /> /// <action name="v_attack1_group2" /> - /// <action name="v_attack1_group3" /> /// </actiongroup> /// /// <ActivationModes > - /// <ActivationMode name="tap" onPress= [rest of string was truncated]";. + /// <ActivationMode name="tap" onPress="0" onHold="0" onRe [rest of string was truncated]";. /// internal static string defaultProfile { get { @@ -203,6 +202,16 @@ namespace SCJMapper_V2.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap page_notdefined { + get { + object obj = ResourceManager.GetObject("page_notdefined", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Properties/Resources.resx b/Properties/Resources.resx index 4337931..797583f 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -169,4 +169,7 @@ ..\graphics\NPad.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\graphics\page_notdefined.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/README.md b/README.md index 2f4f62c..ccd6494 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,13 @@ using log4net.dll

Built with VisualStudio 2017 Community free version

+ +# Credits + +Device Layout Images and Maps:
+
+https://github.com/richardbuckle/EDRefCard +
DDS Skydome Images:

Canyon, Highway, Shiodome, BigSight, LA Heliport:
diff --git a/ReadMe.txt b/ReadMe.txt index 3d571d7..b2d3288 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,12 +1,12 @@ -SC Joystick Mapper V 2.43 - Build 78 BETA -(c) Cassini, StandardToaster - 29-Feb-2020 +SC Joystick Mapper V 2.44 - Build 79 BETA +(c) Cassini, StandardToaster - 07-Mar-2020 Contains 14 files + graphics: -SCJMapper.exe The program (V2.43) -SCJMapper.exe.config Program config (V2.43) - MUST be in the same folder as the Exe file -de\SCJMapper.resources.dll German language (V2.43) - MUST be in the same folder as the Exe file -fr\SCJMapper.resources.dll French language (V2.43) - MUST be in the same folder as the Exe file +SCJMapper.exe The program (V2.44) +SCJMapper.exe.config Program config (V2.44) - MUST be in the same folder as the Exe file +de\SCJMapper.resources.dll German language (V2.44) - MUST be in the same folder as the Exe file +fr\SCJMapper.resources.dll French language (V2.44) - MUST be in the same folder as the Exe file Storage\*.scj Folder for collected assets (V2.35) - MUST be in the same folder as the Exe file PTU_Storage\*.scj Folder for collected PTU (V2.37) - MUST be in the same folder as the Exe file SharpDX.DirectInput.dll Managed DirectInput Assembly - MUST be in the same folder as the Exe file @@ -23,6 +23,7 @@ SCJMapper_QGuide V2.35beta.pdf Quick Guide (v2.35) ReadMe.txt This file graphics folder Skybox Images (V2.32) - graphics folder MUST be in the same folder as the Exe file +graphics\layouts folder Layout Images & defs (V2.44) - layouts folder MUST be in the graphics folder above NOTE V 2.41+: search order for defaultProfile.xml to build the action tree is: @@ -46,9 +47,15 @@ Scanned for viruses before packing... cassini@burri-web.org Changelog: +V 2.44 - BETA Build 79 +- added Input device layout dialog and some layouts for the most common device controllers + NOTE: THIS IS VERY EARLY and may break or not show - use the GitHub Issue feature to report + also make sure to copy the graphics\layouts folder from the distribution else no layouts are available +- update Can read Exported XMLs from the Game (mostly ... max 3 points for curves are supported) (#91) +- update - defaultProfile.xml from SC LIVE PTU 3.8.2 as last resort built in one V 2.43 - BETA Build 78 - added About / Splash Screen while loading Game resources -- update checkbox "Forced write" for Invert items in Options (writes the invert tag in any case to disable CIG invert defaults) #90 +- update checkbox "Forced write" for Invert items in Options (writes the invert tag in any case to disable CIG invert defaults) (#90) V 2.42 - BETA Build 77 - fix for not using the proper PTU cache when pulling data from gamepack (#87) NOTE: please delete .scj files in \Storage\*.scj (as they have been overwritten with PTU content) diff --git a/SC/SCMappings.cs b/SC/SCMappings.cs index 81ae3f1..546e9bf 100644 --- a/SC/SCMappings.cs +++ b/SC/SCMappings.cs @@ -16,6 +16,7 @@ namespace SCJMapper_V2.SC public const string c_MapStartsWith = "layout_"; // we only allow those mapping names private const string c_UserMapStartsWith = c_MapStartsWith + "my_"; // we only allow those mapping names + private const string c_ExportedMapEndsWith = "_exported"; // we only allow those mapping names static private List m_scMappings = new List( ); static private SCGameMaps m_scGameMaps = new SCGameMaps( ); // only one instance allowed... else we read it multiple times from the pak file @@ -55,6 +56,17 @@ namespace SCJMapper_V2.SC return Path.GetFileNameWithoutExtension( mapName ).StartsWith( c_UserMapStartsWith ); } + /// + /// Returns true if a mapping name is considered an exported mapping + /// + /// The mapping name + /// True if it is an exported mapping name + static public bool IsExportedMapping( string mapName ) + { + return Path.GetFileNameWithoutExtension( mapName ).StartsWith( c_MapStartsWith ) + && Path.GetFileNameWithoutExtension( mapName ).EndsWith( c_ExportedMapEndsWith ); + } + /// /// Check if we may use that name - we allow only names like "layout_my_XYZ" /// @@ -73,7 +85,7 @@ namespace SCJMapper_V2.SC { if ( Directory.Exists( SCPath.SCClientMappingPath ) ) { m_scMappings.Clear( ); - m_scMappings = (List)Directory.EnumerateFiles( SCPath.SCClientMappingPath ).ToList( ); + m_scMappings = Directory.EnumerateFiles( SCPath.SCClientMappingPath ).ToList( ); foreach ( KeyValuePair kv in m_scGameMaps ) { m_scMappings.Insert( 0, kv.Key ); // insert before others } @@ -107,16 +119,25 @@ namespace SCJMapper_V2.SC static public string Mapping( string mappingName ) { string retVal = ""; - if ( IsUserMapping( mappingName ) ) { + // first check for exported as they may start with user mapping pattern as well + if ( IsExportedMapping( mappingName ) ) { + string mFile = Path.Combine( SCPath.SCClientMappingPath, ( mappingName + ".xml" ) ); + if ( File.Exists( mFile ) ) { + using ( var sr = new StreamReader( mFile ) ) { + retVal = sr.ReadToEnd( ); + } + } + } + else if ( IsUserMapping( mappingName ) ) { string mFile = Path.Combine( SCPath.SCClientMappingPath, ( mappingName + ".xml" ) ); if ( File.Exists( mFile ) ) { - using ( StreamReader sr = new StreamReader( mFile ) ) { + using ( var sr = new StreamReader( mFile ) ) { retVal = sr.ReadToEnd( ); } } } else { - // game mapping + // CIG provided game mapping if ( m_scGameMaps.ContainsKey( mappingName ) ) { retVal = m_scGameMaps[mappingName]; } diff --git a/SCJMapper-V2.csproj b/SCJMapper-V2.csproj index 262de5e..735f9b8 100644 --- a/SCJMapper-V2.csproj +++ b/SCJMapper-V2.csproj @@ -27,8 +27,8 @@ false false true - 78 - 2.43.0.%2a + 79 + 2.44.0.79 false true @@ -110,6 +110,7 @@ + @@ -175,6 +176,27 @@ FormOptions.cs + + + + + + + + + + Component + + + Form + + + FormLayout.cs + + + + + @@ -326,6 +348,9 @@ FormOptions.cs + + FormLayout.cs + PublicResXFileCodeGenerator Strings.de.Designer.cs @@ -439,6 +464,7 @@ + diff --git a/TheUser.cs b/TheUser.cs index 1f34e9c..f223edf 100644 --- a/TheUser.cs +++ b/TheUser.cs @@ -125,5 +125,16 @@ namespace SCJMapper_V2 if ( File.Exists( mf ) ) File.Copy( mf, mf + ".backup", true ); } + /// + /// Graphics folder name in the Application directory + /// + static public string GraphicsDir => "graphics"; + + /// + /// Graphics\Layouts folder name in the Application directory + /// + static public string LayoutsDir => Path.Combine(GraphicsDir, "layouts"); + + } } diff --git a/actions/ActionMapsCls.cs b/actions/ActionMapsCls.cs index 6a67540..bdd032d 100644 --- a/actions/ActionMapsCls.cs +++ b/actions/ActionMapsCls.cs @@ -59,7 +59,8 @@ namespace SCJMapper_V2.Actions // own additions for JS mapping - should not harm.. private string[] m_js; - private string[] m_GUIDs; + private string[] m_product_GUIDs; + private string[] m_instance_GUIDs; /// /// get/set jsN assignment (use 0-based index i.e. js1 -> [0]) @@ -70,11 +71,18 @@ namespace SCJMapper_V2.Actions } /// - /// get/set jsN GUID assignment (use 0-based index i.e. js1GUID -> [0]) + /// get/set jsN product GUID assignment (use 0-based index i.e. js1GUID -> [0]) /// - public string[] jsNGUID + public string[] jsN_prodGUID { - get { return m_GUIDs; } + get { return m_product_GUIDs; } + } + /// + /// get/set jsN instance GUID assignment (use 0-based index i.e. js1GUID -> [0]) + /// + public string[] jsN_instGUID + { + get { return m_instance_GUIDs; } } /// @@ -83,7 +91,8 @@ namespace SCJMapper_V2.Actions public void Clear_jsEntry( int index ) { m_js[index] = ""; - m_GUIDs[index] = ""; + m_instance_GUIDs[index] = ""; + m_product_GUIDs[index] = ""; } // provide access to Tuning items of the Options obj to the owner @@ -129,7 +138,8 @@ namespace SCJMapper_V2.Actions { this.version = other.version; this.m_js = other.m_js; - this.m_GUIDs = other.m_GUIDs; + this.m_instance_GUIDs = other.m_instance_GUIDs; + this.m_product_GUIDs = other.m_product_GUIDs; // other ref objects are not populated here } @@ -142,9 +152,10 @@ namespace SCJMapper_V2.Actions // create the Joystick assignments Array.Resize( ref m_js, JoystickCls.JSnum_MAX + 1 ); - Array.Resize( ref m_GUIDs, JoystickCls.JSnum_MAX + 1 ); + Array.Resize( ref m_instance_GUIDs, JoystickCls.JSnum_MAX + 1 ); + Array.Resize( ref m_product_GUIDs, JoystickCls.JSnum_MAX + 1 ); for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { - m_js[i] = ""; m_GUIDs[i] = ""; + m_js[i] = ""; m_instance_GUIDs[i] = ""; m_product_GUIDs[i] = ""; } // create the default mapped optiontree // CreateNewOptions( ); @@ -273,7 +284,7 @@ namespace SCJMapper_V2.Actions // now the devices (our addition) for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { if ( !string.IsNullOrEmpty( jsN[i] ) ) r += string.Format( "\tjs{0}=\"{1}\" ", i + 1, jsN[i] ); - if ( !string.IsNullOrEmpty( jsNGUID[i] ) ) r += string.Format( "js{0}G=\"{1}\" \n", i + 1, jsNGUID[i] ); + if ( !string.IsNullOrEmpty( jsN_instGUID[i] ) ) r += string.Format( "js{0}G=\"{1}\" \n", i + 1, jsN_instGUID[i] ); } // close the tag @@ -331,12 +342,12 @@ namespace SCJMapper_V2.Actions { log.Debug( "ActionMapsCls.fromXML - Entry" ); - XmlReaderSettings settings = new XmlReaderSettings { + var settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment, IgnoreWhitespace = true, IgnoreComments = true }; - using ( XmlReader reader = XmlReader.Create( new StringReader( xml ), settings ) ) { + using ( var reader = XmlReader.Create( new StringReader( xml ), settings ) ) { reader.MoveToContent( ); if ( reader.EOF ) return false; @@ -344,6 +355,7 @@ namespace SCJMapper_V2.Actions if ( XNode.ReadFrom( reader ) is XElement el ) { // read the header element + bool jsMapFound = false; if ( el.Name.LocalName == "ActionMaps" ) { if ( el.HasAttributes ) { version = (string)el.Attribute( "version" ); @@ -351,8 +363,9 @@ namespace SCJMapper_V2.Actions // get the joystick mapping if there is one for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { - jsN[i] = (string)el.Attribute( string.Format( "js{0}", i + 1 ) ); - jsNGUID[i] = (string)el.Attribute( string.Format( "js{0}G", i + 1 ) ); + jsN[i] = (string)el.Attribute( $"js{i + 1}" ); + jsN_instGUID[i] = (string)el.Attribute( $"js{i + 1}G" ); + if ( !string.IsNullOrEmpty( jsN_instGUID[i] ) ) jsMapFound = true; // any found will do } } else { @@ -362,7 +375,8 @@ namespace SCJMapper_V2.Actions // now handle the js assignment from the map // Reset with the found mapping - DeviceInst.JoystickListRef.ResetJsNAssignment( jsNGUID ); + if (jsMapFound) DeviceInst.JoystickListRef.ResetJsNAssignment( jsN_instGUID ); + // Only now create the default optiontree for this map, containing included joysticks and the gamepad CreateNewOptions( ); diff --git a/actions/ActionTree.cs b/actions/ActionTree.cs index 3f9303c..1bb83cb 100644 --- a/actions/ActionTree.cs +++ b/actions/ActionTree.cs @@ -14,6 +14,7 @@ using SCJMapper_V2.Devices.Mouse; using SCJMapper_V2.Devices.Gamepad; using SCJMapper_V2.Devices.Joystick; using SCJMapper_V2.Translation; +using SCJMapper_V2.Layout; namespace SCJMapper_V2.Actions { @@ -1309,6 +1310,60 @@ namespace SCJMapper_V2.Actions } + /// + /// Reports a list of the mapped items + /// + /// + public ActionItemList ReportActionsSItemText() + { + log.Debug( "ReportActions (ActionItem) - Entry" ); + + var repList = new ActionItemList( ); + + foreach ( ActionMapCls acm in ActionMaps ) { + foreach ( ActionCls ac in acm ) { + foreach ( ActionCommandCls acc in ac.InputList ) { + if ( !string.IsNullOrEmpty( acc.Input ) && !( acc.Input == DeviceCls.DisabledInput ) ) { + var sItem = new ActionItem( ); + sItem.ActionMap = acm.MapName; + sItem.DispText = SCUiText.Instance.Text( ac.ActionName ); + sItem.ControlInput = acc.Input; + switch ( Act.ADeviceFromDevID( acc.DevID ) ) { + case Act.ActionDevice.AD_Keyboard: + sItem.InputType = "K"; + sItem.DeviceName = KeyboardCls.DeviceClass; + sItem.DeviceProdGuid = ""; + break; + case Act.ActionDevice.AD_Mouse: + sItem.InputType = "M"; + sItem.DeviceName = MouseCls.DeviceClass; + sItem.DeviceProdGuid = ""; + break; + case Act.ActionDevice.AD_Joystick: + int jsNum = JoystickCls.JSNum( acc.DevInput ) - 1; + if ( jsNum >= 0 ) { + sItem.DeviceName = ActionMaps.jsN[jsNum]; + sItem.DeviceProdGuid = ActionMaps.jsN_prodGUID[jsNum]; + sItem.InputType = "J"; + } + break; + case Act.ActionDevice.AD_Gamepad: + sItem.InputType = "G"; + sItem.DeviceName = GamepadCls.DevNameCIG; + sItem.DeviceProdGuid = GamepadCls.DevGUIDCIG ; + break; + default: break; + }//switch + // add if valid + if ( !string.IsNullOrEmpty( sItem.InputType ) ) + repList.Add( sItem ); + } + } + } + } + return repList; + } + /// /// Reports a summary list of the mapped items /// diff --git a/defaultProfile.xml b/defaultProfile.xml index 467be5d..9eeb0c6 100644 --- a/defaultProfile.xml +++ b/defaultProfile.xml @@ -54,6 +54,7 @@ + @@ -188,6 +189,7 @@ + @@ -288,6 +290,7 @@ + @@ -343,22 +346,38 @@ + + + + + + + + + + + + + - + - - + + + - - - - - + + + + + + + @@ -377,14 +396,14 @@ - - + + - + - + @@ -411,7 +430,11 @@ - + + + + + @@ -424,13 +447,14 @@ - - + + - - - - + + + + + @@ -439,19 +463,22 @@ - + - + - + + + + @@ -489,27 +516,26 @@ + + + + - - - - - - - - - - - - + + + + + + + @@ -528,6 +554,7 @@ + @@ -584,7 +611,14 @@ - + + + + + + + + @@ -595,7 +629,7 @@ - + @@ -610,9 +644,9 @@ - + - + @@ -636,10 +670,10 @@ - - - - + + + + @@ -655,7 +689,7 @@ - + @@ -679,23 +713,23 @@ - + - + - - - - + + + + @@ -703,53 +737,72 @@ - + - + - + - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + - - + + - + - + + - + - + @@ -762,14 +815,14 @@ - + - + @@ -783,11 +836,11 @@ - + - + @@ -832,7 +885,7 @@ - + @@ -846,7 +899,7 @@ - + @@ -856,13 +909,15 @@ - - - - - - - + + + + + + + + + @@ -889,11 +944,6 @@ - - - - - @@ -925,7 +975,7 @@ - + @@ -935,7 +985,7 @@ - + @@ -951,6 +1001,11 @@ + + + + + @@ -1021,6 +1076,7 @@ + @@ -1062,13 +1118,9 @@ - - - - - - - + + + @@ -1132,46 +1184,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1188,14 +1251,15 @@ - - - - - - - - + + + + + + + + + @@ -1255,5 +1319,9 @@ + + + + diff --git a/graphics/Exported.png b/graphics/Exported.png new file mode 100644 index 0000000..24f9a73 Binary files /dev/null and b/graphics/Exported.png differ diff --git a/graphics/Magic48x48.png b/graphics/Magic48x48.png new file mode 100644 index 0000000..b7e612e Binary files /dev/null and b/graphics/Magic48x48.png differ diff --git a/graphics/Save48x48.png b/graphics/Save48x48.png new file mode 100644 index 0000000..09e75d7 Binary files /dev/null and b/graphics/Save48x48.png differ diff --git a/graphics/joystick-icon1.png b/graphics/joystick-icon1.png new file mode 100644 index 0000000..1eb3752 Binary files /dev/null and b/graphics/joystick-icon1.png differ diff --git a/graphics/layouts/MapToolbox.xlsx b/graphics/layouts/MapToolbox.xlsx new file mode 100644 index 0000000..4e365c7 Binary files /dev/null and b/graphics/layouts/MapToolbox.xlsx differ diff --git a/graphics/layouts/PidVid.txt b/graphics/layouts/PidVid.txt new file mode 100644 index 0000000..33fbb16 --- /dev/null +++ b/graphics/layouts/PidVid.txt @@ -0,0 +1,89 @@ +Joystick Product GUID ???? +{PIDVID-0000-0000-0000-504944564944} + +SaitekFLY5 {13020738-} +SaitekFLY5 {083606A3-} +SaitekP2600RumbleForce {5F0D06A3-} +SaitekP2500RumbleForce {FF0C06A3-} +SaitekST290Pro {046006A3-} +SaitekCyborgEvoWireless {353E06A3-} +SaitekProFlightCombatRudderPedals {076406A3-} +SaitekProFlightRudderPedals {076306A3-} +SaitekProFlightPedals {076506A3-} +SaitekAV8R03 {0C2806A3-} +SaitekAV8R03 {046106A3-} +SaitekX45 {053C06A3-} +SaitekX52Pro {076206A3-} +SaitekX52 {075C06A3-} +SaitekX52 {025506A3-} +SaitekX55Joystick {22150738-} +SaitekX55Throttle {A2150738-} +SaitekX56Joystick {22210738-} +SaitekX56Throttle {A2210738-} +SaitekX65F {0B6A06A3-} +SidePanelControlDeck {22180738-} + +LogitechG940Pedals {C2AA046D-} +LogitechG940Joystick {C2A8046D-} +LogitechG940Throttle {C2A9046D-} +LogitechExtreme3DPro {C215046D-} +Logitech710WirelessGamepad {C219046D-} +LogitechWingManStrikeForce3D {C285046D-} + +LogitechGTWheel {C29A046D-} + +ThrustMasterWarthogJoystick {0402044F-} +ThrustMasterWarthogThrottle {0404044F-} +ThrustMasterWarthogCombined {FFFF044F-} +TMwTARGET {FFFF044F-} +ThrustMasterTFlightHOTASX {B108044f-} +ThrustMasterHOTAS4 {B67C044F-} +ThrustMasterHOTAS4 {B67B044F-} +TFlightHotasOne {B68D044F-} +T16000M {B10A044F-} +T16000MTHROTTLE {B687044F-} +T-Rudder {B679044F-} +TFlightStickX {B106044F-} + +CHProThrottle1 {00F1068E-} +CHProThrottle2 {C0F1068E-} +CHFighterStick {00F3068E-} +CHFighterStick {C0F3068E-} +CHFighterStick {C010068E-} +CHProPedals {C0F2068E-} +CHCombatStick {C0F4068E-} +CHCombatStick {00F4068E-} +CHThrottleQuadrant {00FA068E-} +CHProFlightThrottleQuadrant {0C2D06A3-} +CHProPedals {00F2068E-} + +VPC-WarBRD-DELTA-Left {204203EB-} +VPC-WarBRD-DELTA-Right {204403EB-} + +CobraM5 {560311C0-} +CobraM5 {560511C0-} +Gladiator {0121231D-} +Sabretooth {FE001689-} +Cougar {B351044F-} +Cougar {B352044F-} +BlackWidow {031707B5-} +GioteckPS3WiredController {C12125F0-} +EDTracker {80372341-} +MFGCrosswind {0A3816D0-} +MFGCrosswind {02038564-} +TrustPredator {00030E8F-} +Playstation3Controller {0268054C-} +SlawFlightControlRudder {001104D8-} +OculusTouch {02112833-} +DualShock4 {0BA0054C-} +DualShock4 {05c4054C-} +DualShock4 {09cc054C-} +XBox {02FF045E-} +XBox {02DD045E-} +XBoxElite {02E3045E-} + +XterminatorDualControl {3001047D-} +SideWinderForceFeedback2 {001B045E-} + +vJoy {BEAD1234-} +ArduinoLeonardo {80362341-} diff --git a/graphics/layouts/chcombat.jpg b/graphics/layouts/chcombat.jpg new file mode 100644 index 0000000..61c2c46 Binary files /dev/null and b/graphics/layouts/chcombat.jpg differ diff --git a/graphics/layouts/chcombat.json b/graphics/layouts/chcombat.json new file mode 100644 index 0000000..be2b391 --- /dev/null +++ b/graphics/layouts/chcombat.json @@ -0,0 +1,61 @@ +{ + "MapName" : "CH Combat Stick + Throttle", + "MapImage" : "chcombat.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "CH Combat Stick", + "DeviceProdGuid": ["{C0F4068E-0000-0000-0000-504944564944}", + "{00F4068E-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1974, "Y":854, "Width":592, "Height":54, "Cmt": "Primary trigger"}, + { "Input": "button2", "Type": "Digital", "X":2984, "Y":944, "Width":832, "Height":54, "Cmt": "Thumb button"}, + { "Input": "button3", "Type": "Digital", "X":2964, "Y":654, "Width":832, "Height":54, "Cmt": "Top button"}, + { "Input": "button4", "Type": "Digital", "X":2084, "Y":1159, "Width":592, "Height":54, "Cmt": "Pinky trigger"}, + { "Input": "button5", "Type": "Digital", "X":1754, "Y":234, "Width":892, "Height":54, "Cmt": "Side trigger"}, + { "Input": "button6", "Type": "Digital", "X":1664, "Y":334, "Width":892, "Height":54, "Cmt": "Top trigger"}, + { "Input": "button7", "Type": "Digital", "X":1689, "Y":464, "Width":832, "Height":54, "Cmt": "PoV hat up"}, + { "Input": "button8", "Type": "Digital", "X":1689, "Y":520, "Width":832, "Height":54, "Cmt": "PoV hat right"}, + { "Input": "button9", "Type": "Digital", "X":1689, "Y":576, "Width":832, "Height":54, "Cmt": "PoV hat down"}, + { "Input": "button10", "Type": "Digital", "X":1689, "Y":632, "Width":832, "Height":54, "Cmt": "PoV hat left"}, + { "Input": "hat1_up", "Type": "Digital", "X":2964, "Y":212, "Width":832, "Height":54, "Cmt": "Right hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":2964, "Y":268, "Width":832, "Height":54, "Cmt": "Right hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":2964, "Y":324, "Width":832, "Height":54, "Cmt": "Right hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":2964, "Y":380, "Width":832, "Height":54, "Cmt": "Right hat left"}, + { "Input": "x", "Type": "Analogue", "X":3124, "Y":1168, "Width":692, "Height":54, "Cmt": "Stick X axis"}, + { "Input": "y", "Type": "Analogue", "X":3124, "Y":1112, "Width":692, "Height":54, "Cmt": "Stick Y axis"}, + { "Input": "z", "Type": "Analogue", "X":2254, "Y":1894, "Width":692, "Height":54, "Cmt": "Wheel on left of base"} + ] + }, + { + "InputType": "J", + "DeviceName": "CH Pro Throttle 1", + "DeviceProdGuid": ["{00F1068E-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1114, "Y":966, "Width":832, "Height":54, "Cmt": "Castle hat right"}, + { "Input": "button2", "Type": "Digital", "X":1114, "Y":1022, "Width":832, "Height":54, "Cmt": "Castle hat down"}, + { "Input": "button3", "Type": "Digital", "X":1114, "Y":1078, "Width":832, "Height":54, "Cmt": "Castle hat left"}, + { "Input": "button4", "Type": "Digital", "X":1114, "Y":910, "Width":832, "Height":54, "Cmt": "Castle hat up"}, + { "Input": "button5", "Type": "Digital", "X":1189, "Y":1696, "Width":1032, "Height":54, "Cmt": "Bottom hat right"}, + { "Input": "button6", "Type": "Digital", "X":1189, "Y":1752, "Width":1032, "Height":54, "Cmt": "Bottom hat down"}, + { "Input": "button7", "Type": "Digital", "X":1189, "Y":1808, "Width":1032, "Height":54, "Cmt": "Bottom hat left"}, + { "Input": "button8", "Type": "Digital", "X":1189, "Y":1640, "Width":1032, "Height":54, "Cmt": "Bottom hat up"}, + { "Input": "button9", "Type": "Digital", "X":1198, "Y":1275, "Width":832, "Height":54, "Cmt": "Rear hat down"}, + { "Input": "button10", "Type": "Digital", "X":1198, "Y":1219, "Width":832, "Height":54, "Cmt": "Rear hat right"}, + { "Input": "button11", "Type": "Digital", "X":1198, "Y":1163, "Width":832, "Height":54, "Cmt": "Rear hat up"}, + { "Input": "button12", "Type": "Digital", "X":1198, "Y":1331, "Width":832, "Height":54, "Cmt": "Rear hat left"}, + { "Input": "button13", "Type": "Digital", "X":1261, "Y":1549, "Width":932, "Height":54, "Cmt": "Mouse button"}, + { "Input": "button14", "Type": "Digital", "X":1042, "Y":814, "Width":892, "Height":54, "Cmt": "Right back"}, + { "Input": "button15", "Type": "Digital", "X":904, "Y":724, "Width":892, "Height":54, "Cmt": "Middle back"}, + { "Input": "button16", "Type": "Digital", "X":684, "Y":634, "Width":892, "Height":54, "Cmt": "Left back"}, + { "Input": "hat1_up", "Type": "Digital", "X":132, "Y":1896, "Width":932, "Height":54, "Cmt": "PoV hat up (looks like witch hat)"}, + { "Input": "hat1_right", "Type": "Digital", "X":132, "Y":1952, "Width":932, "Height":54, "Cmt": "PoV hat right (looks like witch hat)"}, + { "Input": "hat1_down", "Type": "Digital", "X":132, "Y":2008, "Width":932, "Height":54, "Cmt": "PoV hat down (looks like witch hat)"}, + { "Input": "hat1_left", "Type": "Digital", "X":132, "Y":1840, "Width":932, "Height":54, "Cmt": "PoV hat left (looks like witch hat)"}, + { "Input": "x", "Type": "Analogue", "X":1261, "Y":1493, "Width":932, "Height":54, "Cmt": "Mouse X axis"}, + { "Input": "y", "Type": "Analogue", "X":1261, "Y":1437, "Width":932, "Height":54, "Cmt": "Mouse Y axis"}, + { "Input": "z", "Type": "Analogue", "X":80, "Y":714, "Width":692, "Height":54, "Cmt": "Throttle"} + ] + } + ] +} diff --git a/graphics/layouts/chfighter.jpg b/graphics/layouts/chfighter.jpg new file mode 100644 index 0000000..91efc3c Binary files /dev/null and b/graphics/layouts/chfighter.jpg differ diff --git a/graphics/layouts/chfighter.json b/graphics/layouts/chfighter.json new file mode 100644 index 0000000..42a346f --- /dev/null +++ b/graphics/layouts/chfighter.json @@ -0,0 +1,69 @@ +{ + "MapName" : "CH Fighter Stick + Throttle", + "MapImage" : "chfighter.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "CH Fighter Stick", + "DeviceProdGuid": ["{00F3068E-0000-0000-0000-504944564944}", + "{C0F3068E-0000-0000-0000-504944564944}", + "{C010068E-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input" : "button1" , "Type" : "Digital" , "X" : 1974 , "Y" : 854 , "Width" : 592 , "Height" : 54 , "Cmt" : "Primary trigger" }, + { "Input" : "button2" , "Type" : "Digital" , "X" : 1664 , "Y" : 334 , "Width" : 892 , "Height" : 54 , "Cmt" : "Top trigger" }, + { "Input" : "button3" , "Type" : "Digital" , "X" : 1754 , "Y" : 234 , "Width" : 892 , "Height" : 54 , "Cmt" : "Side trigger" }, + { "Input" : "button4" , "Type" : "Digital" , "X" : 2084 , "Y" : 1159 , "Width" : 592 , "Height" : 54 , "Cmt" : "Pinky trigger" }, + { "Input" : "button5" , "Type" : "Digital" , "X" : 1689 , "Y" : 464 , "Width" : 832 , "Height" : 54 , "Cmt" : "Left hat up" }, + { "Input" : "button6" , "Type" : "Digital" , "X" : 1689 , "Y" : 520 , "Width" : 832 , "Height" : 54 , "Cmt" : "Left hat right" }, + { "Input" : "button7" , "Type" : "Digital" , "X" : 1689 , "Y" : 576 , "Width" : 832 , "Height" : 54 , "Cmt" : "Left hat down" }, + { "Input" : "button8" , "Type" : "Digital" , "X" : 1689 , "Y" : 632 , "Width" : 832 , "Height" : 54 , "Cmt" : "Left hat left" }, + { "Input" : "button9" , "Type" : "Digital" , "X" : 2994 , "Y" : 494 , "Width" : 832 , "Height" : 54 , "Cmt" : "Castle hat up" }, + { "Input" : "button10" , "Type" : "Digital" , "X" : 2994 , "Y" : 550 , "Width" : 832 , "Height" : 54 , "Cmt" : "Castle hat right" }, + { "Input" : "button11" , "Type" : "Digital" , "X" : 2994 , "Y" : 606 , "Width" : 832 , "Height" : 54 , "Cmt" : "Castle hat down" }, + { "Input" : "button12" , "Type" : "Digital" , "X" : 2994 , "Y" : 662 , "Width" : 832 , "Height" : 54 , "Cmt" : "Castle hat left" }, + { "Input" : "button13" , "Type" : "Digital" , "X" : 3058 , "Y" : 810 , "Width" : 772 , "Height" : 54 , "Cmt" : "Thumb hat up" }, + { "Input" : "button14" , "Type" : "Digital" , "X" : 3058 , "Y" : 866 , "Width" : 772 , "Height" : 54 , "Cmt" : "Thumb hat right" }, + { "Input" : "button15" , "Type" : "Digital" , "X" : 3058 , "Y" : 922 , "Width" : 772 , "Height" : 54 , "Cmt" : "Thumb hat down" }, + { "Input" : "button16" , "Type" : "Digital" , "X" : 3058 , "Y" : 978 , "Width" : 772 , "Height" : 54 , "Cmt" : "Thumb hat left" }, + { "Input" : "hat1_up" , "Type" : "Digital" , "X" : 2964 , "Y" : 212 , "Width" : 832 , "Height" : 54 , "Cmt" : "POV hat up (looks like witch hat)" }, + { "Input" : "hat1_right" , "Type" : "Digital" , "X" : 2964 , "Y" : 268 , "Width" : 832 , "Height" : 54 , "Cmt" : "POV hat right (looks like witch hat)" }, + { "Input" : "hat1_down" , "Type" : "Digital" , "X" : 2964 , "Y" : 324 , "Width" : 832 , "Height" : 54 , "Cmt" : "POV hat down (looks like witch hat)" }, + { "Input" : "hat1_left" , "Type" : "Digital" , "X" : 2964 , "Y" : 380 , "Width" : 832 , "Height" : 54 , "Cmt" : "POV hat left (looks like witch hat)" }, + { "Input" : "x" , "Type" : "Analogue" , "X" : 3124 , "Y" : 1112 , "Width" : 692 , "Height" : 54 , "Cmt" : "Stick X axis" }, + { "Input" : "y" , "Type" : "Analogue" , "X" : 3124 , "Y" : 1168 , "Width" : 692 , "Height" : 54 , "Cmt" : "Stick Y axis" }, + { "Input" : "z" , "Type" : "Analogue" , "X" : 2254 , "Y" : 1894 , "Width" : 692 , "Height" : 54 , "Cmt" : "Wheel on left of base" } + + ] + }, + { + "InputType": "J", + "DeviceName": "CH Pro Throttle 1", + "DeviceProdGuid": ["{00F1068E-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1114, "Y":966, "Width":832, "Height":54, "Cmt": "Castle hat right"}, + { "Input": "button2", "Type": "Digital", "X":1114, "Y":1022, "Width":832, "Height":54, "Cmt": "Castle hat down"}, + { "Input": "button3", "Type": "Digital", "X":1114, "Y":1078, "Width":832, "Height":54, "Cmt": "Castle hat left"}, + { "Input": "button4", "Type": "Digital", "X":1114, "Y":910, "Width":832, "Height":54, "Cmt": "Castle hat up"}, + { "Input": "button5", "Type": "Digital", "X":1189, "Y":1696, "Width":1032, "Height":54, "Cmt": "Bottom hat right"}, + { "Input": "button6", "Type": "Digital", "X":1189, "Y":1752, "Width":1032, "Height":54, "Cmt": "Bottom hat down"}, + { "Input": "button7", "Type": "Digital", "X":1189, "Y":1808, "Width":1032, "Height":54, "Cmt": "Bottom hat left"}, + { "Input": "button8", "Type": "Digital", "X":1189, "Y":1640, "Width":1032, "Height":54, "Cmt": "Bottom hat up"}, + { "Input": "button9", "Type": "Digital", "X":1198, "Y":1275, "Width":832, "Height":54, "Cmt": "Rear hat down"}, + { "Input": "button10", "Type": "Digital", "X":1198, "Y":1219, "Width":832, "Height":54, "Cmt": "Rear hat right"}, + { "Input": "button11", "Type": "Digital", "X":1198, "Y":1163, "Width":832, "Height":54, "Cmt": "Rear hat up"}, + { "Input": "button12", "Type": "Digital", "X":1198, "Y":1331, "Width":832, "Height":54, "Cmt": "Rear hat left"}, + { "Input": "button13", "Type": "Digital", "X":1261, "Y":1549, "Width":932, "Height":54, "Cmt": "Mouse button"}, + { "Input": "button14", "Type": "Digital", "X":1042, "Y":814, "Width":892, "Height":54, "Cmt": "Right back"}, + { "Input": "button15", "Type": "Digital", "X":904, "Y":724, "Width":892, "Height":54, "Cmt": "Middle back"}, + { "Input": "button16", "Type": "Digital", "X":684, "Y":634, "Width":892, "Height":54, "Cmt": "Left back"}, + { "Input": "hat1_up", "Type": "Digital", "X":132, "Y":1896, "Width":932, "Height":54, "Cmt": "PoV hat up (looks like witch hat)"}, + { "Input": "hat1_right", "Type": "Digital", "X":132, "Y":1952, "Width":932, "Height":54, "Cmt": "PoV hat right (looks like witch hat)"}, + { "Input": "hat1_down", "Type": "Digital", "X":132, "Y":2008, "Width":932, "Height":54, "Cmt": "PoV hat down (looks like witch hat)"}, + { "Input": "hat1_left", "Type": "Digital", "X":132, "Y":1840, "Width":932, "Height":54, "Cmt": "PoV hat left (looks like witch hat)"}, + { "Input": "x", "Type": "Analogue", "X":1261, "Y":1493, "Width":932, "Height":54, "Cmt": "Mouse X axis"}, + { "Input": "y", "Type": "Analogue", "X":1261, "Y":1437, "Width":932, "Height":54, "Cmt": "Mouse Y axis"}, + { "Input": "z", "Type": "Analogue", "X":80, "Y":714, "Width":692, "Height":54, "Cmt": "Throttle"} + ] + } + ] +} diff --git a/graphics/layouts/chproflightquadrant.jpg b/graphics/layouts/chproflightquadrant.jpg new file mode 100644 index 0000000..01235fc Binary files /dev/null and b/graphics/layouts/chproflightquadrant.jpg differ diff --git a/graphics/layouts/chproflightquadrant.json b/graphics/layouts/chproflightquadrant.json new file mode 100644 index 0000000..d0d78da --- /dev/null +++ b/graphics/layouts/chproflightquadrant.json @@ -0,0 +1,22 @@ +{ + "MapName" : "CH Pro Flight Throttle Quadrant", + "MapImage" : "chproflightquadrant.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "CH Pro Flight Throttle Quadrant", + "DeviceProdGuid": ["{0C2D06A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":354, "Y":1484, "Width":932, "Height":54, "Cmt": "Switch 1 up"}, + { "Input": "button2", "Type": "Digital", "X":354, "Y":1540, "Width":932, "Height":54, "Cmt": "Switch 1 down"}, + { "Input": "button3", "Type": "Digital", "X":1474, "Y":1754, "Width":932, "Height":54, "Cmt": "Switch 2 up"}, + { "Input": "button4", "Type": "Digital", "X":1474, "Y":1810, "Width":932, "Height":54, "Cmt": "Switch 2 down"}, + { "Input": "button5", "Type": "Digital", "X":2614, "Y":1484, "Width":932, "Height":54, "Cmt": "Switch 3 up"}, + { "Input": "button6", "Type": "Digital", "X":2614, "Y":1540, "Width":932, "Height":54, "Cmt": "Switch 3 down"}, + { "Input": "x", "Type": "Analogue", "X":554, "Y":564, "Width":932, "Height":54, "Cmt": "Throttle 1"}, + { "Input": "y", "Type": "Analogue", "X":1474, "Y":324, "Width":932, "Height":54, "Cmt": "Throttle 2"}, + { "Input": "z", "Type": "Analogue", "X":2414, "Y":564, "Width":932, "Height":54, "Cmt": "Throttle 3"} + ] + } + ] +} diff --git a/graphics/layouts/cobram5.jpg b/graphics/layouts/cobram5.jpg new file mode 100644 index 0000000..560410b Binary files /dev/null and b/graphics/layouts/cobram5.jpg differ diff --git a/graphics/layouts/cobram5.json b/graphics/layouts/cobram5.json new file mode 100644 index 0000000..768120e --- /dev/null +++ b/graphics/layouts/cobram5.json @@ -0,0 +1,44 @@ +{ + "MapName" : "Defender Cobra M5", + "MapImage" : "cobram5.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Defender Cobra M5", + "DeviceProdGuid": ["{560311C0-0000-0000-0000-504944564944}", + "{560511C0-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":64, "Y":1273, "Width":1392, "Height":54, "Cmt": "Primary trigger"}, + { "Input": "button2", "Type": "Digital", "X":2264, "Y":922, "Width":1392, "Height":54, "Cmt": "Secondary trigger"}, + { "Input": "button3", "Type": "Digital", "X":124, "Y":1124, "Width":1332, "Height":54, "Cmt": "NAV left red button"}, + { "Input": "button4", "Type": "Digital", "X":2324, "Y":734, "Width":1332, "Height":54, "Cmt": "NAV right red button"}, + { "Input": "button5", "Type": "Digital", "X":184, "Y":722, "Width":1272, "Height":54, "Cmt": "NAV witch hat left"}, + { "Input": "button6", "Type": "Digital", "X":184, "Y":554, "Width":1272, "Height":54, "Cmt": "NAV witch hat up"}, + { "Input": "button7", "Type": "Digital", "X":184, "Y":610, "Width":1272, "Height":54, "Cmt": "NAV witch hat right"}, + { "Input": "button8", "Type": "Digital", "X":184, "Y":666, "Width":1272, "Height":54, "Cmt": "NAV witch hat down"}, + { "Input": "button9", "Type": "Digital", "X":124, "Y":1414, "Width":1332, "Height":54, "Cmt": "NAV pinky trigger"}, + { "Input": "button10", "Type": "Digital", "X":124, "Y":1064, "Width":1332, "Height":54, "Cmt": "BVR left red button"}, + { "Input": "button11", "Type": "Digital", "X":2324, "Y":674, "Width":1332, "Height":54, "Cmt": "BVR right red button"}, + { "Input": "button12", "Type": "Digital", "X":184, "Y":492, "Width":1272, "Height":54, "Cmt": "BVR witch hat left"}, + { "Input": "button13", "Type": "Digital", "X":184, "Y":324, "Width":1272, "Height":54, "Cmt": "BVR witch hat up"}, + { "Input": "button14", "Type": "Digital", "X":184, "Y":380, "Width":1272, "Height":54, "Cmt": "BVR witch hat right"}, + { "Input": "button15", "Type": "Digital", "X":184, "Y":436, "Width":1272, "Height":54, "Cmt": "BVR witch hat down"}, + { "Input": "button16", "Type": "Digital", "X":124, "Y":1354, "Width":1332, "Height":54, "Cmt": "BVR pinky trigger"}, + { "Input": "button17", "Type": "Digital", "X":124, "Y":1184, "Width":1332, "Height":54, "Cmt": "VIS left red button"}, + { "Input": "button18", "Type": "Digital", "X":2324, "Y":794, "Width":1332, "Height":54, "Cmt": "VIS right red button"}, + { "Input": "button19", "Type": "Digital", "X":184, "Y":952, "Width":1272, "Height":54, "Cmt": "VIS witch hat left"}, + { "Input": "button20", "Type": "Digital", "X":184, "Y":784, "Width":1272, "Height":54, "Cmt": "VIS witch hat up"}, + { "Input": "button21", "Type": "Digital", "X":184, "Y":840, "Width":1272, "Height":54, "Cmt": "VIS witch hat right"}, + { "Input": "button22", "Type": "Digital", "X":184, "Y":896, "Width":1272, "Height":54, "Cmt": "VIS witch hat down"}, + { "Input": "button23", "Type": "Digital", "X":124, "Y":1474, "Width":1332, "Height":54, "Cmt": "VIS pinky trigger"}, + { "Input": "hat1_up", "Type": "Digital", "X":1864, "Y":324, "Width":1932, "Height":54, "Cmt": "PoV up"}, + { "Input": "hat1_right", "Type": "Digital", "X":1864, "Y":380, "Width":1932, "Height":54, "Cmt": "PoV right"}, + { "Input": "hat1_down", "Type": "Digital", "X":1864, "Y":436, "Width":1932, "Height":54, "Cmt": "PoV down"}, + { "Input": "hat1_left", "Type": "Digital", "X":1864, "Y":492, "Width":1932, "Height":54, "Cmt": "PoV left"}, + { "Input": "x", "Type": "Analogue", "X":2324, "Y":1080, "Width":1332, "Height":54, "Cmt": ""}, + { "Input": "y", "Type": "Analogue", "X":2324, "Y":1024, "Width":1332, "Height":54, "Cmt": ""}, + { "Input": "rotz", "Type": "Analogue", "X":2324, "Y":1136, "Width":1332, "Height":54, "Cmt": ""} + ] + } + ] +} diff --git a/graphics/layouts/extreme3dpro.jpg b/graphics/layouts/extreme3dpro.jpg new file mode 100644 index 0000000..4b0cb67 Binary files /dev/null and b/graphics/layouts/extreme3dpro.jpg differ diff --git a/graphics/layouts/extreme3dpro.json b/graphics/layouts/extreme3dpro.json new file mode 100644 index 0000000..c06b204 --- /dev/null +++ b/graphics/layouts/extreme3dpro.json @@ -0,0 +1,33 @@ +{ + "MapName" : "Logitech Extreme 3DPro", + "MapImage" : "extreme3dpro.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Logitech Extreme 3DPro", + "DeviceProdGuid": ["{C215046D-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":474, "Y":904, "Width":1092, "Height":54, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":474, "Y":1004, "Width":1092, "Height":54, "Cmt": "Side trigger" }, + { "Input": "button3", "Type": "Digital", "X":424, "Y":784, "Width":1092, "Height":54, "Cmt": "Bottom-left button" }, + { "Input": "button4", "Type": "Digital", "X":2124, "Y":784, "Width":1092, "Height":54, "Cmt": "Bottom-right button" }, + { "Input": "button5", "Type": "Digital", "X":424, "Y":654, "Width":1092, "Height":54, "Cmt": "Top-left button" }, + { "Input": "button6", "Type": "Digital", "X":2124, "Y":654, "Width":1092, "Height":54, "Cmt": "Top-right button" }, + { "Input": "button7", "Type": "Digital", "X":244, "Y":1434, "Width":542, "Height":108, "Cmt": "Left bank top-left button" }, + { "Input": "button8", "Type": "Digital", "X":794, "Y":1434, "Width":542, "Height":108, "Cmt": "Left bank top-right button" }, + { "Input": "button9", "Type": "Digital", "X":244, "Y":1550, "Width":542, "Height":108, "Cmt": "Left bank middle-left button" }, + { "Input": "button10", "Type": "Digital", "X":794, "Y":1550, "Width":542, "Height":108, "Cmt": "Left bank middle-right button" }, + { "Input": "button11", "Type": "Digital", "X":244, "Y":1666, "Width":542, "Height":108, "Cmt": "Left bank bottom-left button" }, + { "Input": "button12", "Type": "Digital", "X":794, "Y":1666, "Width":542, "Height":108, "Cmt": "Left bank bottom-right button" }, + { "Input": "hat1_up", "Type": "Digital", "X":864, "Y":374, "Width":1932, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":864, "Y":430, "Width":1932, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":864, "Y":486, "Width":1932, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":864, "Y":542, "Width":1932, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotz", "Type": "Analogue", "X":2357, "Y":980, "Width":1132, "Height":54, "Cmt": "Stick twist" }, + { "Input": "slider1", "Type": "Analogue", "X":2864, "Y":1574, "Width":832, "Height":54, "Cmt": "Stick throttle slider" }, + { "Input": "x", "Type": "Analogue", "X":2357, "Y":924, "Width":1132, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "y", "Type": "Analogue", "X":2357, "Y":868, "Width":1132, "Height":54, "Cmt": "Stick roll" } + ] + } + ] +} diff --git a/graphics/layouts/fly5.jpg b/graphics/layouts/fly5.jpg new file mode 100644 index 0000000..cbbfed1 Binary files /dev/null and b/graphics/layouts/fly5.jpg differ diff --git a/graphics/layouts/fly5.json b/graphics/layouts/fly5.json new file mode 100644 index 0000000..154c7a9 --- /dev/null +++ b/graphics/layouts/fly5.json @@ -0,0 +1,36 @@ +{ + "MapName" : "Cyborg F.L.Y. 5", + "MapImage" : "fly5.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "SaitekFLY5", + "DeviceProdGuid": ["{13020738-0000-0000-0000-504944564944}", + "{083606A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":684, "Y":794, "Width":1092, "Height":54, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":734, "Y":874, "Width":1092, "Height":54, "Cmt": "Bottom-left button" }, + { "Input": "button3", "Type": "Digital", "X":2414, "Y":744, "Width":1092, "Height":54, "Cmt": "Bottom-right button" }, + { "Input": "button4", "Type": "Digital", "X":624, "Y":704, "Width":1092, "Height":54, "Cmt": "Top-left button" }, + { "Input": "button5", "Type": "Digital", "X":2414, "Y":594, "Width":1092, "Height":54, "Cmt": "Top-right button" }, + { "Input": "button6", "Type": "Digital", "X":584, "Y":1847, "Width":1092, "Height":54, "Cmt": "Bottom bank first button" }, + { "Input": "button7", "Type": "Digital", "X":734, "Y":1927, "Width":1092, "Height":54, "Cmt": "Bottom bank second button" }, + { "Input": "button8", "Type": "Digital", "X":884, "Y":2007, "Width":1092, "Height":54, "Cmt": "Bottom bank third button" }, + { "Input": "button9", "Type": "Digital", "X":1034, "Y":2090, "Width":1092, "Height":54, "Cmt": "Bottom bank fourth button" }, + { "Input": "button10", "Type": "Digital", "X":304, "Y":1604, "Width":1092, "Height":54, "Cmt": "Rear left button" }, + { "Input": "button11", "Type": "Digital", "X":664, "Y":1204, "Width":1092, "Height":54, "Cmt": "Rear right button" }, + { "Input": "button12", "Type": "Digital", "X":2474, "Y":864, "Width":1132, "Height":54, "Cmt": "Scroll wheel up" }, + { "Input": "button13", "Type": "Digital", "X":2474, "Y":920, "Width":1132, "Height":54, "Cmt": "Scroll wheel down" }, + { "Input": "button14", "Type": "Digital", "X":2594, "Y":1504, "Width":1092, "Height":54, "Cmt": "Base button" }, + { "Input": "hat1_up", "Type": "Digital", "X":990, "Y":304, "Width":1932, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":990, "Y":360, "Width":1932, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":990, "Y":416, "Width":1932, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":990, "Y":472, "Width":1932, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotz", "Type": "Analogue", "X":2484, "Y":1136, "Width":1132, "Height":54, "Cmt": "Stick twist" }, + { "Input": "x", "Type": "Analogue", "X":2484, "Y":1080, "Width":1132, "Height":54, "Cmt": "Stick roll" }, + { "Input": "y", "Type": "Analogue", "X":2484, "Y":1024, "Width":1132, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "z", "Type": "Analogue", "X":264, "Y":1404, "Width":1032, "Height":54, "Cmt": "Throttle" } + ] + } + ] +} diff --git a/graphics/layouts/g940.jpg b/graphics/layouts/g940.jpg new file mode 100644 index 0000000..b33a21d Binary files /dev/null and b/graphics/layouts/g940.jpg differ diff --git a/graphics/layouts/g940.json b/graphics/layouts/g940.json new file mode 100644 index 0000000..f222d48 --- /dev/null +++ b/graphics/layouts/g940.json @@ -0,0 +1,41 @@ +{ + "MapName" : "Logitec G940 Stick + Throttle", + "MapImage" : "g940.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Logitec G940 Stick", + "DeviceProdGuid": ["{C2A8046D-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2034, "Y":604, "Width":652, "Height":54, "Cmt": "Primary trigger half-press"}, + { "Input": "button2", "Type": "Digital", "X":2044, "Y":424, "Width":642, "Height":108, "Cmt": "Fire button"}, + { "Input": "button3", "Type": "Digital", "X":2124, "Y":234, "Width":642, "Height":108, "Cmt": "S1 button"}, + { "Input": "button4", "Type": "Digital", "X":3064, "Y":496, "Width":752, "Height":54, "Cmt": "S2 button"}, + { "Input": "button5", "Type": "Digital", "X":3064, "Y":584, "Width":752, "Height":54, "Cmt": "S3 button"}, + { "Input": "button6", "Type": "Digital", "X":2044, "Y":764, "Width":642, "Height":108, "Cmt": "S4 button"}, + { "Input": "button7", "Type": "Digital", "X":2044, "Y":1018, "Width":642, "Height":108, "Cmt": "S5 button"}, + { "Input": "button8", "Type": "Digital", "X":2954, "Y":386, "Width":832, "Height":54, "Cmt": "Ministick button"}, + { "Input": "slider2", "Type": "Analogue", "X":2954, "Y":330, "Width":832, "Height":54, "Cmt": "Ministick X"}, + { "Input": "slider1", "Type": "Analogue", "X":2954, "Y":274, "Width":832, "Height":54, "Cmt": "Ministick Y"}, + { "Input": "button9", "Type": "Digital", "X":2034, "Y":660, "Width":652, "Height":54, "Cmt": "Primary trigger full-press"}, + { "Input": "hat1_up", "Type": "Digital", "X":3124, "Y":694, "Width":692, "Height":54, "Cmt": "POV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":3124, "Y":750, "Width":692, "Height":54, "Cmt": "POV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":3124, "Y":806, "Width":692, "Height":54, "Cmt": "POV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":3124, "Y":862, "Width":692, "Height":54, "Cmt": "POV hat left"}, + { "Input": "x", "Type": "Analogue", "X":3144, "Y":1060, "Width":672, "Height":54, "Cmt": "Stick X axis"}, + { "Input": "y", "Type": "Analogue", "X":3144, "Y":1004, "Width":672, "Height":54, "Cmt": "Stick Y axis"}, + { "Input": "rotx", "Type": "Analogue", "X":3084, "Y":1824, "Width":592, "Height":54, "Cmt": "Trim 2"}, + { "Input": "roty", "Type": "Analogue", "X":3224, "Y":1744, "Width":592, "Height":54, "Cmt": "Trim 3"}, + { "Input": "rotz", "Type": "Analogue", "X":2934, "Y":1904, "Width":592, "Height":54, "Cmt": "Trim 1"} + ] + }, + { + "InputType": "J", + "DeviceName": "Logitec G940 Throttle", + "DeviceProdGuid": ["{C2A9046D-0000-0000-0000-504944564944}"], + "Controls": [ + + ] + } + ] +} diff --git a/graphics/layouts/g940pedals.jpg b/graphics/layouts/g940pedals.jpg new file mode 100644 index 0000000..1da4730 Binary files /dev/null and b/graphics/layouts/g940pedals.jpg differ diff --git a/graphics/layouts/g940pedals.json b/graphics/layouts/g940pedals.json new file mode 100644 index 0000000..3c2ec72 --- /dev/null +++ b/graphics/layouts/g940pedals.json @@ -0,0 +1,16 @@ +{ + "MapName" : "Logitec G940 Pedals", + "MapImage" : "g940pedals.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Logitec G940 Pedals", + "DeviceProdGuid": ["{C2AA046D-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "x", "Type": "Digital", "X":2264, "Y":588, "Width":1332, "Height":162, "Cmt": "Right pedal (unconfirmed)"}, + { "Input": "y", "Type": "Digital", "X":164, "Y":588, "Width":1332, "Height":162, "Cmt": "Left pedal (unconfirmed)"}, + { "Input": "rotx", "Type": "Analogue", "X":1208, "Y":331, "Width":1332, "Height":162, "Cmt": "Rudder"} + ] + } + ] +} diff --git a/graphics/layouts/gladiator.jpg b/graphics/layouts/gladiator.jpg new file mode 100644 index 0000000..b09e5df Binary files /dev/null and b/graphics/layouts/gladiator.jpg differ diff --git a/graphics/layouts/gladiator.json b/graphics/layouts/gladiator.json new file mode 100644 index 0000000..ef4da26 --- /dev/null +++ b/graphics/layouts/gladiator.json @@ -0,0 +1,54 @@ +{ + "MapName" : "VKB Gladiator", + "MapImage" : "gladiator.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "VKB Gladiator", + "DeviceProdGuid": ["{0121231D-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":204, "Y":1524, "Width":992, "Height":54, "Cmt": "Flaps up"}, + { "Input": "button2", "Type": "Digital", "X":254, "Y":1624, "Width":992, "Height":54, "Cmt": "Flaps down"}, + { "Input": "button3", "Type": "Digital", "X":784, "Y":1904, "Width":992, "Height":54, "Cmt": "A1"}, + { "Input": "button4", "Type": "Digital", "X":2524, "Y":1514, "Width":992, "Height":54, "Cmt": "A2"}, + { "Input": "button5", "Type": "Digital", "X":2464, "Y":1424, "Width":992, "Height":54, "Cmt": "A3"}, + { "Input": "button6", "Type": "Digital", "X":1144, "Y":1994, "Width":992, "Height":54, "Cmt": "B1"}, + { "Input": "button7", "Type": "Digital", "X":2484, "Y":1814, "Width":992, "Height":54, "Cmt": "B2"}, + { "Input": "button8", "Type": "Digital", "X":2564, "Y":1604, "Width":992, "Height":54, "Cmt": "B3"}, + { "Input": "button9", "Type": "Digital", "X":2244, "Y":1994, "Width":992, "Height":54, "Cmt": "C1"}, + { "Input": "button10", "Type": "Digital", "X":2414, "Y":1904, "Width":992, "Height":54, "Cmt": "C2"}, + { "Input": "button11", "Type": "Digital", "X":2624, "Y":1694, "Width":992, "Height":54, "Cmt": "C3"}, + { "Input": "button12", "Type": "Digital", "X":2274, "Y":1254, "Width":1192, "Height":54, "Cmt": "Engine start"}, + { "Input": "button13", "Type": "Digital", "X":2204, "Y":1114, "Width":1192, "Height":54, "Cmt": "Eject"}, + { "Input": "button14", "Type": "Digital", "X":2184, "Y":584, "Width":1472, "Height":54, "Cmt": "Primary trigger (mode 1"}, + { "Input": "button15", "Type": "Digital", "X":2184, "Y":640, "Width":1472, "Height":56, "Cmt": "Primary trigger (mode 1"}, + { "Input": "button16", "Type": "Digital", "X":2184, "Y":704, "Width":1472, "Height":54, "Cmt": "Primary trigger (mode 2"}, + { "Input": "button17", "Type": "Digital", "X":2184, "Y":760, "Width":1472, "Height":56, "Cmt": "Primary trigger (mode 2"}, + { "Input": "button18", "Type": "Digital", "X":2124, "Y":304, "Width":1472, "Height":54, "Cmt": "Thumb trigger (mode 1"}, + { "Input": "button19", "Type": "Digital", "X":2124, "Y":360, "Width":1472, "Height":56, "Cmt": "Thumb trigger (mode 1"}, + { "Input": "button20", "Type": "Digital", "X":2124, "Y":424, "Width":1472, "Height":54, "Cmt": "Thumb trigger (mode 2"}, + { "Input": "button21", "Type": "Digital", "X":2124, "Y":480, "Width":1472, "Height":56, "Cmt": "Thumb trigger (mode 2"}, + { "Input": "hat1_up", "Type": "Digital", "X":274, "Y":304, "Width":1112, "Height":54, "Cmt": "POV hat up (mode 1"}, + { "Input": "button22", "Type": "Digital", "X":274, "Y":360, "Width":1112, "Height":54, "Cmt": "POV hat up (mode 1"}, + { "Input": "hat1_down", "Type": "Digital", "X":274, "Y":526, "Width":1112, "Height":52, "Cmt": "POV hat down (mode 1"}, + { "Input": "button23", "Type": "Digital", "X":274, "Y":580, "Width":1112, "Height":54, "Cmt": "POV hat down (mode 1"}, + { "Input": "hat1_left", "Type": "Digital", "X":274, "Y":636, "Width":1112, "Height":52, "Cmt": "POV hat left (mode 1"}, + { "Input": "button24", "Type": "Digital", "X":274, "Y":690, "Width":1112, "Height":66, "Cmt": "POV hat left (mode 1"}, + { "Input": "hat1_right", "Type": "Digital", "X":274, "Y":416, "Width":1112, "Height":52, "Cmt": "POV hat right (mode 1"}, + { "Input": "button25", "Type": "Digital", "X":274, "Y":470, "Width":1112, "Height":54, "Cmt": "POV hat right (mode 1"}, + { "Input": "hat2_up", "Type": "Digital", "X":274, "Y":764, "Width":1112, "Height":54, "Cmt": "POV hat up (mode 2"}, + { "Input": "button26", "Type": "Digital", "X":274, "Y":820, "Width":1112, "Height":54, "Cmt": "POV hat up (mode 2"}, + { "Input": "hat2_down", "Type": "Digital", "X":274, "Y":986, "Width":1112, "Height":52, "Cmt": "POV hat down (mode 2"}, + { "Input": "button27", "Type": "Digital", "X":274, "Y":1040, "Width":1112, "Height":54, "Cmt": "POV hat down (mode 2"}, + { "Input": "hat2_left", "Type": "Digital", "X":274, "Y":1096, "Width":1112, "Height":52, "Cmt": "POV hat left (mode 2"}, + { "Input": "button28", "Type": "Digital", "X":274, "Y":1150, "Width":1112, "Height":66, "Cmt": "POV hat left (mode 2"}, + { "Input": "hat2_right", "Type": "Digital", "X":274, "Y":876, "Width":1112, "Height":52, "Cmt": "POV hat right (mode 2"}, + { "Input": "button29", "Type": "Digital", "X":274, "Y":930, "Width":1112, "Height":54, "Cmt": "POV hat right (mode 2"}, + { "Input": "x", "Type": "Analogue", "X":2164, "Y":910, "Width":1532, "Height":54, "Cmt": "Roll"}, + { "Input": "y", "Type": "Analogue", "X":2164, "Y":854, "Width":1532, "Height":54, "Cmt": "Pitch"}, + { "Input": "rotx", "Type": "Analogue", "X":2164, "Y":966, "Width":1532, "Height":54, "Cmt": "Yaw"}, + { "Input": "z", "Type": "Analogue", "X":564, "Y":1402, "Width":832, "Height":54, "Cmt": "Throttle"} + ] + } + ] +} diff --git a/graphics/layouts/hotas4.jpg b/graphics/layouts/hotas4.jpg new file mode 100644 index 0000000..754fe3f Binary files /dev/null and b/graphics/layouts/hotas4.jpg differ diff --git a/graphics/layouts/hotas4.json b/graphics/layouts/hotas4.json new file mode 100644 index 0000000..0103f88 --- /dev/null +++ b/graphics/layouts/hotas4.json @@ -0,0 +1,35 @@ +{ + "MapName" : "ThrustMaster HOTAS 4", + "MapImage" : "hotas4.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "ThrustMaster HOTAS 4", + "DeviceProdGuid": ["{B67C044F-0000-0000-0000-504944564944}", + "{B67B044F-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1394, "Y":614, "Width":1082, "Height":54, "Cmt": "Stick primary trigger"}, + { "Input": "button2", "Type": "Digital", "X":2114, "Y":264, "Width":1192, "Height":54, "Cmt": "Stick L1 button"}, + { "Input": "button3", "Type": "Digital", "X":2954, "Y":544, "Width":792, "Height":108, "Cmt": "Stick R3 button"}, + { "Input": "button4", "Type": "Digital", "X":2754, "Y":374, "Width":832, "Height":108, "Cmt": "Stick L3 button"}, + { "Input": "button5", "Type": "Digital", "X":950, "Y":734, "Width":592, "Height":108, "Cmt": "Throttle square"}, + { "Input": "button6", "Type": "Digital", "X":950, "Y":898, "Width":592, "Height":108, "Cmt": "Throttle cross"}, + { "Input": "button7", "Type": "Digital", "X":950, "Y":1046, "Width":592, "Height":108, "Cmt": "Throttle circle"}, + { "Input": "button8", "Type": "Digital", "X":1044, "Y":1374, "Width":592, "Height":108, "Cmt": "Throttle triangle"}, + { "Input": "button9", "Type": "Digital", "X":1628, "Y":710, "Width":832, "Height":54, "Cmt": "Throttle R2 button"}, + { "Input": "button10", "Type": "Digital", "X":1928, "Y":790, "Width":532, "Height":108, "Cmt": "Throttle L2 button"}, + { "Input": "button11", "Type": "Digital", "X":284, "Y":2044, "Width":592, "Height":54, "Cmt": "Throttle SE button"}, + { "Input": "button12", "Type": "Digital", "X":984, "Y":2044, "Width":592, "Height":54, "Cmt": "Throttle ST button"}, + { "Input": "hat1_up", "Type": "Digital", "X":994, "Y":354, "Width":1532, "Height":54, "Cmt": "PoV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":994, "Y":410, "Width":1532, "Height":54, "Cmt": "PoV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":994, "Y":466, "Width":1532, "Height":54, "Cmt": "PoV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":994, "Y":522, "Width":1532, "Height":54, "Cmt": "PoV hat left"}, + { "Input": "rotz", "Type": "Analogue", "X":3018, "Y":1988, "Width":792, "Height":108, "Cmt": "Stick twist"}, + { "Input": "x", "Type": "Analogue", "X":3018, "Y":1878, "Width":792, "Height":108, "Cmt": "Stick left/right"}, + { "Input": "y", "Type": "Analogue", "X":3018, "Y":1768, "Width":792, "Height":108, "Cmt": "Stick up/down"}, + { "Input": "z", "Type": "Analogue", "X":96, "Y":736, "Width":692, "Height":54, "Cmt": "Throttle"}, + { "Input": "slider1", "Type": "Analogue", "X":1114, "Y":1504, "Width":932, "Height":108, "Cmt": "Throttle rocker"} + ] + } + ] +} diff --git a/graphics/layouts/hotasx.jpg b/graphics/layouts/hotasx.jpg new file mode 100644 index 0000000..1408c04 Binary files /dev/null and b/graphics/layouts/hotasx.jpg differ diff --git a/graphics/layouts/hotasx.json b/graphics/layouts/hotasx.json new file mode 100644 index 0000000..9652594 --- /dev/null +++ b/graphics/layouts/hotasx.json @@ -0,0 +1,34 @@ +{ + "MapName" : "ThrustMaster TFlight HOTASX", + "MapImage" : "hotasx.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "ThrustMaster TFlight HOTASX", + "DeviceProdGuid": ["{B108044f-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1394, "Y":614, "Width":1082, "Height":54, "Cmt": "Stick primary trigger"}, + { "Input": "button2", "Type": "Digital", "X":2114, "Y":264, "Width":1192, "Height":54, "Cmt": "Stick L1 button"}, + { "Input": "button3", "Type": "Digital", "X":2954, "Y":544, "Width":792, "Height":108, "Cmt": "Stick R3 button"}, + { "Input": "button4", "Type": "Digital", "X":2754, "Y":374, "Width":832, "Height":108, "Cmt": "Stick L3 button"}, + { "Input": "button5", "Type": "Digital", "X":950, "Y":734, "Width":592, "Height":108, "Cmt": "Throttle square"}, + { "Input": "button6", "Type": "Digital", "X":950, "Y":898, "Width":592, "Height":108, "Cmt": "Throttle cross"}, + { "Input": "button7", "Type": "Digital", "X":950, "Y":1046, "Width":592, "Height":108, "Cmt": "Throttle circle"}, + { "Input": "button8", "Type": "Digital", "X":1044, "Y":1374, "Width":592, "Height":108, "Cmt": "Throttle triangle"}, + { "Input": "button9", "Type": "Digital", "X":1628, "Y":710, "Width":832, "Height":54, "Cmt": "Throttle R2 button"}, + { "Input": "button10", "Type": "Digital", "X":1928, "Y":790, "Width":532, "Height":108, "Cmt": "Throttle L2 button"}, + { "Input": "button11", "Type": "Digital", "X":284, "Y":2004, "Width":592, "Height":54, "Cmt": "Throttle SE button"}, + { "Input": "button12", "Type": "Digital", "X":984, "Y":2004, "Width":592, "Height":54, "Cmt": "Throttle ST button"}, + { "Input": "hat1_up", "Type": "Digital", "X":994, "Y":354, "Width":1532, "Height":54, "Cmt": "PoV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":994, "Y":410, "Width":1532, "Height":54, "Cmt": "PoV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":994, "Y":466, "Width":1532, "Height":54, "Cmt": "PoV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":994, "Y":522, "Width":1532, "Height":54, "Cmt": "PoV hat left"}, + { "Input": "rotz", "Type": "Analogue", "X":3018, "Y":947, "Width":792, "Height":108, "Cmt": "Stick twist"}, + { "Input": "x", "Type": "Analogue", "X":3018, "Y":837, "Width":792, "Height":108, "Cmt": "Stick left/right"}, + { "Input": "y", "Type": "Analogue", "X":3018, "Y":727, "Width":792, "Height":108, "Cmt": "Stick up/down"}, + { "Input": "z", "Type": "Analogue", "X":96, "Y":736, "Width":692, "Height":54, "Cmt": "Throttle"}, + { "Input": "slider1", "Type": "Analogue", "X":1114, "Y":1504, "Width":932, "Height":108, "Cmt": "Throttle rocker"} + ] + } + ] +} diff --git a/graphics/layouts/proflightcombatpedals.jpg b/graphics/layouts/proflightcombatpedals.jpg new file mode 100644 index 0000000..71e0e2f Binary files /dev/null and b/graphics/layouts/proflightcombatpedals.jpg differ diff --git a/graphics/layouts/proflightcombatpedals.json b/graphics/layouts/proflightcombatpedals.json new file mode 100644 index 0000000..56db75c --- /dev/null +++ b/graphics/layouts/proflightcombatpedals.json @@ -0,0 +1,16 @@ +{ + "MapName" : "Saitek ProFlight Combat Rudder Pedals", + "MapImage" : "proflightcombatpedals.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek ProFlight Combat Rudder Pedals", + "DeviceProdGuid": ["{076406A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "x", "Type": "Digital", "X":164, "Y":588, "Width":1332, "Height":162, "Cmt":"Left pedal"}, + { "Input": "y", "Type": "Digital", "X":2264, "Y":588, "Width":1332, "Height":162, "Cmt":"Right pedal"}, + { "Input": "rotz", "Type": "Analogue", "X":1208, "Y":331, "Width":1332, "Height":162, "Cmt":"Rudder"} + ] + } + ] +} diff --git a/graphics/layouts/proflightpedals.jpg b/graphics/layouts/proflightpedals.jpg new file mode 100644 index 0000000..d9b04c3 Binary files /dev/null and b/graphics/layouts/proflightpedals.jpg differ diff --git a/graphics/layouts/proflightpedals.json b/graphics/layouts/proflightpedals.json new file mode 100644 index 0000000..866a31b --- /dev/null +++ b/graphics/layouts/proflightpedals.json @@ -0,0 +1,17 @@ +{ + "MapName" : "Saitek ProFlight Combat Rudder Pedals", + "MapImage" : "proflightpedals.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek ProFlight Combat Rudder Pedals", + "DeviceProdGuid": ["{076306A3-0000-0000-0000-504944564944}", + "{076506A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "x", "Type": "Digital", "X":164, "Y":588, "Width":1332, "Height":162, "Cmt":"Left pedal"}, + { "Input": "y", "Type": "Digital", "X":2264, "Y":588, "Width":1332, "Height":162, "Cmt":"Right pedal"}, + { "Input": "rotz", "Type": "Analogue", "X":1208, "Y":331, "Width":1332, "Height":162, "Cmt":"Rudder"} + ] + } + ] +} diff --git a/graphics/layouts/sidepanelcontroldeck.jpg b/graphics/layouts/sidepanelcontroldeck.jpg new file mode 100644 index 0000000..ec9e6b4 Binary files /dev/null and b/graphics/layouts/sidepanelcontroldeck.jpg differ diff --git a/graphics/layouts/sidepanelcontroldeck.json b/graphics/layouts/sidepanelcontroldeck.json new file mode 100644 index 0000000..38a72d9 --- /dev/null +++ b/graphics/layouts/sidepanelcontroldeck.json @@ -0,0 +1,47 @@ +{ + "MapName" : "Saitek Side Panel Control Deck", + "MapImage" : "sidepanelcontroldeck.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek Side Panel Control Deck", + "DeviceProdGuid": ["{22180738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":34, "Y":584, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button2", "Type": "Digital", "X":634, "Y":584, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button3", "Type": "Digital", "X":1234, "Y":584, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button4", "Type": "Digital", "X":2629, "Y":584, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button5", "Type": "Digital", "X":3229, "Y":584, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button6", "Type": "Digital", "X":34, "Y":646, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button7", "Type": "Digital", "X":634, "Y":646, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button8", "Type": "Digital", "X":1234, "Y":646, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button9", "Type": "Digital", "X":2629, "Y":646, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button10", "Type": "Digital", "X":3229, "Y":646, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button11", "Type": "Digital", "X":34, "Y":884, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button12", "Type": "Digital", "X":34, "Y":946, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button13", "Type": "Digital", "X":634, "Y":884, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button14", "Type": "Digital", "X":634, "Y":946, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button15", "Type": "Digital", "X":1234, "Y":884, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button16", "Type": "Digital", "X":1234, "Y":946, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button17", "Type": "Digital", "X":2629, "Y":884, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button18", "Type": "Digital", "X":3229, "Y":884, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button19", "Type": "Digital", "X":2629, "Y":946, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button20", "Type": "Digital", "X":3229, "Y":946, "Width":592, "Height":54, "Cmt":""}, + { "Input": "button21", "Type": "Digital", "X":2624, "Y":1132, "Width":992, "Height":54, "Cmt":""}, + { "Input": "button22", "Type": "Digital", "X":2624, "Y":1222, "Width":992, "Height":54, "Cmt":""}, + { "Input": "button23", "Type": "Digital", "X":2624, "Y":1284, "Width":992, "Height":54, "Cmt":""}, + { "Input": "button24", "Type": "Digital", "X":2624, "Y":1344, "Width":992, "Height":54, "Cmt":""}, + { "Input": "button25", "Type": "Digital", "X":1060, "Y":1371, "Width":772, "Height":54, "Cmt": "Scroll wheel press"}, + { "Input": "button26", "Type": "Digital", "X":1060, "Y":1259, "Width":772, "Height":54, "Cmt":""}, + { "Input": "button27", "Type": "Digital", "X":1060, "Y":1315, "Width":772, "Height":54, "Cmt":""}, + { "Input": "button28", "Type": "Digital", "X":835, "Y":1160, "Width":992, "Height":54, "Cmt": "Stick red button"}, + { "Input": "x", "Type": "Analogue", "X":695, "Y":1556, "Width":1132, "Height":108, "Cmt":""}, + { "Input": "y", "Type": "Analogue", "X":695, "Y":1666, "Width":1132, "Height":108, "Cmt":""}, + { "Input": "z", "Type": "Analogue", "X":695, "Y":1776, "Width":1132, "Height":108, "Cmt":""}, + { "Input": "rotx", "Type": "Analogue", "X":2685, "Y":1556, "Width":1132, "Height":108, "Cmt":""}, + { "Input": "roty", "Type": "Analogue", "X":2685, "Y":1666, "Width":1132, "Height":108, "Cmt":""}, + { "Input": "rotz", "Type": "Analogue", "X":2685, "Y":1776, "Width":1132, "Height":108, "Cmt":""} + ] + } + ] +} diff --git a/graphics/layouts/slawbf109pedals.jpg b/graphics/layouts/slawbf109pedals.jpg new file mode 100644 index 0000000..d2a1e4c Binary files /dev/null and b/graphics/layouts/slawbf109pedals.jpg differ diff --git a/graphics/layouts/slawbf109pedals.json b/graphics/layouts/slawbf109pedals.json new file mode 100644 index 0000000..c02f883 --- /dev/null +++ b/graphics/layouts/slawbf109pedals.json @@ -0,0 +1,16 @@ +{ + "MapName" : "Slaw BF-109 Pedals", + "MapImage" : "slawbf109pedals.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Slaw BF-109 Pedals", + "DeviceProdGuid": ["{001104D8-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "x", "Type": "Digital", "X":164, "Y":588, "Width":1332, "Height":162, "Cmt":"Left pedal (unconfirmed)"}, + { "Input": "y", "Type": "Digital", "X":2264, "Y":588, "Width":1332, "Height":162, "Cmt":"Right pedal (unconfirmed)"}, + { "Input": "rotz", "Type": "Analogue", "X":1208, "Y":331, "Width":1332, "Height":162, "Cmt":"Rudder"} + ] + } + ] +} diff --git a/graphics/layouts/stickx.jpg b/graphics/layouts/stickx.jpg new file mode 100644 index 0000000..d4b35cc Binary files /dev/null and b/graphics/layouts/stickx.jpg differ diff --git a/graphics/layouts/stickx.json b/graphics/layouts/stickx.json new file mode 100644 index 0000000..7cb17d7 --- /dev/null +++ b/graphics/layouts/stickx.json @@ -0,0 +1,33 @@ +{ + "MapName" : "ThrustMaster T.Flight X", + "MapImage" : "stickx.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "ThrustMaster T.Flight X", + "DeviceProdGuid": ["{B106044F-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":684, "Y":822, "Width":1092, "Height":54, "Cmt": "Primary trigger"}, + { "Input": "button2", "Type": "Digital", "X":2204, "Y":744, "Width":1092, "Height":54, "Cmt": "Secondary trigger"}, + { "Input": "button3", "Type": "Digital", "X":2124, "Y":564, "Width":1092, "Height":54, "Cmt": "Button 3"}, + { "Input": "button4", "Type": "Digital", "X":2174, "Y":654, "Width":1092, "Height":54, "Cmt": "Button 4"}, + { "Input": "button5", "Type": "Digital", "X":474, "Y":1564, "Width":1092, "Height":54, "Cmt": "Button 5"}, + { "Input": "button6", "Type": "Digital", "X":544, "Y":1424, "Width":1092, "Height":54, "Cmt": "Button 6"}, + { "Input": "button7", "Type": "Digital", "X":584, "Y":1266, "Width":1092, "Height":54, "Cmt": "Button 7"}, + { "Input": "button8", "Type": "Digital", "X":584, "Y":1204, "Width":1092, "Height":54, "Cmt": "Button 8"}, + { "Input": "button9", "Type": "Digital", "X":554, "Y":1704, "Width":1092, "Height":54, "Cmt": "Button 9"}, + { "Input": "button10", "Type": "Digital", "X":554, "Y":1766, "Width":1092, "Height":54, "Cmt": "Button 10"}, + { "Input": "button11", "Type": "Digital", "X":2824, "Y":1428, "Width":692, "Height":54, "Cmt": "Button 11"}, + { "Input": "button12", "Type": "Digital", "X":2824, "Y":1338, "Width":692, "Height":54, "Cmt": "Button 12"}, + { "Input": "hat1_up", "Type": "Digital", "X":990, "Y":304, "Width":1932, "Height":54, "Cmt": "PoV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":990, "Y":360, "Width":1932, "Height":54, "Cmt": "PoV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":990, "Y":416, "Width":1932, "Height":54, "Cmt": "PoV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":990, "Y":472, "Width":1932, "Height":54, "Cmt": "PoV hat left"}, + { "Input": "rotz", "Type": "Analogue", "X":2364, "Y":966, "Width":1132, "Height":54, "Cmt": "Stick twist"}, + { "Input": "slider1", "Type": "Analogue", "X":2584, "Y":1833, "Width":892, "Height":54, "Cmt": "Throttle axis"}, + { "Input": "x", "Type": "Analogue", "X":2364, "Y":910, "Width":1132, "Height":54, "Cmt": "Stick left/right"}, + { "Input": "y", "Type": "Analogue", "X":2364, "Y":854, "Width":1132, "Height":54, "Cmt": "Stick up/down"} + ] + } + ] +} diff --git a/graphics/layouts/t16000m.jpg b/graphics/layouts/t16000m.jpg new file mode 100644 index 0000000..0031301 Binary files /dev/null and b/graphics/layouts/t16000m.jpg differ diff --git a/graphics/layouts/t16000m.json b/graphics/layouts/t16000m.json new file mode 100644 index 0000000..ad55941 --- /dev/null +++ b/graphics/layouts/t16000m.json @@ -0,0 +1,37 @@ +{ + "MapName" : "T16000M", + "MapImage" : "T16000M.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "T16000M", + "DeviceProdGuid": ["{B10A044F-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2124, "Y":624, "Width":1092, "Height":54, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":474, "Y":624, "Width":1092, "Height":54, "Cmt": "Bottom button" }, + { "Input": "button3", "Type": "Digital", "X":474, "Y":494, "Width":1092, "Height":54, "Cmt": "Left-hand button" }, + { "Input": "button4", "Type": "Digital", "X":2124, "Y":494, "Width":1092, "Height":54, "Cmt": "Right-hand button" }, + { "Input": "button5", "Type": "Digital", "X":24, "Y":1104, "Width":542, "Height":108, "Cmt": "Left bank top-left button" }, + { "Input": "button6", "Type": "Digital", "X":574, "Y":1104, "Width":542, "Height":108, "Cmt": "Left bank top-middle button" }, + { "Input": "button7", "Type": "Digital", "X":1124, "Y":1104, "Width":542, "Height":108, "Cmt": "Left bank top-right button" }, + { "Input": "button8", "Type": "Digital", "X":1124, "Y":1220, "Width":542, "Height":108, "Cmt": "Left bank bottom-right button" }, + { "Input": "button9", "Type": "Digital", "X":574, "Y":1220, "Width":542, "Height":108, "Cmt": "Left bank bottom-middle button" }, + { "Input": "button10", "Type": "Digital", "X":24, "Y":1220, "Width":542, "Height":108, "Cmt": "Left bank bottom-left button" }, + { "Input": "button11", "Type": "Digital", "X":3264, "Y":1104, "Width":542, "Height":108, "Cmt": "Right bank top-right button" }, + { "Input": "button12", "Type": "Digital", "X":2714, "Y":1104, "Width":542, "Height":108, "Cmt": "Right bank top-middle button" }, + { "Input": "button13", "Type": "Digital", "X":2164, "Y":1104, "Width":542, "Height":108, "Cmt": "Right bank top-left button" }, + { "Input": "button14", "Type": "Digital", "X":2164, "Y":1220, "Width":542, "Height":108, "Cmt": "Right bank bottom-left button" }, + { "Input": "button15", "Type": "Digital", "X":2714, "Y":1220, "Width":542, "Height":108, "Cmt": "Right bank bottom-middle button" }, + { "Input": "button16", "Type": "Digital", "X":3264, "Y":1220, "Width":542, "Height":108, "Cmt": "Right bank bottom-right button" }, + { "Input": "hat1_up", "Type": "Digital", "X":1542, "Y":214, "Width":1532, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":1542, "Y":270, "Width":1532, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":1542, "Y":326, "Width":1532, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":1542, "Y":382, "Width":1532, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotz", "Type": "Analogue", "X":2357, "Y":980, "Width":1132, "Height":54, "Cmt": "Stick twist" }, + { "Input": "slider1", "Type": "Analogue", "X":2584, "Y":1750, "Width":832, "Height":54, "Cmt": "Stick throttle slider" }, + { "Input": "x", "Type": "Analogue", "X":2357, "Y":924, "Width":1132, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "y", "Type": "Analogue", "X":2357, "Y":868, "Width":1132, "Height": 54, "Cmt": "Stick roll" } + ] + } + ] +} diff --git a/graphics/layouts/t16000mfcs.jpg b/graphics/layouts/t16000mfcs.jpg new file mode 100644 index 0000000..167be95 Binary files /dev/null and b/graphics/layouts/t16000mfcs.jpg differ diff --git a/graphics/layouts/t16000mfcs.json b/graphics/layouts/t16000mfcs.json new file mode 100644 index 0000000..bb4a85c --- /dev/null +++ b/graphics/layouts/t16000mfcs.json @@ -0,0 +1,67 @@ +{ + "MapName" : "T16000MFCS", + "MapImage" : "t16000mfcs.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "T16000M Stick", + "DeviceProdGuid": "{B10A044F-0000-0000-0000-504944564944}", + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1804, "Y":844, "Width":642, "Height":54, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":2764, "Y":604, "Width":992, "Height":54, "Cmt": "Bottom button" }, + { "Input": "button3", "Type": "Digital", "X":1754, "Y":484, "Width":692, "Height":54, "Cmt": "Left-hand button" }, + { "Input": "button4", "Type": "Digital", "X":2764, "Y":504, "Width":992, "Height":54, "Cmt": "Right-hand button" }, + { "Input": "button5", "Type": "Digital", "X":1254, "Y":1244, "Width":292, "Height":108, "Cmt": "Left bank top-left button" }, + { "Input": "button6", "Type": "Digital", "X":1554, "Y":1244, "Width":292, "Height":108, "Cmt": "Left bank top-middle button" }, + { "Input": "button7", "Type": "Digital", "X":1854, "Y":1244, "Width":292, "Height":108, "Cmt": "Left bank top-right button" }, + { "Input": "button8", "Type": "Digital", "X":1854, "Y":1360, "Width":292, "Height":108, "Cmt": "Left bank bottom-right button" }, + { "Input": "button9", "Type": "Digital", "X":1554, "Y":1360, "Width":292, "Height":108, "Cmt": "Left bank bottom-middle button" }, + { "Input": "button10", "Type": "Digital", "X":1254, "Y":1360, "Width":292, "Height":108, "Cmt": "Left bank bottom-left button" }, + { "Input": "button11", "Type": "Digital", "X":3484, "Y":992, "Width":292, "Height":108, "Cmt": "Right bank top-right button" }, + { "Input": "button12", "Type": "Digital", "X":3184, "Y":992, "Width":292, "Height":108, "Cmt": "Right bank top-middle button" }, + { "Input": "button13", "Type": "Digital", "X":2884, "Y":992, "Width":292, "Height":108, "Cmt": "Right bank top-left button" }, + { "Input": "button14", "Type": "Digital", "X":2884, "Y":1108, "Width":292, "Height":108, "Cmt": "Right bank bottom-left button" }, + { "Input": "button15", "Type": "Digital", "X":3184, "Y":1108, "Width":292, "Height":108, "Cmt": "Right bank bottom-middle button" }, + { "Input": "button16", "Type": "Digital", "X":3484, "Y":1108, "Width":292, "Height":108, "Cmt": "Right bank bottom-right button" }, + { "Input": "hat1_up", "Type": "Digital", "X":2524, "Y":214, "Width":1192, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":2524, "Y":270, "Width":1192, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":2524, "Y":326, "Width":1192, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":2524, "Y":382, "Width":1192, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotz", "Type": "Analogue", "X":2824, "Y":856, "Width":932, "Height":54, "Cmt": "Stick twist" }, + { "Input": "slider1", "Type": "Analogue", "X":2944, "Y":1593, "Width":832, "Height":54, "Cmt": "Stick throttle slider" }, + { "Input": "x", "Type": "Analogue", "X":2824, "Y":800, "Width":932, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "y", "Type": "Analogue", "X":2824, "Y":744, "Width":932, "Height": 54, "Cmt": "Stick roll" } + ] + }, + { + "InputType": "J", + "DeviceName": "T16000M Throttle", + "DeviceProdGuid": "{B687044F-0000-0000-0000-504944564944}", + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":294, "Y":1244, "Width":792, "Height":54, "Cmt": "Thumb button" }, + { "Input": "button2", "Type": "Digital", "X":1774, "Y":1774, "Width":892, "Height":54, "Cmt": "Pinky button" }, + { "Input": "button3", "Type": "Digital", "X":1714, "Y":1664, "Width":892, "Height":54, "Cmt": "Ring finger button" }, + { "Input": "button4", "Type": "Digital", "X":1484, "Y":1514, "Width":692, "Height":54, "Cmt": "Middle finger rocker up" }, + { "Input": "button5", "Type": "Digital", "X":1484, "Y":1570, "Width":692, "Height":54, "Cmt": "Middle finger rocker down" }, + { "Input": "button6", "Type": "Digital", "X":244, "Y":1866, "Width":732, "Height":54, "Cmt": "Index finger mouse push" }, + { "Input": "button7", "Type": "Digital", "X":1024, "Y":654, "Width":692, "Height":54, "Cmt": "Middle hat up" }, + { "Input": "button8", "Type": "Digital", "X":1024, "Y":710, "Width":692, "Height":54, "Cmt": "Middle hat right" }, + { "Input": "button9", "Type": "Digital", "X":1024, "Y":766, "Width":692, "Height":54, "Cmt": "Middle hat down" }, + { "Input": "button10", "Type": "Digital", "X":1024, "Y":820, "Width":692, "Height":54, "Cmt": "Middle hat left" }, + { "Input": "button11", "Type": "Digital", "X":1034, "Y":929, "Width":692, "Height":54, "Cmt": "Middle hat up" }, + { "Input": "button12", "Type": "Digital", "X":1034, "Y":985, "Width":692, "Height":54, "Cmt": "Castle hat right" }, + { "Input": "button13", "Type": "Digital", "X":1034, "Y":1041, "Width":692, "Height":54, "Cmt": "Castle hat down" }, + { "Input": "button14", "Type": "Digital", "X":1034, "Y":1097, "Width":692, "Height":54, "Cmt": "Castle hat left" }, + { "Input": "hat1_up", "Type": "Digital", "X":1014, "Y":364, "Width":692, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":1014, "Y":420, "Width":692, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":1014, "Y":476, "Width":692, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":1014, "Y":532, "Width":692, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "x", "Type": "Digital", "X":244, "Y":1810, "Width":732, "Height":54, "Cmt": "Index finger mouse X" }, + { "Input": "y", "Type": "Digital", "X":244, "Y":1754, "Width":732, "Height":54, "Cmt": "Index finger mouse Y" }, + { "Input": "z", "Type": "Digital", "X":84, "Y":555, "Width":572, "Height":54, "Cmt": "Throttle" }, + { "Input": "slider1", "Type": "Digital", "X":1874, "Y":1914, "Width":832, "Height":54, "Cmt": "Pinky dial" }, + { "Input": "rotz", "Type": "Digital", "X":1954, "Y":2054, "Width":832, "Height":54, "Cmt": "Paddle" } + ] + } + ] +} diff --git a/graphics/layouts/template-InputCreator.xlsx b/graphics/layouts/template-InputCreator.xlsx new file mode 100644 index 0000000..7cb20e8 Binary files /dev/null and b/graphics/layouts/template-InputCreator.xlsx differ diff --git a/graphics/layouts/template.json.txt b/graphics/layouts/template.json.txt new file mode 100644 index 0000000..20cc792 --- /dev/null +++ b/graphics/layouts/template.json.txt @@ -0,0 +1,30 @@ +{ + "MapName" : "A Name that is shown in the dropdown", + "MapImage" : "DeviceImage.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "DeviceName Name as shown in the SCJM GUI", + "DeviceProdGuid": ["{Product GUID from DX Input}", "{An alternate product GUID from DX Input}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X": 1629, "Y": 628, "Width": 732, "Height": 52, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X": 1723, "Y": 450, "Width": 731, "Height": 52, "Cmt": "Top trigger (A)" }, + .. + .. + { "Input": "z", "Type": "Analogue", "X": 97, "Y": 763, "Width": 572, "Height": 54, "Cmt": "Throttle Left" } + ] + }, + { + "InputType": "J", + "DeviceName": "Next DeviceName Name as shown in the SCJM GUI", + "DeviceProdGuid": ["{Product GUID from DX Input}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X": 1629, "Y": 628, "Width": 732, "Height": 52, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X": 1723, "Y": 450, "Width": 731, "Height": 52, "Cmt": "Top trigger (A)" }, + .. + .. + { "Input": "z", "Type": "Analogue", "X": 97, "Y": 763, "Width": 572, "Height": 54, "Cmt": "Throttle Left" } + ] + } + ] +} \ No newline at end of file diff --git a/graphics/layouts/tfrpedals.jpg b/graphics/layouts/tfrpedals.jpg new file mode 100644 index 0000000..c24ed95 Binary files /dev/null and b/graphics/layouts/tfrpedals.jpg differ diff --git a/graphics/layouts/tfrpedals.json b/graphics/layouts/tfrpedals.json new file mode 100644 index 0000000..d8355ff --- /dev/null +++ b/graphics/layouts/tfrpedals.json @@ -0,0 +1,16 @@ +{ + "MapName" : "ThrustMaster T-Flight Pedals", + "MapImage" : "tfrpedals.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "ThrustMaster T-Flight Pedals", + "DeviceProdGuid": ["{B679044F-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "x", "Type": "Digital", "X":164, "Y":588, "Width":1332, "Height":162, "Cmt":"Left pedal"}, + { "Input": "y", "Type": "Digital", "X":2264, "Y":588, "Width":1332, "Height":162, "Cmt":"Right pedal"}, + { "Input": "z", "Type": "Analogue", "X":1208, "Y":331, "Width":1332, "Height":162, "Cmt":"Rudder"} + ] + } + ] +} diff --git a/graphics/layouts/vpc-warbrd-delta-left.jpg b/graphics/layouts/vpc-warbrd-delta-left.jpg new file mode 100644 index 0000000..f5857d6 Binary files /dev/null and b/graphics/layouts/vpc-warbrd-delta-left.jpg differ diff --git a/graphics/layouts/vpc-warbrd-delta-left.json b/graphics/layouts/vpc-warbrd-delta-left.json new file mode 100644 index 0000000..db87895 --- /dev/null +++ b/graphics/layouts/vpc-warbrd-delta-left.json @@ -0,0 +1,40 @@ +{ + "MapName" : "VPC WarBRD Delta (left)", + "MapImage" : "vpc-warbrd-delta-left.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "VPC WarBRD Delta left", + "DeviceProdGuid": ["{204203EB-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2470, "Y":1100, "Width":1180, "Height":54, "Cmt":"Trigger first stage"}, + { "Input": "button2", "Type": "Digital", "X":2470, "Y":1160, "Width":1180, "Height":54, "Cmt":"Trigger second stage"}, + { "Input": "button3", "Type": "Digital", "X":2470, "Y":1300, "Width":1180, "Height":54, "Cmt":"Trigger button"}, + { "Input": "button4", "Type": "Digital", "X":270, "Y":1000, "Width":1180, "Height":54, "Cmt":"Wheel up"}, + { "Input": "button5", "Type": "Digital", "X":270, "Y":1060, "Width":1180, "Height":54, "Cmt":"Wheel down"}, + { "Input": "button6", "Type": "Digital", "X":270, "Y":1120, "Width":1180, "Height":54, "Cmt":"Wheel push"}, + { "Input": "button7", "Type": "Digital", "X":270, "Y":820, "Width":1180, "Height":54, "Cmt":"Mini-joystick push"}, + { "Input": "button8", "Type": "Digital", "X":2470, "Y":700, "Width":1180, "Height":54, "Cmt":"4-way hat right up"}, + { "Input": "button9", "Type": "Digital", "X":2470, "Y":760, "Width":1180, "Height":54, "Cmt":"4-way hat right righ"}, + { "Input": "button10", "Type": "Digital", "X":2470, "Y":820, "Width":1180, "Height":54, "Cmt":"4-way hat right down"}, + { "Input": "button11", "Type": "Digital", "X":2470, "Y":880, "Width":1180, "Height":54, "Cmt":"4-way hat right left"}, + { "Input": "button12", "Type": "Digital", "X":2470, "Y":940, "Width":1180, "Height":54, "Cmt":"4-way hat right push?"}, + { "Input": "button13", "Type": "Digital", "X":270, "Y":300, "Width":1180, "Height":54, "Cmt":"4-way hat left up"}, + { "Input": "button14", "Type": "Digital", "X":270, "Y":360, "Width":1180, "Height":54, "Cmt":"4-way hat left righ"}, + { "Input": "button15", "Type": "Digital", "X":270, "Y":420, "Width":1180, "Height":54, "Cmt":"4-way hat left down"}, + { "Input": "button16", "Type": "Digital", "X":270, "Y":480, "Width":1180, "Height":54, "Cmt":"4-way hat left left"}, + { "Input": "button17", "Type": "Digital", "X":270, "Y":540, "Width":1180, "Height":54, "Cmt":"4-way hat left push?"}, + { "Input": "button18", "Type": "Digital", "X":2470, "Y":300, "Width":1180, "Height":54, "Cmt":"8-way hat LED up"}, + { "Input": "button19", "Type": "Digital", "X":2470, "Y":360, "Width":1180, "Height":54, "Cmt":"8-way hat LED righ"}, + { "Input": "button20", "Type": "Digital", "X":2470, "Y":420, "Width":1180, "Height":54, "Cmt":"8-way hat LED down"}, + { "Input": "button21", "Type": "Digital", "X":2470, "Y":480, "Width":1180, "Height":54, "Cmt":"8-way hat LED left"}, + { "Input": "button22", "Type": "Digital", "X":2470, "Y":540, "Width":1180, "Height":54, "Cmt":"8-way hat LED push?"}, + { "Input": "x", "Type": "Analogue", "X":270, "Y":1400, "Width":1180, "Height":54, "Cmt":"Joystick axis" }, + { "Input": "y", "Type": "Analogue", "X":270, "Y":1460, "Width":1180, "Height":54, "Cmt":""}, + { "Input": "z", "Type": "Analogue", "X":270, "Y":1520, "Width":1180, "Height":54, "Cmt":""}, + { "Input": "rotx", "Type": "Analogue", "X":270, "Y":700, "Width":1180, "Height":54, "Cmt":"Mini-joysticks axis"}, + { "Input": "roty", "Type": "Analogue", "X":270, "Y":760, "Width":1180, "Height":54, "Cmt":""} + ] + } + ] +} diff --git a/graphics/layouts/vpc-warbrd-delta-right.jpg b/graphics/layouts/vpc-warbrd-delta-right.jpg new file mode 100644 index 0000000..9aee23f Binary files /dev/null and b/graphics/layouts/vpc-warbrd-delta-right.jpg differ diff --git a/graphics/layouts/vpc-warbrd-delta-right.json b/graphics/layouts/vpc-warbrd-delta-right.json new file mode 100644 index 0000000..39cf6d3 --- /dev/null +++ b/graphics/layouts/vpc-warbrd-delta-right.json @@ -0,0 +1,40 @@ +{ + "MapName" : "VPC WarBRD Delta (right)", + "MapImage" : "vpc-warbrd-delta-right.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "VPC WarBRD Delta right", + "DeviceProdGuid": ["{204403EB-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":270, "Y":1100, "Width":1180, "Height":54, "Cmt":"Trigger first stage"}, + { "Input": "button2", "Type": "Digital", "X":270, "Y":1160, "Width":1180, "Height":54, "Cmt":"Trigger second stage"}, + { "Input": "button3", "Type": "Digital", "X":270, "Y":1300, "Width":1180, "Height":54, "Cmt":"Trigger button"}, + { "Input": "button4", "Type": "Digital", "X":2470, "Y":1000, "Width":1180, "Height":54, "Cmt":"Wheel up"}, + { "Input": "button5", "Type": "Digital", "X":2470, "Y":1060, "Width":1180, "Height":54, "Cmt":"Wheel down"}, + { "Input": "button6", "Type": "Digital", "X":2470, "Y":1120, "Width":1180, "Height":54, "Cmt":"Wheel push"}, + { "Input": "button7", "Type": "Digital", "X":2470, "Y":820, "Width":1180, "Height":54, "Cmt":"Mini-joystick push"}, + { "Input": "button8", "Type": "Digital", "X":2470, "Y":300, "Width":1180, "Height":54, "Cmt":"4-way hat right up"}, + { "Input": "button9", "Type": "Digital", "X":2470, "Y":360, "Width":1180, "Height":54, "Cmt":"4-way hat right righ"}, + { "Input": "button10", "Type": "Digital", "X":2470, "Y":420, "Width":1180, "Height":54, "Cmt":"4-way hat right down"}, + { "Input": "button11", "Type": "Digital", "X":2470, "Y":480, "Width":1180, "Height":54, "Cmt":"4-way hat right left"}, + { "Input": "button12", "Type": "Digital", "X":2470, "Y":540, "Width":1180, "Height":54, "Cmt":"4-way hat right push?"}, + { "Input": "button13", "Type": "Digital", "X":270, "Y":700, "Width":1180, "Height":54, "Cmt":"4-way hat left up"}, + { "Input": "button14", "Type": "Digital", "X":270, "Y":760, "Width":1180, "Height":54, "Cmt":"4-way hat left righ"}, + { "Input": "button15", "Type": "Digital", "X":270, "Y":820, "Width":1180, "Height":54, "Cmt":"4-way hat left down"}, + { "Input": "button16", "Type": "Digital", "X":270, "Y":880, "Width":1180, "Height":54, "Cmt":"4-way hat left left"}, + { "Input": "button17", "Type": "Digital", "X":270, "Y":940, "Width":1180, "Height":54, "Cmt":"4-way hat left push?"}, + { "Input": "button18", "Type": "Digital", "X":270, "Y":300, "Width":1180, "Height":54, "Cmt":"8-way hat LED up"}, + { "Input": "button19", "Type": "Digital", "X":270, "Y":360, "Width":1180, "Height":54, "Cmt":"8-way hat LED righ"}, + { "Input": "button20", "Type": "Digital", "X":270, "Y":420, "Width":1180, "Height":54, "Cmt":"8-way hat LED down"}, + { "Input": "button21", "Type": "Digital", "X":270, "Y":480, "Width":1180, "Height":54, "Cmt":"8-way hat LED left"}, + { "Input": "button22", "Type": "Digital", "X":270, "Y":540, "Width":1180, "Height":54, "Cmt":"8-way hat LED push?"}, + { "Input": "x", "Type": "Analogue", "X":2470, "Y":1400, "Width":1180, "Height":54, "Cmt":"Joystick axis"}, + { "Input": "y", "Type": "Analogue", "X":2470, "Y":1460, "Width":1180, "Height":54, "Cmt":""}, + { "Input": "z", "Type": "Analogue", "X":2470, "Y":1520, "Width":1180, "Height":54, "Cmt":""}, + { "Input": "rotx", "Type": "Analogue", "X":2470, "Y":700, "Width":1180, "Height":54, "Cmt":"Mini-joysticks axis"}, + { "Input": "roty", "Type": "Analogue", "X":2470, "Y":760, "Width":1180, "Height":54, "Cmt":""} + ] + } + ] +} diff --git a/graphics/layouts/warthog.jpg b/graphics/layouts/warthog.jpg new file mode 100644 index 0000000..a63654b Binary files /dev/null and b/graphics/layouts/warthog.jpg differ diff --git a/graphics/layouts/warthog.json b/graphics/layouts/warthog.json new file mode 100644 index 0000000..c6a2529 --- /dev/null +++ b/graphics/layouts/warthog.json @@ -0,0 +1,85 @@ +{ + "MapName" : "Warthog Throttle and Joystick", + "MapImage" : "warthog.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "ThrustMaster Warthog Joystick", + "DeviceProdGuid": ["{0402044F-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2042, "Y":548, "Width":620, "Height":54, "Cmt": "Primary trigger half press"}, + { "Input": "button2", "Type": "Digital", "X":1952, "Y":214, "Width":880, "Height":54, "Cmt": "Top trigger red button"}, + { "Input": "button3", "Type": "Digital", "X":2084, "Y":1102, "Width":580, "Height":54, "Cmt": "Pinky button"}, + { "Input": "button4", "Type": "Digital", "X":2084, "Y":1012, "Width":580, "Height":54, "Cmt": "Pinky trigger"}, + { "Input": "button5", "Type": "Digital", "X":2886, "Y":212, "Width":880, "Height":54, "Cmt": "Top side button"}, + { "Input": "button6", "Type": "Digital", "X":2042, "Y":602, "Width":620, "Height":54, "Cmt": "Primary trigger full press"}, + { "Input": "button7", "Type": "Digital", "X":1916, "Y":300, "Width":760, "Height":54, "Cmt": "Left hat up"}, + { "Input": "button8", "Type": "Digital", "X":1916, "Y":354, "Width":760, "Height":54, "Cmt": "Left hat right"}, + { "Input": "button9", "Type": "Digital", "X":1916, "Y":408, "Width":760, "Height":54, "Cmt": "Left hat down"}, + { "Input": "button10", "Type": "Digital", "X":1916, "Y":462, "Width":760, "Height":54, "Cmt": "Left hat left"}, + { "Input": "button11", "Type": "Digital", "X":3048, "Y":562, "Width":760, "Height":54, "Cmt": "Right hat up"}, + { "Input": "button12", "Type": "Digital", "X":3048, "Y":616, "Width":760, "Height":54, "Cmt": "Right hat right"}, + { "Input": "button13", "Type": "Digital", "X":3048, "Y":670, "Width":760, "Height":54, "Cmt": "Right hat down"}, + { "Input": "button14", "Type": "Digital", "X":3048, "Y":724, "Width":760, "Height":54, "Cmt": "Right hat left"}, + { "Input": "button15", "Type": "Digital", "X":2004, "Y":700, "Width":660, "Height":54, "Cmt": "Thumb hat up"}, + { "Input": "button16", "Type": "Digital", "X":2004, "Y":754, "Width":660, "Height":54, "Cmt": "Thumb hat right"}, + { "Input": "button17", "Type": "Digital", "X":2004, "Y":808, "Width":660, "Height":54, "Cmt": "Thumb hat down"}, + { "Input": "button18", "Type": "Digital", "X":2004, "Y":862, "Width":660, "Height":54, "Cmt": "Thumb hat left"}, + { "Input": "button19", "Type": "Digital", "X":2004, "Y":914, "Width":660, "Height":54, "Cmt": "Thumb hat push"}, + { "Input": "hat1_up", "Type": "Digital", "X":3048, "Y":308, "Width":760, "Height":54, "Cmt": "PoV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":3048, "Y":362, "Width":760, "Height":54, "Cmt": "PoV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":3048, "Y":416, "Width":760, "Height":54, "Cmt": "PoV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":3048, "Y":470, "Width":760, "Height":54, "Cmt": "PoV hat left"}, + { "Input": "x", "Type": "Analogue", "X":3126, "Y":872, "Width":680, "Height":54, "Cmt": "Stick left/right"}, + { "Input": "y", "Type": "Analogue", "X":3126, "Y":818, "Width":680, "Height":54, "Cmt": "Stick up/down"} + + ] + }, + { + "InputType": "J", + "DeviceName": "ThrustMaster Warthog Throttle", + "DeviceProdGuid": ["{0404044F-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2870, "Y":1422, "Width":680, "Height":54, "Cmt": "Rear analogue push"}, + { "Input": "button2", "Type": "Digital", "X":1674, "Y":1672, "Width":660, "Height":54, "Cmt": "Side hat push"}, + { "Input": "button3", "Type": "Digital", "X":1674, "Y":1456, "Width":660, "Height":54, "Cmt": "Side hat up"}, + { "Input": "button4", "Type": "Digital", "X":1674, "Y":1510, "Width":660, "Height":54, "Cmt": "Side hat right"}, + { "Input": "button5", "Type": "Digital", "X":1674, "Y":1564, "Width":660, "Height":54, "Cmt": "Side hat down"}, + { "Input": "button6", "Type": "Digital", "X":1674, "Y":1618, "Width":660, "Height":54, "Cmt": "Side hat left"}, + { "Input": "button7", "Type": "Digital", "X":1694, "Y":1810, "Width":640, "Height":54, "Cmt": "Side top switch right"}, + { "Input": "button8", "Type": "Digital", "X":1694, "Y":1756, "Width":640, "Height":54, "Cmt": "Side top switch left"}, + { "Input": "button9", "Type": "Digital", "X":1694, "Y":1950, "Width":640, "Height":54, "Cmt": "Side middle switch right"}, + { "Input": "button10", "Type": "Digital", "X":1694, "Y":1896, "Width":640, "Height":54, "Cmt": "Side middle switch left"}, + { "Input": "button11", "Type": "Digital", "X":1694, "Y":2088, "Width":640, "Height":54, "Cmt": "Side bottom switch right"}, + { "Input": "button12", "Type": "Digital", "X":1694, "Y":2034, "Width":640, "Height":54, "Cmt": "Side bottom switch left"}, + { "Input": "button13", "Type": "Digital", "X":3386, "Y":1976, "Width":420, "Height":54, "Cmt": "Side toggle up"}, + { "Input": "button14", "Type": "Digital", "X":3386, "Y":2030, "Width":420, "Height":54, "Cmt": "Side toggle down"}, + { "Input": "button15", "Type": "Digital", "X":3196, "Y":1514, "Width":620, "Height":54, "Cmt": "Rear red button"}, + { "Input": "button16", "Type": "Digital", "X":1080, "Y":566, "Width":620, "Height":54, "Cmt": "ENG left button"}, + { "Input": "button17", "Type": "Digital", "X":1200, "Y":666, "Width":620, "Height":54, "Cmt": "ENG right button"}, + { "Input": "button18", "Type": "Digital", "X":1316, "Y":1000, "Width":420, "Height":54, "Cmt": "ENG operate left down"}, + { "Input": "button19", "Type": "Digital", "X":1354, "Y":844, "Width":420, "Height":54, "Cmt": "ENG operate right down"}, + { "Input": "button20", "Type": "Digital", "X":1140, "Y":1118, "Width":620, "Height":54, "Cmt": "APU start button"}, + { "Input": "button21", "Type": "Digital", "X":960, "Y":1362, "Width":620, "Height":54, "Cmt": "LDGH silence button"}, + { "Input": "button22", "Type": "Digital", "X":88, "Y":750, "Width":320, "Height":54, "Cmt": "Flaps up"}, + { "Input": "button23", "Type": "Digital", "X":88, "Y":804, "Width":320, "Height":54, "Cmt": "Flaps down"}, + { "Input": "button24", "Type": "Digital", "X":36, "Y":1428, "Width":480, "Height":54, "Cmt": "EAC"}, + { "Input": "button25", "Type": "Digital", "X":218, "Y":1542, "Width":480, "Height":54, "Cmt": "RDR ALT"}, + { "Input": "button26", "Type": "Digital", "X":436, "Y":1646, "Width":480, "Height":54, "Cmt": "Autopilot"}, + { "Input": "button27", "Type": "Digital", "X":1020, "Y":1460, "Width":420, "Height":54, "Cmt": "Autopilot select up"}, + { "Input": "button28", "Type": "Digital", "X":1020, "Y":1514, "Width":420, "Height":54, "Cmt": "Autopilot select down"}, + { "Input": "button31", "Type": "Digital", "X":1316, "Y":946, "Width":420, "Height":54, "Cmt": "ENG operate left up"}, + { "Input": "button32", "Type": "Digital", "X":1354, "Y":790, "Width":420, "Height":54, "Cmt": "ENG operate right up"}, + { "Input": "hat1_up", "Type": "Digital", "X":1964, "Y":1214, "Width":760, "Height":54, "Cmt": "Rear PoV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":1964, "Y":1268, "Width":760, "Height":54, "Cmt": "Rear PoV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":1964, "Y":1322, "Width":760, "Height":54, "Cmt": "Rear PoV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":1964, "Y":1376, "Width":760, "Height":54, "Cmt": "Rear PoV hat left"}, + { "Input": "slider1", "Type": "Analogue", "X":1082, "Y":1252, "Width":520, "Height":54, "Cmt": "Throttle friction control"}, + { "Input": "x", "Type": "Analogue", "X":2870, "Y":1368, "Width":680, "Height":54, "Cmt": "Rear analogue left/right"}, + { "Input": "y", "Type": "Analogue", "X":2870, "Y":1314, "Width":680, "Height":54, "Cmt": "Rear analogue up/down"}, + { "Input": "z", "Type": "Analogue", "X":530, "Y":316, "Width":540, "Height":54, "Cmt": "Throttle"} + ] + } + + ] +} diff --git a/graphics/layouts/x45.jpg b/graphics/layouts/x45.jpg new file mode 100644 index 0000000..2a0a634 Binary files /dev/null and b/graphics/layouts/x45.jpg differ diff --git a/graphics/layouts/x45.json b/graphics/layouts/x45.json new file mode 100644 index 0000000..e427513 --- /dev/null +++ b/graphics/layouts/x45.json @@ -0,0 +1,49 @@ +{ + "MapName" : "x45-joystick+throttle", + "MapImage" : "x45.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek X45 Stick and Throttle", + "DeviceProdGuid": ["{053C06A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":4260, "Y":1040, "Width":600, "Height":54, "Cmt": "Stick Trigger button" }, + { "Input": "button2", "Type": "Digital", "X":2900, "Y":810, "Width":600, "Height":54, "Cmt": "Stick Fire button A" }, + { "Input": "button3", "Type": "Digital", "X":4100, "Y":640, "Width":600, "Height":54, "Cmt": "Stick Fire button B" }, + { "Input": "button4", "Type": "Digital", "X":3710, "Y":410, "Width":600, "Height":54, "Cmt": "Stick Launch button" }, + { "Input": "button5", "Type": "Digital", "X":1880, "Y":1410, "Width":600, "Height":54, "Cmt": "Throttle Fire button D" }, + { "Input": "button6", "Type": "Digital", "X":1630, "Y":2400, "Width":600, "Height":54, "Cmt": "Throttle Mouse Fire button" }, + { "Input": "button7", "Type": "Digital", "X":4200, "Y":1370, "Width":600, "Height":54, "Cmt": "Stick Pinkie button" }, + { "Input": "button8", "Type": "Digital", "X":4260, "Y":800, "Width":600, "Height":54, "Cmt": "Stick Fire button C" }, + { "Input": "button9", "Type": "Digital", "X":1630, "Y":1556, "Width":600, "Height":54, "Cmt": "Stick first switch up" }, + { "Input": "button10", "Type": "Digital", "X":1630, "Y":1608, "Width":600, "Height":54, "Cmt": "Stick first switch down" }, + { "Input": "button11", "Type": "Digital", "X":1785, "Y":1716, "Width":600, "Height":54, "Cmt": "Stick second switch up" }, + { "Input": "button12", "Type": "Digital", "X":1785, "Y":1768, "Width":600, "Height":54, "Cmt": "Stick second switch down" }, + { "Input": "button13", "Type": "Digital", "X":2110, "Y":1872, "Width":600, "Height":54, "Cmt": "Stick third switch up" }, + { "Input": "button14", "Type": "Digital", "X":2110, "Y":1924, "Width":600, "Height":54, "Cmt": "Stick third switch down" }, + { "Input": "button15", "Type": "Digital", "X":2940, "Y":370, "Width":600, "Height":54, "Cmt": "Stick PoV2 Up" }, + { "Input": "button16", "Type": "Digital", "X":2940, "Y":450, "Width":600, "Height":54, "Cmt": "Stick PoV2 Right" }, + { "Input": "button17", "Type": "Digital", "X":2940, "Y":540, "Width":600, "Height":54, "Cmt": "Stick PoV2 Down" }, + { "Input": "button18", "Type": "Digital", "X":2940, "Y":630, "Width":600, "Height":54, "Cmt": "Stick PoV2 Left" }, + { "Input": "button19", "Type": "Digital", "X":1630, "Y":530, "Width":600, "Height":54, "Cmt": "Throttle rear hat up" }, + { "Input": "button20", "Type": "Digital", "X":1630, "Y":610, "Width":600, "Height":54, "Cmt": "Throttle rear hat right" }, + { "Input": "button21", "Type": "Digital", "X":1630, "Y":700, "Width":600, "Height":54, "Cmt": "Throttle rear hat down" }, + { "Input": "button22", "Type": "Digital", "X":1630, "Y":790, "Width":600, "Height":54, "Cmt": "Throttle rear hat left" }, + { "Input": "button23", "Type": "Digital", "X":2180, "Y":1930, "Width":600, "Height":54, "Cmt": "Throttle Mouse Hat Up" }, + { "Input": "button24", "Type": "Digital", "X":2180, "Y":2010, "Width":600, "Height":54, "Cmt": "Throttle Mouse Hat Right" }, + { "Input": "button25", "Type": "Digital", "X":2180, "Y":2100, "Width":600, "Height":54, "Cmt": "Throttle Mouse Hat Down" }, + { "Input": "button26", "Type": "Digital", "X":2180, "Y":2190, "Width":600, "Height":54, "Cmt": "Throttle Mouse Hat Left" }, + { "Input": "hat1_up", "Type": "Digital", "X":2810, "Y":1050, "Width":600, "Height":54, "Cmt": "Stick PoV1 hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":2810, "Y":1130, "Width":600, "Height":54, "Cmt": "Stick PoV1 hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":2810, "Y":1220, "Width":600, "Height":54, "Cmt": "Stick PoV1 hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":2810, "Y":1315, "Width":600, "Height":54, "Cmt": "Stick PoV1 hat left" }, + { "Input": "rotx", "Type": "Analogue", "X":1890, "Y":1620, "Width":600, "Height":54, "Cmt": "Throttle bottom rotary" }, + { "Input": "roty", "Type": "Analogue", "X":1940, "Y":1120, "Width":600, "Height":54, "Cmt": "Throttle top rotary" }, + { "Input": "rotz", "Type": "Analogue", "X":730, "Y":880, "Width":600, "Height":54, "Cmt": "Throttle yaw rocker" }, + { "Input": "x", "Type": "Analogue", "X":4210, "Y":2310, "Width":600, "Height":54, "Cmt": "Stick roll" }, + { "Input": "y", "Type": "Analogue", "X":4210, "Y":2400, "Width":600, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "slider1", "Type": "Analogue", "X":140, "Y":1600, "Width":600, "Height":54, "Cmt": "Throttle main slider" } + ] + } + ] +} diff --git a/graphics/layouts/x52.jpg b/graphics/layouts/x52.jpg new file mode 100644 index 0000000..21572d5 Binary files /dev/null and b/graphics/layouts/x52.jpg differ diff --git a/graphics/layouts/x52.json b/graphics/layouts/x52.json new file mode 100644 index 0000000..96a2f44 --- /dev/null +++ b/graphics/layouts/x52.json @@ -0,0 +1,55 @@ +{ + "MapName" : "x52-joystick+throttle", + "MapImage" : "x52.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek X52 Stick and Throttle", + "DeviceProdGuid": ["{075C06A3-0000-0000-0000-504944564944}", + "{025506A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":3164, "Y":858, "Width":600, "Height":54, "Cmt": "Stick primary trigger half press" }, + { "Input": "button2", "Type": "Digital", "X":2524, "Y":210, "Width":560, "Height":54, "Cmt": "Stick Safe" }, + { "Input": "button3", "Type": "Digital", "X":3108, "Y":478, "Width":560, "Height":54, "Cmt": "Stick blue button right of Safe" }, + { "Input": "button4", "Type": "Digital", "X":3118, "Y":662, "Width":560, "Height":54, "Cmt": "Stick blue button right of hat" }, + { "Input": "button5", "Type": "Digital", "X":2071, "Y":674, "Width":570, "Height":54, "Cmt": "Stick black button left of hat" }, + { "Input": "button6", "Type": "Digital", "X":3102, "Y":1148, "Width":570, "Height":54, "Cmt": "Stick pinky trigger" }, + { "Input": "button7", "Type": "Digital", "X":1334, "Y":1038, "Width":740, "Height":54, "Cmt": "Throttle blue button" }, + { "Input": "button8", "Type": "Digital", "X":1142, "Y":656, "Width":760, "Height":54, "Cmt": "Throttle top rotary button" }, + { "Input": "button9", "Type": "Digital", "X":1630, "Y":1556, "Width":560, "Height":54, "Cmt": "Stick first switch up" }, + { "Input": "button10", "Type": "Digital", "X":1630, "Y":1608, "Width":560, "Height":54, "Cmt": "Stick first switch down" }, + { "Input": "button11", "Type": "Digital", "X":1785, "Y":1716, "Width":560, "Height":54, "Cmt": "Stick second switch up" }, + { "Input": "button12", "Type": "Digital", "X":1785, "Y":1768, "Width":560, "Height":54, "Cmt": "Stick second switch down" }, + { "Input": "button13", "Type": "Digital", "X":2110, "Y":1872, "Width":560, "Height":54, "Cmt": "Stick third switch up" }, + { "Input": "button14", "Type": "Digital", "X":2110, "Y":1924, "Width":560, "Height":54, "Cmt": "Stick third switch down" }, + { "Input": "button15", "Type": "Digital", "X":3164, "Y":910, "Width":600, "Height":54, "Cmt": "Stick primary trigger full press" }, + { "Input": "button16", "Type": "Digital", "X":2044, "Y":422, "Width":740, "Height":54, "Cmt": "Stick top hat down" }, + { "Input": "button17", "Type": "Digital", "X":2044, "Y":370, "Width":740, "Height":54, "Cmt": "Stick top hat right" }, + { "Input": "button18", "Type": "Digital", "X":2044, "Y":318, "Width":740, "Height":54, "Cmt": "Stick top hat up" }, + { "Input": "button19", "Type": "Digital", "X":2044, "Y":476, "Width":740, "Height":54, "Cmt": "Stick top hat left" }, + { "Input": "button20", "Type": "Digital", "X":254, "Y":330, "Width":750, "Height":54, "Cmt": "Throttle rear hat up" }, + { "Input": "button21", "Type": "Digital", "X":254, "Y":382, "Width":750, "Height":54, "Cmt": "Throttle rear hat right" }, + { "Input": "button22", "Type": "Digital", "X":254, "Y":434, "Width":750, "Height":54, "Cmt": "Throttle rear hat down" }, + { "Input": "button23", "Type": "Digital", "X":254, "Y":486, "Width":750, "Height":54, "Cmt": "Throttle rear hat left" }, + { "Input": "button27", "Type": "Digital", "X":26, "Y":1748, "Width":570, "Height":54, "Cmt": "Throttle bottom left button (RST)" }, + { "Input": "button28", "Type": "Digital", "X":198, "Y":1850, "Width":570, "Height":54, "Cmt": "Throttle bottom middle button" }, + { "Input": "button29", "Type": "Digital", "X":355, "Y":1954, "Width":570, "Height":54, "Cmt": "Throttle bottom right button (FUN)" }, + { "Input": "button30", "Type": "Digital", "X":1498, "Y":1316, "Width":750, "Height":54, "Cmt": "Throttle bottom rotary button" }, + { "Input": "button31", "Type": "Digital", "X":1114, "Y":2014, "Width":620, "Height":54, "Cmt": "Throttle mouse click" }, + { "Input": "button32", "Type": "Digital", "X":124, "Y":752, "Width":650, "Height":54, "Cmt": "Throttle rear wheel click" }, + { "Input": "hat1_up", "Type": "Digital", "X":1878, "Y":786, "Width":740, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":1878, "Y":838, "Width":740, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":1878, "Y":890, "Width":740, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":1878, "Y":942, "Width":740, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotx", "Type": "Analogue", "X":1498, "Y":1264, "Width":750, "Height":54, "Cmt": "Throttle bottom rotary" }, + { "Input": "roty", "Type": "Analogue", "X":1142, "Y":604, "Width":740, "Height":54, "Cmt": "Throttle top rotary" }, + { "Input": "rotz", "Type": "Analogue", "X":3074, "Y":1946, "Width":720, "Height":54, "Cmt": "Stick yaw" }, + { "Input": "slider1", "Type": "Analogue", "X":422, "Y":584, "Width":460, "Height":54, "Cmt": "Throttle volume slider" }, + { "Input": "x", "Type": "Analogue", "X":3074, "Y":1894, "Width":720, "Height":54, "Cmt": "Stick roll" }, + { "Input": "y", "Type": "Analogue", "X":3074, "Y":1842, "Width":720, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "z", "Type": "Analogue", "X":102, "Y":1224, "Width":460, "Height":54, "Cmt": "Throttle main slider" }, + { "Input": "slider2", "Type": "Analogue", "X":120, "Y":694, "Width":660, "Height":54, "Cmt": "Throttle rear wheel" } + ] + } + ] +} diff --git a/graphics/layouts/x52pro.jpg b/graphics/layouts/x52pro.jpg new file mode 100644 index 0000000..c1343c3 Binary files /dev/null and b/graphics/layouts/x52pro.jpg differ diff --git a/graphics/layouts/x52pro.json b/graphics/layouts/x52pro.json new file mode 100644 index 0000000..222f81e --- /dev/null +++ b/graphics/layouts/x52pro.json @@ -0,0 +1,53 @@ +{ + "MapName" : "x52pro-joystick+throttle", + "MapImage" : "x52pro.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek X52 Pro Stick and Throttle", + "DeviceProdGuid": ["{076206A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":3164, "Y":824, "Width":652, "Height":54, "Cmt": "Stick primary trigger half press" }, + { "Input": "button2", "Type": "Digital", "X":2404, "Y":214, "Width":792, "Height":54, "Cmt": "Stick Safe" }, + { "Input": "button3", "Type": "Digital", "X":3104, "Y":484, "Width":692, "Height":54, "Cmt": "Stick red button right of Safe" }, + { "Input": "button4", "Type": "Digital", "X":3104, "Y":674, "Width":692, "Height":54, "Cmt": "Stick red button right of hat" }, + { "Input": "button5", "Type": "Digital", "X":1964, "Y":674, "Width":692, "Height":54, "Cmt": "Stick black button left of hat" }, + { "Input": "button6", "Type": "Digital", "X":3092, "Y":1144, "Width":732, "Height":54, "Cmt": "Stick pinky trigger" }, + { "Input": "button7", "Type": "Digital", "X":1364, "Y":1054, "Width":792, "Height":54, "Cmt": "Throttle red button" }, + { "Input": "button8", "Type": "Digital", "X":1144, "Y":660, "Width":772, "Height":54, "Cmt": "Throttle top rotary button" }, + { "Input": "button9", "Type": "Digital", "X":1624, "Y":1554, "Width":572, "Height":54, "Cmt": "Stick first switch up" }, + { "Input": "button10", "Type": "Digital", "X":1624, "Y":1610, "Width":572, "Height":54, "Cmt": "Stick first switch down" }, + { "Input": "button11", "Type": "Digital", "X":1784, "Y":1724, "Width":572, "Height":54, "Cmt": "Stick second switch up" }, + { "Input": "button12", "Type": "Digital", "X":1784, "Y":1780, "Width":572, "Height":54, "Cmt": "Stick second switch down" }, + { "Input": "button13", "Type": "Digital", "X":2084, "Y":1864, "Width":572, "Height":54, "Cmt": "Stick third switch up" }, + { "Input": "button14", "Type": "Digital", "X":2084, "Y":1920, "Width":572, "Height":54, "Cmt": "Stick third switch down" }, + { "Input": "button15", "Type": "Digital", "X":3164, "Y":880, "Width":652, "Height":54, "Cmt": "Stick primary trigger full press" }, + { "Input": "button16", "Type": "Digital", "X":1004, "Y":2016, "Width":932, "Height":54, "Cmt": "Throttle mouse click" }, + { "Input": "button17", "Type": "Digital", "X":104, "Y":700, "Width":732, "Height":54, "Cmt": "Throttle rear wheel down" }, + { "Input": "button18", "Type": "Digital", "X":104, "Y":644, "Width":732, "Height":54, "Cmt": "Throttle rear wheel up" }, + { "Input": "button19", "Type": "Digital", "X":104, "Y":756, "Width":732, "Height":54, "Cmt": "Throttle rear wheel click" }, + { "Input": "button20", "Type": "Digital", "X":1814, "Y":304, "Width":932, "Height":54, "Cmt": "Stick top hat up" }, + { "Input": "button21", "Type": "Digital", "X":1814, "Y":360, "Width":932, "Height":54, "Cmt": "Stick top hat right" }, + { "Input": "button22", "Type": "Digital", "X":1814, "Y":416, "Width":932, "Height":54, "Cmt": "Stick top hat down" }, + { "Input": "button23", "Type": "Digital", "X":1814, "Y":472, "Width":932, "Height":54, "Cmt": "Stick top hat left" }, + { "Input": "button27", "Type": "Digital", "X":244, "Y":284, "Width":972, "Height":54, "Cmt": "Throttle rear hat up" }, + { "Input": "button28", "Type": "Digital", "X":244, "Y":340, "Width":972, "Height":54, "Cmt": "Throttle rear hat right" }, + { "Input": "button29", "Type": "Digital", "X":244, "Y":396, "Width":972, "Height":54, "Cmt": "Throttle rear hat down" }, + { "Input": "button30", "Type": "Digital", "X":244, "Y":452, "Width":972, "Height":54, "Cmt": "Throttle rear hat left" }, + { "Input": "button31", "Type": "Digital", "X":1494, "Y":1320, "Width":772, "Height":54, "Cmt": "Throttle bottom rotary button" }, + { "Input": "button32", "Type": "Digital", "X":44, "Y":1864, "Width":752, "Height":54, "Cmt": "Left-hand MFD button" }, + { "Input": "hat1_up", "Type": "Digital", "X":1694, "Y":774, "Width":932, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":1694, "Y":830, "Width":932, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":1694, "Y":886, "Width":932, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":1694, "Y":942, "Width":932, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotx", "Type": "Analogue", "X":1494, "Y":1264, "Width":772, "Height":54, "Cmt": "Throttle bottom rotary" }, + { "Input": "roty", "Type": "Analogue", "X":1144, "Y":604, "Width":772, "Height":54, "Cmt": "Throttle top rotary" }, + { "Input": "rotz", "Type": "Analogue", "X":3034, "Y":1956, "Width":792, "Height":54, "Cmt": "Stick yaw" }, + { "Input": "slider1", "Type": "Analogue", "X":264, "Y":554, "Width":632, "Height":54, "Cmt": "Throttle volume slider" }, + { "Input": "x", "Type": "Analogue", "X":3034, "Y":1900, "Width":792, "Height":54, "Cmt": "Stick roll" }, + { "Input": "y", "Type": "Analogue", "X":3034, "Y":1844, "Width":792, "Height":54, "Cmt": "Stick pitch" }, + { "Input": "z", "Type": "Analogue", "X":84, "Y":1054, "Width":472, "Height":108, "Cmt": "Throttle main slider" } + ] + } + ] +} diff --git a/graphics/layouts/x55-joystick.jpg b/graphics/layouts/x55-joystick.jpg new file mode 100644 index 0000000..5e2e392 Binary files /dev/null and b/graphics/layouts/x55-joystick.jpg differ diff --git a/graphics/layouts/x55-joystick.json b/graphics/layouts/x55-joystick.json new file mode 100644 index 0000000..c059a6e --- /dev/null +++ b/graphics/layouts/x55-joystick.json @@ -0,0 +1,34 @@ +{ + "MapName" : "x55-joystick", + "MapImage" : "x55-joystick.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-55 Rhino Stick", + "DeviceProdGuid": ["{22150738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X": 397, "Y": 604, "Width": 642, "Height": 108, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X": 498, "Y": 224, "Width": 792, "Height": 54, "Cmt": "Top trigger" }, + { "Input": "button3", "Type": "Digital", "X": 1417, "Y": 555, "Width": 692, "Height": 54, "Cmt": "Side trigger" }, + { "Input": "button4", "Type": "Digital", "X": 397, "Y": 744, "Width": 642, "Height": 108, "Cmt": "Secondary trigger" }, + { "Input": "button5", "Type": "Digital", "X": 1377, "Y": 974, "Width": 792, "Height": 54, "Cmt": "Pinky button" }, + { "Input": "button6", "Type": "Digital", "X": 397, "Y": 884, "Width": 642, "Height": 108, "Cmt": "Pinky trigger" }, + { "Input": "button7", "Type": "Digital", "X": 1408, "Y": 224, "Width": 772, "Height": 54, "Cmt": "Witch hat up" }, + { "Input": "button8", "Type": "Digital", "X": 1408, "Y": 280, "Width": 772, "Height": 54, "Cmt": "Witch hat right" }, + { "Input": "button9", "Type": "Digital", "X": 1408, "Y": 336, "Width": 772, "Height": 54, "Cmt": "Witch hat down" }, + { "Input": "button10", "Type": "Digital", "X": 1408, "Y": 393, "Width": 772, "Height": 54, "Cmt": "Witch hat left" }, + { "Input": "button11", "Type": "Digital", "X": 1428, "Y": 724, "Width": 742, "Height": 54, "Cmt": "Castle hat up" }, + { "Input": "button12", "Type": "Digital", "X": 1428, "Y": 781, "Width": 742, "Height": 54, "Cmt": "Castle hat right" }, + { "Input": "button13", "Type": "Digital", "X": 1428, "Y": 837, "Width": 742, "Height": 54, "Cmt": "Castle hat down" }, + { "Input": "button14", "Type": "Digital", "X": 1428, "Y": 893, "Width": 742, "Height": 54, "Cmt": "Castle hat left" }, + { "Input": "hat1_up", "Type": "Digital", "X": 97, "Y": 304, "Width": 1072, "Height": 54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X": 97, "Y": 360, "Width": 1072, "Height": 54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X": 97, "Y": 415, "Width": 1072, "Height": 54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X": 97, "Y": 472, "Width": 1072, "Height": 54, "Cmt": "PoV hat left" }, + { "Input": "y", "Type": "Analogue", "X": 1547, "Y": 1055, "Width": 632, "Height": 54, "Cmt": "Stick Y" }, + { "Input": "x", "Type": "Analogue", "X": 1547, "Y": 1112, "Width": 632, "Height": 54, "Cmt": "Stick X" }, + { "Input": "rotz", "Type": "Analogue", "X": 1547, "Y": 1167, "Width": 632, "Height": 54, "Cmt": "Stick RotZ" } + ] + } + ] +} diff --git a/graphics/layouts/x55-joystick.psd b/graphics/layouts/x55-joystick.psd new file mode 100644 index 0000000..1420e27 Binary files /dev/null and b/graphics/layouts/x55-joystick.psd differ diff --git a/graphics/layouts/x55-throttle+stick.jpg b/graphics/layouts/x55-throttle+stick.jpg new file mode 100644 index 0000000..243f0db Binary files /dev/null and b/graphics/layouts/x55-throttle+stick.jpg differ diff --git a/graphics/layouts/x55-throttle+stick.json b/graphics/layouts/x55-throttle+stick.json new file mode 100644 index 0000000..fa96107 --- /dev/null +++ b/graphics/layouts/x55-throttle+stick.json @@ -0,0 +1,81 @@ +{ + "MapName" : "x55 Throttle and Joystick", + "MapImage" : "x55-throttle+stick.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-55 Rhino Stick", + "DeviceProdGuid": ["{22150738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2044, "Y":604, "Width":642, "Height":108, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":2144, "Y":224, "Width":792, "Height":54, "Cmt": "Top trigger" }, + { "Input": "button3", "Type": "Digital", "X":3064, "Y":554, "Width":692, "Height":54, "Cmt": "Side trigger" }, + { "Input": "button4", "Type": "Digital", "X":2044, "Y":744, "Width":642, "Height":108, "Cmt": "Secondary trigger" }, + { "Input": "button5", "Type": "Digital", "X":3024, "Y":974, "Width":792, "Height":54, "Cmt": "Pinky button" }, + { "Input": "button6", "Type": "Digital", "X":2044, "Y":884, "Width":642, "Height":108, "Cmt": "Pinky trigger" }, + { "Input": "button7", "Type": "Digital", "X":3054, "Y":224, "Width":772, "Height":54, "Cmt": "Witch hat up" }, + { "Input": "button8", "Type": "Digital", "X":3054, "Y":280, "Width":772, "Height":54, "Cmt": "Witch hat right" }, + { "Input": "button9", "Type": "Digital", "X":3054, "Y":336, "Width":772, "Height":54, "Cmt": "Witch hat down" }, + { "Input": "button10", "Type": "Digital", "X":3054, "Y":392, "Width":772, "Height":54, "Cmt": "Witch hat left" }, + { "Input": "button11", "Type": "Digital", "X":3074, "Y":724, "Width":742, "Height":54, "Cmt": "Castle hat up" }, + { "Input": "button12", "Type": "Digital", "X":3074, "Y":780, "Width":742, "Height":54, "Cmt": "Castle hat right" }, + { "Input": "button13", "Type": "Digital", "X":3074, "Y":836, "Width":742, "Height":54, "Cmt": "Castle hat down" }, + { "Input": "button14", "Type": "Digital", "X":3074, "Y":892, "Width":742, "Height":54, "Cmt": "Castle hat left" }, + { "Input": "hat1_up", "Type": "Digital", "X":1744, "Y":304, "Width":1072, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":1744, "Y":360, "Width":1072, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":1744, "Y":416, "Width":1072, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":1744, "Y":472, "Width":1072, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "y", "Type": "Analogue", "X":3194, "Y":1166, "Width":632, "Height":54, "Cmt": "Y-Axis" }, + { "Input": "x", "Type": "Analogue", "X":3194, "Y":1110, "Width":632, "Height":54, "Cmt": "X-Axis" }, + { "Input": "rotz", "Type": "Analogue", "X":3194, "Y":1054, "Width":632, "Height":54, "Cmt": "RotZ-Axis" } + + ] + }, + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-55 Rhino Throttle", + "DeviceProdGuid": ["{A2150738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":44, "Y":604, "Width":852, "Height":54, "Cmt": "E button" }, + { "Input": "button2", "Type": "Digital", "X":1874, "Y":1660, "Width":672, "Height":54, "Cmt": "F push" }, + { "Input": "button3", "Type": "Digital", "X":1534, "Y":1810, "Width":672, "Height":54, "Cmt": "G push" }, + { "Input": "button4", "Type": "Digital", "X":2574, "Y":1694, "Width":892, "Height":54, "Cmt": "H button" }, + { "Input": "button5", "Type": "Digital", "X":2744, "Y":1784, "Width":892, "Height":54, "Cmt": "I button" }, + { "Input": "button6", "Type": "Digital", "X":74, "Y":1604, "Width":572, "Height":54, "Cmt": "Switch 1" }, + { "Input": "button7", "Type": "Digital", "X":74, "Y":1660, "Width":572, "Height":54, "Cmt": "Switch 2" }, + { "Input": "button8", "Type": "Digital", "X":94, "Y":1754, "Width":572, "Height":54, "Cmt": "Switch 3" }, + { "Input": "button9", "Type": "Digital", "X":94, "Y":1810, "Width":572, "Height":54, "Cmt": "Switch 4" }, + { "Input": "button10", "Type": "Digital", "X":764, "Y":1754, "Width":572, "Height":54, "Cmt": "Switch 5" }, + { "Input": "button11", "Type": "Digital", "X":764, "Y":1810, "Width":572, "Height":54, "Cmt": "Switch 6" }, + { "Input": "button12", "Type": "Digital", "X":1104, "Y":1424, "Width":572, "Height":54, "Cmt": "TGL 1 up" }, + { "Input": "button13", "Type": "Digital", "X":1104, "Y":1480, "Width":572, "Height":54, "Cmt": "TGL 1 down" }, + { "Input": "button14", "Type": "Digital", "X":1164, "Y":1284, "Width":572, "Height":54, "Cmt": "TGL 2 up" }, + { "Input": "button15", "Type": "Digital", "X":1164, "Y":1340, "Width":572, "Height":54, "Cmt": "TGL 2 down" }, + { "Input": "button16", "Type": "Digital", "X":1224, "Y":1154, "Width":572, "Height":54, "Cmt": "TGL 3 up" }, + { "Input": "button17", "Type": "Digital", "X":1224, "Y":1210, "Width":572, "Height":54, "Cmt": "TGL 3 down" }, + { "Input": "button18", "Type": "Digital", "X":1244, "Y":1014, "Width":572, "Height":54, "Cmt": "TGL 4 up" }, + { "Input": "button19", "Type": "Digital", "X":1244, "Y":1070, "Width":572, "Height":54, "Cmt": "TGL 4 down" }, + { "Input": "button20", "Type": "Digital", "X":1154, "Y":564, "Width":772, "Height":54, "Cmt": "H3 up" }, + { "Input": "button21", "Type": "Digital", "X":1154, "Y":620, "Width":772, "Height":54, "Cmt": "H3 right" }, + { "Input": "button22", "Type": "Digital", "X":1154, "Y":676, "Width":772, "Height":54, "Cmt": "H3 down" }, + { "Input": "button23", "Type": "Digital", "X":1154, "Y":732, "Width":772, "Height":54, "Cmt": "H3 left" }, + { "Input": "button24", "Type": "Digital", "X":1364, "Y":1924, "Width":772, "Height":54, "Cmt": "H4 up" }, + { "Input": "button25", "Type": "Digital", "X":1364, "Y":1980, "Width":772, "Height":54, "Cmt": "H4 right" }, + { "Input": "button26", "Type": "Digital", "X":1364, "Y":2036, "Width":772, "Height":54, "Cmt": "H4 down" }, + { "Input": "button27", "Type": "Digital", "X":1364, "Y":2092, "Width":772, "Height":54, "Cmt": "H4 left" }, + { "Input": "button28", "Type": "Digital", "X":3124, "Y":2034, "Width":692, "Height":54, "Cmt": "Pinky rocker up" }, + { "Input": "button29", "Type": "Digital", "X":3124, "Y":2090, "Width":692, "Height":54, "Cmt": "Pinky rocker down" }, + { "Input": "button30", "Type": "Digital", "X":3134, "Y":1884, "Width":692, "Height":54, "Cmt": "Pinky spin up" }, + { "Input": "button31", "Type": "Digital", "X":3134, "Y":1940, "Width":692, "Height":54, "Cmt": "Pinky spin down" }, + { "Input": "x", "Type": "Analogue", "X":164, "Y":680, "Width":572, "Height":54, "Cmt": "Throttle" }, + { "Input": "z", "Type": "Analogue", "X":1874, "Y":1604, "Width":672, "Height":54, "Cmt": "F spin" }, + { "Input": "rotx", "Type": "Analogue", "X":1534, "Y":1754, "Width":672, "Height":54, "Cmt": "G spin" }, + { "Input": "roty", "Type": "Analogue", "X":1014, "Y":1574, "Width":692, "Height":54, "Cmt": "RTY2 axis" }, + { "Input": "rotz", "Type": "Analogue", "X":854, "Y":1654, "Width":692, "Height":54, "Cmt": "RTY1 axis" }, + { "Input": "slider2", "Type": "Analogue", "X":1194, "Y":870, "Width":732, "Height":54, "Cmt": "Mouse left/right" }, + { "Input": "slider1", "Type": "Analogue", "X":1194, "Y":814, "Width":732, "Height":54, "Cmt": "Mouse up/down" } + ] + } + + ] +} diff --git a/graphics/layouts/x55-throttle.jpg b/graphics/layouts/x55-throttle.jpg new file mode 100644 index 0000000..2a6f34c Binary files /dev/null and b/graphics/layouts/x55-throttle.jpg differ diff --git a/graphics/layouts/x55-throttle.json b/graphics/layouts/x55-throttle.json new file mode 100644 index 0000000..e579e68 --- /dev/null +++ b/graphics/layouts/x55-throttle.json @@ -0,0 +1,51 @@ +{ + "MapName" : "x55-throttle", + "MapImage" : "x55-throttle.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-55 Rhino Throttle", + "DeviceProdGuid": ["{A2150738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":422, "Y":300, "Width":852, "Height":54, "Cmt": "E button" }, + { "Input": "button2", "Type": "Digital", "X":585, "Y":1659, "Width":672, "Height":54, "Cmt": "F push" }, + { "Input": "button3", "Type": "Digital", "X":244, "Y":1810, "Width":672, "Height":54, "Cmt": "G push" }, + { "Input": "button4", "Type": "Digital", "X":1284, "Y":1694, "Width":892, "Height":54, "Cmt": "H button" }, + { "Input": "button5", "Type": "Digital", "X":1453, "Y":1784, "Width":892, "Height":54, "Cmt": "I button" }, + { "Input": "button6", "Type": "Digital", "X":453, "Y":1299, "Width":572, "Height":54, "Cmt": "Switch 1" }, + { "Input": "button7", "Type": "Digital", "X":453, "Y":1355, "Width":572, "Height":54, "Cmt": "Switch 2" }, + { "Input": "button8", "Type": "Digital", "X":472, "Y":1450, "Width":572, "Height":54, "Cmt": "Switch 3" }, + { "Input": "button9", "Type": "Digital", "X":472, "Y":1506, "Width":572, "Height":54, "Cmt": "Switch 4" }, + { "Input": "button10", "Type": "Digital", "X":1143, "Y":1450, "Width":572, "Height":54, "Cmt": "Switch 5" }, + { "Input": "button11", "Type": "Digital", "X":1143, "Y":1506, "Width":572, "Height":54, "Cmt": "Switch 6" }, + { "Input": "button12", "Type": "Digital", "X":1483, "Y":1120, "Width":572, "Height":54, "Cmt": "TGL 1 up" }, + { "Input": "button13", "Type": "Digital", "X":1483, "Y":1176, "Width":572, "Height":54, "Cmt": "TGL 1 down" }, + { "Input": "button14", "Type": "Digital", "X":1542, "Y":979, "Width":572, "Height":54, "Cmt": "TGL 2 up" }, + { "Input": "button15", "Type": "Digital", "X":1542, "Y":1035, "Width":572, "Height":54, "Cmt": "TGL 2 down" }, + { "Input": "button16", "Type": "Digital", "X":1602, "Y":849, "Width":572, "Height":54, "Cmt": "TGL 3 up" }, + { "Input": "button17", "Type": "Digital", "X":1602, "Y":905, "Width":572, "Height":54, "Cmt": "TGL 3 down" }, + { "Input": "button18", "Type": "Digital", "X":1623, "Y":710, "Width":572, "Height":54, "Cmt": "TGL 4 up" }, + { "Input": "button19", "Type": "Digital", "X":1623, "Y":765, "Width":572, "Height":54, "Cmt": "TGL 4 down" }, + { "Input": "button20", "Type": "Digital", "X":1532, "Y":260, "Width":772, "Height":54, "Cmt": "H3 up" }, + { "Input": "button21", "Type": "Digital", "X":1532, "Y":315, "Width":772, "Height":54, "Cmt": "H3 right" }, + { "Input": "button22", "Type": "Digital", "X":1532, "Y":371, "Width":772, "Height":54, "Cmt": "H3 down" }, + { "Input": "button23", "Type": "Digital", "X":1532, "Y":428, "Width":772, "Height":54, "Cmt": "H3 left" }, + { "Input": "button24", "Type": "Digital", "X":74, "Y":1924, "Width":772, "Height":54, "Cmt": "H4 up" }, + { "Input": "button25", "Type": "Digital", "X":73, "Y":1979, "Width":772, "Height":54, "Cmt": "H4 right" }, + { "Input": "button26", "Type": "Digital", "X":73, "Y":2035, "Width":772, "Height":54, "Cmt": "H4 down" }, + { "Input": "button27", "Type": "Digital", "X":73, "Y":2092, "Width":772, "Height":54, "Cmt": "H4 left" }, + { "Input": "button28", "Type": "Digital", "X":1834, "Y":2033, "Width":692, "Height":54, "Cmt": "Pinky rocker up" }, + { "Input": "button29", "Type": "Digital", "X":1834, "Y":2089, "Width":692, "Height":54, "Cmt": "Pinky rocker down" }, + { "Input": "button30", "Type": "Digital", "X":1843, "Y":1884, "Width":692, "Height":54, "Cmt": "Pinky spin up" }, + { "Input": "button31", "Type": "Digital", "X":1843, "Y":1940, "Width":692, "Height":54, "Cmt": "Pinky spin down" }, + { "Input": "x", "Type": "Analogue", "X":542, "Y":376, "Width":572, "Height":54, "Cmt": "Throttle" }, + { "Input": "y", "Type": "Analogue", "X":583, "Y":1604, "Width":672, "Height":54, "Cmt": "F spin" }, + { "Input": "rotx", "Type": "Analogue", "X":244, "Y":1753, "Width":672, "Height":54, "Cmt": "G spin" }, + { "Input": "roty", "Type": "Analogue", "X":1233, "Y":1350, "Width":692, "Height":54, "Cmt": "RTY2 axis" }, + { "Input": "rotz", "Type": "Analogue", "X":1393, "Y":1269, "Width":692, "Height":54, "Cmt": "RTY1 axis" }, + { "Input": "slider2", "Type": "Analogue", "X":1572, "Y":566, "Width":732, "Height":54, "Cmt": "Mouse left/right" }, + { "Input": "slider1", "Type": "Analogue", "X":1572, "Y":510, "Width":732, "Height":54, "Cmt": "Mouse up/down" } + ] + } + ] +} \ No newline at end of file diff --git a/graphics/layouts/x55-throttle.psd b/graphics/layouts/x55-throttle.psd new file mode 100644 index 0000000..a8b7b4c Binary files /dev/null and b/graphics/layouts/x55-throttle.psd differ diff --git a/graphics/layouts/x56-joystick.jpg b/graphics/layouts/x56-joystick.jpg new file mode 100644 index 0000000..546cbd5 Binary files /dev/null and b/graphics/layouts/x56-joystick.jpg differ diff --git a/graphics/layouts/x56-joystick.json b/graphics/layouts/x56-joystick.json new file mode 100644 index 0000000..28c3c54 --- /dev/null +++ b/graphics/layouts/x56-joystick.json @@ -0,0 +1,36 @@ +{ + "MapName" : "x56-joystick", + "MapImage" : "x56-joystick.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-56 Rhino Stick", + "DeviceProdGuid": ["{22210738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":356, "Y":617, "Width":642, "Height":108, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":476, "Y":208, "Width":792, "Height":54, "Cmt": "R button" }, + { "Input": "button3", "Type": "Digital", "X":1406, "Y":604, "Width":792, "Height":54, "Cmt": "Side button" }, + { "Input": "button4", "Type": "Digital", "X":415, "Y":904, "Width":642, "Height":54, "Cmt": "Stick press" }, + { "Input": "button5", "Type": "Digital", "X":1416, "Y":973, "Width":792, "Height":54, "Cmt": "Pinky button" }, + { "Input": "button6", "Type": "Digital", "X":356, "Y":1038, "Width":642, "Height":108, "Cmt": "Pinky trigger" }, + { "Input": "button7", "Type": "Digital", "X":1446, "Y":223, "Width":772, "Height":54, "Cmt": "Witch hat up" }, + { "Input": "button8", "Type": "Digital", "X":1445, "Y":280, "Width":772, "Height":54, "Cmt": "Witch hat right" }, + { "Input": "button9", "Type": "Digital", "X":1446, "Y":335, "Width":772, "Height":54, "Cmt": "Witch hat down" }, + { "Input": "button10", "Type": "Digital", "X":1446, "Y":391, "Width":772, "Height":54, "Cmt": "Witch hat left" }, + { "Input": "button11", "Type": "Digital", "X":1467, "Y":724, "Width":742, "Height":54, "Cmt": "Castle hat up" }, + { "Input": "button12", "Type": "Digital", "X":1466, "Y":780, "Width":742, "Height":54, "Cmt": "Castle hat right" }, + { "Input": "button13", "Type": "Digital", "X":1466, "Y":836, "Width":742, "Height":54, "Cmt": "Castle hat down" }, + { "Input": "button14", "Type": "Digital", "X":1466, "Y":892, "Width":742, "Height":54, "Cmt": "Castle hat left" }, + { "Input": "hat1_up", "Type": "Digital", "X":76, "Y":288, "Width":1072, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":76, "Y":344, "Width":1072, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":76, "Y":399, "Width":1072, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":76, "Y":456, "Width":1072, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "rotx", "Type": "Analogue", "X":416, "Y":847, "Width":642, "Height":54, "Cmt": "Stick x" }, + { "Input": "roty", "Type": "Analogue", "X":416, "Y":792, "Width":642, "Height":54, "Cmt": "Stick y" }, + { "Input": "rotz", "Type": "Analogue", "X":1586, "Y":1167, "Width":632, "Height":54, "Cmt": "z" }, + { "Input": "x", "Type": "Analogue", "X":1586, "Y":1111, "Width":632, "Height":54, "Cmt": "x" }, + { "Input": "y", "Type": "Analogue", "X":1586, "Y":1054, "Width":632, "Height":54, "Cmt": "y" } + ] + } + ] +} diff --git a/graphics/layouts/x56-joystick.psd b/graphics/layouts/x56-joystick.psd new file mode 100644 index 0000000..c251265 Binary files /dev/null and b/graphics/layouts/x56-joystick.psd differ diff --git a/graphics/layouts/x56-throttle+stick.jpg b/graphics/layouts/x56-throttle+stick.jpg new file mode 100644 index 0000000..d67ce9e Binary files /dev/null and b/graphics/layouts/x56-throttle+stick.jpg differ diff --git a/graphics/layouts/x56-throttle+stick.json b/graphics/layouts/x56-throttle+stick.json new file mode 100644 index 0000000..32d405c --- /dev/null +++ b/graphics/layouts/x56-throttle+stick.json @@ -0,0 +1,83 @@ +{ + "MapName" : "x56 Throttle and Joystick", + "MapImage" : "x56-throttle+stick.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-56 Rhino Stick", + "DeviceProdGuid": ["{22210738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":1964, "Y":618, "Width":642, "Height":108, "Cmt": "Primary trigger"}, + { "Input": "button2", "Type": "Digital", "X":2084, "Y":208, "Width":792, "Height":54, "Cmt": "R button"}, + { "Input": "button3", "Type": "Digital", "X":3014, "Y":604, "Width":792, "Height":54, "Cmt": "Side button"}, + { "Input": "button4", "Type": "Digital", "X":2024, "Y":904, "Width":642, "Height":54, "Cmt": "Stick press"}, + { "Input": "button5", "Type": "Digital", "X":3024, "Y":974, "Width":792, "Height":54, "Cmt": "Pinky button"}, + { "Input": "button6", "Type": "Digital", "X":1964, "Y":1038, "Width":642, "Height":108, "Cmt": "Pinky trigger"}, + { "Input": "button7", "Type": "Digital", "X":3054, "Y":224, "Width":772, "Height":54, "Cmt": "Witch hat up"}, + { "Input": "button8", "Type": "Digital", "X":3054, "Y":280, "Width":772, "Height":54, "Cmt": "Witch hat right"}, + { "Input": "button9", "Type": "Digital", "X":3054, "Y":336, "Width":772, "Height":54, "Cmt": "Witch hat down"}, + { "Input": "button10", "Type": "Digital", "X":3054, "Y":392, "Width":772, "Height":54, "Cmt": "Witch hat left"}, + { "Input": "button11", "Type": "Digital", "X":3074, "Y":724, "Width":742, "Height":54, "Cmt": "Castle hat up"}, + { "Input": "button12", "Type": "Digital", "X":3074, "Y":780, "Width":742, "Height":54, "Cmt": "Castle hat right"}, + { "Input": "button13", "Type": "Digital", "X":3074, "Y":836, "Width":742, "Height":54, "Cmt": "Castle hat down"}, + { "Input": "button14", "Type": "Digital", "X":3074, "Y":892, "Width":742, "Height":54, "Cmt": "Castle hat left"}, + { "Input": "hat1_up", "Type": "Digital", "X":1684, "Y":288, "Width":1072, "Height":54, "Cmt": "PoV hat up"}, + { "Input": "hat1_right", "Type": "Digital", "X":1684, "Y":344, "Width":1072, "Height":54, "Cmt": "PoV hat right"}, + { "Input": "hat1_down", "Type": "Digital", "X":1684, "Y":400, "Width":1072, "Height":54, "Cmt": "PoV hat down"}, + { "Input": "hat1_left", "Type": "Digital", "X":1684, "Y":456, "Width":1072, "Height":54, "Cmt": "PoV hat left"}, + { "Input": "x", "Type": "Analogue", "X":3194, "Y":1110, "Width":632, "Height":54, "Cmt": "X"}, + { "Input": "y", "Type": "Analogue", "X":3194, "Y":1054, "Width":632, "Height":54, "Cmt": "Y"}, + { "Input": "rotx", "Type": "Analogue", "X":2024, "Y":848, "Width":642, "Height":54, "Cmt": "Stick x"}, + { "Input": "roty", "Type": "Analogue", "X":2024, "Y":792, "Width":642, "Height":54, "Cmt": "Stick y"}, + { "Input": "rotz", "Type": "Analogue", "X":3194, "Y":1166, "Width":632, "Height":54, "Cmt": "z"} + + ] + }, + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-56 Rhino Throttle", + "DeviceProdGuid": ["{A2210738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":44, "Y":604, "Width":852, "Height":54, "Cmt": "E button" }, + { "Input": "button2", "Type": "Digital", "X":1874, "Y":1660, "Width":672, "Height":54, "Cmt": "F push" }, + { "Input": "button3", "Type": "Digital", "X":1534, "Y":1810, "Width":672, "Height":54, "Cmt": "G push" }, + { "Input": "button4", "Type": "Digital", "X":2574, "Y":1694, "Width":892, "Height":54, "Cmt": "H button" }, + { "Input": "button5", "Type": "Digital", "X":2744, "Y":1784, "Width":892, "Height":54, "Cmt": "I button" }, + { "Input": "button6", "Type": "Digital", "X":74, "Y":1604, "Width":572, "Height":54, "Cmt": "Switch 1" }, + { "Input": "button7", "Type": "Digital", "X":74, "Y":1660, "Width":572, "Height":54, "Cmt": "Switch 2" }, + { "Input": "button8", "Type": "Digital", "X":94, "Y":1754, "Width":572, "Height":54, "Cmt": "Switch 3" }, + { "Input": "button9", "Type": "Digital", "X":94, "Y":1810, "Width":572, "Height":54, "Cmt": "Switch 4" }, + { "Input": "button10", "Type": "Digital", "X":764, "Y":1754, "Width":572, "Height":54, "Cmt": "Switch 5" }, + { "Input": "button11", "Type": "Digital", "X":764, "Y":1810, "Width":572, "Height":54, "Cmt": "Switch 6" }, + { "Input": "button12", "Type": "Digital", "X":1104, "Y":1424, "Width":572, "Height":54, "Cmt": "TGL 1 up" }, + { "Input": "button13", "Type": "Digital", "X":1104, "Y":1480, "Width":572, "Height":54, "Cmt": "TGL 1 down" }, + { "Input": "button14", "Type": "Digital", "X":1164, "Y":1284, "Width":572, "Height":54, "Cmt": "TGL 2 up" }, + { "Input": "button15", "Type": "Digital", "X":1164, "Y":1340, "Width":572, "Height":54, "Cmt": "TGL 2 down" }, + { "Input": "button16", "Type": "Digital", "X":1224, "Y":1154, "Width":572, "Height":54, "Cmt": "TGL 3 up" }, + { "Input": "button17", "Type": "Digital", "X":1224, "Y":1210, "Width":572, "Height":54, "Cmt": "TGL 3 down" }, + { "Input": "button18", "Type": "Digital", "X":1244, "Y":1014, "Width":572, "Height":54, "Cmt": "TGL 4 up" }, + { "Input": "button19", "Type": "Digital", "X":1244, "Y":1070, "Width":572, "Height":54, "Cmt": "TGL 4 down" }, + { "Input": "button20", "Type": "Digital", "X":1154, "Y":564, "Width":772, "Height":54, "Cmt": "H3 up" }, + { "Input": "button21", "Type": "Digital", "X":1154, "Y":620, "Width":772, "Height":54, "Cmt": "H3 right" }, + { "Input": "button22", "Type": "Digital", "X":1154, "Y":676, "Width":772, "Height":54, "Cmt": "H3 down" }, + { "Input": "button23", "Type": "Digital", "X":1154, "Y":732, "Width":772, "Height":54, "Cmt": "H3 left" }, + { "Input": "button24", "Type": "Digital", "X":1364, "Y":1924, "Width":772, "Height":54, "Cmt": "H4 up" }, + { "Input": "button25", "Type": "Digital", "X":1364, "Y":1980, "Width":772, "Height":54, "Cmt": "H4 right" }, + { "Input": "button26", "Type": "Digital", "X":1364, "Y":2036, "Width":772, "Height":54, "Cmt": "H4 down" }, + { "Input": "button27", "Type": "Digital", "X":1364, "Y":2092, "Width":772, "Height":54, "Cmt": "H4 left" }, + { "Input": "button28", "Type": "Digital", "X":3124, "Y":2034, "Width":692, "Height":54, "Cmt": "Pinky rocker up" }, + { "Input": "button29", "Type": "Digital", "X":3124, "Y":2090, "Width":692, "Height":54, "Cmt": "Pinky rocker down" }, + { "Input": "button30", "Type": "Digital", "X":3134, "Y":1884, "Width":692, "Height":54, "Cmt": "Pinky spin up" }, + { "Input": "button31", "Type": "Digital", "X":3134, "Y":1940, "Width":692, "Height":54, "Cmt": "Pinky spin down" }, + { "Input": "x", "Type": "Analogue", "X":164, "Y":680, "Width":572, "Height":54, "Cmt": "Throttle" }, + { "Input": "z", "Type": "Analogue", "X":1874, "Y":1604, "Width":672, "Height":54, "Cmt": "F spin" }, + { "Input": "rotx", "Type": "Analogue", "X":1534, "Y":1754, "Width":672, "Height":54, "Cmt": "G spin" }, + { "Input": "roty", "Type": "Analogue", "X":1014, "Y":1574, "Width":692, "Height":54, "Cmt": "RTY2 axis" }, + { "Input": "rotz", "Type": "Analogue", "X":854, "Y":1654, "Width":692, "Height":54, "Cmt": "RTY1 axis" }, + { "Input": "slider2", "Type": "Analogue", "X":1194, "Y":870, "Width":732, "Height":54, "Cmt": "Mouse left/right" }, + { "Input": "slider1", "Type": "Analogue", "X":1194, "Y":814, "Width":732, "Height":54, "Cmt": "Mouse up/down" } + ] + } + + ] +} diff --git a/graphics/layouts/x56-throttle.jpg b/graphics/layouts/x56-throttle.jpg new file mode 100644 index 0000000..757a134 Binary files /dev/null and b/graphics/layouts/x56-throttle.jpg differ diff --git a/graphics/layouts/x56-throttle.json b/graphics/layouts/x56-throttle.json new file mode 100644 index 0000000..93a6775 --- /dev/null +++ b/graphics/layouts/x56-throttle.json @@ -0,0 +1,45 @@ +{ + "SaitekX56Throttle": + { + "Joy_1": {"Type": "Digital", "x": 24, "y": 604, "width": 752, "cmt": "E button" }, + "Joy_2": {"Type": "Digital", "x": 1874, "y": 1660, "width": 672, "cmt": "F push" }, + "Joy_3": {"Type": "Digital", "x": 1534, "y": 1810, "width": 672, "cmt": "G push" }, + "Joy_4": {"Type": "Digital", "x": 2744, "y": 1784, "width": 892, "cmt": "I button" }, + "Joy_5": {"Type": "Digital", "x": 2574, "y": 1694, "width": 892, "cmt": "H button" }, + "Joy_6": {"Type": "Digital", "x": 74, "y": 1604, "width": 532, "cmt": "Switch 1" }, + "Joy_7": {"Type": "Digital", "x": 74, "y": 1660, "width": 532, "cmt": "Switch 2" }, + "Joy_8": {"Type": "Digital", "x": 94, "y": 1754, "width": 572, "cmt": "Switch 3" }, + "Joy_9": {"Type": "Digital", "x": 94, "y": 1810, "width": 572, "cmt": "Switch 4" }, + "Joy_10": {"Type": "Digital", "x": 764, "y": 1754, "width": 572, "cmt": "Switch 5" }, + "Joy_11": {"Type": "Digital", "x": 764, "y": 1810, "width": 572, "cmt": "Switch 6" }, + "Joy_12": {"Type": "Digital", "x": 1104, "y": 1444, "width": 572, "cmt": "TGL 1 up" }, + "Joy_13": {"Type": "Digital", "x": 1104, "y": 1500, "width": 572, "cmt": "TGL 1 down" }, + "Joy_14": {"Type": "Digital", "x": 1164, "y": 1304, "width": 572, "cmt": "TGL 2 up" }, + "Joy_15": {"Type": "Digital", "x": 1164, "y": 1360, "width": 572, "cmt": "TGL 2 down" }, + "Joy_16": {"Type": "Digital", "x": 1224, "y": 1168, "width": 572, "cmt": "TGL 3 up" }, + "Joy_17": {"Type": "Digital", "x": 1224, "y": 1224, "width": 572, "cmt": "TGL 3 down" }, + "Joy_18": {"Type": "Digital", "x": 1224, "y": 1026, "width": 572, "cmt": "TGL 4 up" }, + "Joy_19": {"Type": "Digital", "x": 1224, "y": 1082, "width": 572, "cmt": "TGL 4 down" }, + "Joy_20": {"Type": "Digital", "x": 1154, "y": 534, "width": 772, "cmt": "H3 up" }, + "Joy_21": {"Type": "Digital", "x": 1154, "y": 590, "width": 772, "cmt": "H3 right" }, + "Joy_22": {"Type": "Digital", "x": 1154, "y": 646, "width": 772, "cmt": "H3 down" }, + "Joy_23": {"Type": "Digital", "x": 1154, "y": 702, "width": 772, "cmt": "H3 left" }, + "Joy_24": {"Type": "Digital", "x": 1364, "y": 1924, "width": 772, "cmt": "H4 up" }, + "Joy_25": {"Type": "Digital", "x": 1364, "y": 1980, "width": 772, "cmt": "H4 right" }, + "Joy_26": {"Type": "Digital", "x": 1364, "y": 2036, "width": 772, "cmt": "H4 down" }, + "Joy_27": {"Type": "Digital", "x": 1364, "y": 2092, "width": 772, "cmt": "H4 left" }, + "Joy_28": {"Type": "Digital", "x": 3124, "y": 2034, "width": 692, "cmt": "Pinky rocker up" }, + "Joy_29": {"Type": "Digital", "x": 3124, "y": 2090, "width": 692, "cmt": "Pinky rocker down" }, + "Joy_30": {"Type": "Digital", "x": 3134, "y": 1884, "width": 692, "cmt": "Pinky spin up" }, + "Joy_31": {"Type": "Digital", "x": 3134, "y": 1940, "width": 692, "cmt": "Pinky spin down" }, + "Joy_32": {"Type": "Digital", "x": 1224, "y": 894, "width": 642, "cmt": "Stick press" }, + "Joy_XAxis": {"Type": "Analogue", "x": 84, "y": 784, "width": 572, "cmt": "Throttle (left/both)" }, + "Joy_YAxis": {"Type": "Analogue", "x": 124, "y": 694, "width": 572, "cmt": "Throttle (right)" }, + "Joy_ZAxis": {"Type": "Analogue", "x": 1874, "y": 1604, "width": 672, "cmt": "F spin" }, + "Joy_RXAxis": {"Type": "Analogue", "x": 1224, "y": 838, "width": 642, "cmt": "Stick x" }, + "Joy_RYAxis": {"Type": "Analogue", "x": 1224, "y": 782, "width": 642, "cmt": "Stick y" }, + "Joy_RZAxis": {"Type": "Analogue", "x": 1534, "y": 1754, "width": 672, "cmt": "G spin" }, + "Joy_UAxis": {"Type": "Analogue", "x": 1014, "y": 1588, "width": 692, "cmt": "RTY3 axis" }, + "Joy_VAxis": {"Type": "Analogue", "x": 854, "y": 1668, "width": 692, "cmt": "RTY4 axis" } + } +} \ No newline at end of file diff --git a/graphics/layouts/x56-throttle.psd b/graphics/layouts/x56-throttle.psd new file mode 100644 index 0000000..8a7b688 Binary files /dev/null and b/graphics/layouts/x56-throttle.psd differ diff --git a/graphics/layouts/x65F-joystick.jpg b/graphics/layouts/x65F-joystick.jpg new file mode 100644 index 0000000..808c97e Binary files /dev/null and b/graphics/layouts/x65F-joystick.jpg differ diff --git a/graphics/layouts/x65F-joystick.psd b/graphics/layouts/x65F-joystick.psd new file mode 100644 index 0000000..4105202 Binary files /dev/null and b/graphics/layouts/x65F-joystick.psd differ diff --git a/graphics/layouts/x65F-throttle+x55-stick.jpg b/graphics/layouts/x65F-throttle+x55-stick.jpg new file mode 100644 index 0000000..ea52308 Binary files /dev/null and b/graphics/layouts/x65F-throttle+x55-stick.jpg differ diff --git a/graphics/layouts/x65F-throttle+x55-stick.json b/graphics/layouts/x65F-throttle+x55-stick.json new file mode 100644 index 0000000..2561d35 --- /dev/null +++ b/graphics/layouts/x65F-throttle+x55-stick.json @@ -0,0 +1,74 @@ +{ + "MapName" : "x65F-throttle + x55-stick", + "MapImage" : "x65F-throttle+x55-stick.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "X65F Flight Controller", + "DeviceProdGuid": ["{0B6A06A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button6", "Type": "Digital", "X":395, "Y":1336, "Width":732, "Height":52, "Cmt": "Afterburn (D)" }, + { "Input": "button7", "Type": "Digital", "X":79, "Y":1656, "Width":772, "Height":52, "Cmt": "Throttle Rot Top (E)" }, + { "Input": "button8", "Type": "Digital", "X":79, "Y":1922, "Width":772, "Height":52, "Cmt": "Throttle Rot Bottom (F)" }, + { "Input": "button21", "Type": "Digital", "X":1043, "Y":788, "Width":970, "Height":54, "Cmt": "Throttle upper hat4 up" }, + { "Input": "button22", "Type": "Digital", "X":1044, "Y":843, "Width":970, "Height":54, "Cmt": "Throttle upper hat4 right" }, + { "Input": "button23", "Type": "Digital", "X":1043, "Y":900, "Width":970, "Height":54, "Cmt": "Throttle upper hat4 down" }, + { "Input": "button24", "Type": "Digital", "X":1043, "Y":956, "Width":970, "Height":54, "Cmt": "Throttle upper hat4 left" }, + { "Input": "button25", "Type": "Digital", "X":992, "Y":1044, "Width":970, "Height":54, "Cmt": "Throttle lower hat5 up" }, + { "Input": "button26", "Type": "Digital", "X":992, "Y":1100, "Width":970, "Height":54, "Cmt": "Throttle lower hat5 right" }, + { "Input": "button27", "Type": "Digital", "X":992, "Y":1155, "Width":970, "Height":54, "Cmt": "Throttle lower hat5 down" }, + { "Input": "button28", "Type": "Digital", "X":992, "Y":1212, "Width":970, "Height":54, "Cmt": "Throttle lower hat5 left" }, + { "Input": "button29", "Type": "Digital", "X":1181, "Y":1461, "Width":972, "Height":54, "Cmt": "Throttle Castle hat6 up" }, + { "Input": "button30", "Type": "Digital", "X":1181, "Y":1517, "Width":972, "Height":54, "Cmt": "Throttle Castle hat6 right" }, + { "Input": "button31", "Type": "Digital", "X":1181, "Y":1572, "Width":972, "Height":54, "Cmt": "Throttle Castle hat6 down" }, + { "Input": "button32", "Type": "Digital", "X":1181, "Y":1629, "Width":972, "Height":54, "Cmt": "Throttle Castle hat6 left" }, + { "Input": "button33", "Type": "Digital", "X":1837, "Y":1902, "Width":970, "Height":54, "Cmt": "Throttle Wheel hat7 up" }, + { "Input": "button34", "Type": "Digital", "X":1837, "Y":1957, "Width":972, "Height":54, "Cmt": "Throttle Wheel hat7 right" }, + { "Input": "button35", "Type": "Digital", "X":1837, "Y":2014, "Width":970, "Height":54, "Cmt": "Throttle Wheel hat7 down" }, + { "Input": "button36", "Type": "Digital", "X":1837, "Y":2070, "Width":970, "Height":54, "Cmt": "Throttle Wheel hat7 left" }, + { "Input": "button37", "Type": "Digital", "X":0, "Y":0, "Width":10, "Height":54, "Cmt": "Throttle Wheel ministick press" }, + { "Input": "button38", "Type": "Digital", "X":1704, "Y":1743, "Width":572, "Height":54, "Cmt": "Throttle Scroll up" }, + { "Input": "button39", "Type": "Digital", "X":1702, "Y":1800, "Width":572, "Height":54, "Cmt": "Throttle Scroll down" }, + { "Input": "button40", "Type": "Digital", "X":1141, "Y":2024, "Width":572, "Height":54, "Cmt": "Throttle K-Sw up" }, + { "Input": "button41", "Type": "Digital", "X":1141, "Y":2079, "Width":572, "Height":54, "Cmt": "Throttle K-Sw down" }, + { "Input": "button42", "Type": "Digital", "X":54, "Y":244, "Width":732, "Height":52, "Cmt": "Throttle T1" }, + { "Input": "button43", "Type": "Digital", "X":827, "Y":247, "Width":732, "Height":52, "Cmt": "Throttle T2" }, + { "Input": "button44", "Type": "Digital", "X":54, "Y":338, "Width":734, "Height":52, "Cmt": "Throttle T3" }, + { "Input": "button45", "Type": "Digital", "X":827, "Y":341, "Width":732, "Height":52, "Cmt": "Throttle T4" }, + { "Input": "button46", "Type": "Digital", "X":16, "Y":152, "Width":732, "Height":52, "Cmt": "Throttle Danger Bt" }, + { "Input": "slider1", "Type": "Analogue", "X":82, "Y":1076, "Width":572, "Height":54, "Cmt": "Throttle Right" }, + { "Input": "rotx", "Type": "Analogue", "X":79, "Y":1599, "Width":772, "Height":54, "Cmt": "Throttle Rot Top (E)" }, + { "Input": "rotz", "Type": "Analogue", "X":79, "Y":1865, "Width":772, "Height":54, "Cmt": "Throttle Rot Bottom (E)" }, + { "Input": "z", "Type": "Analogue", "X":82, "Y":604, "Width":572, "Height":54, "Cmt": "Throttle Left" } + ] + }, + { + "InputType": "J", + "DeviceName": "Saitek Pro Flight X-55 Rhino Stick", + "DeviceProdGuid": ["{22150738-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X":2042, "Y":790, "Width":642, "Height":108, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X":2142, "Y":409, "Width":792, "Height":54, "Cmt": "Top trigger" }, + { "Input": "button3", "Type": "Digital", "X":3063, "Y":739, "Width":692, "Height":54, "Cmt": "Side trigger" }, + { "Input": "button4", "Type": "Digital", "X":2042, "Y":930, "Width":642, "Height":108, "Cmt": "Secondary trigger" }, + { "Input": "button5", "Type": "Digital", "X":3023, "Y":1160, "Width":792, "Height":54, "Cmt": "Pinky button" }, + { "Input": "button6", "Type": "Digital", "X":2042, "Y":1070, "Width":642, "Height":108, "Cmt": "Pinky trigger" }, + { "Input": "button7", "Type": "Digital", "X":3053, "Y":409, "Width":772, "Height":54, "Cmt": "Witch hat up" }, + { "Input": "button8", "Type": "Digital", "X":3053, "Y":466, "Width":772, "Height":54, "Cmt": "Witch hat right" }, + { "Input": "button9", "Type": "Digital", "X":3053, "Y":522, "Width":772, "Height":54, "Cmt": "Witch hat down" }, + { "Input": "button10", "Type": "Digital", "X":3053, "Y":578, "Width":772, "Height":54, "Cmt": "Witch hat left" }, + { "Input": "button11", "Type": "Digital", "X":3072, "Y":910, "Width":742, "Height":54, "Cmt": "Castle hat up" }, + { "Input": "button12", "Type": "Digital", "X":3072, "Y":966, "Width":742, "Height":54, "Cmt": "Castle hat right" }, + { "Input": "button13", "Type": "Digital", "X":3070, "Y":1022, "Width":742, "Height":54, "Cmt": "Castle hat down" }, + { "Input": "button14", "Type": "Digital", "X":3072, "Y":1078, "Width":742, "Height":54, "Cmt": "Castle hat left" }, + { "Input": "hat1_up", "Type": "Digital", "X":1743, "Y":490, "Width":1072, "Height":54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X":1743, "Y":546, "Width":1072, "Height":54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X":1743, "Y":602, "Width":1072, "Height":54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X":1743, "Y":657, "Width":1072, "Height":54, "Cmt": "PoV hat left" }, + { "Input": "y", "Type": "Analogue", "X":3193, "Y":1240, "Width":632, "Height":54, "Cmt": "Y-Axis" }, + { "Input": "x", "Type": "Analogue", "X":3193, "Y":1297, "Width":632, "Height":54, "Cmt": "X-Axis" }, + { "Input": "rotz", "Type": "Analogue", "X":3193, "Y":1353, "Width":632, "Height":54, "Cmt": "RotZ-Axis" } + ] + } + ] +} \ No newline at end of file diff --git a/graphics/layouts/x65F-throttle+x55-stick.psd b/graphics/layouts/x65F-throttle+x55-stick.psd new file mode 100644 index 0000000..e859c3e Binary files /dev/null and b/graphics/layouts/x65F-throttle+x55-stick.psd differ diff --git a/graphics/layouts/x65F-throttle.jpg b/graphics/layouts/x65F-throttle.jpg new file mode 100644 index 0000000..e16d022 Binary files /dev/null and b/graphics/layouts/x65F-throttle.jpg differ diff --git a/graphics/layouts/x65F-throttle.psd b/graphics/layouts/x65F-throttle.psd new file mode 100644 index 0000000..90ae1df Binary files /dev/null and b/graphics/layouts/x65F-throttle.psd differ diff --git a/graphics/layouts/x65F.jpg b/graphics/layouts/x65F.jpg new file mode 100644 index 0000000..6e2f7a3 Binary files /dev/null and b/graphics/layouts/x65F.jpg differ diff --git a/graphics/layouts/x65F.json b/graphics/layouts/x65F.json new file mode 100644 index 0000000..6abc3e4 --- /dev/null +++ b/graphics/layouts/x65F.json @@ -0,0 +1,70 @@ +{ + "MapName" : "x65F-joystick and throttle", + "MapImage" : "x65F.jpg", + "InputDevices" :[ + { + "InputType": "J", + "DeviceName": "X65F Flight Controller", + "DeviceProdGuid": ["{0B6A06A3-0000-0000-0000-504944564944}"], + "Controls": [ + { "Input": "button1", "Type": "Digital", "X": 1629, "Y": 628, "Width": 732, "Height": 52, "Cmt": "Primary trigger" }, + { "Input": "button2", "Type": "Digital", "X": 1723, "Y": 450, "Width": 731, "Height": 52, "Cmt": "Top trigger (A)" }, + { "Input": "button3", "Type": "Digital", "X": 2745, "Y": 450, "Width": 732, "Height": 52, "Cmt": "Side trigger (B)" }, + { "Input": "button4", "Type": "Digital", "X": 2698, "Y": 844, "Width": 734, "Height": 52, "Cmt": "Pinky button (C)" }, + { "Input": "button5", "Type": "Digital", "X": 1616, "Y": 844, "Width": 731, "Height": 52, "Cmt": "Pinky trigger" }, + { "Input": "button6", "Type": "Digital", "X": 410, "Y": 1494, "Width": 732, "Height": 52, "Cmt": "Afterburn (D)" }, + { "Input": "button7", "Type": "Digital", "X": 240, "Y": 1655, "Width": 772, "Height": 52, "Cmt": "Throttle Rot Top (E)" }, + { "Input": "button8", "Type": "Digital", "X": 240, "Y": 1922, "Width": 772, "Height": 52, "Cmt": "Throttle Rot Bottom (F)" }, + { "Input": "button9", "Type": "Digital", "X": 2830, "Y": 182, "Width": 972, "Height": 54, "Cmt": "Witch hat1 up" }, + { "Input": "button10", "Type": "Digital", "X": 2830, "Y": 239, "Width": 972, "Height": 54, "Cmt": "Witch hat1 right" }, + { "Input": "button11", "Type": "Digital", "X": 2830, "Y": 294, "Width": 972, "Height": 54, "Cmt": "Witch hat1 down" }, + { "Input": "button12", "Type": "Digital", "X": 2830, "Y": 349, "Width": 972, "Height": 54, "Cmt": "Witch hat1 left" }, + { "Input": "button13", "Type": "Digital", "X": 2830, "Y": 560, "Width": 972, "Height": 54, "Cmt": "Castle hat2 up" }, + { "Input": "button14", "Type": "Digital", "X": 2830, "Y": 618, "Width": 972, "Height": 54, "Cmt": "Castle hat2 right" }, + { "Input": "button15", "Type": "Digital", "X": 2830, "Y": 673, "Width": 972, "Height": 54, "Cmt": "Castle hat2 down" }, + { "Input": "button16", "Type": "Digital", "X": 2830, "Y": 730, "Width": 972, "Height": 54, "Cmt": "Castle hat2 left" }, + { "Input": "button17", "Type": "Digital", "X": 1669, "Y": 725, "Width": 732, "Height": 54, "Cmt": "Side hat3 up" }, + { "Input": "button18", "Type": "Digital", "X": 1670, "Y": 726, "Width": 359, "Height": 54, "Cmt": "Side hat3 right" }, + { "Input": "button19", "Type": "Digital", "X": 1671, "Y": 727, "Width": 358, "Height": 54, "Cmt": "Side hat3 down" }, + { "Input": "button20", "Type": "Digital", "X": 1672, "Y": 728, "Width": 357, "Height": 54, "Cmt": "Side hat3 left" }, + { "Input": "button21", "Type": "Digital", "X": 1059, "Y": 946, "Width": 970, "Height": 54, "Cmt": "Throttle upper hat4 up" }, + { "Input": "button22", "Type": "Digital", "X": 1059, "Y": 1002, "Width": 970, "Height": 54, "Cmt": "Throttle upper hat4 right" }, + { "Input": "button23", "Type": "Digital", "X": 1059, "Y": 1059, "Width": 970, "Height": 54, "Cmt": "Throttle upper hat4 down" }, + { "Input": "button24", "Type": "Digital", "X": 1059, "Y": 1114, "Width": 970, "Height": 54, "Cmt": "Throttle upper hat4 left" }, + { "Input": "button25", "Type": "Digital", "X": 1007, "Y": 1202, "Width": 970, "Height": 54, "Cmt": "Throttle lower hat5 up" }, + { "Input": "button26", "Type": "Digital", "X": 1007, "Y": 1258, "Width": 970, "Height": 54, "Cmt": "Throttle lower hat5 right" }, + { "Input": "button27", "Type": "Digital", "X": 1007, "Y": 1315, "Width": 970, "Height": 54, "Cmt": "Throttle lower hat5 down" }, + { "Input": "button28", "Type": "Digital", "X": 1007, "Y": 1370, "Width": 970, "Height": 54, "Cmt": "Throttle lower hat5 left" }, + { "Input": "button29", "Type": "Digital", "X": 1341, "Y": 1462, "Width": 972, "Height": 54, "Cmt": "Throttle Castle hat6 up" }, + { "Input": "button30", "Type": "Digital", "X": 1341, "Y": 1517, "Width": 972, "Height": 54, "Cmt": "Throttle Castle hat6 right" }, + { "Input": "button31", "Type": "Digital", "X": 1341, "Y": 1572, "Width": 972, "Height": 54, "Cmt": "Throttle Castle hat6 down" }, + { "Input": "button32", "Type": "Digital", "X": 1341, "Y": 1629, "Width": 972, "Height": 54, "Cmt": "Throttle Castle hat6 left" }, + { "Input": "button33", "Type": "Digital", "X": 1998, "Y": 1903, "Width": 970, "Height": 54, "Cmt": "Throttle Wheel hat7 up" }, + { "Input": "button34", "Type": "Digital", "X": 1996, "Y": 1958, "Width": 972, "Height": 54, "Cmt": "Throttle Wheel hat7 right" }, + { "Input": "button35", "Type": "Digital", "X": 1998, "Y": 2015, "Width": 970, "Height": 54, "Cmt": "Throttle Wheel hat7 down" }, + { "Input": "button36", "Type": "Digital", "X": 1998, "Y": 2070, "Width": 970, "Height": 54, "Cmt": "Throttle Wheel hat7 left" }, + { "Input": "button37", "Type": "Digital", "X": 0, "Y": 0, "Width": 10, "Height": 54, "Cmt": "Throttle Wheel ministick press" }, + { "Input": "button38", "Type": "Digital", "X": 1863, "Y": 1744, "Width": 572, "Height": 54, "Cmt": "Throttle Scroll up" }, + { "Input": "button39", "Type": "Digital", "X": 1863, "Y": 1801, "Width": 572, "Height": 54, "Cmt": "Throttle Scroll down" }, + { "Input": "button40", "Type": "Digital", "X": 1301, "Y": 2024, "Width": 572, "Height": 54, "Cmt": "Throttle K-Sw up" }, + { "Input": "button41", "Type": "Digital", "X": 1301, "Y": 2079, "Width": 572, "Height": 54, "Cmt": "Throttle K-Sw down" }, + { "Input": "button42", "Type": "Digital", "X": 69, "Y": 403, "Width": 732, "Height": 52, "Cmt": "Throttle T1" }, + { "Input": "button43", "Type": "Digital", "X": 842, "Y": 405, "Width": 732, "Height": 52, "Cmt": "Throttle T2" }, + { "Input": "button44", "Type": "Digital", "X": 69, "Y": 496, "Width": 734, "Height": 52, "Cmt": "Throttle T3" }, + { "Input": "button45", "Type": "Digital", "X": 842, "Y": 500, "Width": 732, "Height": 52, "Cmt": "Throttle T4" }, + { "Input": "button46", "Type": "Digital", "X": 31, "Y": 311, "Width": 732, "Height": 52, "Cmt": "Throttle Danger Bt" }, + { "Input": "hat1_up", "Type": "Digital", "X": 1744, "Y": 182, "Width": 972, "Height": 54, "Cmt": "PoV hat up" }, + { "Input": "hat1_right", "Type": "Digital", "X": 1744, "Y": 239, "Width": 972, "Height": 54, "Cmt": "PoV hat right" }, + { "Input": "hat1_down", "Type": "Digital", "X": 1744, "Y": 294, "Width": 972, "Height": 54, "Cmt": "PoV hat down" }, + { "Input": "hat1_left", "Type": "Digital", "X": 1744, "Y": 349, "Width": 972, "Height": 54, "Cmt": "PoV hat left" }, + { "Input": "slider1", "Type": "Analogue", "X": 97, "Y": 1235, "Width": 572, "Height": 54, "Cmt": "Throttle Right" }, + { "Input": "rotx", "Type": "Analogue", "X": 240, "Y": 1600, "Width": 772, "Height": 54, "Cmt": "Throttle Rot Top (E)" }, + { "Input": "rotz", "Type": "Analogue", "X": 240, "Y": 1866, "Width": 772, "Height": 54, "Cmt": "Throttle Rot Bottom (E)" }, + { "Input": "rotz", "Type": "Analogue", "X": 2942, "Y": 1114, "Width": 632, "Height": 54, "Cmt": "Stick Rotate" }, + { "Input": "x", "Type": "Analogue", "X": 2942, "Y": 1059, "Width": 632, "Height": 54, "Cmt": "Stick X" }, + { "Input": "y", "Type": "Analogue", "X": 2942, "Y": 1002, "Width": 632, "Height": 54, "Cmt": "Stick Y" }, + { "Input": "z", "Type": "Analogue", "X": 97, "Y": 763, "Width": 572, "Height": 54, "Cmt": "Throttle Left" } + ] + } + ] +} diff --git a/graphics/page_notdefined.png b/graphics/page_notdefined.png new file mode 100644 index 0000000..eeabe0d Binary files /dev/null and b/graphics/page_notdefined.png differ diff --git a/packages.config b/packages.config index 305ad65..dc4cf65 100644 --- a/packages.config +++ b/packages.config @@ -5,5 +5,6 @@ + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/.signature.p7s b/packages/System.Runtime.Serialization.Json.4.3.0/.signature.p7s new file mode 100644 index 0000000..7933bc2 Binary files /dev/null and b/packages/System.Runtime.Serialization.Json.4.3.0/.signature.p7s differ diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/System.Runtime.Serialization.Json.4.3.0.nupkg b/packages/System.Runtime.Serialization.Json.4.3.0/System.Runtime.Serialization.Json.4.3.0.nupkg new file mode 100644 index 0000000..2ce96bc Binary files /dev/null and b/packages/System.Runtime.Serialization.Json.4.3.0/System.Runtime.Serialization.Json.4.3.0.nupkg differ diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ThirdPartyNotices.txt b/packages/System.Runtime.Serialization.Json.4.3.0/ThirdPartyNotices.txt new file mode 100644 index 0000000..55cfb20 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ThirdPartyNotices.txt @@ -0,0 +1,31 @@ +This Microsoft .NET Library may incorporate components from the projects listed +below. Microsoft licenses these components under the Microsoft .NET Library +software license terms. The original copyright notices and the licenses under +which Microsoft received such components are set forth below for informational +purposes only. Microsoft reserves all rights not expressly granted herein, +whether by implication, estoppel or otherwise. + +1. .NET Core (https://github.com/dotnet/core/) + +.NET Core +Copyright (c) .NET Foundation and Contributors + +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/dotnet_library_license.txt b/packages/System.Runtime.Serialization.Json.4.3.0/dotnet_library_license.txt new file mode 100644 index 0000000..92b6c44 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/dotnet_library_license.txt @@ -0,0 +1,128 @@ + +MICROSOFT SOFTWARE LICENSE TERMS + + +MICROSOFT .NET LIBRARY + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +· updates, + +· supplements, + +· Internet-based services, and + +· support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. + + +IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW. + +1. INSTALLATION AND USE RIGHTS. + +a. Installation and Use. You may install and use any number of copies of the software to design, develop and test your programs. + +b. Third Party Programs. The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for the third party program are included for your information only. + +2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS. + +a. DISTRIBUTABLE CODE. The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in programs you develop if you comply with the terms below. + +i. Right to Use and Distribute. + +· You may copy and distribute the object code form of the software. + +· Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + +ii. Distribution Requirements. For any Distributable Code you distribute, you must + +· add significant primary functionality to it in your programs; + +· require distributors and external end users to agree to terms that protect it at least as much as this agreement; + +· display your valid copyright notice on your programs; and + +· indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your programs. + +iii. Distribution Restrictions. You may not + +· alter any copyright, trademark or patent notice in the Distributable Code; + +· use Microsoft’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by Microsoft; + +· include Distributable Code in malicious, deceptive or unlawful programs; or + +· modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + +· the code be disclosed or distributed in source code form; or + +· others have the right to modify it. + +3. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + +· work around any technical limitations in the software; + +· reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + +· publish the software for others to copy; + +· rent, lease or lend the software; + +· transfer the software or this agreement to any third party; or + +· use the software for commercial software hosting services. + +4. BACKUP COPY. You may make one backup copy of the software. You may use it only to reinstall the software. + +5. DOCUMENTATION. Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see www.microsoft.com/exporting. + +7. SUPPORT SERVICES. Because this software is “as is,” we may not provide support services for it. + +8. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. APPLICABLE LAW. + +a. United States. If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + +b. Outside the United States. If you acquired the software in any other country, the laws of that country apply. + +10. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +FOR AUSTRALIA – YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. + +12. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + +This limitation applies to + +· anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + +· claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. + +Remarque : Ce logiciel étant distribué au Québec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. + +EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. + +LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. + +Cette limitation concerne : + +· tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et + +· les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. + +Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. + +EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas. + + diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/MonoAndroid10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/MonoAndroid10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/MonoTouch10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/MonoTouch10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/net45/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/net45/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/netcore50/System.Runtime.Serialization.Json.dll b/packages/System.Runtime.Serialization.Json.4.3.0/lib/netcore50/System.Runtime.Serialization.Json.dll new file mode 100644 index 0000000..f47830e Binary files /dev/null and b/packages/System.Runtime.Serialization.Json.4.3.0/lib/netcore50/System.Runtime.Serialization.Json.dll differ diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/netstandard1.3/System.Runtime.Serialization.Json.dll b/packages/System.Runtime.Serialization.Json.4.3.0/lib/netstandard1.3/System.Runtime.Serialization.Json.dll new file mode 100644 index 0000000..f47830e Binary files /dev/null and b/packages/System.Runtime.Serialization.Json.4.3.0/lib/netstandard1.3/System.Runtime.Serialization.Json.dll differ diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/portable-net45+win8+wp8+wpa81/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/portable-net45+win8+wp8+wpa81/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/win8/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/win8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/wp80/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/wp80/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/wpa81/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/wpa81/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarinios10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarinios10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarinmac20/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarinmac20/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarintvos10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarintvos10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarinwatchos10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/lib/xamarinwatchos10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/MonoAndroid10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/MonoAndroid10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/MonoTouch10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/MonoTouch10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/net45/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/net45/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/System.Runtime.Serialization.Json.dll b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/System.Runtime.Serialization.Json.dll new file mode 100644 index 0000000..8ab0cb3 Binary files /dev/null and b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/System.Runtime.Serialization.Json.dll differ diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..055a449 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Specifies date-time format options. + + + Initializes a new instance of the class using the format string. + The format string. + + + Initializes a new instance of the class using the format string and format provider. + The format sting. + The format provider. + + + Gets or sets the formatting options that customize string parsing for some date and time parsing methods. + The formatting options that customize string parsing for some date and time parsing methods. + + + Gets an object that controls formatting. + + + Gets the format strings to control the formatting produced when a date or time is represented as a string. + The format strings to control the formatting produced when a date or time is represented as a string. + + + Specifies how often to emit type information. + + + Always to emit type information. + + + As needed emit type information. + + + Never to emit type information. + + + Serializes objects to the JavaScript Object Notation (JSON) and deserializes JSON data to objects. This class cannot be inherited. + + + Initializes a new instance of the class to serialize or deserialize an object of the specified type. + The type of the instances that is serialized or deserialized. + + + Initializes a new instance of the class to serialize or deserialize an object of the specified type, with a collection of known types that may be present in the object graph. + The type of the instances that are serialized or deserialized. + An of that contains the types that may be present in the object graph. + + + Initializes a new instance of the class to serialize or deserialize an object of the specified type and serializer settings. + The type of the instances that is serialized or deserialized. + The serializer settings for the JSON serializer. + + + Gets the format of the date and time type items in object graph. + The format of the date and time type items in object graph. + + + Gets or sets the data contract JSON serializer settings to emit type information. + The data contract JSON serializer settings to emit type information. + + + Gets a collection of types that may be present in the object graph serialized using this instance of the . + A that contains the expected types passed in as known types to the constructor. + + + Reads a document stream in the JSON (JavaScript Object Notation) format and returns the deserialized object. + The deserialized object. + The to be read. + + + Gets or sets a value that specifies whether to serialize read only types. + true to serialize read only types; otherwise false. + + + Gets or sets a value that specifies whether to use a simple dictionary format. + true to use a simple dictionary format; otherwise, false. + + + Serializes a specified object to JavaScript Object Notation (JSON) data and writes the resulting JSON to a stream. + The that is written to. + The object that contains the data to write to the stream. + The type being serialized does not conform to data contract rules. For example, the attribute has not been applied to the type. + There is a problem with the instance being written. + The maximum number of objects to serialize has been exceeded. Check the property. + + + Specifies settings. + + + Initializes a new instance of the class. + + + Gets or sets a DateTimeFormat that defines the culturally appropriate format of displaying dates and times. + The DateTimeFormat that defines the culturally appropriate format of displaying dates and times. + + + Gets or sets the data contract JSON serializer settings to emit type information. + The data contract JSON serializer settings to emit type information. + + + Gets or sets a collection of types that may be present in the object graph serialized using this instance the DataContractJsonSerializerSettings. + A collection of types that may be present in the object graph serialized using this instance the DataContractJsonSerializerSettings. + + + Gets or sets the maximum number of items in an object graph to serialize or deserialize. + The maximum number of items in an object graph to serialize or deserialize. + + + Gets or sets the root name of the selected object. + The root name of the selected object. + + + Gets or sets a value that specifies whether to serialize read only types. + True to serialize read only types; otherwise false. + + + Gets or sets a value that specifies whether to use a simple dictionary format. + True to use a simple dictionary format; otherwise, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/de/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/de/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..6cdd7bb --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/de/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Gibt Datum/Zeit-Formatoptionen an. + + + Initialisiert eine neue Instanz der -Klasse unter Verwendung der Formatzeichenfolge. + Die Formatzeichenfolge. + + + Initialisiert eine neue Instanz der -Klasse unter Verwendung der Formatzeichenfolge und Formatanbieters. + Die Formatzeichenfolge. + Der Formatanbieter. + + + Ruft die Formatierungsoptionen ab bzw. legt diese fest, mit denen die Art der Analyse einer Zeichenfolge für eine Reihe von Datums- und Uhrzeit-Analysemethoden angepasst wird. + Die Formatierungsoptionen, mit denen die Art der Analyse einer Zeichenfolge für eine Reihe von Datums- und Uhrzeit-Analysemethoden angepasst wird. + + + Ruft ein Objekt zum Steuern der Formatierung ab. + + + Ruft die Formatzeichenfolgen zur Festlegung des Formatierungsergebnisses ab, wenn ein Datums- oder Zeitwert als Zeichenfolge dargestellt werden soll. + Die Formatzeichenfolgen zur Festlegung des Formatierungsergebnisses, wenn ein Datums- oder Zeitwert als Zeichenfolge dargestellt werden soll. + + + Gibt an, wie oft Typinformationen ausgegeben werden. + + + immer Typinformationen ausgeben. + + + Bei Bedarf Typinformationen ausgeben. + + + Typinformationen sollen niemals ausgeben werden. + + + Serialisiert Objekte in die JavaScript Object Notation (JSON) und deserialisiert JSON-Daten zu Objekten.Diese Klasse kann nicht vererbt werden. + + + Initialisiert eine neue Instanz der -Klasse, um ein Objekt des genannten Typs zu serialisieren bzw. zu deserialisieren. + Der Typ der Instanzen, die serialisiert oder deserialisiert werden. + + + Initialisiert eine neue Instanz der -Klasse, um ein Objekt des genannten Typs mit einer Auflistung bekannter Typen, die ggf. im Objektdiagramm vorhanden sind, zu serialisieren bzw. zu deserialisieren. + Der Typ der Instanzen, die serialisiert oder deserialisiert werden. + Ein -Objekt des Typs , das die in dem Objektdiagramm enthaltenen Typen angibt (falls vorhanden). + + + Initialisiert eine neue Instanz der -Klasse, um ein Objekt des genannten Typs und Serialisierungsprogrammeinstellungen zu serialisieren bzw. zu deserialisieren. + Der Typ der Instanzen, die serialisiert oder deserialisiert werden. + Die Serialisierungsprogrammeinstellungen für das JSON-Serialisierungsprogramm. + + + Ruft das Format der Elemente des Typs Datum/Zeit im Objektdiagramm ab. + Das Format der Elemente des Typs Datum/Zeit im Objektdiagramm. + + + Ruft die JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen ab oder legt diese fest. + Die Einstellungen der JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen. + + + Ruft eine Auflistung der Typen in einem Objektdiagramm ab, die mithilfe einer Instanz des -Objekts serialisiert werden. + Ein -Objekt, das die erwarteten Typen enthält, die als bekannte Typen an den -Konstruktor übergeben werden. + + + Liest einen Dokumentstream im JSON-Format (JavaScript Object Notation) und gibt das deserialisierte Objekt zurück. + Das deserialisierte Objekt. + Das -Objekt, das gelesen werden soll. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob schreibgeschützte Typen serialisiert werden sollen. + true, um schreibgeschützte Typen zu serialisieren; andernfalls false. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob ein einfaches Wörterbuchformat verwendet werden soll. + true, um ein einfaches Wörterbuchformat zu verwenden; andernfalls false. + + + Serialisiert ein angegebenes Objekt in JSON-Daten (JavaScript Object Notation) und schreibt die resultierenden JSON-Daten in einen Stream. + Das -Objekt, in das geschrieben wird. + Das Objekt, das die in den Stream zu schreibenden Daten enthält. + Der serialisierte Typ entspricht nicht den Datenvertragsregeln.Das -Attribut wurde z. B. nicht auf den Typ angewendet. + Es liegt ein Problem mit der Instanz vor, die geschrieben wird. + Die maximale Anzahl von zu serialisierenden Objekten wurde überschritten.Überprüfen Sie die -Eigenschaft. + + + Gibt -Einstellungen an. + + + Initialisiert eine neue Instanz der -Klasse. + + + Ruft ein DateTimeFormat ab, das das für die Kultur spezifische Format zum Anzeigen von Datumsangaben und Uhrzeiten definiert, oder legt es fest. + Das Datums- und Zeitformat, das für die Kultur spezifische Format zum Anzeigen von Datumsangaben und Uhrzeiten definiert, oder legt diese fest. + + + Ruft die JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen ab oder legt diese fest. + Die Einstellungen der JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen. + + + Ruft eine Auflistung der Typen im Objektdiagramm ab, die mithilfe dieser Instanz von DataContractJsonSerializerSettings serialisiert wurden, oder legt sie fest. + Eine Sammlung der Typen im Objektdiagramm ab, die mithilfe dieser Instanz von DataContractJsonSerializerSettings serialisiert wurden. + + + Ruft die maximale Anzahl von Elementen in einem Objektdiagramm ab oder legt sie fest, die serialisiert oder deserialisiert werden. + Die maximale Anzahl von Elementen in einem Objektdiagramm, die serialisiert oder deserialisiert werden. + + + Übernimmt oder bestimmt den Stammnamen des ausgewählten Objekts. + Der Stammname des ausgewählten Objekts. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob schreibgeschützte Typen serialisiert werden sollen. + True, um schreibgeschützte Typen zu serialisieren; andernfalls false. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob ein einfaches Wörterbuchformat verwendet werden soll. + True, um ein einfaches Wörterbuchformat zu verwenden; andernfalls false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/es/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/es/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..5c567ee --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/es/System.Runtime.Serialization.Json.xml @@ -0,0 +1,131 @@ + + + + System.Runtime.Serialization.Json + + + + Especifica las opciones de formato de fecha y hora. + + + Inicializa una nueva instancia de la clase con la cadena de formato. + Cadena de formato. + + + Inicializa una nueva instancia de la clase usando la cadena de formato y proveedor de formato. + Cadena de formato. + Proveedor de formatos. + + + Obtiene o establece las opciones de formato que personalizan el análisis de cadenas de algunos métodos de análisis de fecha y hora. + Opciones de formato que personalizan el análisis de cadenas de algunos métodos de análisis de fecha y hora. + + + Obtiene un objeto que controla las operaciones de formato. + + + Obtiene las cadenas de formato para controlar el formato que se produce cuando una fecha o una hora se representa como cadena. + Cadenas de formato para controlar el formato mostrado cuando una fecha o una hora se representa como una cadena. + + + Especifica la frecuencia para emitir información de tipo. + + + Emitir siempre información de tipo. + + + Según sea necesario emitir información de tipo. + + + No emitir jamás información de tipo. + + + Serializa objetos a JavaScript Object Notation (JSON) y deserializa datos de JSON a objetos.Esta clase no puede heredarse. + + + Inicializa una nueva instancia de la clase para serializar o deserializar un objeto del tipo especificado. + Tipo de las instancias que se serializa o deserializa. + + + Inicializa una nueva instancia de la clase para serializar o deserializar un objeto del tipo especificado con una colección de tipos conocidos que pueden encontrarse en el gráfico de objetos. + Tipo de las instancias serializadas o deserializadas. + + de que contiene los tipos que pueden encontrarse en el gráfico de objetos. + + + Inicializa una nueva instancia de la clase para serializar o deserializar un objeto del tipo y configuración de serializador especificados. + Tipo de las instancias que se serializa o deserializa. + La configuración de serializador para el serializador JSON. + + + Obtiene el formato de los elementos de tipo fecha y hora en un gráfico de objetos. + Formato de los elementos de tipo de fecha y hora en un gráfico de objetos. + + + Obtiene o establece la configuración del serializador JSON de contrato de datos para emitir información de tipo. + Configuración del serializador JSON de contrato de datos para emitir información de tipo. + + + Obtiene una colección de tipos que pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de . + + que contiene los tipos esperados pasados como tipos conocidos por el constructor . + + + Lee una secuencia del documento en el formato JSON (JavaScript Object Notation) y devuelve el objeto deserializado. + El objeto deserializado. + + que se leerá. + + + Obtiene o establece un valor que especifica si se van a serializar tipos de solo lectura. + true para serializar tipos de solo lectura; de lo contrario, false. + + + Obtiene o establece un valor que especifica si se va a utilizar un formato de diccionario simple. + true para usar un formato simple de diccionario; de lo contrario, false. + + + Serializa un objeto especificado a datos JavaScript Object Notation (JSON) y escribe el JSON resultante en una secuencia. + + en el que se escribe. + El objeto que contiene los datos que se van a escribir en la secuencia. + El tipo que se está serializando no se ajusta a las reglas del contrato de datos.Por ejemplo, el atributo no se ha aplicado al tipo. + Hay un problema con la instancia que se está escribiendo. + Se ha superado el número máximo de objetos para serializar.Compruebe la propiedad . + + + Especifica valores de configuración de . + + + Inicializa una nueva instancia de la clase . + + + Obtiene o establece un DateTimeFormat que define el formato de presentación de fechas y horas culturalmente apropiado. + DateTimeFormat que define el formato de presentación de fechas y horas culturalmente apropiado. + + + Obtiene o establece la configuración del serializador JSON de contrato de datos para emitir información de tipo. + Configuración del serializador JSON de contrato de datos para emitir información de tipo. + + + Obtiene o establece una colección de tipos que pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de DataContractJsonSerializerSettings. + Colección de tipos que pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de DataContractJsonSerializerSettings. + + + Obtiene o define el número máximo de elementos en un gráfico de objetos que se vaya a serializar o deserializar. + Número máximo de elementos de un gráfico de objetos que se van a serializar o deserializar. + + + Obtiene o establece el nombre raíz del objeto seleccionado. + El nombre raíz del objeto seleccionado. + + + Obtiene o establece un valor que especifica si se van a serializar tipos de solo lectura. + True para serializar tipos de solo lectura; de lo contrario, false. + + + Obtiene o establece un valor que especifica si se va a utilizar un formato de diccionario simple. + True para usar un formato simple de diccionario; de lo contrario, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/fr/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/fr/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..56ab761 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/fr/System.Runtime.Serialization.Json.xml @@ -0,0 +1,131 @@ + + + + System.Runtime.Serialization.Json + + + + Spécifie les options du format de date/heure. + + + Initialise une nouvelle instance de la classe à l'aide de la chaîne de format spécifiée. + Chaîne de format. + + + Initialise une nouvelle instance de la classe avec la chaîne de format et le fournisseur de format spécifiés. + Chaîne de format. + Fournisseur de format. + + + Obtient ou définit les options de mise en forme qui personnalisent l'analyse de chaîne pour certaines méthodes d'analyse de la date et de l'heure. + Options de mise en forme qui personnalisent l'analyse de chaîne pour plusieurs méthodes d'analyse de date et d'heure. + + + Obtient un objet qui contrôle la mise en forme. + + + Obtient les chaînes de format permettant de contrôler la mise en forme produite lorsqu'une date ou une heure est représentée sous forme de chaîne. + Chaînes de format permettant de contrôler la mise en forme produite lorsqu'une date ou une heure est représentée sous forme de chaîne. + + + Spécifie la fréquence d'émission des informations de type. + + + Est toujours en mesure d'émettre des informations de type. + + + Selon les besoins, émission des informations de type. + + + Ne jamais émettre des informations de type. + + + Sérialise des objets au format JSON (JavaScript Object Notation) et désérialise les données JSON vers des objets.Cette classe ne peut pas être héritée. + + + Initialise une nouvelle instance de la classe pour sérialiser ou désérialiser un objet du type spécifié. + Type des instances sérialisées ou désérialisées. + + + Initialise une nouvelle instance de la classe pour sérialiser ou désérialiser un objet du type spécifié, avec une collection de types connus pouvant être présents dans le graphique d'objets. + Type des instances sérialisées ou désérialisées. + + de qui contient les types pouvant être présents dans le graphique d'objets. + + + Initialise une nouvelle instance de la classe pour sérialiser ou désérialiser un objet avec le type et les paramètres de sérialiseur spécifiés. + Type des instances sérialisées ou désérialisées. + Paramètres de sérialiseur pour le sérialiseur JSON. + + + Obtient le format des éléments de type date et heure dans le graphique d'objet. + Format des éléments de type date et heure dans le graphique d'objet. + + + Obtient ou définit les paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + Paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + + + Obtient une collection des types pouvant être présents dans le graphique d'objets sérialisé à l'aide de cette instance de . + + qui contient les types attendus passés en tant que types connus au constructeur . + + + Lit un flux de document au format JSON (JavaScript Object Notation) et retourne l'objet désérialisé. + Objet désérialisé. + + à lire. + + + Obtient ou définit une valeur qui spécifie s'il faut sérialiser des types de lecture seule. + true pour sérialiser des types en lecture seule ; sinon false. + + + Obtient ou définit une valeur qui spécifie s'il faut utiliser un format de dictionnaire simple. + true pour utiliser un format de dictionnaire simple ; sinon, false. + + + Sérialise un objet spécifié vers des données JSON (JavaScript Objet Notation) et écrit le JSON obtenu dans un flux. + + dans lequel il est écrit. + L'objet qui contient les données à écrire dans le flux. + Le type en cours de sérialisation n'est pas conforme aux règles de contrat de données.Par exemple, l'attribut n'a pas été appliqué au type. + Il y a un problème avec l'instance en cours d'écriture. + Le nombre maximal d'objets à sérialiser a été dépassé.Vérifiez la propriété . + + + Spécifie les paramètres . + + + Initialise une nouvelle instance de la classe . + + + Obtient ou définit un DateTimeFormat qui définit le format d'affichage des dates et de l'heure approprié pour la culture. + DateTimeFormat qui définit le format d'affichage des dates et de l'heure approprié pour la culture. + + + Obtient ou définit les paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + Paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + + + Obtient ou définit une collection des types pouvant être présents dans le graphique d'objets sérialisé à l'aide de l'instance DataContractJsonSerializerSettings. + Collection des types pouvant être présents dans le graphique d'objets sérialisé à l'aide de cette instance DataContractJsonSerializerSettings. + + + Obtient ou définit le nombre maximal d'éléments à sérialiser ou désérialiser dans un graphique d'objets. + Nombre maximal d'éléments à sérialiser ou désérialiser dans un graphique d'objets. + + + Obtient ou définit le nom racine de l'objet sélectionné. + Nom racine de l'objet sélectionné. + + + Obtient ou définit une valeur qui spécifie s'il faut sérialiser des types de lecture seule. + True pour sérialiser des types en lecture seule ; sinon false. + + + Obtient ou définit une valeur qui spécifie s'il faut utiliser un format de dictionnaire simple. + True pour utiliser un format de dictionnaire simple ; sinon, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/it/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/it/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..9370a9a --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/it/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Specifica le opzioni di formato di data e ora. + + + Inizializza una nuova istanza della classe utilizzando la stringa del formato. + Stringa di formato. + + + Inizializza una nuova istanza della classe utilizzando la stringa e il provider del formato. + Stringa di formato. + Provider di formato. + + + Ottiene o imposta le opzioni di formattazione per la personalizzazione della modalità di analisi dell'ora e il giorno. + Opzioni di formattazione per la personalizzazione della modalità di analisi dell'ora e il giorno. + + + Recupera un oggetto che controlla la formattazione. + + + Ottiene le stringhe di formato per controllare la formattazione prodotta quando una data o un'ora è rappresentata come stringa. + Le stringhe di formato per controllare la formattazione prodotta quando una data o un'ora è rappresentata come stringa. + + + Specifica la frequenza di generazione delle informazioni sul tipo. + + + Generare sempre informazioni sul tipo. + + + In base alle necessità, genera informazioni sul tipo. + + + Mai generare informazioni sul tipo. + + + Serializza gli oggetti in JSON (JavaScript Object Notation) e deserializza i dati JSON in oggetti.La classe non può essere ereditata. + + + Inizializza una nuova istanza della classe per serializzare o deserializzare un oggetto del tipo specificato. + Tipo delle istanze serializzato o deserializzato. + + + Inizializza una nuova istanza della classe per serializzare o deserializzare un oggetto del tipo specificato, con una raccolta di tipi noti che possono essere presenti nell'oggetto grafico. + Tipo delle istanze serializzate o deserializzate. + Interfaccia di contenente i tipi che possono essere presenti nell'oggetto grafico. + + + Inizializza una nuova istanza della classe per serializzare o deserializzare un oggetto del tipo e delle impostazioni del serializzatore specificati. + Tipo delle istanze serializzato o deserializzato. + Impostazioni del serializzatore JSON. + + + Ottiene il formato degli elementi di tipo data e ora in un oggetto grafico. + Il formato degli elementi di tipo data e ora in un oggetto grafico. + + + Ottiene o imposta le impostazioni del serializzatore JSON del contratto dati per generare informazioni sul tipo. + Le impostazioni del serializzatore del contratto dati JSON per generare informazioni sul tipo. + + + Ottiene una raccolta di tipi che possono essere presenti nell'oggetto grafico serializzato utilizzando l'istanza di . + Classe contenente tipi previsti passati come tipi noti al costruttore . + + + Legge un flusso di documenti in formato JSON (JavaScript Object Notation) e restituisce l'oggetto deserializzato. + Oggetto deserializzato. + Classe da leggere. + + + Ottiene o imposta un valore che specifica se serializzare i tipi di sola lettura. + true per serializzare i tipi di sola lettura; in caso contrario, false. + + + Ottiene o imposta un valore che specifica se utilizzare un formato di dizionario semplice. + true per utilizzare un formato di dizionario semplice; in caso contrario, false. + + + Serializza un oggetto specificato in dati JSON (JavaScript Object Notation) e scrive il risultato JSON in un flusso. + Classe in cui viene eseguita la scrittura. + Oggetto che contiene i dati da scrivere nel flusso. + Il tipo serializzato non è conforme alle regole del contratto dati.Ad esempio, l'attributo non è stato applicato al tipo. + Si è verificato un problema durante la scrittura dell'istanza. + È stato superato il numero massimo di oggetti da serializzare.Verificare la proprietà . + + + Specifica le impostazioni per . + + + Inizializza una nuova istanza della classe . + + + Ottiene o imposta DateTimeFormat che definisce il formato culturalmente appropriato per la visualizzazione della data e dell'ora. + Valore DateTimeFormat che definisce il formato culturalmente appropriato per la visualizzazione della data e dell'ora. + + + Ottiene o imposta le impostazioni del serializzatore JSON del contratto dati per generare informazioni sul tipo. + Le impostazioni del serializzatore del contratto dati JSON per generare informazioni sul tipo. + + + Ottiene o imposta una raccolta di tipi che possono essere presenti nel grafico di oggetti serializzato utilizzando l'istanza di DataContractJsonSerializerSettings. + Raccolta dei tipi che possono essere presenti nel grafico di oggetti serializzato utilizzando l'istanza di DataContractJsonSerializerSettings. + + + Ottiene o imposta il numero massimo di elementi nell'oggetto grafico da serializzare o deserializzare. + Numero massimo di elementi di un oggetto grafico da serializzare o deserializzare. + + + Ottiene o imposta il nome radice dell'oggetto selezionato. + Nome radice dell'oggetto selezionato. + + + Ottiene o imposta un valore che specifica se serializzare i tipi di sola lettura. + True per serializzare i tipi di sola lettura; in caso contrario, false. + + + Ottiene o imposta un valore che specifica se utilizzare un formato di dizionario semplice. + True per utilizzare un formato di dizionario semplice; in caso contrario, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ja/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ja/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..0499511 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ja/System.Runtime.Serialization.Json.xml @@ -0,0 +1,133 @@ + + + + System.Runtime.Serialization.Json + + + + 日付/時刻の書式オプションを指定します。 + + + 書式文字列を使用して、 クラスの新しいインスタンスを初期化します。 + 書式指定文字列。 + + + 書式文字列と書式プロバイダーを使用して、 クラスの新しいインスタンスを初期化します。 + 書式指定文字列。 + 書式プロバイダー。 + + + いくつかの日時解析メソッドによる文字列の解析をカスタマイズする形式指定オプションを取得または設定します。 + いくつかの日時解析メソッドによる文字列の解析をカスタマイズする形式指定オプション。 + + + 書式を制御するオブジェクトを取得します。 + + + 日付または時刻が文字列として表されるときに生成される書式を制御するための書式指定文字列を取得します。 + 日付または時刻が文字列として表されるときに生成される書式を制御するための書式指定文字列。 + + + 型情報を出力するための頻度を指定します。 + + + 常に型情報を出力します。 + + + 必要に応じて型情報を出力します。 + + + 常に型情報を出力しません。 + + + オブジェクトを JSON (JavaScript Object Notation) にシリアル化し、JSON データをオブジェクトに逆シリアル化します。このクラスは継承できません。 + + + + クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。 + シリアル化または逆シリアル化されるインスタンスの型。 + + + + クラスの新しいインスタンスを初期化し、指定した型のオブジェクトと、オブジェクト グラフ内に存在可能な既知の型のコレクションをシリアル化または逆シリアル化します。 + シリアル化または逆シリアル化されるインスタンスの型。 + オブジェクト グラフ内に存在可能な型を含む 。 + + + 指定した型とシリアライザー設定のオブジェクトをシリアル化または逆シリアル化する クラスの新しいインスタンスを初期化します。 + シリアル化または逆シリアル化されるインスタンスの型。 + JSON シリアライザーのシリアライザーの設定。 + + + オブジェクト グラフの日付型および時刻型の項目の書式を取得します。 + オブジェクト グラフの日付型および時刻型の項目の書式。 + + + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定を取得または設定します。 + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定。 + + + + のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクションを取得します。 + + コンストラクターに既知の型として渡される、想定される型を含む + + + ドキュメント ストリームを JSON (JavaScript Object Notation) 形式で読み取り、逆シリアル化されたオブジェクトを返します。 + 逆シリアル化されたオブジェクト。 + 読み取られる 。 + + + 読み取り専用の型をシリアル化するかどうかを指定する値を取得または設定します。 + 読み取り専用の型をシリアル化する場合は true、それ以外の場合は false。 + + + 簡単なディクショナリ形式を使用するかどうかを指定する値を取得または設定します。 + 単純なディクショナリ形式を使用する場合は true、それ以外の場合は false。 + + + 指定したオブジェクトを JSON (JavaScript Object Notation) データにシリアル化し、生成された JSON をストリームに書き込みます。 + 書き込まれる 。 + ストリームに書き込むデータを格納するオブジェクト。 + シリアル化される型がデータ コントラクト規則に準拠していません。たとえば、 属性が型に適用されていません。 + 書き込まれているインスタンスに問題があります。 + シリアル化されるオブジェクトが最大数を超えました。 プロパティをチェックします。 + + + + の設定を指定します。 + + + + クラスの新しいインスタンスを初期化します。 + + + カルチャに対応する、日時の表示形式を定義する DateTimeFormat を取得または設定します。 + カルチャに対応する、日時の表示形式を定義する DateTimeFormat。 + + + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定を取得または設定します。 + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定。 + + + DataContractJsonSerializerSettings のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクションを取得または設定します。 + DataContractJsonSerializerSettings のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクション。 + + + シリアル化または逆シリアル化するオブジェクト グラフ内の項目の最大数を取得または設定します。 + シリアル化または逆シリアル化するオブジェクト グラフ内の項目の最大数。 + + + 選択したオブジェクトのルート名を取得または設定します。 + 選択されたオブジェクトのルート名。 + + + 読み取り専用の型をシリアル化するかどうかを指定する値を取得または設定します。 + 読み取り専用の型をシリアル化する場合は True、それ以外の場合は false。 + + + 簡単なディクショナリ形式を使用するかどうかを指定する値を取得または設定します。 + 単純なディクショナリ形式を使用する場合は True、それ以外の場合は false。 + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ko/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ko/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..7fb1118 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ko/System.Runtime.Serialization.Json.xml @@ -0,0 +1,133 @@ + + + + System.Runtime.Serialization.Json + + + + 날짜-시간 형식 옵션을 지정합니다. + + + 형식 문자열을 사용하여 클래스의 새 인스턴스를 초기화합니다. + 서식 문자열입니다. + + + 형식 문자열과 형식 공급자를 사용하여 클래스의 새 인스턴스를 초기화합니다. + 형식 문자열입니다. + 서식 공급자입니다. + + + 여러 날짜 및 시간 구문 분석 메서드의 문자열 구문 분석 방법을 사용자 지정하는 형식 지정 옵션을 가져오거나 설정합니다. + 여러 날짜 및 시간 구문 분석 메서드의 문자열 구문 분석 방법을 사용자 지정하는 형식 지정 옵션입니다. + + + 형식을 제어하는 개체를 가져옵니다. + + + 날짜 또는 시간이 문자열로 표현되는 경우 생성된 서식을 제어하는 서식 문자열을 가져옵니다. + 날짜 또는 시간이 문자열로 표시되는 경우 만들어지는 서식을 제어하는 형식 문자열입니다. + + + 형식 정보를 내보내는 빈도를 지정합니다. + + + 항상 형식 정보를 내보냅니다. + + + 필요에 따라 형식 정보를 내보냅니다. + + + 형식 정보를 절대 내보내지 않습니다. + + + 개체를 JSON(JavaScript Object Notation)으로 serialize하고 JSON 데이터를 개체로 deserialize합니다.이 클래스는 상속될 수 없습니다. + + + 지정된 형식의 개체를 serialize하거나 deserialize하기 위해 클래스의 새 인스턴스를 초기화합니다. + serialize되거나 deserialize되는 인스턴스 형식입니다. + + + + 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체와 함께 개체 그래프에 있을 수 있는 알려진 형식 컬렉션을 serialize하거나 deserialize합니다. + serialize되거나 deserialize되는 인스턴스 형식입니다. + 개체 그래프에 있을 수 있는 형식을 포함하는 입니다. + + + + 클래스의 새 인스턴스를 초기화하여 지정된 형식 및 serializer 설정의 개체를 serialize하거나 deserialize합니다. + serialize되거나 deserialize되는 인스턴스 형식입니다. + JSON serializer에 대한 serializer 설정입니다. + + + 개체 그래프에서 날짜 및 시간 형식 항목의 서식을 가져옵니다. + 개체 그래프에서 날짜 및 시간 형식 항목의 서식입니다. + + + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정을 가져오거나 설정합니다. + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정입니다. + + + + 의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식의 컬렉션을 가져옵니다. + + 생성자에 알려진 형식으로 전달되는 예상 형식을 포함하는 입니다. + + + JSON(JavaScript Object Notation) 형식의 문서 스트림을 읽고 deserialize된 개체를 반환합니다. + deserialize된 개체입니다. + 읽을 입니다. + + + 읽기 전용 형식을 serialize하는지 여부를 지정하는 값을 가져오거나 설정합니다. + serialize 할 형식만 읽으려면 true이고, 그렇지 않으면 false입니다. + + + 간단한 사전 형식을 사용할지 여부를 지정하는 값을 가져오거나 설정합니다. + 간단한 사전 형식을 사용하려면 true이고, 그렇지 않으면 false입니다. + + + 지정된 개체를 JSON(JavaScript Object Notation) 데이터로 serialize하고 결과 JSON을 스트림에 씁니다. + 결과를 쓸 대상 입니다. + 스트림에 쓸 데이터를 포함하는 개체입니다. + serialize하고 있는 형식이 데이터 계약 규칙을 따르지 않는 경우. 특성이 형식에 적용되지 않은 경우를 예로 들 수 있습니다. + 쓰고 있는 인스턴스에 문제가 있는 경우 + serialize할 최대 개체 수가 초과된 경우. 속성을 확인합니다. + + + + 설정을 지정합니다. + + + + 클래스의 새 인스턴스를 초기화합니다. + + + 날짜와 시간 표시를 위한 문화권 형식을 정의하는 DateTimeFormat을 가져오거나 설정합니다. + 날짜와 시간 표시를 위한 문화권 형식을 정의하는 DateTimeFormat입니다. + + + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정을 가져오거나 설정합니다. + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정입니다. + + + DataContractJsonSerializerSettings의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식의 컬렉션을 가져오거나 설정합니다. + DataContractJsonSerializerSettings의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식의 컬렉션입니다. + + + 개체 그래프에서 serialize하거나 deserialize할 최대 항목 수를 가져오거나 설정합니다. + 개체 그래프에서 serialize하거나 deserialize할 최대 항목 수입니다. + + + 선택한 개체의 루트 이름을 가져오거나 설정합니다. + 선택한 개체의 루트 이름입니다. + + + 읽기 전용 형식을 serialize하는지 여부를 지정하는 값을 가져오거나 설정합니다. + serialize 할 형식만 읽으려면 True이고, 그렇지 않으면 false입니다. + + + 간단한 사전 형식을 사용할지 여부를 지정하는 값을 가져오거나 설정합니다. + 간단한 사전 형식을 사용하려면 True이고, 그렇지 않으면 false입니다. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ru/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ru/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..4a04d86 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/ru/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Задает параметры формата даты-времени. + + + Инициализирует новый экземпляр класса , используя строку формата. + Строка формата. + + + Инициализирует новый экземпляр класса , используя строку формата и поставщик формата. + Строка формата. + Поставщик формата. + + + Получает или задает параметры форматирования, задающие пользовательские настройки синтаксического анализа строки для ряда методов синтаксического анализа даты и времени. + Параметры форматирования, задающие пользовательские настройки синтаксического анализа строки для ряда методов синтаксического анализа даты и времени. + + + Получает объект, управляющий форматированием. + + + Получает строки формата для управления форматированием, получаемым, когда дата или время представлены в виде строки. + Строки формата для управления форматированием, получаемым, когда дата или время представлены в виде строки. + + + Определяет частоту выдачи сведений о типе. + + + Всегда для создания информации о типе. + + + По необходимости сообщать сведения о типе. + + + Никогда не сообщать сведения о типе. + + + Сериализует объекты в нотацию объектов JavaScript (JSON) и десериализует данные JSON в объекты.Этот класс не наследуется. + + + Инициализирует новый экземпляр класса для сериализации или десериализации объекта указанного типа. + Тип сериализуемых или десериализуемых экземпляров. + + + Инициализирует новый экземпляр класса для сериализации или десериализации объекта указанного типа с коллекцией известных типов, которые могут присутствовать в графе объекта. + Тип сериализуемых или десериализуемых экземпляров. + Интерфейс , принадлежащий к типу , в котором содержатся типы, которые могут присутствовать в графе объекта. + + + Инициализирует новый экземпляр класса для сериализации или десериализации объекта указанного типа и параметров сериализатора. + Тип сериализуемых или десериализуемых экземпляров. + Параметры сериализатора для сериализатора JSON. + + + Получает формат элементов типа "дата и время" в графе объектов. + Формат элементов типа "дата и время" в графе объектов. + + + Получает или задает параметры сериализатора контракта данных JSON для выдачи сведений о типе. + Параметры сериализатора контракта данных JSON для выдачи сведений о типе. + + + Возвращает коллекцию типов, которые могут присутствовать в графе объекта, сериализованном с использованием этого экземпляра класса . + Коллекция , которая содержит ожидаемые типы, переданные в качестве известных типов конструктору . + + + Выполняет чтение потока документа в формате JSON (нотации объектов JavaScript) и возвращает десериализованный объект. + Десериализованный объект. + Поток , подлежащий чтению. + + + Получает или задает значение, указывающее, следует ли сериализовать типы, доступные только для чтения. + Значение true для сериализации доступных только для чтения типов; в противном случае — значение false. + + + Получает или задает значение, указывающее, следует ли использовать простой формат словаря. + Значение true для использования простого формата словаря; в противном случае — значение false. + + + Сериализует указанный объект в данные нотации объектов JavaScript (JSON) и записывает полученные данные JSON в поток. + Поток , в который осуществляется запись. + Объект, содержащий данные для записи в поток. + Сериализуемый тип не соответствует правилам контракта данных.Например, к этому типу не применен атрибут . + Возникла проблема с записываемым экземпляром. + Превышено максимально допустимое количество объектов для сериализации.Проверьте свойство . + + + Задает параметры . + + + Инициализирует новый экземпляр класса . + + + Получает или задает DateTimeFormat, определяющий формат отображения даты и времени, соответствующий языку и региональным параметрам. + DateTimeFormat, определяющий формат отображения даты и времени, соответствующий языку и региональным параметрам. + + + Получает или задает параметры сериализатора контракта данных JSON для выдачи сведений о типе. + Параметры сериализатора контракта данных JSON для выдачи сведений о типе. + + + Получает или задает коллекцию типов, которые могут присутствовать в графе объекта, сериализованном с помощью этого DataContractJsonSerializerSettings. + Коллекция типов, которые могут присутствовать в графе объекта, сериализованном с помощью этого экземпляра класса DataContractJsonSerializerSettings. + + + Получает или задает максимальное количество элементов в графе объекта для сериализации или десериализации. + Максимальное количество элементов в графе объекта для сериализации или десериализации. + + + Получает или задает корневое имя выбранного объекта. + Имя корневого объекта выбранного объекта. + + + Получает или задает значение, указывающее, следует ли сериализовать типы, доступные только для чтения. + Значение True для сериализации доступных только для чтения типов; в противном случае — значение false. + + + Получает или задает значение, указывающее, следует ли использовать простой формат словаря. + Значение True для использования простого формата словаря; в противном случае — значение false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/zh-hans/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/zh-hans/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..afcb03c --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/zh-hans/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + 指定日期时间格式选择。 + + + 使用字符串格式初始化 类的新实例。 + 格式字符串。 + + + 使用格式字符串和格式提供方初始化 类的新实例。 + 格式字符串。 + 格式提供程序。 + + + 获取或设置格式设置选项,这些选项可自定义许多日期和时间分析方法的字符串分析方法。 + 自定义许多日期和时间分析方法的字符串的格式设置选项。 + + + 获取控制格式设置的对象。 + + + 当一个日期或时间被表示成字符串时,获取控制格式生成的格式字符串。 + 当一个日期或时间被表示成字符串时控制格式生成的格式字符串。 + + + 指定发出类型信息的频率。 + + + 始终发出类型信息。 + + + 根据需要发出类型信息。 + + + 从不发出类型信息。 + + + 将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。此类不能被继承。 + + + 初始化 类的新实例,以便序列化或反序列化指定类型的对象。 + 序列化或反序列化的实例的类型。 + + + 初始化 类的新实例,以便序列化或反序列化指定类型的对象以及可在对象图中呈现的已知类型的集合。 + 序列化或反序列化的实例的类型。 + 包含可在对象图中呈现类型的 。 + + + 初始化 类的新实例,以便序列化或反序列化指定类型和序列化设置的对象。 + 序列化或反序列化的实例的类型。 + JSON 序列化程序序列化程序设置。 + + + 获取在对象关系图中日期和时间种类项的格式。 + 在对象关系图中日期和时间种类项的格式。 + + + 获取或设置用于发出类型信息的数据协定 JSON 序列化程序设置。 + 数据协定 JSON 序列化程序设置可发出类型信息。 + + + 获取一个类型集合,这些类型可呈现在使用此 实例序列化的对象图中。 + 一个 ,它包含作为已知类型传入 构造函数的预期类型。 + + + 以 JSON(JavaScript 对象表示法)格式读取文档流,并返回反序列化的对象。 + 反序列化的对象。 + 要读取的 。 + + + 获取或设置指定是否序列化只读类型的值。 + 仅序列化读取类型,则为 true;否则 false。 + + + 获取或设置指定是否使用简单字典格式的值。 + 使用简单的字典格式,则为 true;否则为 false。 + + + 将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中。 + 用于写入 。 + 包含要写入流的数据的对象。 + 正在序列化的类型不符合数据协定规则。例如, 特性未应用于该类型。 + 正在写入的实例出现问题。 + 已超出要序列化的对象的最大数量。请检查 属性。 + + + 指定 设置。 + + + 初始化 类的新实例。 + + + 获取或设置定义显示日期和时间的的相应于区域性格式的 DateTimeFormat。 + DateTimeFormat 定义适合区域性的、显示日期和时间的格式。 + + + 获取或设置用于发出类型信息的数据协定 JSON 序列化程序设置。 + 数据协定 JSON 序列化程序设置可发出类型信息。 + + + 获取或设置可能存在于通过使用此实例 DataContractSerializerSettings 所序列化的对象关系图中的类型集合。 + 一个类型集合,这些类型可能出现在使用此 DataContractSerializerSettings 实例序列化的对象图中。 + + + 获取或设置一个要序列化或反序列化的对象图中的最大项数。 + 要序列化或反序列化的对象图中的最大项数。 + + + 获取或设置选定对象的根名称。 + 选中对象的根名称。 + + + 获取或设置指定是否序列化只读类型的值。 + 仅序列化读取类型,则为 True;否则 false。 + + + 获取或设置指定是否使用简单字典格式的值。 + 使用简单的字典格式,则为 True;否则为 false。 + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/zh-hant/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/zh-hant/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..6171549 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netcore50/zh-hant/System.Runtime.Serialization.Json.xml @@ -0,0 +1,129 @@ + + + + System.Runtime.Serialization.Json + + + + 指定日期時間格式選項。 + + + 使用格式字串初始化 類別的新執行個體。 + 格式字串。 + + + 使用格式字串和格式提供者,初始化 類別的新執行個體。 + 格式字串。 + 格式提供者。 + + + 取得或設定格式化選項,這些選項會自訂一些日期和時間剖析方法的字串剖析。 + 格式化選項,這些選項會自訂一些日期和時間剖析方法的字串剖析。 + + + 取得控制格式的物件。 + + + 取得當日期或時間表示為字串時,用來控制所產生格式的格式字串。 + 當日期或時間表示為字串時,用來控制生成格式的格式字串。 + + + 指定發出型別資訊的頻率。 + + + 永遠要發出型別資訊。 + + + 視需要發出型別資訊。 + + + 永遠不要發出型別資訊。 + + + 將物件序列化為 JavaScript 物件標記法 (JSON) 以及將 JSON 資料還原序列化為物件。此類別無法被繼承。 + + + 初始化 類別的新執行個體,以序列化或還原序列化指定之型別的物件。 + 已序列化或還原序列化之執行個體的型別。 + + + 初始化 類別的新執行個體,以序列化或還原序列化所指定型別的物件,以及可能存在物件圖形中的已知型別集合。 + 已序列化或還原序列化之執行個體的型別。 + + ,其中包含可能存在物件圖形中的型別。 + + + 初始化 類別的新執行個體,以序列化或還原序列化所指定型別及序列化程式設定的物件。 + 已序列化或還原序列化之執行個體的型別。 + JSON 序列化程式的序列化程式設定。 + + + 取得物件圖形中日期和時間型別項目的格式。 + 物件圖形中日期和時間型別項目的格式。 + + + 取得或設定要發出型別資訊的資料合約 JSON 序列化程式設定。 + 要發出型別資訊的資料合約 JSON 序列化程式設定。 + + + 取得型別的集合,這些型別可能會存在於使用這個 執行個體所序列化的物件圖形中。 + + ,其中包含已當做已知型別傳入至 建構函式的預期型別。 + + + 讀取 JSON (JavaScript 物件標記法) 格式的文件資料流,然後傳回已還原序列化的物件。 + 還原序列化的物件。 + 要讀取的 。 + + + 取得或設定值,指定是否要序列化唯讀型別。 + true 表示序列化唯讀型別,否則為 false。 + + + 取得或設定值,指定是否要使用簡單的字典格式。 + true 表示使用一個簡單的字典格式,否則為 false。 + + + 將指定物件序列化為 JavaScript 物件標記法 (JSON) 資料,然後將產生的 JSON 寫入資料流。 + 要寫入的 。 + 包含要寫入至資料流之資料的物件。 + 正在序列化的型別不符合資料合約規則。例如, 屬性尚未套用至此型別。 + 正在寫入的執行個體發生問題。 + 已超過要序列化的物件數目上限。檢查 屬性。 + + + 指定 設定。 + + + 初始化 類別的新執行個體。 + + + 取得或設定 DateTimeFormat,定義日期和時間在文化特性上適當的顯示格式。 + DateTimeFormat,可定義日期和時間在文化特性上適當的顯示格式。 + + + 取得或設定要發出型別資訊的資料合約 JSON 序列化程式設定。 + 要發出型別資訊的資料合約 JSON 序列化程式設定。 + + + 取得或設定型別的集合,這些型別可能會存在於使用這個 DataContractJsonSerializerSettings 執行個體所序列化的物件圖形中。 + 型別的集合,這些型別可能會存在於使用這個 DataContractJsonSerializerSettings 執行個體所序列化的物件圖形中。 + + + 取得或設定物件圖形中要序列化或還原序列化的最大項目數。 + 物件圖形中要序列化或還原序列化的最大項目數。 + + + 取得或設定所選取物件的根名稱。 + 所選物件的根名稱。 + + + 取得或設定值,指定是否要序列化唯讀型別。 + True 表示序列化唯讀型別,否則為 false。 + + + 取得或設定值,指定是否要使用簡單的字典格式。 + True 表示使用一個簡單的字典格式,否則為 false。 + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/System.Runtime.Serialization.Json.dll b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/System.Runtime.Serialization.Json.dll new file mode 100644 index 0000000..8ab0cb3 Binary files /dev/null and b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/System.Runtime.Serialization.Json.dll differ diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..055a449 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Specifies date-time format options. + + + Initializes a new instance of the class using the format string. + The format string. + + + Initializes a new instance of the class using the format string and format provider. + The format sting. + The format provider. + + + Gets or sets the formatting options that customize string parsing for some date and time parsing methods. + The formatting options that customize string parsing for some date and time parsing methods. + + + Gets an object that controls formatting. + + + Gets the format strings to control the formatting produced when a date or time is represented as a string. + The format strings to control the formatting produced when a date or time is represented as a string. + + + Specifies how often to emit type information. + + + Always to emit type information. + + + As needed emit type information. + + + Never to emit type information. + + + Serializes objects to the JavaScript Object Notation (JSON) and deserializes JSON data to objects. This class cannot be inherited. + + + Initializes a new instance of the class to serialize or deserialize an object of the specified type. + The type of the instances that is serialized or deserialized. + + + Initializes a new instance of the class to serialize or deserialize an object of the specified type, with a collection of known types that may be present in the object graph. + The type of the instances that are serialized or deserialized. + An of that contains the types that may be present in the object graph. + + + Initializes a new instance of the class to serialize or deserialize an object of the specified type and serializer settings. + The type of the instances that is serialized or deserialized. + The serializer settings for the JSON serializer. + + + Gets the format of the date and time type items in object graph. + The format of the date and time type items in object graph. + + + Gets or sets the data contract JSON serializer settings to emit type information. + The data contract JSON serializer settings to emit type information. + + + Gets a collection of types that may be present in the object graph serialized using this instance of the . + A that contains the expected types passed in as known types to the constructor. + + + Reads a document stream in the JSON (JavaScript Object Notation) format and returns the deserialized object. + The deserialized object. + The to be read. + + + Gets or sets a value that specifies whether to serialize read only types. + true to serialize read only types; otherwise false. + + + Gets or sets a value that specifies whether to use a simple dictionary format. + true to use a simple dictionary format; otherwise, false. + + + Serializes a specified object to JavaScript Object Notation (JSON) data and writes the resulting JSON to a stream. + The that is written to. + The object that contains the data to write to the stream. + The type being serialized does not conform to data contract rules. For example, the attribute has not been applied to the type. + There is a problem with the instance being written. + The maximum number of objects to serialize has been exceeded. Check the property. + + + Specifies settings. + + + Initializes a new instance of the class. + + + Gets or sets a DateTimeFormat that defines the culturally appropriate format of displaying dates and times. + The DateTimeFormat that defines the culturally appropriate format of displaying dates and times. + + + Gets or sets the data contract JSON serializer settings to emit type information. + The data contract JSON serializer settings to emit type information. + + + Gets or sets a collection of types that may be present in the object graph serialized using this instance the DataContractJsonSerializerSettings. + A collection of types that may be present in the object graph serialized using this instance the DataContractJsonSerializerSettings. + + + Gets or sets the maximum number of items in an object graph to serialize or deserialize. + The maximum number of items in an object graph to serialize or deserialize. + + + Gets or sets the root name of the selected object. + The root name of the selected object. + + + Gets or sets a value that specifies whether to serialize read only types. + True to serialize read only types; otherwise false. + + + Gets or sets a value that specifies whether to use a simple dictionary format. + True to use a simple dictionary format; otherwise, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/de/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/de/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..6cdd7bb --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/de/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Gibt Datum/Zeit-Formatoptionen an. + + + Initialisiert eine neue Instanz der -Klasse unter Verwendung der Formatzeichenfolge. + Die Formatzeichenfolge. + + + Initialisiert eine neue Instanz der -Klasse unter Verwendung der Formatzeichenfolge und Formatanbieters. + Die Formatzeichenfolge. + Der Formatanbieter. + + + Ruft die Formatierungsoptionen ab bzw. legt diese fest, mit denen die Art der Analyse einer Zeichenfolge für eine Reihe von Datums- und Uhrzeit-Analysemethoden angepasst wird. + Die Formatierungsoptionen, mit denen die Art der Analyse einer Zeichenfolge für eine Reihe von Datums- und Uhrzeit-Analysemethoden angepasst wird. + + + Ruft ein Objekt zum Steuern der Formatierung ab. + + + Ruft die Formatzeichenfolgen zur Festlegung des Formatierungsergebnisses ab, wenn ein Datums- oder Zeitwert als Zeichenfolge dargestellt werden soll. + Die Formatzeichenfolgen zur Festlegung des Formatierungsergebnisses, wenn ein Datums- oder Zeitwert als Zeichenfolge dargestellt werden soll. + + + Gibt an, wie oft Typinformationen ausgegeben werden. + + + immer Typinformationen ausgeben. + + + Bei Bedarf Typinformationen ausgeben. + + + Typinformationen sollen niemals ausgeben werden. + + + Serialisiert Objekte in die JavaScript Object Notation (JSON) und deserialisiert JSON-Daten zu Objekten.Diese Klasse kann nicht vererbt werden. + + + Initialisiert eine neue Instanz der -Klasse, um ein Objekt des genannten Typs zu serialisieren bzw. zu deserialisieren. + Der Typ der Instanzen, die serialisiert oder deserialisiert werden. + + + Initialisiert eine neue Instanz der -Klasse, um ein Objekt des genannten Typs mit einer Auflistung bekannter Typen, die ggf. im Objektdiagramm vorhanden sind, zu serialisieren bzw. zu deserialisieren. + Der Typ der Instanzen, die serialisiert oder deserialisiert werden. + Ein -Objekt des Typs , das die in dem Objektdiagramm enthaltenen Typen angibt (falls vorhanden). + + + Initialisiert eine neue Instanz der -Klasse, um ein Objekt des genannten Typs und Serialisierungsprogrammeinstellungen zu serialisieren bzw. zu deserialisieren. + Der Typ der Instanzen, die serialisiert oder deserialisiert werden. + Die Serialisierungsprogrammeinstellungen für das JSON-Serialisierungsprogramm. + + + Ruft das Format der Elemente des Typs Datum/Zeit im Objektdiagramm ab. + Das Format der Elemente des Typs Datum/Zeit im Objektdiagramm. + + + Ruft die JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen ab oder legt diese fest. + Die Einstellungen der JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen. + + + Ruft eine Auflistung der Typen in einem Objektdiagramm ab, die mithilfe einer Instanz des -Objekts serialisiert werden. + Ein -Objekt, das die erwarteten Typen enthält, die als bekannte Typen an den -Konstruktor übergeben werden. + + + Liest einen Dokumentstream im JSON-Format (JavaScript Object Notation) und gibt das deserialisierte Objekt zurück. + Das deserialisierte Objekt. + Das -Objekt, das gelesen werden soll. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob schreibgeschützte Typen serialisiert werden sollen. + true, um schreibgeschützte Typen zu serialisieren; andernfalls false. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob ein einfaches Wörterbuchformat verwendet werden soll. + true, um ein einfaches Wörterbuchformat zu verwenden; andernfalls false. + + + Serialisiert ein angegebenes Objekt in JSON-Daten (JavaScript Object Notation) und schreibt die resultierenden JSON-Daten in einen Stream. + Das -Objekt, in das geschrieben wird. + Das Objekt, das die in den Stream zu schreibenden Daten enthält. + Der serialisierte Typ entspricht nicht den Datenvertragsregeln.Das -Attribut wurde z. B. nicht auf den Typ angewendet. + Es liegt ein Problem mit der Instanz vor, die geschrieben wird. + Die maximale Anzahl von zu serialisierenden Objekten wurde überschritten.Überprüfen Sie die -Eigenschaft. + + + Gibt -Einstellungen an. + + + Initialisiert eine neue Instanz der -Klasse. + + + Ruft ein DateTimeFormat ab, das das für die Kultur spezifische Format zum Anzeigen von Datumsangaben und Uhrzeiten definiert, oder legt es fest. + Das Datums- und Zeitformat, das für die Kultur spezifische Format zum Anzeigen von Datumsangaben und Uhrzeiten definiert, oder legt diese fest. + + + Ruft die JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen ab oder legt diese fest. + Die Einstellungen der JSON-Serialisierungseinstellungen für den Datenvertrag zum Ausgeben von Typinformationen. + + + Ruft eine Auflistung der Typen im Objektdiagramm ab, die mithilfe dieser Instanz von DataContractJsonSerializerSettings serialisiert wurden, oder legt sie fest. + Eine Sammlung der Typen im Objektdiagramm ab, die mithilfe dieser Instanz von DataContractJsonSerializerSettings serialisiert wurden. + + + Ruft die maximale Anzahl von Elementen in einem Objektdiagramm ab oder legt sie fest, die serialisiert oder deserialisiert werden. + Die maximale Anzahl von Elementen in einem Objektdiagramm, die serialisiert oder deserialisiert werden. + + + Übernimmt oder bestimmt den Stammnamen des ausgewählten Objekts. + Der Stammname des ausgewählten Objekts. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob schreibgeschützte Typen serialisiert werden sollen. + True, um schreibgeschützte Typen zu serialisieren; andernfalls false. + + + Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob ein einfaches Wörterbuchformat verwendet werden soll. + True, um ein einfaches Wörterbuchformat zu verwenden; andernfalls false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/es/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/es/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..5c567ee --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/es/System.Runtime.Serialization.Json.xml @@ -0,0 +1,131 @@ + + + + System.Runtime.Serialization.Json + + + + Especifica las opciones de formato de fecha y hora. + + + Inicializa una nueva instancia de la clase con la cadena de formato. + Cadena de formato. + + + Inicializa una nueva instancia de la clase usando la cadena de formato y proveedor de formato. + Cadena de formato. + Proveedor de formatos. + + + Obtiene o establece las opciones de formato que personalizan el análisis de cadenas de algunos métodos de análisis de fecha y hora. + Opciones de formato que personalizan el análisis de cadenas de algunos métodos de análisis de fecha y hora. + + + Obtiene un objeto que controla las operaciones de formato. + + + Obtiene las cadenas de formato para controlar el formato que se produce cuando una fecha o una hora se representa como cadena. + Cadenas de formato para controlar el formato mostrado cuando una fecha o una hora se representa como una cadena. + + + Especifica la frecuencia para emitir información de tipo. + + + Emitir siempre información de tipo. + + + Según sea necesario emitir información de tipo. + + + No emitir jamás información de tipo. + + + Serializa objetos a JavaScript Object Notation (JSON) y deserializa datos de JSON a objetos.Esta clase no puede heredarse. + + + Inicializa una nueva instancia de la clase para serializar o deserializar un objeto del tipo especificado. + Tipo de las instancias que se serializa o deserializa. + + + Inicializa una nueva instancia de la clase para serializar o deserializar un objeto del tipo especificado con una colección de tipos conocidos que pueden encontrarse en el gráfico de objetos. + Tipo de las instancias serializadas o deserializadas. + + de que contiene los tipos que pueden encontrarse en el gráfico de objetos. + + + Inicializa una nueva instancia de la clase para serializar o deserializar un objeto del tipo y configuración de serializador especificados. + Tipo de las instancias que se serializa o deserializa. + La configuración de serializador para el serializador JSON. + + + Obtiene el formato de los elementos de tipo fecha y hora en un gráfico de objetos. + Formato de los elementos de tipo de fecha y hora en un gráfico de objetos. + + + Obtiene o establece la configuración del serializador JSON de contrato de datos para emitir información de tipo. + Configuración del serializador JSON de contrato de datos para emitir información de tipo. + + + Obtiene una colección de tipos que pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de . + + que contiene los tipos esperados pasados como tipos conocidos por el constructor . + + + Lee una secuencia del documento en el formato JSON (JavaScript Object Notation) y devuelve el objeto deserializado. + El objeto deserializado. + + que se leerá. + + + Obtiene o establece un valor que especifica si se van a serializar tipos de solo lectura. + true para serializar tipos de solo lectura; de lo contrario, false. + + + Obtiene o establece un valor que especifica si se va a utilizar un formato de diccionario simple. + true para usar un formato simple de diccionario; de lo contrario, false. + + + Serializa un objeto especificado a datos JavaScript Object Notation (JSON) y escribe el JSON resultante en una secuencia. + + en el que se escribe. + El objeto que contiene los datos que se van a escribir en la secuencia. + El tipo que se está serializando no se ajusta a las reglas del contrato de datos.Por ejemplo, el atributo no se ha aplicado al tipo. + Hay un problema con la instancia que se está escribiendo. + Se ha superado el número máximo de objetos para serializar.Compruebe la propiedad . + + + Especifica valores de configuración de . + + + Inicializa una nueva instancia de la clase . + + + Obtiene o establece un DateTimeFormat que define el formato de presentación de fechas y horas culturalmente apropiado. + DateTimeFormat que define el formato de presentación de fechas y horas culturalmente apropiado. + + + Obtiene o establece la configuración del serializador JSON de contrato de datos para emitir información de tipo. + Configuración del serializador JSON de contrato de datos para emitir información de tipo. + + + Obtiene o establece una colección de tipos que pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de DataContractJsonSerializerSettings. + Colección de tipos que pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de DataContractJsonSerializerSettings. + + + Obtiene o define el número máximo de elementos en un gráfico de objetos que se vaya a serializar o deserializar. + Número máximo de elementos de un gráfico de objetos que se van a serializar o deserializar. + + + Obtiene o establece el nombre raíz del objeto seleccionado. + El nombre raíz del objeto seleccionado. + + + Obtiene o establece un valor que especifica si se van a serializar tipos de solo lectura. + True para serializar tipos de solo lectura; de lo contrario, false. + + + Obtiene o establece un valor que especifica si se va a utilizar un formato de diccionario simple. + True para usar un formato simple de diccionario; de lo contrario, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/fr/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/fr/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..56ab761 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/fr/System.Runtime.Serialization.Json.xml @@ -0,0 +1,131 @@ + + + + System.Runtime.Serialization.Json + + + + Spécifie les options du format de date/heure. + + + Initialise une nouvelle instance de la classe à l'aide de la chaîne de format spécifiée. + Chaîne de format. + + + Initialise une nouvelle instance de la classe avec la chaîne de format et le fournisseur de format spécifiés. + Chaîne de format. + Fournisseur de format. + + + Obtient ou définit les options de mise en forme qui personnalisent l'analyse de chaîne pour certaines méthodes d'analyse de la date et de l'heure. + Options de mise en forme qui personnalisent l'analyse de chaîne pour plusieurs méthodes d'analyse de date et d'heure. + + + Obtient un objet qui contrôle la mise en forme. + + + Obtient les chaînes de format permettant de contrôler la mise en forme produite lorsqu'une date ou une heure est représentée sous forme de chaîne. + Chaînes de format permettant de contrôler la mise en forme produite lorsqu'une date ou une heure est représentée sous forme de chaîne. + + + Spécifie la fréquence d'émission des informations de type. + + + Est toujours en mesure d'émettre des informations de type. + + + Selon les besoins, émission des informations de type. + + + Ne jamais émettre des informations de type. + + + Sérialise des objets au format JSON (JavaScript Object Notation) et désérialise les données JSON vers des objets.Cette classe ne peut pas être héritée. + + + Initialise une nouvelle instance de la classe pour sérialiser ou désérialiser un objet du type spécifié. + Type des instances sérialisées ou désérialisées. + + + Initialise une nouvelle instance de la classe pour sérialiser ou désérialiser un objet du type spécifié, avec une collection de types connus pouvant être présents dans le graphique d'objets. + Type des instances sérialisées ou désérialisées. + + de qui contient les types pouvant être présents dans le graphique d'objets. + + + Initialise une nouvelle instance de la classe pour sérialiser ou désérialiser un objet avec le type et les paramètres de sérialiseur spécifiés. + Type des instances sérialisées ou désérialisées. + Paramètres de sérialiseur pour le sérialiseur JSON. + + + Obtient le format des éléments de type date et heure dans le graphique d'objet. + Format des éléments de type date et heure dans le graphique d'objet. + + + Obtient ou définit les paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + Paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + + + Obtient une collection des types pouvant être présents dans le graphique d'objets sérialisé à l'aide de cette instance de . + + qui contient les types attendus passés en tant que types connus au constructeur . + + + Lit un flux de document au format JSON (JavaScript Object Notation) et retourne l'objet désérialisé. + Objet désérialisé. + + à lire. + + + Obtient ou définit une valeur qui spécifie s'il faut sérialiser des types de lecture seule. + true pour sérialiser des types en lecture seule ; sinon false. + + + Obtient ou définit une valeur qui spécifie s'il faut utiliser un format de dictionnaire simple. + true pour utiliser un format de dictionnaire simple ; sinon, false. + + + Sérialise un objet spécifié vers des données JSON (JavaScript Objet Notation) et écrit le JSON obtenu dans un flux. + + dans lequel il est écrit. + L'objet qui contient les données à écrire dans le flux. + Le type en cours de sérialisation n'est pas conforme aux règles de contrat de données.Par exemple, l'attribut n'a pas été appliqué au type. + Il y a un problème avec l'instance en cours d'écriture. + Le nombre maximal d'objets à sérialiser a été dépassé.Vérifiez la propriété . + + + Spécifie les paramètres . + + + Initialise une nouvelle instance de la classe . + + + Obtient ou définit un DateTimeFormat qui définit le format d'affichage des dates et de l'heure approprié pour la culture. + DateTimeFormat qui définit le format d'affichage des dates et de l'heure approprié pour la culture. + + + Obtient ou définit les paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + Paramètres du sérialiseur JSON de contrat de données pour l'émission des informations de type. + + + Obtient ou définit une collection des types pouvant être présents dans le graphique d'objets sérialisé à l'aide de l'instance DataContractJsonSerializerSettings. + Collection des types pouvant être présents dans le graphique d'objets sérialisé à l'aide de cette instance DataContractJsonSerializerSettings. + + + Obtient ou définit le nombre maximal d'éléments à sérialiser ou désérialiser dans un graphique d'objets. + Nombre maximal d'éléments à sérialiser ou désérialiser dans un graphique d'objets. + + + Obtient ou définit le nom racine de l'objet sélectionné. + Nom racine de l'objet sélectionné. + + + Obtient ou définit une valeur qui spécifie s'il faut sérialiser des types de lecture seule. + True pour sérialiser des types en lecture seule ; sinon false. + + + Obtient ou définit une valeur qui spécifie s'il faut utiliser un format de dictionnaire simple. + True pour utiliser un format de dictionnaire simple ; sinon, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/it/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/it/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..9370a9a --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/it/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Specifica le opzioni di formato di data e ora. + + + Inizializza una nuova istanza della classe utilizzando la stringa del formato. + Stringa di formato. + + + Inizializza una nuova istanza della classe utilizzando la stringa e il provider del formato. + Stringa di formato. + Provider di formato. + + + Ottiene o imposta le opzioni di formattazione per la personalizzazione della modalità di analisi dell'ora e il giorno. + Opzioni di formattazione per la personalizzazione della modalità di analisi dell'ora e il giorno. + + + Recupera un oggetto che controlla la formattazione. + + + Ottiene le stringhe di formato per controllare la formattazione prodotta quando una data o un'ora è rappresentata come stringa. + Le stringhe di formato per controllare la formattazione prodotta quando una data o un'ora è rappresentata come stringa. + + + Specifica la frequenza di generazione delle informazioni sul tipo. + + + Generare sempre informazioni sul tipo. + + + In base alle necessità, genera informazioni sul tipo. + + + Mai generare informazioni sul tipo. + + + Serializza gli oggetti in JSON (JavaScript Object Notation) e deserializza i dati JSON in oggetti.La classe non può essere ereditata. + + + Inizializza una nuova istanza della classe per serializzare o deserializzare un oggetto del tipo specificato. + Tipo delle istanze serializzato o deserializzato. + + + Inizializza una nuova istanza della classe per serializzare o deserializzare un oggetto del tipo specificato, con una raccolta di tipi noti che possono essere presenti nell'oggetto grafico. + Tipo delle istanze serializzate o deserializzate. + Interfaccia di contenente i tipi che possono essere presenti nell'oggetto grafico. + + + Inizializza una nuova istanza della classe per serializzare o deserializzare un oggetto del tipo e delle impostazioni del serializzatore specificati. + Tipo delle istanze serializzato o deserializzato. + Impostazioni del serializzatore JSON. + + + Ottiene il formato degli elementi di tipo data e ora in un oggetto grafico. + Il formato degli elementi di tipo data e ora in un oggetto grafico. + + + Ottiene o imposta le impostazioni del serializzatore JSON del contratto dati per generare informazioni sul tipo. + Le impostazioni del serializzatore del contratto dati JSON per generare informazioni sul tipo. + + + Ottiene una raccolta di tipi che possono essere presenti nell'oggetto grafico serializzato utilizzando l'istanza di . + Classe contenente tipi previsti passati come tipi noti al costruttore . + + + Legge un flusso di documenti in formato JSON (JavaScript Object Notation) e restituisce l'oggetto deserializzato. + Oggetto deserializzato. + Classe da leggere. + + + Ottiene o imposta un valore che specifica se serializzare i tipi di sola lettura. + true per serializzare i tipi di sola lettura; in caso contrario, false. + + + Ottiene o imposta un valore che specifica se utilizzare un formato di dizionario semplice. + true per utilizzare un formato di dizionario semplice; in caso contrario, false. + + + Serializza un oggetto specificato in dati JSON (JavaScript Object Notation) e scrive il risultato JSON in un flusso. + Classe in cui viene eseguita la scrittura. + Oggetto che contiene i dati da scrivere nel flusso. + Il tipo serializzato non è conforme alle regole del contratto dati.Ad esempio, l'attributo non è stato applicato al tipo. + Si è verificato un problema durante la scrittura dell'istanza. + È stato superato il numero massimo di oggetti da serializzare.Verificare la proprietà . + + + Specifica le impostazioni per . + + + Inizializza una nuova istanza della classe . + + + Ottiene o imposta DateTimeFormat che definisce il formato culturalmente appropriato per la visualizzazione della data e dell'ora. + Valore DateTimeFormat che definisce il formato culturalmente appropriato per la visualizzazione della data e dell'ora. + + + Ottiene o imposta le impostazioni del serializzatore JSON del contratto dati per generare informazioni sul tipo. + Le impostazioni del serializzatore del contratto dati JSON per generare informazioni sul tipo. + + + Ottiene o imposta una raccolta di tipi che possono essere presenti nel grafico di oggetti serializzato utilizzando l'istanza di DataContractJsonSerializerSettings. + Raccolta dei tipi che possono essere presenti nel grafico di oggetti serializzato utilizzando l'istanza di DataContractJsonSerializerSettings. + + + Ottiene o imposta il numero massimo di elementi nell'oggetto grafico da serializzare o deserializzare. + Numero massimo di elementi di un oggetto grafico da serializzare o deserializzare. + + + Ottiene o imposta il nome radice dell'oggetto selezionato. + Nome radice dell'oggetto selezionato. + + + Ottiene o imposta un valore che specifica se serializzare i tipi di sola lettura. + True per serializzare i tipi di sola lettura; in caso contrario, false. + + + Ottiene o imposta un valore che specifica se utilizzare un formato di dizionario semplice. + True per utilizzare un formato di dizionario semplice; in caso contrario, false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ja/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ja/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..0499511 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ja/System.Runtime.Serialization.Json.xml @@ -0,0 +1,133 @@ + + + + System.Runtime.Serialization.Json + + + + 日付/時刻の書式オプションを指定します。 + + + 書式文字列を使用して、 クラスの新しいインスタンスを初期化します。 + 書式指定文字列。 + + + 書式文字列と書式プロバイダーを使用して、 クラスの新しいインスタンスを初期化します。 + 書式指定文字列。 + 書式プロバイダー。 + + + いくつかの日時解析メソッドによる文字列の解析をカスタマイズする形式指定オプションを取得または設定します。 + いくつかの日時解析メソッドによる文字列の解析をカスタマイズする形式指定オプション。 + + + 書式を制御するオブジェクトを取得します。 + + + 日付または時刻が文字列として表されるときに生成される書式を制御するための書式指定文字列を取得します。 + 日付または時刻が文字列として表されるときに生成される書式を制御するための書式指定文字列。 + + + 型情報を出力するための頻度を指定します。 + + + 常に型情報を出力します。 + + + 必要に応じて型情報を出力します。 + + + 常に型情報を出力しません。 + + + オブジェクトを JSON (JavaScript Object Notation) にシリアル化し、JSON データをオブジェクトに逆シリアル化します。このクラスは継承できません。 + + + + クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。 + シリアル化または逆シリアル化されるインスタンスの型。 + + + + クラスの新しいインスタンスを初期化し、指定した型のオブジェクトと、オブジェクト グラフ内に存在可能な既知の型のコレクションをシリアル化または逆シリアル化します。 + シリアル化または逆シリアル化されるインスタンスの型。 + オブジェクト グラフ内に存在可能な型を含む 。 + + + 指定した型とシリアライザー設定のオブジェクトをシリアル化または逆シリアル化する クラスの新しいインスタンスを初期化します。 + シリアル化または逆シリアル化されるインスタンスの型。 + JSON シリアライザーのシリアライザーの設定。 + + + オブジェクト グラフの日付型および時刻型の項目の書式を取得します。 + オブジェクト グラフの日付型および時刻型の項目の書式。 + + + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定を取得または設定します。 + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定。 + + + + のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクションを取得します。 + + コンストラクターに既知の型として渡される、想定される型を含む + + + ドキュメント ストリームを JSON (JavaScript Object Notation) 形式で読み取り、逆シリアル化されたオブジェクトを返します。 + 逆シリアル化されたオブジェクト。 + 読み取られる 。 + + + 読み取り専用の型をシリアル化するかどうかを指定する値を取得または設定します。 + 読み取り専用の型をシリアル化する場合は true、それ以外の場合は false。 + + + 簡単なディクショナリ形式を使用するかどうかを指定する値を取得または設定します。 + 単純なディクショナリ形式を使用する場合は true、それ以外の場合は false。 + + + 指定したオブジェクトを JSON (JavaScript Object Notation) データにシリアル化し、生成された JSON をストリームに書き込みます。 + 書き込まれる 。 + ストリームに書き込むデータを格納するオブジェクト。 + シリアル化される型がデータ コントラクト規則に準拠していません。たとえば、 属性が型に適用されていません。 + 書き込まれているインスタンスに問題があります。 + シリアル化されるオブジェクトが最大数を超えました。 プロパティをチェックします。 + + + + の設定を指定します。 + + + + クラスの新しいインスタンスを初期化します。 + + + カルチャに対応する、日時の表示形式を定義する DateTimeFormat を取得または設定します。 + カルチャに対応する、日時の表示形式を定義する DateTimeFormat。 + + + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定を取得または設定します。 + 型情報を出力するデータ コントラクトの JSON シリアライザーの設定。 + + + DataContractJsonSerializerSettings のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクションを取得または設定します。 + DataContractJsonSerializerSettings のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクション。 + + + シリアル化または逆シリアル化するオブジェクト グラフ内の項目の最大数を取得または設定します。 + シリアル化または逆シリアル化するオブジェクト グラフ内の項目の最大数。 + + + 選択したオブジェクトのルート名を取得または設定します。 + 選択されたオブジェクトのルート名。 + + + 読み取り専用の型をシリアル化するかどうかを指定する値を取得または設定します。 + 読み取り専用の型をシリアル化する場合は True、それ以外の場合は false。 + + + 簡単なディクショナリ形式を使用するかどうかを指定する値を取得または設定します。 + 単純なディクショナリ形式を使用する場合は True、それ以外の場合は false。 + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ko/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ko/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..7fb1118 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ko/System.Runtime.Serialization.Json.xml @@ -0,0 +1,133 @@ + + + + System.Runtime.Serialization.Json + + + + 날짜-시간 형식 옵션을 지정합니다. + + + 형식 문자열을 사용하여 클래스의 새 인스턴스를 초기화합니다. + 서식 문자열입니다. + + + 형식 문자열과 형식 공급자를 사용하여 클래스의 새 인스턴스를 초기화합니다. + 형식 문자열입니다. + 서식 공급자입니다. + + + 여러 날짜 및 시간 구문 분석 메서드의 문자열 구문 분석 방법을 사용자 지정하는 형식 지정 옵션을 가져오거나 설정합니다. + 여러 날짜 및 시간 구문 분석 메서드의 문자열 구문 분석 방법을 사용자 지정하는 형식 지정 옵션입니다. + + + 형식을 제어하는 개체를 가져옵니다. + + + 날짜 또는 시간이 문자열로 표현되는 경우 생성된 서식을 제어하는 서식 문자열을 가져옵니다. + 날짜 또는 시간이 문자열로 표시되는 경우 만들어지는 서식을 제어하는 형식 문자열입니다. + + + 형식 정보를 내보내는 빈도를 지정합니다. + + + 항상 형식 정보를 내보냅니다. + + + 필요에 따라 형식 정보를 내보냅니다. + + + 형식 정보를 절대 내보내지 않습니다. + + + 개체를 JSON(JavaScript Object Notation)으로 serialize하고 JSON 데이터를 개체로 deserialize합니다.이 클래스는 상속될 수 없습니다. + + + 지정된 형식의 개체를 serialize하거나 deserialize하기 위해 클래스의 새 인스턴스를 초기화합니다. + serialize되거나 deserialize되는 인스턴스 형식입니다. + + + + 클래스의 새 인스턴스를 초기화하여 지정된 형식의 개체와 함께 개체 그래프에 있을 수 있는 알려진 형식 컬렉션을 serialize하거나 deserialize합니다. + serialize되거나 deserialize되는 인스턴스 형식입니다. + 개체 그래프에 있을 수 있는 형식을 포함하는 입니다. + + + + 클래스의 새 인스턴스를 초기화하여 지정된 형식 및 serializer 설정의 개체를 serialize하거나 deserialize합니다. + serialize되거나 deserialize되는 인스턴스 형식입니다. + JSON serializer에 대한 serializer 설정입니다. + + + 개체 그래프에서 날짜 및 시간 형식 항목의 서식을 가져옵니다. + 개체 그래프에서 날짜 및 시간 형식 항목의 서식입니다. + + + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정을 가져오거나 설정합니다. + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정입니다. + + + + 의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식의 컬렉션을 가져옵니다. + + 생성자에 알려진 형식으로 전달되는 예상 형식을 포함하는 입니다. + + + JSON(JavaScript Object Notation) 형식의 문서 스트림을 읽고 deserialize된 개체를 반환합니다. + deserialize된 개체입니다. + 읽을 입니다. + + + 읽기 전용 형식을 serialize하는지 여부를 지정하는 값을 가져오거나 설정합니다. + serialize 할 형식만 읽으려면 true이고, 그렇지 않으면 false입니다. + + + 간단한 사전 형식을 사용할지 여부를 지정하는 값을 가져오거나 설정합니다. + 간단한 사전 형식을 사용하려면 true이고, 그렇지 않으면 false입니다. + + + 지정된 개체를 JSON(JavaScript Object Notation) 데이터로 serialize하고 결과 JSON을 스트림에 씁니다. + 결과를 쓸 대상 입니다. + 스트림에 쓸 데이터를 포함하는 개체입니다. + serialize하고 있는 형식이 데이터 계약 규칙을 따르지 않는 경우. 특성이 형식에 적용되지 않은 경우를 예로 들 수 있습니다. + 쓰고 있는 인스턴스에 문제가 있는 경우 + serialize할 최대 개체 수가 초과된 경우. 속성을 확인합니다. + + + + 설정을 지정합니다. + + + + 클래스의 새 인스턴스를 초기화합니다. + + + 날짜와 시간 표시를 위한 문화권 형식을 정의하는 DateTimeFormat을 가져오거나 설정합니다. + 날짜와 시간 표시를 위한 문화권 형식을 정의하는 DateTimeFormat입니다. + + + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정을 가져오거나 설정합니다. + 형식 정보를 내보내는 데이터 계약 JSON serializer 설정입니다. + + + DataContractJsonSerializerSettings의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식의 컬렉션을 가져오거나 설정합니다. + DataContractJsonSerializerSettings의 이 인스턴스를 사용하여 serialize된 개체 그래프에 있을 수 있는 형식의 컬렉션입니다. + + + 개체 그래프에서 serialize하거나 deserialize할 최대 항목 수를 가져오거나 설정합니다. + 개체 그래프에서 serialize하거나 deserialize할 최대 항목 수입니다. + + + 선택한 개체의 루트 이름을 가져오거나 설정합니다. + 선택한 개체의 루트 이름입니다. + + + 읽기 전용 형식을 serialize하는지 여부를 지정하는 값을 가져오거나 설정합니다. + serialize 할 형식만 읽으려면 True이고, 그렇지 않으면 false입니다. + + + 간단한 사전 형식을 사용할지 여부를 지정하는 값을 가져오거나 설정합니다. + 간단한 사전 형식을 사용하려면 True이고, 그렇지 않으면 false입니다. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ru/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ru/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..4a04d86 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/ru/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + Задает параметры формата даты-времени. + + + Инициализирует новый экземпляр класса , используя строку формата. + Строка формата. + + + Инициализирует новый экземпляр класса , используя строку формата и поставщик формата. + Строка формата. + Поставщик формата. + + + Получает или задает параметры форматирования, задающие пользовательские настройки синтаксического анализа строки для ряда методов синтаксического анализа даты и времени. + Параметры форматирования, задающие пользовательские настройки синтаксического анализа строки для ряда методов синтаксического анализа даты и времени. + + + Получает объект, управляющий форматированием. + + + Получает строки формата для управления форматированием, получаемым, когда дата или время представлены в виде строки. + Строки формата для управления форматированием, получаемым, когда дата или время представлены в виде строки. + + + Определяет частоту выдачи сведений о типе. + + + Всегда для создания информации о типе. + + + По необходимости сообщать сведения о типе. + + + Никогда не сообщать сведения о типе. + + + Сериализует объекты в нотацию объектов JavaScript (JSON) и десериализует данные JSON в объекты.Этот класс не наследуется. + + + Инициализирует новый экземпляр класса для сериализации или десериализации объекта указанного типа. + Тип сериализуемых или десериализуемых экземпляров. + + + Инициализирует новый экземпляр класса для сериализации или десериализации объекта указанного типа с коллекцией известных типов, которые могут присутствовать в графе объекта. + Тип сериализуемых или десериализуемых экземпляров. + Интерфейс , принадлежащий к типу , в котором содержатся типы, которые могут присутствовать в графе объекта. + + + Инициализирует новый экземпляр класса для сериализации или десериализации объекта указанного типа и параметров сериализатора. + Тип сериализуемых или десериализуемых экземпляров. + Параметры сериализатора для сериализатора JSON. + + + Получает формат элементов типа "дата и время" в графе объектов. + Формат элементов типа "дата и время" в графе объектов. + + + Получает или задает параметры сериализатора контракта данных JSON для выдачи сведений о типе. + Параметры сериализатора контракта данных JSON для выдачи сведений о типе. + + + Возвращает коллекцию типов, которые могут присутствовать в графе объекта, сериализованном с использованием этого экземпляра класса . + Коллекция , которая содержит ожидаемые типы, переданные в качестве известных типов конструктору . + + + Выполняет чтение потока документа в формате JSON (нотации объектов JavaScript) и возвращает десериализованный объект. + Десериализованный объект. + Поток , подлежащий чтению. + + + Получает или задает значение, указывающее, следует ли сериализовать типы, доступные только для чтения. + Значение true для сериализации доступных только для чтения типов; в противном случае — значение false. + + + Получает или задает значение, указывающее, следует ли использовать простой формат словаря. + Значение true для использования простого формата словаря; в противном случае — значение false. + + + Сериализует указанный объект в данные нотации объектов JavaScript (JSON) и записывает полученные данные JSON в поток. + Поток , в который осуществляется запись. + Объект, содержащий данные для записи в поток. + Сериализуемый тип не соответствует правилам контракта данных.Например, к этому типу не применен атрибут . + Возникла проблема с записываемым экземпляром. + Превышено максимально допустимое количество объектов для сериализации.Проверьте свойство . + + + Задает параметры . + + + Инициализирует новый экземпляр класса . + + + Получает или задает DateTimeFormat, определяющий формат отображения даты и времени, соответствующий языку и региональным параметрам. + DateTimeFormat, определяющий формат отображения даты и времени, соответствующий языку и региональным параметрам. + + + Получает или задает параметры сериализатора контракта данных JSON для выдачи сведений о типе. + Параметры сериализатора контракта данных JSON для выдачи сведений о типе. + + + Получает или задает коллекцию типов, которые могут присутствовать в графе объекта, сериализованном с помощью этого DataContractJsonSerializerSettings. + Коллекция типов, которые могут присутствовать в графе объекта, сериализованном с помощью этого экземпляра класса DataContractJsonSerializerSettings. + + + Получает или задает максимальное количество элементов в графе объекта для сериализации или десериализации. + Максимальное количество элементов в графе объекта для сериализации или десериализации. + + + Получает или задает корневое имя выбранного объекта. + Имя корневого объекта выбранного объекта. + + + Получает или задает значение, указывающее, следует ли сериализовать типы, доступные только для чтения. + Значение True для сериализации доступных только для чтения типов; в противном случае — значение false. + + + Получает или задает значение, указывающее, следует ли использовать простой формат словаря. + Значение True для использования простого формата словаря; в противном случае — значение false. + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..afcb03c --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Json.xml @@ -0,0 +1,127 @@ + + + + System.Runtime.Serialization.Json + + + + 指定日期时间格式选择。 + + + 使用字符串格式初始化 类的新实例。 + 格式字符串。 + + + 使用格式字符串和格式提供方初始化 类的新实例。 + 格式字符串。 + 格式提供程序。 + + + 获取或设置格式设置选项,这些选项可自定义许多日期和时间分析方法的字符串分析方法。 + 自定义许多日期和时间分析方法的字符串的格式设置选项。 + + + 获取控制格式设置的对象。 + + + 当一个日期或时间被表示成字符串时,获取控制格式生成的格式字符串。 + 当一个日期或时间被表示成字符串时控制格式生成的格式字符串。 + + + 指定发出类型信息的频率。 + + + 始终发出类型信息。 + + + 根据需要发出类型信息。 + + + 从不发出类型信息。 + + + 将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。此类不能被继承。 + + + 初始化 类的新实例,以便序列化或反序列化指定类型的对象。 + 序列化或反序列化的实例的类型。 + + + 初始化 类的新实例,以便序列化或反序列化指定类型的对象以及可在对象图中呈现的已知类型的集合。 + 序列化或反序列化的实例的类型。 + 包含可在对象图中呈现类型的 。 + + + 初始化 类的新实例,以便序列化或反序列化指定类型和序列化设置的对象。 + 序列化或反序列化的实例的类型。 + JSON 序列化程序序列化程序设置。 + + + 获取在对象关系图中日期和时间种类项的格式。 + 在对象关系图中日期和时间种类项的格式。 + + + 获取或设置用于发出类型信息的数据协定 JSON 序列化程序设置。 + 数据协定 JSON 序列化程序设置可发出类型信息。 + + + 获取一个类型集合,这些类型可呈现在使用此 实例序列化的对象图中。 + 一个 ,它包含作为已知类型传入 构造函数的预期类型。 + + + 以 JSON(JavaScript 对象表示法)格式读取文档流,并返回反序列化的对象。 + 反序列化的对象。 + 要读取的 。 + + + 获取或设置指定是否序列化只读类型的值。 + 仅序列化读取类型,则为 true;否则 false。 + + + 获取或设置指定是否使用简单字典格式的值。 + 使用简单的字典格式,则为 true;否则为 false。 + + + 将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中。 + 用于写入 。 + 包含要写入流的数据的对象。 + 正在序列化的类型不符合数据协定规则。例如, 特性未应用于该类型。 + 正在写入的实例出现问题。 + 已超出要序列化的对象的最大数量。请检查 属性。 + + + 指定 设置。 + + + 初始化 类的新实例。 + + + 获取或设置定义显示日期和时间的的相应于区域性格式的 DateTimeFormat。 + DateTimeFormat 定义适合区域性的、显示日期和时间的格式。 + + + 获取或设置用于发出类型信息的数据协定 JSON 序列化程序设置。 + 数据协定 JSON 序列化程序设置可发出类型信息。 + + + 获取或设置可能存在于通过使用此实例 DataContractSerializerSettings 所序列化的对象关系图中的类型集合。 + 一个类型集合,这些类型可能出现在使用此 DataContractSerializerSettings 实例序列化的对象图中。 + + + 获取或设置一个要序列化或反序列化的对象图中的最大项数。 + 要序列化或反序列化的对象图中的最大项数。 + + + 获取或设置选定对象的根名称。 + 选中对象的根名称。 + + + 获取或设置指定是否序列化只读类型的值。 + 仅序列化读取类型,则为 True;否则 false。 + + + 获取或设置指定是否使用简单字典格式的值。 + 使用简单的字典格式,则为 True;否则为 false。 + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Json.xml b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Json.xml new file mode 100644 index 0000000..6171549 --- /dev/null +++ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Json.xml @@ -0,0 +1,129 @@ + + + + System.Runtime.Serialization.Json + + + + 指定日期時間格式選項。 + + + 使用格式字串初始化 類別的新執行個體。 + 格式字串。 + + + 使用格式字串和格式提供者,初始化 類別的新執行個體。 + 格式字串。 + 格式提供者。 + + + 取得或設定格式化選項,這些選項會自訂一些日期和時間剖析方法的字串剖析。 + 格式化選項,這些選項會自訂一些日期和時間剖析方法的字串剖析。 + + + 取得控制格式的物件。 + + + 取得當日期或時間表示為字串時,用來控制所產生格式的格式字串。 + 當日期或時間表示為字串時,用來控制生成格式的格式字串。 + + + 指定發出型別資訊的頻率。 + + + 永遠要發出型別資訊。 + + + 視需要發出型別資訊。 + + + 永遠不要發出型別資訊。 + + + 將物件序列化為 JavaScript 物件標記法 (JSON) 以及將 JSON 資料還原序列化為物件。此類別無法被繼承。 + + + 初始化 類別的新執行個體,以序列化或還原序列化指定之型別的物件。 + 已序列化或還原序列化之執行個體的型別。 + + + 初始化 類別的新執行個體,以序列化或還原序列化所指定型別的物件,以及可能存在物件圖形中的已知型別集合。 + 已序列化或還原序列化之執行個體的型別。 + + ,其中包含可能存在物件圖形中的型別。 + + + 初始化 類別的新執行個體,以序列化或還原序列化所指定型別及序列化程式設定的物件。 + 已序列化或還原序列化之執行個體的型別。 + JSON 序列化程式的序列化程式設定。 + + + 取得物件圖形中日期和時間型別項目的格式。 + 物件圖形中日期和時間型別項目的格式。 + + + 取得或設定要發出型別資訊的資料合約 JSON 序列化程式設定。 + 要發出型別資訊的資料合約 JSON 序列化程式設定。 + + + 取得型別的集合,這些型別可能會存在於使用這個 執行個體所序列化的物件圖形中。 + + ,其中包含已當做已知型別傳入至 建構函式的預期型別。 + + + 讀取 JSON (JavaScript 物件標記法) 格式的文件資料流,然後傳回已還原序列化的物件。 + 還原序列化的物件。 + 要讀取的 。 + + + 取得或設定值,指定是否要序列化唯讀型別。 + true 表示序列化唯讀型別,否則為 false。 + + + 取得或設定值,指定是否要使用簡單的字典格式。 + true 表示使用一個簡單的字典格式,否則為 false。 + + + 將指定物件序列化為 JavaScript 物件標記法 (JSON) 資料,然後將產生的 JSON 寫入資料流。 + 要寫入的 。 + 包含要寫入至資料流之資料的物件。 + 正在序列化的型別不符合資料合約規則。例如, 屬性尚未套用至此型別。 + 正在寫入的執行個體發生問題。 + 已超過要序列化的物件數目上限。檢查 屬性。 + + + 指定 設定。 + + + 初始化 類別的新執行個體。 + + + 取得或設定 DateTimeFormat,定義日期和時間在文化特性上適當的顯示格式。 + DateTimeFormat,可定義日期和時間在文化特性上適當的顯示格式。 + + + 取得或設定要發出型別資訊的資料合約 JSON 序列化程式設定。 + 要發出型別資訊的資料合約 JSON 序列化程式設定。 + + + 取得或設定型別的集合,這些型別可能會存在於使用這個 DataContractJsonSerializerSettings 執行個體所序列化的物件圖形中。 + 型別的集合,這些型別可能會存在於使用這個 DataContractJsonSerializerSettings 執行個體所序列化的物件圖形中。 + + + 取得或設定物件圖形中要序列化或還原序列化的最大項目數。 + 物件圖形中要序列化或還原序列化的最大項目數。 + + + 取得或設定所選取物件的根名稱。 + 所選物件的根名稱。 + + + 取得或設定值,指定是否要序列化唯讀型別。 + True 表示序列化唯讀型別,否則為 false。 + + + 取得或設定值,指定是否要使用簡單的字典格式。 + True 表示使用一個簡單的字典格式,否則為 false。 + + + \ No newline at end of file diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/portable-net45+win8+wp8+wpa81/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/portable-net45+win8+wp8+wpa81/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/win8/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/win8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/wp80/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/wp80/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/wpa81/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/wpa81/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarinios10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarinios10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarinmac20/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarinmac20/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarintvos10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarintvos10/_._ new file mode 100644 index 0000000..e69de29 diff --git a/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarinwatchos10/_._ b/packages/System.Runtime.Serialization.Json.4.3.0/ref/xamarinwatchos10/_._ new file mode 100644 index 0000000..e69de29