diff --git a/FormMain.Designer.cs b/FormMain.Designer.cs index 7e00a5d..67fdd9c 100644 --- a/FormMain.Designer.cs +++ b/FormMain.Designer.cs @@ -35,7 +35,6 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.btDumpList = new System.Windows.Forms.Button(); this.rtb = new System.Windows.Forms.RichTextBox(); this.cmCopyPaste = new System.Windows.Forms.ContextMenuStrip(this.components); this.tsiCopy = new System.Windows.Forms.ToolStripMenuItem(); @@ -70,7 +69,6 @@ this.btClear = new System.Windows.Forms.Button(); this.lblAction = new System.Windows.Forms.Label(); this.btAssign = new System.Windows.Forms.Button(); - this.btMakeMod = new System.Windows.Forms.Button(); this.treeView1 = new System.Windows.Forms.TreeView(); this.cmAddDel = new System.Windows.Forms.ContextMenuStrip(this.components); this.tdiCollapseAll = new System.Windows.Forms.ToolStripMenuItem(); @@ -105,23 +103,13 @@ this.SFD = new System.Windows.Forms.SaveFileDialog(); this.tlpanel = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.btOptions = new System.Windows.Forms.Button(); - this.btDumpLog = new System.Windows.Forms.Button(); - this.btJSTuning = new System.Windows.Forms.Button(); - this.btDumpProfile = new System.Windows.Forms.Button(); - this.btTable = new System.Windows.Forms.Button(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.btSettings = new System.Windows.Forms.Button(); - this.btJsReassign = new System.Windows.Forms.Button(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); this.btSaveMyMapping = new System.Windows.Forms.Button(); this.txMappingName = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); - this.lblPTU = new System.Windows.Forms.Label(); this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.lblProfileUsed = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); this.btClearFilter = new System.Windows.Forms.Button(); this.label2 = new System.Windows.Forms.Label(); this.cbxShowMappedOnly = new System.Windows.Forms.CheckBox(); @@ -135,21 +123,40 @@ this.tPageOther = new System.Windows.Forms.TabPage(); this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); this.cbxAutoTabXML = new System.Windows.Forms.CheckBox(); + this.lbxOther = new System.Windows.Forms.RichTextBox(); this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); - this.tsBtReset = new System.Windows.Forms.ToolStripDropDownButton(); - this.resetDefaultsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.resetEmptyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.tsDDbtMappings = new System.Windows.Forms.ToolStripDropDownButton(); - this.tsBtLoad = new System.Windows.Forms.ToolStripDropDownButton(); - this.defaultsLoadAndGrabToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.resetLoadAndGrabToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.loadAndGrabToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.lbxOther = new System.Windows.Forms.RichTextBox(); + this.tslblProfileUsed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.msBtLoad = new System.Windows.Forms.ToolStripDropDownButton(); + this.meResetDefaults = new System.Windows.Forms.ToolStripMenuItem(); + this.meResetEmpty = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.msBtDump = new System.Windows.Forms.ToolStripDropDownButton(); + this.meDumpMappingList = new System.Windows.Forms.ToolStripMenuItem(); + this.meDumpLogfile = new System.Windows.Forms.ToolStripMenuItem(); + this.meDumpDefaultProfile = new System.Windows.Forms.ToolStripMenuItem(); + this.meDumpActiontreeAsXML = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.msShow = new System.Windows.Forms.ToolStripDropDownButton(); + this.meShowToggleTable = new System.Windows.Forms.ToolStripMenuItem(); + this.meShowOptionsDialog = new System.Windows.Forms.ToolStripMenuItem(); + this.meShowDeviceTuningDialog = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.msConfig = new System.Windows.Forms.ToolStripDropDownButton(); + this.meSettingsDialog = new System.Windows.Forms.ToolStripMenuItem(); + this.meJsReassignDialog = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.meLoadMap = new System.Windows.Forms.ToolStripDropDownButton(); + this.meDefaultsLoadAndGrab = new System.Windows.Forms.ToolStripMenuItem(); + this.meResetLoadAndGrab = new System.Windows.Forms.ToolStripMenuItem(); + this.meLoadAndGrab = new System.Windows.Forms.ToolStripMenuItem(); + this.meLoad = new System.Windows.Forms.ToolStripMenuItem(); + this.msSelectMapping = new System.Windows.Forms.ToolStripDropDownButton(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.IL2 = new System.Windows.Forms.ImageList(this.components); this.cmCopyPaste.SuspendLayout(); this.panel2.SuspendLayout(); this.cmMouseEntry.SuspendLayout(); @@ -168,18 +175,9 @@ this.tPageOther.SuspendLayout(); this.tableLayoutPanel6.SuspendLayout(); this.statusStrip1.SuspendLayout(); + this.toolStrip1.SuspendLayout(); this.SuspendLayout(); // - // btDumpList - // - this.btDumpList.Location = new System.Drawing.Point(3, 33); - this.btDumpList.Name = "btDumpList"; - this.btDumpList.Size = new System.Drawing.Size(120, 24); - this.btDumpList.TabIndex = 24; - this.btDumpList.Text = "Dump List-->"; - this.btDumpList.UseVisualStyleBackColor = true; - this.btDumpList.Click += new System.EventHandler(this.btDumpList_Click); - // // rtb // this.rtb.AcceptsTab = true; @@ -189,7 +187,7 @@ this.rtb.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.rtb.Location = new System.Drawing.Point(3, 3); this.rtb.Name = "rtb"; - this.rtb.Size = new System.Drawing.Size(348, 654); + this.rtb.Size = new System.Drawing.Size(348, 608); this.rtb.TabIndex = 21; this.rtb.Text = ""; this.rtb.WordWrap = false; @@ -257,21 +255,27 @@ // btGrab // this.btGrab.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btGrab.Image = global::SCJMapper_V2.Properties.Resources.LArrow; + this.btGrab.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.btGrab.Location = new System.Drawing.Point(181, 3); this.btGrab.Name = "btGrab"; - this.btGrab.Size = new System.Drawing.Size(120, 24); + this.btGrab.Size = new System.Drawing.Size(120, 50); this.btGrab.TabIndex = 19; - this.btGrab.Text = "<-- Grab XML"; + this.btGrab.Text = "Grab XML"; + this.btGrab.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.btGrab.UseVisualStyleBackColor = true; this.btGrab.Click += new System.EventHandler(this.btGrab_Click); // // btDump // + this.btDump.Image = global::SCJMapper_V2.Properties.Resources.RArrow; + this.btDump.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.btDump.Location = new System.Drawing.Point(3, 3); this.btDump.Name = "btDump"; - this.btDump.Size = new System.Drawing.Size(120, 24); + this.btDump.Size = new System.Drawing.Size(120, 50); this.btDump.TabIndex = 20; - this.btDump.Text = "Dump XML-->"; + this.btDump.Text = "Dump XML"; + this.btDump.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.btDump.UseVisualStyleBackColor = true; this.btDump.Click += new System.EventHandler(this.btDump_Click); // @@ -292,9 +296,9 @@ this.panel2.Controls.Add(this.lblAction); this.panel2.Controls.Add(this.btAssign); this.panel2.Dock = System.Windows.Forms.DockStyle.Top; - this.panel2.Location = new System.Drawing.Point(3, 379); + this.panel2.Location = new System.Drawing.Point(3, 376); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(298, 167); + this.panel2.Size = new System.Drawing.Size(298, 164); this.panel2.TabIndex = 17; // // label5 @@ -504,17 +508,6 @@ this.btAssign.UseVisualStyleBackColor = true; this.btAssign.Click += new System.EventHandler(this.btAssign_Click); // - // btMakeMod - // - this.btMakeMod.Location = new System.Drawing.Point(155, 3); - this.btMakeMod.Name = "btMakeMod"; - this.btMakeMod.Size = new System.Drawing.Size(73, 25); - this.btMakeMod.TabIndex = 17; - this.btMakeMod.Text = "Make MOD"; - this.btMakeMod.UseVisualStyleBackColor = true; - this.btMakeMod.Visible = false; - this.btMakeMod.Click += new System.EventHandler(this.btMakeMod_Click); - // // treeView1 // this.treeView1.ContextMenuStrip = this.cmAddDel; @@ -523,11 +516,11 @@ this.treeView1.HotTracking = true; this.treeView1.ImageKey = "Map"; this.treeView1.ImageList = this.IL; - this.treeView1.Location = new System.Drawing.Point(6, 81); + this.treeView1.Location = new System.Drawing.Point(6, 126); this.treeView1.Name = "treeView1"; this.tlpanel.SetRowSpan(this.treeView1, 2); this.treeView1.SelectedImageKey = "Selected"; - this.treeView1.Size = new System.Drawing.Size(364, 686); + this.treeView1.Size = new System.Drawing.Size(364, 640); this.treeView1.TabIndex = 16; this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick); // @@ -687,7 +680,7 @@ this.tc1.Name = "tc1"; this.tc1.SelectedIndex = 0; this.tc1.ShowToolTips = true; - this.tc1.Size = new System.Drawing.Size(298, 370); + this.tc1.Size = new System.Drawing.Size(298, 367); this.tc1.TabIndex = 15; this.tc1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tc1_DrawItem); this.tc1.Selected += new System.Windows.Forms.TabControlEventHandler(this.tc1_Selected); @@ -698,7 +691,7 @@ this.tabJS1.Location = new System.Drawing.Point(4, 24); this.tabJS1.Name = "tabJS1"; this.tabJS1.Padding = new System.Windows.Forms.Padding(3); - this.tabJS1.Size = new System.Drawing.Size(290, 342); + this.tabJS1.Size = new System.Drawing.Size(290, 339); this.tabJS1.TabIndex = 0; this.tabJS1.Text = "Joystick 1"; // @@ -708,7 +701,7 @@ this.UC_JoyPanel.JsAssignment = 0; this.UC_JoyPanel.Location = new System.Drawing.Point(3, 3); this.UC_JoyPanel.Name = "UC_JoyPanel"; - this.UC_JoyPanel.Size = new System.Drawing.Size(284, 336); + this.UC_JoyPanel.Size = new System.Drawing.Size(284, 333); this.UC_JoyPanel.TabIndex = 0; // // panel1 @@ -721,7 +714,7 @@ this.panel1.Controls.Add(this.lblTitle); this.panel1.Controls.Add(this.label4); this.panel1.Dock = System.Windows.Forms.DockStyle.Top; - this.panel1.Location = new System.Drawing.Point(6, 6); + this.panel1.Location = new System.Drawing.Point(6, 51); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(1042, 66); this.panel1.TabIndex = 14; @@ -818,26 +811,27 @@ this.tlpanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 370F)); this.tlpanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 310F)); this.tlpanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpanel.Controls.Add(this.panel1, 0, 0); - this.tlpanel.Controls.Add(this.treeView1, 0, 1); - this.tlpanel.Controls.Add(this.tableLayoutPanel1, 1, 2); - this.tlpanel.Controls.Add(this.tableLayoutPanel2, 1, 3); - this.tlpanel.Controls.Add(this.tableLayoutPanel3, 2, 3); - this.tlpanel.Controls.Add(this.tableLayoutPanel4, 1, 1); - this.tlpanel.Controls.Add(this.tableLayoutPanel5, 0, 3); - this.tlpanel.Controls.Add(this.tcXML, 2, 1); + this.tlpanel.Controls.Add(this.panel1, 0, 1); + this.tlpanel.Controls.Add(this.treeView1, 0, 2); + this.tlpanel.Controls.Add(this.tableLayoutPanel1, 1, 3); + this.tlpanel.Controls.Add(this.tableLayoutPanel2, 1, 4); + this.tlpanel.Controls.Add(this.tableLayoutPanel3, 2, 4); + this.tlpanel.Controls.Add(this.tableLayoutPanel4, 1, 2); + this.tlpanel.Controls.Add(this.tableLayoutPanel5, 0, 4); + this.tlpanel.Controls.Add(this.tcXML, 2, 2); this.tlpanel.Dock = System.Windows.Forms.DockStyle.Fill; this.tlpanel.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; this.tlpanel.Location = new System.Drawing.Point(0, 0); this.tlpanel.Name = "tlpanel"; this.tlpanel.Padding = new System.Windows.Forms.Padding(3); - this.tlpanel.RowCount = 5; + this.tlpanel.RowCount = 6; + this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 75F)); this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 125F)); + 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.Absolute, 84F)); this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); - this.tlpanel.Size = new System.Drawing.Size(1054, 892); + this.tlpanel.Size = new System.Drawing.Size(1054, 891); this.tlpanel.TabIndex = 25; // // tableLayoutPanel1 @@ -845,90 +839,27 @@ this.tableLayoutPanel1.ColumnCount = 2; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.Controls.Add(this.btOptions, 1, 2); this.tableLayoutPanel1.Controls.Add(this.btGrab, 1, 0); this.tableLayoutPanel1.Controls.Add(this.btDump, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.btDumpList, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.btDumpLog, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.btJSTuning, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.btDumpProfile, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.btTable, 1, 1); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; - this.tableLayoutPanel1.Location = new System.Drawing.Point(376, 648); + this.tableLayoutPanel1.Location = new System.Drawing.Point(376, 692); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(304, 119); + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 74F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(304, 74); this.tableLayoutPanel1.TabIndex = 23; // - // btOptions - // - this.btOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btOptions.Location = new System.Drawing.Point(181, 63); - this.btOptions.Name = "btOptions"; - this.btOptions.Size = new System.Drawing.Size(120, 23); - this.btOptions.TabIndex = 28; - this.btOptions.Text = "Options..."; - this.btOptions.Click += new System.EventHandler(this.btOptions_Click); - // - // btDumpLog - // - this.btDumpLog.Location = new System.Drawing.Point(3, 63); - this.btDumpLog.Name = "btDumpLog"; - this.btDumpLog.Size = new System.Drawing.Size(120, 24); - this.btDumpLog.TabIndex = 25; - this.btDumpLog.Text = "Dump Log-->"; - this.btDumpLog.UseVisualStyleBackColor = true; - this.btDumpLog.Click += new System.EventHandler(this.btDumpLog_Click); - // - // btJSTuning - // - this.btJSTuning.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btJSTuning.Location = new System.Drawing.Point(181, 93); - this.btJSTuning.Name = "btJSTuning"; - this.btJSTuning.Size = new System.Drawing.Size(120, 23); - this.btJSTuning.TabIndex = 17; - this.btJSTuning.Text = "Device Tuning..."; - this.btJSTuning.Click += new System.EventHandler(this.btJSTuning_Click); - // - // btDumpProfile - // - this.btDumpProfile.Location = new System.Drawing.Point(3, 93); - this.btDumpProfile.Name = "btDumpProfile"; - this.btDumpProfile.Size = new System.Drawing.Size(120, 23); - this.btDumpProfile.TabIndex = 26; - this.btDumpProfile.Text = "Dump Profile -->"; - this.btDumpProfile.UseVisualStyleBackColor = true; - this.btDumpProfile.Click += new System.EventHandler(this.btDumpProfile_Click); - // - // btTable - // - this.btTable.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btTable.Location = new System.Drawing.Point(181, 33); - this.btTable.Name = "btTable"; - this.btTable.Size = new System.Drawing.Size(120, 24); - this.btTable.TabIndex = 27; - this.btTable.Text = "Toggle Table..."; - this.btTable.UseVisualStyleBackColor = true; - this.btTable.Click += new System.EventHandler(this.btTable_Click); - // // tableLayoutPanel2 // this.tableLayoutPanel2.ColumnCount = 2; this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel2.Controls.Add(this.btMakeMod, 1, 0); this.tableLayoutPanel2.Controls.Add(this.buttonExit, 1, 1); - this.tableLayoutPanel2.Controls.Add(this.btSettings, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.btJsReassign, 0, 0); this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel2.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; - this.tableLayoutPanel2.Location = new System.Drawing.Point(376, 773); + this.tableLayoutPanel2.Location = new System.Drawing.Point(376, 772); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; this.tableLayoutPanel2.RowCount = 2; this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); @@ -937,27 +868,6 @@ this.tableLayoutPanel2.Size = new System.Drawing.Size(304, 78); this.tableLayoutPanel2.TabIndex = 24; // - // btSettings - // - this.btSettings.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.btSettings.Location = new System.Drawing.Point(3, 51); - this.btSettings.Name = "btSettings"; - this.btSettings.Size = new System.Drawing.Size(120, 24); - this.btSettings.TabIndex = 14; - this.btSettings.Text = "Settings..."; - this.btSettings.Click += new System.EventHandler(this.btSettings_Click); - // - // btJsReassign - // - this.btJsReassign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.btJsReassign.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.btJsReassign.Location = new System.Drawing.Point(3, 21); - this.btJsReassign.Name = "btJsReassign"; - this.btJsReassign.Size = new System.Drawing.Size(120, 24); - this.btJsReassign.TabIndex = 16; - this.btJsReassign.Text = "Js Reassign..."; - this.btJsReassign.Click += new System.EventHandler(this.btJsReassign_Click); - // // tableLayoutPanel3 // this.tableLayoutPanel3.ColumnCount = 2; @@ -966,10 +876,9 @@ this.tableLayoutPanel3.Controls.Add(this.btSaveMyMapping, 1, 1); this.tableLayoutPanel3.Controls.Add(this.txMappingName, 1, 0); this.tableLayoutPanel3.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.lblPTU, 0, 1); this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel3.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; - this.tableLayoutPanel3.Location = new System.Drawing.Point(686, 773); + this.tableLayoutPanel3.Location = new System.Drawing.Point(686, 772); this.tableLayoutPanel3.Name = "tableLayoutPanel3"; this.tableLayoutPanel3.RowCount = 2; this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); @@ -981,9 +890,9 @@ // this.btSaveMyMapping.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btSaveMyMapping.Image = ((System.Drawing.Image)(resources.GetObject("btSaveMyMapping.Image"))); - this.btSaveMyMapping.Location = new System.Drawing.Point(154, 51); + this.btSaveMyMapping.Location = new System.Drawing.Point(125, 51); this.btSaveMyMapping.Name = "btSaveMyMapping"; - this.btSaveMyMapping.Size = new System.Drawing.Size(205, 24); + this.btSaveMyMapping.Size = new System.Drawing.Size(234, 24); this.btSaveMyMapping.TabIndex = 15; this.btSaveMyMapping.Text = "Dump and Save my Mapping"; this.btSaveMyMapping.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -1011,19 +920,6 @@ this.label1.TabIndex = 16; this.label1.Text = "Mapping name:"; // - // lblPTU - // - this.lblPTU.BackColor = System.Drawing.Color.SandyBrown; - this.lblPTU.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPTU.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblPTU.Location = new System.Drawing.Point(3, 48); - this.lblPTU.Name = "lblPTU"; - this.lblPTU.Size = new System.Drawing.Size(116, 30); - this.lblPTU.TabIndex = 17; - this.lblPTU.Text = "Using PTU folders"; - this.lblPTU.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.lblPTU.Visible = false; - // // tableLayoutPanel4 // this.tableLayoutPanel4.ColumnCount = 1; @@ -1031,12 +927,12 @@ this.tableLayoutPanel4.Controls.Add(this.panel2, 0, 1); this.tableLayoutPanel4.Controls.Add(this.tc1, 0, 0); this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel4.Location = new System.Drawing.Point(376, 81); + this.tableLayoutPanel4.Location = new System.Drawing.Point(376, 126); this.tableLayoutPanel4.Name = "tableLayoutPanel4"; this.tableLayoutPanel4.RowCount = 2; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Size = new System.Drawing.Size(304, 549); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 170F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(304, 543); this.tableLayoutPanel4.TabIndex = 28; // // tableLayoutPanel5 @@ -1047,8 +943,6 @@ this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); - this.tableLayoutPanel5.Controls.Add(this.lblProfileUsed, 1, 2); - this.tableLayoutPanel5.Controls.Add(this.label3, 0, 2); this.tableLayoutPanel5.Controls.Add(this.btClearFilter, 4, 1); this.tableLayoutPanel5.Controls.Add(this.label2, 0, 1); this.tableLayoutPanel5.Controls.Add(this.cbxShowMappedOnly, 4, 0); @@ -1058,43 +952,18 @@ this.tableLayoutPanel5.Controls.Add(this.cbxShowGamepad, 1, 0); this.tableLayoutPanel5.Controls.Add(this.txFilter, 2, 1); this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(6, 773); + this.tableLayoutPanel5.Location = new System.Drawing.Point(6, 772); this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 3; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel5.RowCount = 2; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 58.33333F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 41.66667F)); this.tableLayoutPanel5.Size = new System.Drawing.Size(364, 78); this.tableLayoutPanel5.TabIndex = 29; // - // lblProfileUsed - // - this.tableLayoutPanel5.SetColumnSpan(this.lblProfileUsed, 4); - this.lblProfileUsed.Dock = System.Windows.Forms.DockStyle.Top; - this.lblProfileUsed.Font = new System.Drawing.Font("Segoe UI", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblProfileUsed.Location = new System.Drawing.Point(75, 61); - this.lblProfileUsed.Margin = new System.Windows.Forms.Padding(3); - this.lblProfileUsed.Name = "lblProfileUsed"; - this.lblProfileUsed.Size = new System.Drawing.Size(286, 14); - this.lblProfileUsed.TabIndex = 29; - this.lblProfileUsed.Text = "..."; - this.lblProfileUsed.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label3 - // - this.label3.Font = new System.Drawing.Font("Segoe UI", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label3.Location = new System.Drawing.Point(3, 61); - this.label3.Margin = new System.Windows.Forms.Padding(3); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(39, 14); - this.label3.TabIndex = 30; - this.label3.Text = "Profile:"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // // btClearFilter // - this.btClearFilter.Dock = System.Windows.Forms.DockStyle.Fill; - this.btClearFilter.Location = new System.Drawing.Point(291, 32); + this.btClearFilter.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.btClearFilter.Location = new System.Drawing.Point(291, 50); this.btClearFilter.Name = "btClearFilter"; this.btClearFilter.Size = new System.Drawing.Size(70, 23); this.btClearFilter.TabIndex = 26; @@ -1104,8 +973,9 @@ // // label2 // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tableLayoutPanel5.SetColumnSpan(this.label2, 2); - this.label2.Location = new System.Drawing.Point(3, 32); + this.label2.Location = new System.Drawing.Point(3, 50); this.label2.Margin = new System.Windows.Forms.Padding(3); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(83, 23); @@ -1115,8 +985,9 @@ // // cbxShowMappedOnly // + this.cbxShowMappedOnly.Anchor = System.Windows.Forms.AnchorStyles.Left; this.cbxShowMappedOnly.AutoSize = true; - this.cbxShowMappedOnly.Location = new System.Drawing.Point(291, 3); + this.cbxShowMappedOnly.Location = new System.Drawing.Point(291, 14); this.cbxShowMappedOnly.Name = "cbxShowMappedOnly"; this.cbxShowMappedOnly.Size = new System.Drawing.Size(69, 17); this.cbxShowMappedOnly.TabIndex = 1; @@ -1126,8 +997,9 @@ // // cbxShowMouse // + this.cbxShowMouse.Anchor = System.Windows.Forms.AnchorStyles.Left; this.cbxShowMouse.AutoSize = true; - this.cbxShowMouse.Location = new System.Drawing.Point(219, 3); + this.cbxShowMouse.Location = new System.Drawing.Point(219, 14); this.cbxShowMouse.Name = "cbxShowMouse"; this.cbxShowMouse.Size = new System.Drawing.Size(61, 17); this.cbxShowMouse.TabIndex = 28; @@ -1137,10 +1009,11 @@ // // cbxShowKeyboard // + this.cbxShowKeyboard.Anchor = System.Windows.Forms.AnchorStyles.Left; this.cbxShowKeyboard.AutoSize = true; this.cbxShowKeyboard.Checked = true; this.cbxShowKeyboard.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbxShowKeyboard.Location = new System.Drawing.Point(147, 3); + this.cbxShowKeyboard.Location = new System.Drawing.Point(147, 14); this.cbxShowKeyboard.Name = "cbxShowKeyboard"; this.cbxShowKeyboard.Size = new System.Drawing.Size(53, 17); this.cbxShowKeyboard.TabIndex = 1; @@ -1150,10 +1023,11 @@ // // cbxShowJoystick // + this.cbxShowJoystick.Anchor = System.Windows.Forms.AnchorStyles.Left; this.cbxShowJoystick.AutoSize = true; this.cbxShowJoystick.Checked = true; this.cbxShowJoystick.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbxShowJoystick.Location = new System.Drawing.Point(3, 3); + this.cbxShowJoystick.Location = new System.Drawing.Point(3, 14); this.cbxShowJoystick.Name = "cbxShowJoystick"; this.cbxShowJoystick.Size = new System.Drawing.Size(65, 17); this.cbxShowJoystick.TabIndex = 0; @@ -1163,10 +1037,11 @@ // // cbxShowGamepad // + this.cbxShowGamepad.Anchor = System.Windows.Forms.AnchorStyles.Left; this.cbxShowGamepad.AutoSize = true; this.cbxShowGamepad.Checked = true; this.cbxShowGamepad.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbxShowGamepad.Location = new System.Drawing.Point(75, 3); + this.cbxShowGamepad.Location = new System.Drawing.Point(75, 14); this.cbxShowGamepad.Name = "cbxShowGamepad"; this.cbxShowGamepad.Size = new System.Drawing.Size(66, 17); this.cbxShowGamepad.TabIndex = 1; @@ -1176,9 +1051,9 @@ // // txFilter // + this.txFilter.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tableLayoutPanel5.SetColumnSpan(this.txFilter, 2); - this.txFilter.Dock = System.Windows.Forms.DockStyle.Top; - this.txFilter.Location = new System.Drawing.Point(147, 32); + this.txFilter.Location = new System.Drawing.Point(147, 50); this.txFilter.Name = "txFilter"; this.txFilter.Size = new System.Drawing.Size(138, 22); this.txFilter.TabIndex = 25; @@ -1191,11 +1066,11 @@ this.tcXML.Controls.Add(this.tPageOther); this.tcXML.Dock = System.Windows.Forms.DockStyle.Fill; this.tcXML.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tcXML.Location = new System.Drawing.Point(686, 81); + this.tcXML.Location = new System.Drawing.Point(686, 126); this.tcXML.Name = "tcXML"; this.tlpanel.SetRowSpan(this.tcXML, 2); this.tcXML.SelectedIndex = 0; - this.tcXML.Size = new System.Drawing.Size(362, 686); + this.tcXML.Size = new System.Drawing.Size(362, 640); this.tcXML.TabIndex = 30; // // tPageDump @@ -1204,21 +1079,21 @@ this.tPageDump.Location = new System.Drawing.Point(4, 22); this.tPageDump.Name = "tPageDump"; this.tPageDump.Padding = new System.Windows.Forms.Padding(3); - this.tPageDump.Size = new System.Drawing.Size(354, 660); + this.tPageDump.Size = new System.Drawing.Size(354, 614); this.tPageDump.TabIndex = 1; this.tPageDump.Text = "Dumps (XML, Logs etc.)"; this.tPageDump.UseVisualStyleBackColor = true; // // tPageOther // + this.tPageOther.BackColor = System.Drawing.Color.Gainsboro; this.tPageOther.Controls.Add(this.tableLayoutPanel6); this.tPageOther.Location = new System.Drawing.Point(4, 22); this.tPageOther.Name = "tPageOther"; this.tPageOther.Padding = new System.Windows.Forms.Padding(3); - this.tPageOther.Size = new System.Drawing.Size(354, 660); + this.tPageOther.Size = new System.Drawing.Size(354, 614); this.tPageOther.TabIndex = 0; this.tPageOther.Text = "All Mappings"; - this.tPageOther.UseVisualStyleBackColor = true; // // tableLayoutPanel6 // @@ -1232,7 +1107,7 @@ this.tableLayoutPanel6.RowCount = 2; this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel6.Size = new System.Drawing.Size(348, 654); + this.tableLayoutPanel6.Size = new System.Drawing.Size(348, 608); this.tableLayoutPanel6.TabIndex = 0; // // cbxAutoTabXML @@ -1246,164 +1121,316 @@ this.cbxAutoTabXML.UseVisualStyleBackColor = true; this.cbxAutoTabXML.CheckedChanged += new System.EventHandler(this.cbxAutoTabXML_CheckedChanged); // + // lbxOther + // + this.lbxOther.BackColor = System.Drawing.Color.WhiteSmoke; + this.lbxOther.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lbxOther.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbxOther.Location = new System.Drawing.Point(3, 33); + this.lbxOther.Name = "lbxOther"; + this.lbxOther.Size = new System.Drawing.Size(342, 618); + this.lbxOther.TabIndex = 3; + this.lbxOther.Text = ""; + this.lbxOther.WordWrap = false; + // // toolStripStatusLabel2 // this.toolStripStatusLabel2.BackColor = System.Drawing.Color.DarkKhaki; this.toolStripStatusLabel2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; - this.toolStripStatusLabel2.Size = new System.Drawing.Size(52, 25); - this.toolStripStatusLabel2.Text = "Profiles:"; - // - // tsBtReset - // - this.tsBtReset.AutoSize = false; - this.tsBtReset.BackColor = System.Drawing.Color.DarkKhaki; - this.tsBtReset.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.resetDefaultsToolStripMenuItem, - this.resetEmptyToolStripMenuItem}); - this.tsBtReset.Image = ((System.Drawing.Image)(resources.GetObject("tsBtReset.Image"))); - this.tsBtReset.ImageTransparentColor = System.Drawing.Color.Magenta; - this.tsBtReset.Name = "tsBtReset"; - this.tsBtReset.Size = new System.Drawing.Size(100, 28); - this.tsBtReset.Text = "Reset..."; - this.tsBtReset.ToolTipText = "Reset with chosen options"; - // - // resetDefaultsToolStripMenuItem - // - this.resetDefaultsToolStripMenuItem.BackColor = System.Drawing.Color.DarkKhaki; - this.resetDefaultsToolStripMenuItem.Name = "resetDefaultsToolStripMenuItem"; - this.resetDefaultsToolStripMenuItem.Size = new System.Drawing.Size(153, 22); - this.resetDefaultsToolStripMenuItem.Text = "Reset defaults !"; - this.resetDefaultsToolStripMenuItem.Click += new System.EventHandler(this.resetDefaultsToolStripMenuItem_Click); - // - // resetEmptyToolStripMenuItem - // - this.resetEmptyToolStripMenuItem.BackColor = System.Drawing.Color.DarkKhaki; - this.resetEmptyToolStripMenuItem.Name = "resetEmptyToolStripMenuItem"; - this.resetEmptyToolStripMenuItem.Size = new System.Drawing.Size(153, 22); - this.resetEmptyToolStripMenuItem.Text = "Reset empty !"; - this.resetEmptyToolStripMenuItem.Click += new System.EventHandler(this.resetEmptyToolStripMenuItem_Click); + this.toolStripStatusLabel2.Size = new System.Drawing.Size(47, 17); + this.toolStripStatusLabel2.Text = "Profile:"; // // toolStripStatusLabel3 // - this.toolStripStatusLabel3.AutoSize = false; this.toolStripStatusLabel3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.toolStripStatusLabel3.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.toolStripStatusLabel3.Margin = new System.Windows.Forms.Padding(5, 3, 5, 2); this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; - this.toolStripStatusLabel3.Size = new System.Drawing.Size(450, 25); + this.toolStripStatusLabel3.Size = new System.Drawing.Size(913, 17); + this.toolStripStatusLabel3.Spring = true; this.toolStripStatusLabel3.Text = " Support: profile version=\"1\" optionsVersion=\"2\" rebindVersion=\"2\" "; - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.BackColor = System.Drawing.Color.DarkSeaGreen; - this.toolStripStatusLabel1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.toolStripStatusLabel1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.toolStripStatusLabel1.Margin = new System.Windows.Forms.Padding(5, 3, 0, 2); - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(63, 25); - this.toolStripStatusLabel1.Text = "Mappings:"; - this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // tsDDbtMappings - // - this.tsDDbtMappings.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.tsDDbtMappings.AutoSize = false; - this.tsDDbtMappings.BackColor = System.Drawing.Color.DarkSeaGreen; - this.tsDDbtMappings.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.tsDDbtMappings.Image = ((System.Drawing.Image)(resources.GetObject("tsDDbtMappings.Image"))); - this.tsDDbtMappings.ImageTransparentColor = System.Drawing.Color.Magenta; - this.tsDDbtMappings.Margin = new System.Windows.Forms.Padding(5, 2, 5, 0); - this.tsDDbtMappings.Name = "tsDDbtMappings"; - this.tsDDbtMappings.Size = new System.Drawing.Size(220, 28); - this.tsDDbtMappings.Text = "Available Mappings"; - this.tsDDbtMappings.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.tsDDbtMappings.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.tsDDbtMappings_DropDownItemClicked); - // - // tsBtLoad - // - this.tsBtLoad.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.tsBtLoad.AutoSize = false; - this.tsBtLoad.BackColor = System.Drawing.Color.DarkSeaGreen; - this.tsBtLoad.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.defaultsLoadAndGrabToolStripMenuItem, - this.resetLoadAndGrabToolStripMenuItem, - this.loadAndGrabToolStripMenuItem, - this.loadToolStripMenuItem}); - this.tsBtLoad.Image = ((System.Drawing.Image)(resources.GetObject("tsBtLoad.Image"))); - this.tsBtLoad.ImageTransparentColor = System.Drawing.Color.Magenta; - this.tsBtLoad.Margin = new System.Windows.Forms.Padding(5, 2, 5, 0); - this.tsBtLoad.Name = "tsBtLoad"; - this.tsBtLoad.Size = new System.Drawing.Size(100, 28); - this.tsBtLoad.Text = "Load..."; - this.tsBtLoad.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // defaultsLoadAndGrabToolStripMenuItem - // - this.defaultsLoadAndGrabToolStripMenuItem.BackColor = System.Drawing.Color.DarkSeaGreen; - this.defaultsLoadAndGrabToolStripMenuItem.Name = "defaultsLoadAndGrabToolStripMenuItem"; - this.defaultsLoadAndGrabToolStripMenuItem.Size = new System.Drawing.Size(206, 22); - this.defaultsLoadAndGrabToolStripMenuItem.Text = "Defaults, Load and Grab !"; - this.defaultsLoadAndGrabToolStripMenuItem.Click += new System.EventHandler(this.defaultsLoadAndGrabToolStripMenuItem_Click); - // - // resetLoadAndGrabToolStripMenuItem - // - this.resetLoadAndGrabToolStripMenuItem.BackColor = System.Drawing.Color.DarkSeaGreen; - this.resetLoadAndGrabToolStripMenuItem.Name = "resetLoadAndGrabToolStripMenuItem"; - this.resetLoadAndGrabToolStripMenuItem.Size = new System.Drawing.Size(206, 22); - this.resetLoadAndGrabToolStripMenuItem.Text = "Reset, Load and Grab !"; - this.resetLoadAndGrabToolStripMenuItem.Click += new System.EventHandler(this.resetLoadAndGrabToolStripMenuItem_Click); - // - // loadAndGrabToolStripMenuItem - // - this.loadAndGrabToolStripMenuItem.BackColor = System.Drawing.Color.DarkSeaGreen; - this.loadAndGrabToolStripMenuItem.Name = "loadAndGrabToolStripMenuItem"; - this.loadAndGrabToolStripMenuItem.Size = new System.Drawing.Size(206, 22); - this.loadAndGrabToolStripMenuItem.Text = "Load and Grab !"; - this.loadAndGrabToolStripMenuItem.Click += new System.EventHandler(this.loadAndGrabToolStripMenuItem_Click); - // - // loadToolStripMenuItem - // - this.loadToolStripMenuItem.BackColor = System.Drawing.Color.DarkSeaGreen; - this.loadToolStripMenuItem.Name = "loadToolStripMenuItem"; - this.loadToolStripMenuItem.Size = new System.Drawing.Size(206, 22); - this.loadToolStripMenuItem.Text = "Load !"; - this.loadToolStripMenuItem.Click += new System.EventHandler(this.loadToolStripMenuItem_Click); + this.toolStripStatusLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // statusStrip1 // this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripStatusLabel2, - this.tsBtReset, - this.toolStripStatusLabel3, - this.toolStripStatusLabel1, - this.tsDDbtMappings, - this.tsBtLoad}); - this.statusStrip1.Location = new System.Drawing.Point(0, 862); + this.tslblProfileUsed, + this.toolStripStatusLabel3}); + this.statusStrip1.Location = new System.Drawing.Point(0, 869); this.statusStrip1.Name = "statusStrip1"; this.statusStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; this.statusStrip1.ShowItemToolTips = true; - this.statusStrip1.Size = new System.Drawing.Size(1054, 30); + this.statusStrip1.Size = new System.Drawing.Size(1054, 22); this.statusStrip1.TabIndex = 26; this.statusStrip1.Text = "statusStrip1"; // - // lbxOther - // - this.lbxOther.BackColor = System.Drawing.Color.WhiteSmoke; - this.lbxOther.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.lbxOther.Dock = System.Windows.Forms.DockStyle.Fill; - this.lbxOther.Location = new System.Drawing.Point(3, 33); - this.lbxOther.Name = "lbxOther"; - this.lbxOther.Size = new System.Drawing.Size(342, 618); - this.lbxOther.TabIndex = 3; - this.lbxOther.Text = ""; - this.lbxOther.WordWrap = false; + // tslblProfileUsed + // + this.tslblProfileUsed.Name = "tslblProfileUsed"; + this.tslblProfileUsed.Size = new System.Drawing.Size(69, 17); + this.tslblProfileUsed.Text = "used profile"; + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(32, 32); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.msBtLoad, + this.toolStripSeparator2, + this.msBtDump, + this.toolStripSeparator5, + this.msShow, + this.toolStripSeparator6, + this.msConfig, + this.toolStripSeparator8, + this.meLoadMap, + this.msSelectMapping, + this.toolStripLabel1}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.MinimumSize = new System.Drawing.Size(0, 40); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1054, 40); + this.toolStrip1.Stretch = true; + this.toolStrip1.TabIndex = 27; + this.toolStrip1.Text = "toolStrip1"; + // + // msBtLoad + // + this.msBtLoad.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.meResetDefaults, + this.meResetEmpty}); + this.msBtLoad.Image = global::SCJMapper_V2.Properties.Resources.Home; + this.msBtLoad.ImageTransparentColor = System.Drawing.Color.Magenta; + this.msBtLoad.Name = "msBtLoad"; + this.msBtLoad.Size = new System.Drawing.Size(89, 37); + this.msBtLoad.Text = "Reset..."; + this.msBtLoad.ToolTipText = "Reset the action tree"; + // + // meResetDefaults + // + this.meResetDefaults.Image = global::SCJMapper_V2.Properties.Resources.RSI; + this.meResetDefaults.Name = "meResetDefaults"; + this.meResetDefaults.Size = new System.Drawing.Size(169, 38); + this.meResetDefaults.Text = "Reset defaults !"; + this.meResetDefaults.Click += new System.EventHandler(this.meResetDefaults_Click); + // + // meResetEmpty + // + this.meResetEmpty.Image = global::SCJMapper_V2.Properties.Resources.NPad; + this.meResetEmpty.Name = "meResetEmpty"; + this.meResetEmpty.Size = new System.Drawing.Size(169, 38); + this.meResetEmpty.Text = "Reset empty !"; + this.meResetEmpty.Click += new System.EventHandler(this.meResetEmpty_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 40); + // + // msBtDump + // + this.msBtDump.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.meDumpMappingList, + this.meDumpLogfile, + this.meDumpDefaultProfile, + this.meDumpActiontreeAsXML}); + this.msBtDump.Image = global::SCJMapper_V2.Properties.Resources.Info; + this.msBtDump.ImageTransparentColor = System.Drawing.Color.Magenta; + this.msBtDump.Name = "msBtDump"; + this.msBtDump.Size = new System.Drawing.Size(94, 37); + this.msBtDump.Text = "Dump..."; + this.msBtDump.ToolTipText = "Get additional information"; + // + // meDumpMappingList + // + this.meDumpMappingList.Name = "meDumpMappingList"; + this.meDumpMappingList.Size = new System.Drawing.Size(206, 22); + this.meDumpMappingList.Text = "Dump Mapping List"; + this.meDumpMappingList.Click += new System.EventHandler(this.meDumpMappingList_Click); + // + // meDumpLogfile + // + this.meDumpLogfile.Name = "meDumpLogfile"; + this.meDumpLogfile.Size = new System.Drawing.Size(206, 22); + this.meDumpLogfile.Text = "Dump Logfile"; + this.meDumpLogfile.Click += new System.EventHandler(this.meDumpLogfile_Click); + // + // meDumpDefaultProfile + // + this.meDumpDefaultProfile.Name = "meDumpDefaultProfile"; + this.meDumpDefaultProfile.Size = new System.Drawing.Size(206, 22); + this.meDumpDefaultProfile.Text = "Dump DefaultProfile"; + this.meDumpDefaultProfile.Click += new System.EventHandler(this.meDumpDefaultProfile_Click); + // + // meDumpActiontreeAsXML + // + this.meDumpActiontreeAsXML.Name = "meDumpActiontreeAsXML"; + this.meDumpActiontreeAsXML.Size = new System.Drawing.Size(206, 22); + this.meDumpActiontreeAsXML.Text = "Dump Actiontree as XML"; + this.meDumpActiontreeAsXML.Click += new System.EventHandler(this.meDumpActiontreeAsXML_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(6, 40); + // + // msShow + // + this.msShow.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.meShowToggleTable, + this.meShowOptionsDialog, + this.meShowDeviceTuningDialog}); + this.msShow.Image = global::SCJMapper_V2.Properties.Resources.Monitor; + this.msShow.ImageTransparentColor = System.Drawing.Color.Magenta; + this.msShow.Name = "msShow"; + this.msShow.Size = new System.Drawing.Size(90, 37); + this.msShow.Text = "Show..."; + this.msShow.ToolTipText = "Show Options, Tuning and Tables"; + // + // meShowToggleTable + // + this.meShowToggleTable.Name = "meShowToggleTable"; + this.meShowToggleTable.Size = new System.Drawing.Size(228, 22); + this.meShowToggleTable.Text = "Show Toggle Table..."; + this.meShowToggleTable.Click += new System.EventHandler(this.meShowToggleTable_Click); + // + // meShowOptionsDialog + // + this.meShowOptionsDialog.Name = "meShowOptionsDialog"; + this.meShowOptionsDialog.Size = new System.Drawing.Size(228, 22); + this.meShowOptionsDialog.Text = "Show Options Dialog..."; + this.meShowOptionsDialog.Click += new System.EventHandler(this.meShowOptionsDialog_Click); + // + // meShowDeviceTuningDialog + // + this.meShowDeviceTuningDialog.Name = "meShowDeviceTuningDialog"; + this.meShowDeviceTuningDialog.Size = new System.Drawing.Size(228, 22); + this.meShowDeviceTuningDialog.Text = "Show Device Tuning Dialog..."; + this.meShowDeviceTuningDialog.Click += new System.EventHandler(this.meShowDeviceTuningDialog_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(6, 40); + // + // msConfig + // + this.msConfig.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.meSettingsDialog, + this.meJsReassignDialog}); + this.msConfig.Image = global::SCJMapper_V2.Properties.Resources.Settings; + this.msConfig.ImageTransparentColor = System.Drawing.Color.Magenta; + this.msConfig.Name = "msConfig"; + this.msConfig.Size = new System.Drawing.Size(97, 37); + this.msConfig.Text = "Config..."; + this.msConfig.ToolTipText = "Configure the program"; + // + // meSettingsDialog + // + this.meSettingsDialog.Name = "meSettingsDialog"; + this.meSettingsDialog.Size = new System.Drawing.Size(178, 22); + this.meSettingsDialog.Text = "Settings Dialog..."; + this.meSettingsDialog.Click += new System.EventHandler(this.meSettingsDialog_Click); + // + // meJsReassignDialog + // + this.meJsReassignDialog.Name = "meJsReassignDialog"; + this.meJsReassignDialog.Size = new System.Drawing.Size(178, 22); + this.meJsReassignDialog.Text = "Js Reassign Dialog..."; + this.meJsReassignDialog.Click += new System.EventHandler(this.meJsReassignDialog_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(6, 40); + // + // meLoadMap + // + this.meLoadMap.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.meLoadMap.AutoSize = false; + this.meLoadMap.BackColor = System.Drawing.Color.DarkSeaGreen; + this.meLoadMap.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.meDefaultsLoadAndGrab, + this.meResetLoadAndGrab, + this.meLoadAndGrab, + this.meLoad}); + this.meLoadMap.Image = global::SCJMapper_V2.Properties.Resources.Folder; + this.meLoadMap.ImageTransparentColor = System.Drawing.Color.Magenta; + this.meLoadMap.Name = "meLoadMap"; + this.meLoadMap.Size = new System.Drawing.Size(150, 37); + this.meLoadMap.Text = "Load..."; + this.meLoadMap.ToolTipText = "Load a map with options..."; + // + // meDefaultsLoadAndGrab + // + this.meDefaultsLoadAndGrab.BackColor = System.Drawing.Color.DarkSeaGreen; + this.meDefaultsLoadAndGrab.Name = "meDefaultsLoadAndGrab"; + this.meDefaultsLoadAndGrab.Size = new System.Drawing.Size(206, 22); + this.meDefaultsLoadAndGrab.Text = "Defaults, Load and Grab !"; + this.meDefaultsLoadAndGrab.Click += new System.EventHandler(this.meDefaultsLoadAndGrab_Click); + // + // meResetLoadAndGrab + // + this.meResetLoadAndGrab.BackColor = System.Drawing.Color.DarkSeaGreen; + this.meResetLoadAndGrab.Name = "meResetLoadAndGrab"; + this.meResetLoadAndGrab.Size = new System.Drawing.Size(206, 22); + this.meResetLoadAndGrab.Text = "Reset, Load and Grab !"; + this.meResetLoadAndGrab.Click += new System.EventHandler(this.meResetLoadAndGrab_Click); + // + // meLoadAndGrab + // + this.meLoadAndGrab.BackColor = System.Drawing.Color.DarkSeaGreen; + this.meLoadAndGrab.Name = "meLoadAndGrab"; + this.meLoadAndGrab.Size = new System.Drawing.Size(206, 22); + this.meLoadAndGrab.Text = "Load and Grab !"; + this.meLoadAndGrab.Click += new System.EventHandler(this.meLoadAndGrab_Click); + // + // meLoad + // + this.meLoad.BackColor = System.Drawing.Color.DarkSeaGreen; + this.meLoad.Name = "meLoad"; + this.meLoad.Size = new System.Drawing.Size(206, 22); + this.meLoad.Text = "Load !"; + this.meLoad.Click += new System.EventHandler(this.meLoad_Click); + // + // msSelectMapping + // + this.msSelectMapping.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.msSelectMapping.AutoSize = false; + this.msSelectMapping.BackColor = System.Drawing.Color.DarkSeaGreen; + this.msSelectMapping.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.msSelectMapping.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.msSelectMapping.Image = ((System.Drawing.Image)(resources.GetObject("msSelectMapping.Image"))); + this.msSelectMapping.ImageTransparentColor = System.Drawing.Color.Magenta; + this.msSelectMapping.Name = "msSelectMapping"; + this.msSelectMapping.Size = new System.Drawing.Size(240, 37); + this.msSelectMapping.Text = "Available Mappings"; + this.msSelectMapping.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.msSelectMapping.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.msSelectMapping_DropDownItemClicked); + // + // toolStripLabel1 + // + this.toolStripLabel1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripLabel1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(69, 37); + this.toolStripLabel1.Text = "Mappings: "; + // + // IL2 + // + this.IL2.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("IL2.ImageStream"))); + this.IL2.TransparentColor = System.Drawing.Color.Transparent; + this.IL2.Images.SetKeyName(0, "User"); + this.IL2.Images.SetKeyName(1, "Locked"); + this.IL2.Images.SetKeyName(2, "RSI"); // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(1054, 892); + this.ClientSize = new System.Drawing.Size(1054, 891); + this.Controls.Add(this.toolStrip1); this.Controls.Add(this.statusStrip1); 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))); @@ -1440,14 +1467,14 @@ this.tableLayoutPanel6.PerformLayout(); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion - - private System.Windows.Forms.Button btDumpList; private System.Windows.Forms.RichTextBox rtb; private System.Windows.Forms.Button btGrab; private System.Windows.Forms.Button btDump; @@ -1482,17 +1509,7 @@ private System.Windows.Forms.TableLayoutPanel tlpanel; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.ToolStripDropDownButton tsDDbtMappings; - private System.Windows.Forms.ToolStripDropDownButton tsBtReset; - private System.Windows.Forms.ToolStripMenuItem resetDefaultsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem resetEmptyToolStripMenuItem; - private System.Windows.Forms.ToolStripDropDownButton tsBtLoad; - private System.Windows.Forms.ToolStripMenuItem loadAndGrabToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem loadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem resetLoadAndGrabToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem defaultsLoadAndGrabToolStripMenuItem; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; private System.Windows.Forms.Button btClearFilter; private System.Windows.Forms.TextBox txFilter; @@ -1504,9 +1521,6 @@ private System.Windows.Forms.ToolTip toolTip1; private System.Windows.Forms.CheckBox cbxThrottle; private System.Windows.Forms.TextBox txRebind; - private System.Windows.Forms.Button btSettings; - private System.Windows.Forms.Button btJsReassign; - private System.Windows.Forms.Button btJSTuning; private System.Windows.Forms.StatusStrip statusStrip1; private System.Windows.Forms.TextBox lblLastJ; private System.Windows.Forms.Button btJsKbd; @@ -1520,7 +1534,6 @@ private System.Windows.Forms.ContextMenuStrip cmAddDel; private System.Windows.Forms.ToolStripMenuItem tdiAddBinding; private System.Windows.Forms.ToolStripMenuItem tdiDelBinding; - private System.Windows.Forms.Button btDumpLog; private System.Windows.Forms.ToolStripSeparator tdiSGroup2; private System.Windows.Forms.ToolStripMenuItem tdiBlendBinding; private System.Windows.Forms.ToolStripMenuItem tdiClearBinding; @@ -1537,22 +1550,15 @@ private System.Windows.Forms.ToolStripMenuItem tdiAddMod1; private System.Windows.Forms.ToolStripMenuItem tdiAddMod2; private System.Windows.Forms.ToolStripMenuItem tdiAddMod3; - private System.Windows.Forms.Button btMakeMod; - private System.Windows.Forms.Label lblPTU; private System.Windows.Forms.ToolStripComboBox tdiCbxActivation; private System.Windows.Forms.ToolStripSeparator tdiSGroup4; private System.Windows.Forms.ToolStripTextBox tdiTxDefActivationMode; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label lblProfileUsed; private System.Windows.Forms.ToolStripMenuItem tmeK_Tab; private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private System.Windows.Forms.Button btDumpProfile; - private System.Windows.Forms.Button btTable; private System.Windows.Forms.ToolStripMenuItem tdiCollapseAll; private System.Windows.Forms.ToolStripMenuItem tdiExpandAll; private System.Windows.Forms.ToolStripSeparator tdiSGroup1; - private System.Windows.Forms.Button btOptions; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label lblAssigned; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; @@ -1562,6 +1568,35 @@ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; private System.Windows.Forms.CheckBox cbxAutoTabXML; private System.Windows.Forms.RichTextBox lbxOther; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripStatusLabel tslblProfileUsed; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripDropDownButton msSelectMapping; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripDropDownButton meLoadMap; + private System.Windows.Forms.ToolStripMenuItem meDefaultsLoadAndGrab; + private System.Windows.Forms.ToolStripMenuItem meResetLoadAndGrab; + private System.Windows.Forms.ToolStripMenuItem meLoadAndGrab; + private System.Windows.Forms.ToolStripMenuItem meLoad; + private System.Windows.Forms.ImageList IL2; + private System.Windows.Forms.ToolStripDropDownButton msBtLoad; + private System.Windows.Forms.ToolStripMenuItem meResetDefaults; + private System.Windows.Forms.ToolStripMenuItem meResetEmpty; + private System.Windows.Forms.ToolStripDropDownButton msBtDump; + private System.Windows.Forms.ToolStripMenuItem meDumpMappingList; + private System.Windows.Forms.ToolStripMenuItem meDumpLogfile; + private System.Windows.Forms.ToolStripMenuItem meDumpDefaultProfile; + private System.Windows.Forms.ToolStripMenuItem meDumpActiontreeAsXML; + private System.Windows.Forms.ToolStripDropDownButton msShow; + private System.Windows.Forms.ToolStripMenuItem meShowToggleTable; + private System.Windows.Forms.ToolStripMenuItem meShowOptionsDialog; + private System.Windows.Forms.ToolStripMenuItem meShowDeviceTuningDialog; + private System.Windows.Forms.ToolStripDropDownButton msConfig; + private System.Windows.Forms.ToolStripMenuItem meSettingsDialog; + private System.Windows.Forms.ToolStripMenuItem meJsReassignDialog; } } diff --git a/FormMain.cs b/FormMain.cs index ca153a5..c17dce7 100644 --- a/FormMain.cs +++ b/FormMain.cs @@ -135,7 +135,7 @@ namespace SCJMapper_V2 private void UpdateDDMapping(string mapName ) { - tsDDbtMappings.Text = mapName; + msSelectMapping.Text = mapName; m_AppSettings.DefMappingName = mapName; m_AppSettings.Save( ); } @@ -178,9 +178,14 @@ namespace SCJMapper_V2 private void LoadMappingDD() { SCMappings.UpdateMappingNames( ); - tsDDbtMappings.DropDownItems.Clear( ); + msSelectMapping.DropDownItems.Clear( ); foreach ( string s in SCMappings.MappingNames ) { - tsDDbtMappings.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ) ); + if ( !SCMappings.IsUserMapping( s ) ) { + msSelectMapping.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ), IL2.Images["RSI"] ); + } + else { + msSelectMapping.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ), IL2.Images["User"] ); + } } } @@ -189,8 +194,8 @@ namespace SCJMapper_V2 /// private void SCFileIndication() { - if ( string.IsNullOrEmpty( SCPath.SCClientMappingPath ) ) tsDDbtMappings.BackColor = MyColors.InvalidColor; - else tsDDbtMappings.BackColor = MyColors.MappingColor; + if ( string.IsNullOrEmpty( SCPath.SCClientMappingPath ) ) msSelectMapping.BackColor = MyColors.InvalidColor; + else msSelectMapping.BackColor = MyColors.MappingColor; } @@ -229,7 +234,7 @@ namespace SCJMapper_V2 // load mappings log.Debug( "Loading Mappings" ); LoadMappingDD( ); - tsDDbtMappings.Text = m_AppSettings.DefMappingName; + msSelectMapping.Text = m_AppSettings.DefMappingName; SCFileIndication( ); @@ -237,7 +242,7 @@ namespace SCJMapper_V2 log.Debug( "Loading Other" ); txMappingName.Text = m_AppSettings.MyMappingName; SetRebindField( txMappingName.Text ); - foreach ( ToolStripDropDownItem d in tsDDbtMappings.DropDownItems ) { + foreach ( ToolStripDropDownItem d in msSelectMapping.DropDownItems ) { if ( d.Text == txMappingName.Text ) { UpdateDDMapping( txMappingName.Text ); break; @@ -286,7 +291,7 @@ namespace SCJMapper_V2 if ( jsIndex >= 0 ) DeviceInst.JoystickInst = DeviceInst.JoystickListRef[jsIndex]; // init PTU folder usage sign - lblPTU.Visible = false; // m_AppSettings.UsePTU; no longer used + //lblPTU.Visible = false; // m_AppSettings.UsePTU; no longer used if ( m_AppSettings.UsePTU ) log.Debug( "Using PTU Folders" ); // Auto Tab XML @@ -341,11 +346,8 @@ namespace SCJMapper_V2 Brush foreBrush = new SolidBrush( Color.Black ); - //This construct will hell you to deside which tab page have current focus - //to change the style. + //This construct will tell you which tab page has focus to change the style. if ( e.Index == this.tc1.SelectedIndex ) { - //This line of code will help you to change the apperance like size,name,style. - f = new Font( e.Font, FontStyle.Bold | FontStyle.Bold ); f = new Font( e.Font, FontStyle.Bold ); Rectangle tabRect = tc1.Bounds; @@ -418,7 +420,7 @@ namespace SCJMapper_V2 m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked ); // Init with default profile filepath m_AT.LoadProfileTree( addDefaultBinding ); - lblProfileUsed.Text = SCDefaultProfile.UsedDefProfile; // SCA 2.2 show used profile + tslblProfileUsed.Text = SCDefaultProfile.UsedDefProfile; // SCA 2.2 show used profile // Activation Update tdiCbxActivation.Items.Clear( ); @@ -645,6 +647,7 @@ namespace SCJMapper_V2 ; // just ignore } UpdateTable( ); + UpdateAssignmentList( ); } @@ -739,7 +742,7 @@ namespace SCJMapper_V2 cbxThrottle.Checked = false; cbxThrottle.Enabled = false; } // Update joystick modifiers - not currently used - btMakeMod.Enabled = JoystickCls.ValidModifier( ctrl ); + //btMakeMod.Enabled = JoystickCls.ValidModifier( ctrl ); } @@ -816,25 +819,56 @@ namespace SCJMapper_V2 else MySounds.PlayCannot( ); } - //TODO - // possibly obsolete - we dont support to make own modifiers - button is invisible - private void btMakeMod_Click( object sender, EventArgs e ) + // General Area Items + + private void btDump_Click( object sender, EventArgs e ) { + Dump( ); } - // possibly obsolete - we dont support to make own modifiers - private void Cbx_CheckedChanged( object sender, EventArgs e ) + + private void btGrab_Click( object sender, EventArgs e ) { + Grab( ); } + private void btClearFilter_Click( object sender, EventArgs e ) + { + txFilter.Text = ""; + } - // General Area Items + private void txFilter_TextChanged( object sender, EventArgs e ) + { + m_AT.FilterTree( txFilter.Text ); + } - private void btDump_Click( object sender, EventArgs e ) + private void cbxAutoTabXML_CheckedChanged( object sender, EventArgs e ) { - Dump( ); + m_AppSettings.AutoTabXML = cbxAutoTabXML.Checked; m_AppSettings.Save( ); } - private void btDumpList_Click( object sender, EventArgs e ) + // Toolstrip Items + + private void meResetDefaults_Click( object sender, EventArgs e ) + { + // start over and if chosen, load defaults from SC game + InitActionTree( true ); + rtb.Text = ""; + UpdateTable( ); + UpdateAssignmentList( ); + } + + private void meResetEmpty_Click( object sender, EventArgs e ) + { + // start over + cbxShowMappedOnly.Checked = false; // else it might get empty.. + InitActionTree( false ); + rtb.Text = ""; + UpdateTable( ); + UpdateAssignmentList( ); + } + + + private void meDumpMappingList_Click( object sender, EventArgs e ) { AutoTabXML_Assignment( EATabXML.Tab_XML ); @@ -842,122 +876,246 @@ namespace SCJMapper_V2 rtb.Text = string.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActionsCSV( m_AppSettings.ListModifiers ) ); else rtb.Text = string.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActions( ) ); - } - private void btDumpLog_Click( object sender, EventArgs e ) + private void meDumpLogfile_Click( object sender, EventArgs e ) { AutoTabXML_Assignment( EATabXML.Tab_XML ); - rtb.Text = string.Format( "-- {0} - SC Joystick AC Log Controller Detection --\n{1}", DateTime.Now, SCLogExtract.ExtractLog( ) ); } - private void btDumpProfile_Click( object sender, EventArgs e ) + private void meDumpDefaultProfile_Click( object sender, EventArgs e ) { AutoTabXML_Assignment( EATabXML.Tab_XML ); - rtb.Text = SCDefaultProfile.DefaultProfile( ); } - private void btGrab_Click( object sender, EventArgs e ) + private void meDumpActiontreeAsXML_Click( object sender, EventArgs e ) { - Grab( ); + Dump( ); } - private void btClearFilter_Click( object sender, EventArgs e ) + // Dialogs + + // Show the Table Window + private void meShowToggleTable_Click( object sender, EventArgs e ) { - txFilter.Text = ""; + bool created = false; + if ( FTAB == null ) { + FTAB = new FormTable( ); + FTAB.EditActionEvent += FTAB_EditActionEvent; + FTAB.UpdateEditEvent += FTAB_UpdateEditEvent; + created = true; + } + + if ( FTAB.Visible ) { + m_AppSettings.FormTableSize = FTAB.LastSize; + m_AppSettings.FormTableLocation = FTAB.LastLocation; + m_AppSettings.FormTableColumnWidth = FTAB.LastColSize; + FTAB.Hide( ); + + } + else { + FTAB.Show( ); + + if ( created ) { + FTAB.Size = m_AppSettings.FormTableSize; + FTAB.Location = m_AppSettings.FormTableLocation; + FTAB.LastColSize = m_AppSettings.FormTableColumnWidth; + } + // reload the data to display + UpdateTable( ); + } } - private void txFilter_TextChanged( object sender, EventArgs e ) + private void meShowOptionsDialog_Click( object sender, EventArgs e ) { - m_AT.FilterTree( txFilter.Text ); + timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy + + FormOptions OPT = new FormOptions( ); + + // Have to attach here to capture the currently valid settings + UpdateTuningItems( ); + UpdateMoreOptionItems( ); + + DeviceList devlist = new DeviceList( ); + if ( m_AppSettings.DetectGamepad && ( DeviceInst.GamepadRef != null ) ) { + devlist.Add( DeviceInst.GamepadRef ); + } + devlist.AddRange( DeviceInst.JoystickListRef ); + + OPT.TuningOptions = m_AT.ActionMaps.TuningOptions; + OPT.DeviceOptions = m_AT.ActionMaps.DeviceOptions; + OPT.Devicelist = devlist; + + OPT.ShowDialog( this ); + m_AT.Dirty = true; + + OPT = null; // get rid and create a new one next time.. + devlist = null; + + if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor; + timer1.Enabled = true; } - private void cbxAutoTabXML_CheckedChanged( object sender, EventArgs e ) + private void meShowDeviceTuningDialog_Click( object sender, EventArgs e ) { - m_AppSettings.AutoTabXML = cbxAutoTabXML.Checked; m_AppSettings.Save( ); - } + timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy - // Toolstrip Items + JSCAL = new OGL.FormJSCalCurve( ); - private void tsBtReset_ButtonClick( object sender, EventArgs e ) - { + // Have to attach here to capture the currently valid settings + UpdateTuningItems( ); + // run + JSCAL.TuningOptions = m_AT.ActionMaps.TuningOptions; + JSCAL.ShowDialog( this ); + m_AT.Dirty = true; + + JSCAL = null; // get rid and create a new one next time.. + + if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor; + timer1.Enabled = true; } - private void resetEmptyToolStripMenuItem_Click( object sender, EventArgs e ) + + // Settings + private void meSettingsDialog_Click( object sender, EventArgs e ) { - // start over - InitActionTree( false ); - rtb.Text = ""; - UpdateTable( ); + // have to stop polling while the Settings window is open + timer1.Enabled = false; + if ( m_AppSettings.ShowSettings( "" ) != System.Windows.Forms.DialogResult.Cancel ) { + m_AppSettings.Reload( ); // must reload in case of any changes in the form + // then reload the profile and mappings + LoadMappingDD( ); + // indicates (in)valid folders + SCFileIndication( ); + + // now update the contents according to new settings + foreach ( JoystickCls j in DeviceInst.JoystickListRef ) j.ApplySettings( ); // update Seetings + m_AT.IgnoreMaps = m_AppSettings.IgnoreActionmaps; + // and start over with an empty tree + InitActionTree( false ); + UpdateTable( ); + } + + timer1.Enabled = true; } - private void resetDefaultsToolStripMenuItem_Click( object sender, EventArgs e ) + private void meJsReassignDialog_Click( object sender, EventArgs e ) { - // start over and if chosen, load defaults from SC game - InitActionTree( true ); - rtb.Text = ""; - UpdateTable( ); + // have to stop polling while the Reassign window is open + timer1.Enabled = false; + if ( DeviceInst.JoystickListRef.ShowReassign( ) != DialogResult.Cancel ) { + // copy the action tree while reassigning the jsN mappings from OLD to NEW + ActionTree newTree = m_AT.ReassignJsN( DeviceInst.JoystickListRef.JsReassingList ); + + // we have still the old assignment in the ActionMap - change it here (map does not know about the devices) + JoystickCls j = null; + // for all supported jsN devices + for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { + j = DeviceInst.JoystickListRef.Find_jsN( i + 1 ); + if ( j != null ) { + newTree.ActionMaps.jsN[i] = j.DevName; newTree.ActionMaps.jsNGUID[i] = j.DevInstanceGUID; + } + else { + newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsNGUID[i] = ""; + } + } + + m_AT.NodeSelectedEvent -= M_AT_NodeSelectedEvent; // disconnect the Event + m_AT = newTree; // make it the valid one + m_AT.NodeSelectedEvent += M_AT_NodeSelectedEvent; // reconnect the Event + + m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked ); + m_AT.ReloadTreeView( ); + if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor; + } + + timer1.Enabled = true; } - private void tsDDbtMappings_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e ) + // Load maps + + private void msSelectMapping_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e ) { UpdateDDMapping( e.ClickedItem.Text ); } - - private void loadToolStripMenuItem_Click( object sender, EventArgs e ) + private void meDefaultsLoadAndGrab_Click( object sender, EventArgs e ) { + // start over + InitActionTree( true ); rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName ); + Grab( ); if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) { txMappingName.Text = m_AppSettings.DefMappingName; SetRebindField( txMappingName.Text ); } - btGrab.BackColor = MyColors.DirtyColor; + btDump.BackColor = MyColors.DirtyColor; txMappingName.BackColor = MyColors.ValidColor; } - private void loadAndGrabToolStripMenuItem_Click( object sender, EventArgs e ) + private void meResetLoadAndGrab_Click( object sender, EventArgs e ) { + // start over + InitActionTree( false ); rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName ); - Grab( ); if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) { txMappingName.Text = m_AppSettings.DefMappingName; SetRebindField( txMappingName.Text ); } - btDump.BackColor = MyColors.DirtyColor; + Grab( ); txMappingName.BackColor = MyColors.ValidColor; } - private void resetLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e ) + private void meLoadAndGrab_Click( object sender, EventArgs e ) { - // start over - InitActionTree( false ); rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName ); + Grab( ); if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) { txMappingName.Text = m_AppSettings.DefMappingName; SetRebindField( txMappingName.Text ); } - Grab( ); + btDump.BackColor = MyColors.DirtyColor; txMappingName.BackColor = MyColors.ValidColor; } - private void defaultsLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e ) + private void meLoad_Click( object sender, EventArgs e ) { - // start over - InitActionTree( true ); rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName ); - Grab( ); if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) { txMappingName.Text = m_AppSettings.DefMappingName; SetRebindField( txMappingName.Text ); } - btDump.BackColor = MyColors.DirtyColor; + btGrab.BackColor = MyColors.DirtyColor; txMappingName.BackColor = MyColors.ValidColor; } + + private void tsDDbtMappings_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e ) + { + } + + + + private void loadToolStripMenuItem_Click( object sender, EventArgs e ) + { + } + + private void loadAndGrabToolStripMenuItem_Click( object sender, EventArgs e ) + { + } + + private void resetLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e ) + { + } + + private void defaultsLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e ) + { + } + + // Context Menu Items // RTB Menu @@ -1221,62 +1379,6 @@ namespace SCJMapper_V2 } - // Settings - - private void btSettings_Click( object sender, EventArgs e ) - { - // have to stop polling while the Settings window is open - timer1.Enabled = false; - if ( m_AppSettings.ShowSettings( "" ) != System.Windows.Forms.DialogResult.Cancel ) { - m_AppSettings.Reload( ); // must reload in case of any changes in the form - // then reload the profile and mappings - LoadMappingDD( ); - // indicates (in)valid folders - SCFileIndication( ); - - // now update the contents according to new settings - foreach ( JoystickCls j in DeviceInst.JoystickListRef ) j.ApplySettings( ); // update Seetings - m_AT.IgnoreMaps = m_AppSettings.IgnoreActionmaps; - // and start over with an empty tree - InitActionTree( false ); - UpdateTable( ); - } - - timer1.Enabled = true; - } - - private void btJsReassign_Click( object sender, EventArgs e ) - { - // have to stop polling while the Reassign window is open - timer1.Enabled = false; - if ( DeviceInst.JoystickListRef.ShowReassign( ) != DialogResult.Cancel ) { - // copy the action tree while reassigning the jsN mappings from OLD to NEW - ActionTree newTree = m_AT.ReassignJsN( DeviceInst.JoystickListRef.JsReassingList ); - - // we have still the old assignment in the ActionMap - change it here (map does not know about the devices) - JoystickCls j = null; - // for all supported jsN devices - for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { - j = DeviceInst.JoystickListRef.Find_jsN( i + 1 ); - if ( j != null ) { - newTree.ActionMaps.jsN[i] = j.DevName; newTree.ActionMaps.jsNGUID[i] = j.DevInstanceGUID; - } - else { - newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsNGUID[i] = ""; - } - } - - m_AT.NodeSelectedEvent -= M_AT_NodeSelectedEvent; // disconnect the Event - m_AT = newTree; // make it the valid one - m_AT.NodeSelectedEvent += M_AT_NodeSelectedEvent; // reconnect the Event - - m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked ); - m_AT.ReloadTreeView( ); - if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor; - } - - timer1.Enabled = true; - } // Joystick Tuning @@ -1427,55 +1529,6 @@ namespace SCJMapper_V2 } - private void btJSTuning_Click( object sender, EventArgs e ) - { - timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy - - JSCAL = new OGL.FormJSCalCurve( ); - - // Have to attach here to capture the currently valid settings - UpdateTuningItems( ); - // run - JSCAL.TuningOptions = m_AT.ActionMaps.TuningOptions; - JSCAL.ShowDialog( this ); - m_AT.Dirty = true; - - JSCAL = null; // get rid and create a new one next time.. - - if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor; - timer1.Enabled = true; - } - - - private void btOptions_Click( object sender, EventArgs e ) - { - timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy - - FormOptions OPT = new FormOptions( ); - - // Have to attach here to capture the currently valid settings - UpdateTuningItems( ); - UpdateMoreOptionItems( ); - - DeviceList devlist = new DeviceList( ); - if ( m_AppSettings.DetectGamepad && ( DeviceInst.GamepadRef != null ) ) { - devlist.Add( DeviceInst.GamepadRef ); - } - devlist.AddRange( DeviceInst.JoystickListRef ); - - OPT.TuningOptions = m_AT.ActionMaps.TuningOptions; - OPT.DeviceOptions = m_AT.ActionMaps.DeviceOptions; - OPT.Devicelist = devlist; - - OPT.ShowDialog( this ); - m_AT.Dirty = true; - - OPT = null; // get rid and create a new one next time.. - devlist = null; - - if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor; - timer1.Enabled = true; - } // Keyboard Input @@ -1532,11 +1585,8 @@ namespace SCJMapper_V2 e.Handled = true; } - // text of input has changed - private void lblLastJ_TextChanged( object sender, EventArgs e ) + private void UpdateAssignmentList() { - AutoTabXML_Assignment( EATabXML.Tab_Assignment ); - string devInput = Act.DevInput( lblLastJ.Text, InputMode ); RTF.RTFformatter RTF = new RTF.RTFformatter( ); m_AT.FindAllActionsRTF( devInput, RTF ); @@ -1547,6 +1597,12 @@ namespace SCJMapper_V2 } lbxOther.Rtf = RTF.RTFtext; } + // text of input has changed + private void lblLastJ_TextChanged( object sender, EventArgs e ) + { + AutoTabXML_Assignment( EATabXML.Tab_Assignment ); + UpdateAssignmentList( ); + } // maintain the global modifier store @@ -1656,38 +1712,6 @@ namespace SCJMapper_V2 } } - // Show the Table Window - private void btTable_Click( object sender, EventArgs e ) - { - bool created = false; - if ( FTAB == null ) { - FTAB = new FormTable( ); - FTAB.EditActionEvent += FTAB_EditActionEvent; - FTAB.UpdateEditEvent += FTAB_UpdateEditEvent; - created = true; - } - - if ( FTAB.Visible ) { - m_AppSettings.FormTableSize = FTAB.LastSize; - m_AppSettings.FormTableLocation = FTAB.LastLocation; - m_AppSettings.FormTableColumnWidth = FTAB.LastColSize; - FTAB.Hide( ); - - } - else { - FTAB.Show( ); - - if ( created ) { - FTAB.Size = m_AppSettings.FormTableSize; - FTAB.Location = m_AppSettings.FormTableLocation; - FTAB.LastColSize = m_AppSettings.FormTableColumnWidth; - } - // reload the data to display - UpdateTable( ); - } - - } - // called when the user clicks Update from the Table Window private void FTAB_UpdateEditEvent( object sender, UpdateEditEventArgs e ) { @@ -1712,6 +1736,5 @@ namespace SCJMapper_V2 { m_AT.FindAndSelectActionKey( e.Actionmap, e.Actionkey, e.Nodeindex ); } - } } diff --git a/FormMain.resx b/FormMain.resx index 16ed368..64326a8 100644 --- a/FormMain.resx +++ b/FormMain.resx @@ -128,7 +128,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8 - EAAAAk1TRnQBSQFMAgEBCQEAAagBEQGoAREBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + EAAAAk1TRnQBSQFMAgEBCQEAAVgBEgFYARIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -207,278 +207,6 @@ 652, 17 - - - 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 - x1//2Q== - - - - 133, 17 - - - 209, 17 - - - 421, 17 - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH @@ -551,42 +279,287 @@ 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 + VEPFEv0j3g3A94woz3mmbBnHX//Z - + + 133, 17 + + + 209, 17 + + + 421, 17 + + + 555, 17 + + + 17, 17 + + + 894, 17 + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG @@ -601,32 +574,127 @@ TgDQASA1MVpwzwAAAABJRU5ErkJggg== - + + 999, 17 + + - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAM9SURBVEhL7dTrU0xhHAfww7htWmIlRSUiacbf4BVvvGDM - MORaRjEYsu2E0iS3WKKLbrIIG9lNi213H7nMItnOnm1ach9D1O7Wbp1okfH1nC3NYMQ4r8z4znzenfl9 - n9885xzmf36b/Pz8ULVaXcpxXA/Lsl6LxcILbDZbj8lk4gsLCxf3Pfp3ocNLHA4HfhWj0dgil8snCM9m - ZWVJB5Kenj6KGuIb/C06nY54PB50dXXB7Xb3a2trg9frhdPphMFg6DabzR3fthPcq7vP041599NHPP+E - 5TueNHXZ7fbPzZy1xaJWze4bzzBarZYIG/A8j/b29u+4XC50d3f37fJzhIOcqLVAWcsit45DAduIYs6O - +JyS5pEL18T0F7S2tqKzs9N36h8JJT/iOzz44HiL+cVVYCoaMJQ8w/DqRximb8Iw42MEcTxCign8l6ck - +gpeN7/Bx/fvgE/0tJ/e/x7Nqwc2BB++gojaL4ipdmKmwdVL78As8wfE3PBApsgjzAWNhnjaXHC3tiD3 - ag0UlQRpuhrsHMD+6ltYV1qO0IIbmGFyIlr3nHrRb6b+NaI0jyFLOkIYA71kr+MNEk7rwRwzY/BFO4aU - cwMapGYhqWjEDP0rRGuaEFXxAFEXH/aLrnqG6eUNCNiSTZh7NUbSyNYjXKlFUOVLTCvjEHnG9ofqEVlG - nWG/M/18I6aerEPAJmVvgbXegil7ziH4xH1MOW6mbosSSYdHFN1EwPr9hKmlBTYrbc48hcD86wjPM4k2 - ufA6wo5W04I9hLl9zUg4lsXU9OOQKS8jVHlJtLDsK5h0QANpglBgNBD6RSJiewFGZ6gRknlWtIl7yxGc - UQbp2oy+AqsV4Yoc+KeUIGiHeBPSSjF+WxGk8WlCwVVSb+UQnnQIIzcfwXh5jmhBijwEbj0KaRwtEC6Z - tTUgZMM+SBL3YdzGA6IFbjqIcRuyIF25jTA1VdqSu3X09Uw6iKGrdmJsQqZossTdGLN2F/xXKAhzqqgo - rFJ99uTc1ENgFm1FwOpU8eJS6fAUSGKT1/v+qCqVasS8lMw5zILNKr+l8juSZYprklgF+Rt+sYqbfsuS - b0mWyNfJ4pKlvoJ/OAzzFclFUL2L/h02AAAAAElFTkSuQmCC + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc + GQAAAk1TRnQBSQFMAgEBAwEAARgBAAEYAQABMAEAATABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABwAMAATADAAEBAQABCAYAASQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + 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== - - 555, 17 - - - 17, 17 - 55 diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 02f5630..882bd21 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace SCJMapper_V2.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -105,7 +105,7 @@ namespace SCJMapper_V2.Properties { /// </actiongroup> /// /// <ActivationModes > - /// <ActivationMode name="tap" onPres [rest of string was truncated]";. + /// <ActivationMode name="tap" onPress= [rest of string was truncated]";. /// internal static string defaultProfile { get { @@ -113,6 +113,26 @@ namespace SCJMapper_V2.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Folder { + get { + object obj = ResourceManager.GetObject("Folder", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Home { + get { + object obj = ResourceManager.GetObject("Home", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -123,6 +143,46 @@ namespace SCJMapper_V2.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Info { + get { + object obj = ResourceManager.GetObject("Info", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LArrow { + get { + object obj = ResourceManager.GetObject("LArrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Load { + get { + object obj = ResourceManager.GetObject("Load", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Monitor { + get { + object obj = ResourceManager.GetObject("Monitor", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -133,6 +193,46 @@ namespace SCJMapper_V2.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NPad { + get { + object obj = ResourceManager.GetObject("NPad", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RArrow { + get { + object obj = ResourceManager.GetObject("RArrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RSI { + get { + object obj = ResourceManager.GetObject("RSI", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Settings { + get { + object obj = ResourceManager.GetObject("Settings", 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 17ecf3c..4337931 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -118,25 +118,55 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\graphics\Load.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\graphics\hornet.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\defaultprofile.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + ..\graphics\aurora.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\graphics\Cassini_Logo2_s.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\graphics\Folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\graphics\LArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\graphics\YPR.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\graphics\aurora.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\graphics\Info.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\graphics\Notes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\graphics\RArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\graphics\Cassini_Logo2_s.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\defaultprofile.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\graphics\Monitor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\graphics\RSI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\graphics\300i.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\graphics\Home.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\graphics\Settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\graphics\NPad.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.txt b/ReadMe.txt index c3e664b..d8300f0 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -42,7 +42,11 @@ cassini@burri-web.org Changelog: V 2.34 - BETA Build 68 - improvement - complete rework of XML defaultProfile/mapping parsing +- add - provide CIG mappings from game assets +- update - unclutter GUI, allow more scaling - internal cleanup - consistent type naming, others +- fix - overwritten profile actions removed in Assignment Tab +- update - doc SCJMapper_QGuide V2.34beta.pdf V 2.33 - BETA Build 67 - update for SC 3.0.0 Alpha public - fix - finding SC game folder - may work automatically for 3.0 Alpha else define it in Settings diff --git a/SC/DProfileReader.cs b/SC/DProfileReader.cs index c3cf6c3..44f5c01 100644 --- a/SC/DProfileReader.cs +++ b/SC/DProfileReader.cs @@ -384,7 +384,7 @@ namespace SCJMapper_V2.SC where ( x.Name == "modifiers" ) select x; foreach ( XElement modifier in modifiers ) { - ValidContent &= Modifiers.Instance.FromXML( modifier ); + ValidContent &= Modifiers.Instance.FromXML( modifier, true ); } IEnumerable actionmaps = from x in el.Elements( ) diff --git a/SC/SCMappings.cs b/SC/SCMappings.cs index 7701b0a..b03fc65 100644 --- a/SC/SCMappings.cs +++ b/SC/SCMappings.cs @@ -14,11 +14,11 @@ namespace SCJMapper_V2.SC { private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod( ).DeclaringType ); - 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 + 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 static private List m_scMappings = new List( ); - + static private SCGameMaps m_scGameMaps = new SCGameMaps( ); /// /// Returns true if a mapping file exists @@ -52,7 +52,7 @@ namespace SCJMapper_V2.SC /// True if it is a user mapping name static public bool IsUserMapping( string mapName ) { - return mapName.StartsWith( c_UserMapStartsWith ); + return Path.GetFileNameWithoutExtension( mapName ).StartsWith( c_UserMapStartsWith ); } /// @@ -69,11 +69,14 @@ namespace SCJMapper_V2.SC } - static public void UpdateMappingNames( ) + static public void UpdateMappingNames() { if ( Directory.Exists( SCPath.SCClientMappingPath ) ) { m_scMappings.Clear( ); - m_scMappings = ( List )Directory.EnumerateFiles( SCPath.SCClientMappingPath ).ToList( ); + m_scMappings = (List)Directory.EnumerateFiles( SCPath.SCClientMappingPath ).ToList( ); + foreach ( KeyValuePair kv in m_scGameMaps ) { + m_scMappings.Insert( 0, kv.Key ); // insert before others + } } else { log.Warn( "UpdateMappingNames - cannot find SC Mapping directory" ); @@ -87,8 +90,7 @@ namespace SCJMapper_V2.SC /// A list of filenames - can be empty static public List MappingNames { - get - { + get { log.Debug( "MappingNames - Entry" ); if ( m_scMappings.Count == 0 ) { UpdateMappingNames( ); @@ -98,20 +100,27 @@ namespace SCJMapper_V2.SC } /// - /// Returns the sought default profile as string from GameData.pak + /// Returns the sought mapping /// - /// The filename of the profile to be extracted + /// The filename of the profile to be extracted /// A string containing the file contents static public string Mapping( string mappingName ) { string retVal = ""; - string mFile = Path.Combine( SCPath.SCClientMappingPath, ( mappingName + ".xml" ) ); - if ( File.Exists( mFile ) ) { - using ( StreamReader sr = new StreamReader( mFile ) ) { - retVal = sr.ReadToEnd( ); + if ( IsUserMapping( mappingName ) ) { + string mFile = Path.Combine( SCPath.SCClientMappingPath, ( mappingName + ".xml" ) ); + if ( File.Exists( mFile ) ) { + using ( StreamReader sr = new StreamReader( mFile ) ) { + retVal = sr.ReadToEnd( ); + } + } + } + else { + // game mapping + if ( m_scGameMaps.ContainsKey( mappingName ) ) { + retVal = m_scGameMaps[mappingName]; } } - return retVal; } diff --git a/SC/SCgameMaps.cs b/SC/SCgameMaps.cs new file mode 100644 index 0000000..73e33d5 --- /dev/null +++ b/SC/SCgameMaps.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SCJMapper_V2.CryXMLlib; +using SCJMapper_V2.p4kFile; + +namespace SCJMapper_V2.SC +{ + /// + /// Maintains the game mappings contained in the p4k file + /// + public class SCGameMaps: SortedList + { + private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod( ).DeclaringType ); + + public SCGameMaps() + { + if ( File.Exists( SCPath.SCData_p4k ) ) { + try { + var PD = new p4kDirectory( ); + IList fileList = PD.ScanDirectoryContaining( SCPath.SCData_p4k, @"Data\Libs\Config\Mappings\layout_" ); + + foreach (p4kFile.p4kFile file in fileList ) { + byte[] fContent = PD.GetFile( SCPath.SCData_p4k, file ); + + // use the binary XML reader + CryXmlNodeRef ROOT = null; + CryXmlBinReader.EResult readResult = CryXmlBinReader.EResult.Error; + CryXmlBinReader cbr = new CryXmlBinReader( ); + ROOT = cbr.LoadFromBuffer( fContent, out readResult ); + if ( readResult == CryXmlBinReader.EResult.Success ) { + XmlTree tree = new XmlTree( ); + tree.BuildXML( ROOT ); + this.Add( Path.GetFileNameWithoutExtension(file.Filename), tree.XML_string ); + } + else { + log.ErrorFormat( "SCGameMaps - Error in CryXmlBinReader: {0}", cbr.GetErrorDescription( ) ); + } + } + } + catch ( Exception ex ) { + log.Error( "SCGameMaps - Unexpected ", ex ); + } + + } + + } + + + } +} diff --git a/SC/p4kFile/p4kDirectory.cs b/SC/p4kFile/p4kDirectory.cs index 922b5a8..e16b01e 100644 --- a/SC/p4kFile/p4kDirectory.cs +++ b/SC/p4kFile/p4kDirectory.cs @@ -65,11 +65,10 @@ namespace SCJMapper_V2.p4kFile private p4kZ64EndOfCentralDirRecord m_z64EndOfCentralDirRecord = null; /// - /// Scans directory entries and extract a file (string.EndsWith is used) + /// Scans directory entries and return the a file descriptor (string.EndsWith is used) /// /// The p4k file /// The filename to look for - /// A BackgroundWorker object public p4kFile ScanDirectoryFor( string p4kFilename, string filename ) { if ( !File.Exists( p4kFilename ) ) return null; @@ -105,5 +104,45 @@ namespace SCJMapper_V2.p4kFile } + /// + /// Scans directory entries and return the a list of matching file descriptors (string.Contains is used) + /// + /// The p4k file + /// The filename part to look for + public IList ScanDirectoryContaining( string p4kFilename, string filenamepart ) + { + if ( !File.Exists( p4kFilename ) ) return null; + + List fileList = new List( ); + + using ( p4kRecReader reader = new p4kRecReader( p4kFilename ) ) { + // work from the end of the file + reader.GotoLastPage( ); + m_endOfCentralDirRecord = new p4kEndOfCentralDirRecord( reader ); + + // position first + reader.Seek( m_endOfCentralDirRecord.RecordOffset - p4kRecReader.PageSize ); + m_z64EndOfCentralDirLocator = new p4kZ64EndOfCentralDirLocator( reader ); + + // for the next the position should be found already - seek it + reader.Seek( m_z64EndOfCentralDirLocator.Z64EndOfCentralDir ); + m_z64EndOfCentralDirRecord = new p4kZ64EndOfCentralDirRecord( reader ); + // now we should have the start of the directory entries... + + // position first + reader.Seek( m_z64EndOfCentralDirRecord.Z64StartOfCentralDir ); + // loop all file - as per dir reporting + for ( long i = 0; i < m_z64EndOfCentralDirRecord.NumberOfEntries; i++ ) { + p4kDirectoryEntry de = new p4kDirectoryEntry( reader ); + if ( !string.IsNullOrEmpty( filenamepart ) && de.Filename.ToLower( ).Contains( filenamepart.ToLower( ) ) ) { + var p = new p4kFile( de ); // FOUND + fileList.Add( p ); + } + } + } + return fileList; + } + + } } diff --git a/SCJMapper-V2.csproj b/SCJMapper-V2.csproj index 30b37b4..ddf09d8 100644 --- a/SCJMapper-V2.csproj +++ b/SCJMapper-V2.csproj @@ -155,6 +155,7 @@ + DS_ActionMaps.xsd @@ -348,6 +349,16 @@ + + + + + + + + + + diff --git a/actions/ActionCls.cs b/actions/ActionCls.cs index eb187ae..33d18e5 100644 --- a/actions/ActionCls.cs +++ b/actions/ActionCls.cs @@ -252,8 +252,15 @@ namespace SCJMapper_V2.Actions if ( string.IsNullOrEmpty( input ) ) input = ""; actModeName = (string)bindingNode.Attribute( "ActivationMode" ); multi = (string)bindingNode.Attribute( "multiTap" ); + string device = (string)bindingNode.Attribute( "device" ); //process input = DeviceCls.fromXML( input ); // move from external to internal blend + if ( !string.IsNullOrEmpty( device ) ) { + // AC1 style - need to reformat mouse and keyboard according to AC2 style now + if ( KeyboardCls.IsDeviceClass( device ) ) input = KeyboardCls.FromAC1( input ); + else if ( MouseCls.IsDeviceClass( device ) ) input = MouseCls.FromAC1( input ); + else if ( GamepadCls.IsDeviceClass( device ) ) input = GamepadCls.FromAC1( input ); + } Device = Act.DeviceClassFromInput( input ); ActivationMode actMode = null; if ( !string.IsNullOrEmpty( actModeName ) ) { diff --git a/actions/ActionMapsCls.cs b/actions/ActionMapsCls.cs index 7921a70..3660ff6 100644 --- a/actions/ActionMapsCls.cs +++ b/actions/ActionMapsCls.cs @@ -342,38 +342,39 @@ namespace SCJMapper_V2.Actions using ( XmlReader reader = XmlReader.Create( new StringReader( xml ), settings ) ) { reader.MoveToContent( ); - // read the header element - if ( reader.Name == "ActionMaps" ) { - if ( reader.HasAttributes ) { - version = reader["version"]; - if ( version == "0" ) version = ACM_VERSION; // update from legacy to actual version - - // get the joystick mapping if there is one - for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) { - jsN[i] = reader[string.Format( "js{0}", i + 1 )]; - jsNGUID[i] = reader[string.Format( "js{0}G", i + 1 )]; + if ( reader.EOF ) return false; + + if ( XNode.ReadFrom( reader ) is XElement el ) { + + // read the header element + if ( el.Name.LocalName == "ActionMaps" ) { + if ( el.HasAttributes ) { + version = (string)el.Attribute( "version" ); + if ( version == "0" ) version = ACM_VERSION; // update from legacy to actual version + + // 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 ) ); + } + } + else { + return false; } } - else { - return false; - } - } - // now handle the js assignment from the map - // Reset with the found mapping - DeviceInst.JoystickListRef.ResetJsNAssignment( jsNGUID ); - // Only now create the default optiontree for this map, containing included joysticks and the gamepad - CreateNewOptions( ); + // now handle the js assignment from the map + // Reset with the found mapping + DeviceInst.JoystickListRef.ResetJsNAssignment( jsNGUID ); + // Only now create the default optiontree for this map, containing included joysticks and the gamepad + CreateNewOptions( ); - // now read the CIG content of the map - reader.MoveToContent( ); - // could be actionmap OR (AC 0.9) deviceoptions OR options - if ( XNode.ReadFrom( reader ) is XElement el ) { + // now read the CIG content of the map IEnumerable actionmaps = from x in el.Elements( ) - where ( x.Name == "actionmap" ) - select x; + where ( x.Name == "actionmap" ) + select x; foreach ( XElement actionmap in actionmaps ) { ActionMapCls acm = new ActionMapCls( ); if ( acm.fromXML( actionmap ) ) { @@ -403,8 +404,8 @@ namespace SCJMapper_V2.Actions } IEnumerable modifiers = from x in el.Elements( ) - where ( x.Name == "modifiers" ) - select x; + where ( x.Name == "modifiers" ) + select x; foreach ( XElement modifier in modifiers ) { SC.Modifiers.Instance.FromXML( modifier ); } diff --git a/actions/ActionTree.cs b/actions/ActionTree.cs index 65cfea4..8cc812a 100644 --- a/actions/ActionTree.cs +++ b/actions/ActionTree.cs @@ -867,13 +867,15 @@ namespace SCJMapper_V2.Actions matn.Nodes.Add( matin ); // add to master tree matin.UpdateAction( acc ); UpdateMasterNode( matin ); } - } catch { + } + catch { ; // key not found } Dirty = true; } // foreach } - } catch ( Exception e ) { + } + catch ( Exception e ) { log.DebugFormat( "ReloadTreeView - Exception in loading Treevie\n{0}", e.Message ); // map key not found ?? } } @@ -1051,11 +1053,7 @@ namespace SCJMapper_V2.Actions foreach ( ActionMapCls acm in ActionMaps ) { // have to search Actions in Maps foreach ( ActionCls ac in acm ) { - if ( ac.DefBinding == input ) { - aMode = string.Format( "{0};{1}", ac.DefActivationMode.Name, ac.DefActivationMode.MultiTap ); - rtf.Write( "profile" ); rtf.WriteTab( ac.Name ); rtf.WriteTab( acm.Name ); rtf.WriteTab( aMode ); rtf.WriteLn( ); - rtf.WriteLn( ); - } + bool used = false; foreach ( ActionCommandCls acc in ac.InputList ) { if ( acc.DevInput == input ) { aMode = string.Format( "modified;{0};{1}", acc.ActivationMode.Name, acc.ActivationMode.MultiTap ); @@ -1065,7 +1063,14 @@ namespace SCJMapper_V2.Actions rtf.Write( "mapped" ); rtf.WriteTab( ac.Name ); rtf.WriteTab( acm.Name ); rtf.WriteTab( aMode.PadRight( 80 ) ); rtf.WriteLn( ); rtf.RHighlightColor = RTF.RTFformatter.ERColor.ERC_Black; rtf.WriteLn( ); + used = true; } + used = !string.IsNullOrEmpty( acc.DevInput ); + } + if ( ( !used ) && ac.DefBinding == input ) { + aMode = string.Format( "{0};{1}", ac.DefActivationMode.Name, ac.DefActivationMode.MultiTap ); + rtf.Write( "profile" ); rtf.WriteTab( ac.Name ); rtf.WriteTab( acm.Name ); rtf.WriteTab( aMode ); rtf.WriteLn( ); + rtf.WriteLn( ); } } } diff --git a/doc/ReadMe.txt b/doc/ReadMe.txt deleted file mode 100644 index ca7667b..0000000 --- a/doc/ReadMe.txt +++ /dev/null @@ -1,289 +0,0 @@ -SC Joystick Mapper V 2.33 - Build 67 BETA -(c) Cassini, StandardToaster - 23-Dec-2017 - -Contains 12 files + graphics: - -SCJMapper.exe The program (V2.33) -SCJMapper.exe.config Program config (V2.33) - 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 -SharpDX.dll Managed DirectX Assembly - MUST be in the same folder as the Exe file -OpenTK.dll Managed OpenGL Assembly - MUST be in the same folder as the Exe file -OpenTK.GLControl.dll Managed OpenGL Assembly - MUST be in the same folder as the Exe file -ZstdNet.dll Managed Zip Assembly (v2.33) - MUST be in the same folder as the Exe file -x64/libzstd.dll Native dll for ZstdNet (v2.33) - MUST be in the same folder as the Exe file -x86/libzstd.dll Native dll for ZstdNet (v2.33) - MUST be in the same folder as the Exe file -log4net.dll Managed Logging Assembly - MUST be in the same folder as the Exe file -log4net.config.OFF Config file for logging - To use it - rename as log4net.config and run the program - then look for trace.log in the same folder -SCJMapper_QGuide V2.30beta.pdf Quick Guide -ReadMe.txt This file - -graphics folder Skybox Images (V2.32) - graphics folder MUST be in the same folder as the Exe file - -NOTE V 2.33: - search order for defaultProfile.xml to build the action tree is: - 1. directory where SCJMapper Exe is located - 2. directory of \LIVE\USER - 3. extract from \LIVE\Data.p4k - 4. extract from SCJMapper exe file (derived from 3.0 build 695052) - - --> in order to get always the most current one use 3. (and therefore remove the ones in 1. and 2.) - --> The one used is shown below the actionTree (Profile: ....) - -Read the Guide first RTFM ;-) -Put all files into one folder and hit SCJMapper.exe to run it - -For Updates and information visit: -https://github.com/SCToolsfactory/SCJMapper-V2 - -Scanned for viruses before packing... -cassini@burri-web.org - -Changelog: -V 2.33 - BETA Build 67 -- update for SC 3.0.0 Alpha public -- fix - finding SC game folder - may work automatically for 3.0 Alpha else define it in Settings -- add - get the defaultProfile.xml from LIVE\data.p4k file if possible (real game assets) -- improvement - caching def profile once it is read from disk -- removed - old SC path and folder locators (SCJM does not longer work with pre 3.0 game) -- removed - reference to Iconic.Zip DLL (replaced with Zstd) -- update - defaultProfile.xml as last resort from PTU 3.0-695052 (Dec 18, build) -V 2.32 - BETA Build 66 -- add - path to defaultProfile can be in USER directory of SC -- add - some skyboxes from game captures (thanks to Rellim) -- removed - PTU folders in Settings - no longer used in PTU 3.0 -- fix - finding SC game folder - may work automatically for PTU 3.0 else define it in Settings -- update - defaultProfile from PTU 3.0-689345 (Dec 15, build) -V 2.30 - BETA Build 64 -- add - Tab to show all mappings for the current input (Tabbed with XML other Dump items) -- add - Setting (enabled, disabled -> default) to automatically switch the new tabs - either Input or Dump -- add - addbind of Mouse input is possible for Keyboard actions - seems to work somehow in the game... -- improvement - mouse mappings in kbd entries in defaultProfile are collected as mouse now and allowed to map -- improvement - removed some unneeded tree scans - to speed things up -- fix - issue with user activations modes while dumping the mapping list -- fix - issue with loading a map with gamepad mappings and the gamepad is not connected -- fixes and refacturing while encountered... -- update - doc SCJMapper_QGuide V2.30beta.pdf -V 2.29 - BETA Build 63 -- add - Calibrate gamepad thumb axes (press ABXY buttons all together and wait 2 sec - should zero all 4 axes) -- fix #56 - exception when entering Tuning -- fix - wrong gamepad action codes (xi1_xi_command instead of xi1_command) -- fix - some more issues with gamepads -- fix - options did not properly update when assigning them to another cmd or clearing the entry -- improvement - Options Dialog selection and deselection of items improved -- improvement - Tuning Dialog selection and deselection of items improved -- improvement - Dump Log: added some more interesting captures from the game log file -- improvement - Win7 / Win10 hidden text/controls with High DPI scaling issues partly resolved -- update - doc SCJMapper_QGuide V2.29beta.pdf -V 2.28 - BETA Build 62 -- add #48 - Tune Strafe controls -- add - "Options ..." dialog to edit all device and control options -- add - 2 more three 3D scenes for Tuning -- improvement #49 - Mapping area: Current mapping is shown -- improvement - Gamepad support improved, Tab is now always the most left one if gamepads are enabled -- improvement - Dump Log: added some more interesting captures from the game log file -- improvement - Tuning is now closer to CIG implementation, remove Sensitivity, add Saturation instead -- fix #51 - accepting multiple actionmaps in default profile (collects only the first one found) -- fix - bug re- joystick hats (affected No 2..4) -- fixes and refacturing while encountered... -- update - fallback default profile from SC 2.6.3 alpha -- update - doc SCJMapper_QGuide V2.28beta.pdf -V 2.27 - BETA Build 61 -- add - Collapse/Expand in context menu in Mapping tree -- improvement - actionmaps are taken from the defaultProfile and will no longer need a program update -- improvement - rename Blend to Disable -- fix - an issue in Seetings for actionmap ignore handling -- update - fallback default profile from SC 2.6.0 alpha -- update - doc SCJMapper_QGuide V2.27beta.pdf -V 2.26 - BETA Build 60 -- add - new actionmaps from SC 2.5.0 alpha to choose from in Settings -- update - fallback default profile from SC 2.5.0 alpha -V 2.25 - BETA Build 59 -- fix - an issue in parsing options from imported maps -- add - an option to show the actiontree as CSV list with more/less details (change in Settings) -- improvement - In table view add possibility to Blend All visible unmapped entries -V 2.24 - BETA Build 58 -- fix - some trouble in SC path finding -V 2.23 - BETA Build 57 -- update - Using .Net 4.5.2 Now (seems to handle some scaling issues WinForm apps) -- update - Try to find the SC path also as StarCitizen\Live (instead of Public) was mentioned for SC2.2.2 onwards ??? -- fix - addbind UNDEF removed when assigned -- improvement - Issue a infobox if the Client folder cannot be found - (please submit the complete folder structure of your installation as bug report ...) -- add - a table display for mappings -- some internal stuff (namespaces etc) -- update - doc SCJMapper_QGuide V2.23beta.pdf -V 2.22 - BETA Build 56 -- fix - try again to fix Win10 scaling issues for some PCs (hidden assignment area) -- improvement - actions with a profile modifier attached will show underlined in the action tree -- improvement - less offensive gamepad color mark ... -- add - a button to dump the used defaultProfile in the right area -- some internal stuff -- update - doc SCJMapper_QGuide V2.22beta.pdf -V 2.21 - BETA Build 55 -- fix #40 added Tab entry in Ctrl. context menu -- fix - try to fix Win10 scaling issues (hidden assignment area) -- fix - profile tree color indication also applied when re-reading defaultProfile -- improvement - enumerates up to 12 devices now (though not tested as I don't have 12 ..) -- add - use of SCA 2.2 provided defaultProfile (new location and format) -- add - indication of the used defaultProfile -- add - built in defaultProfile updated to SCA 2.2 -V 2.19 - BETA Build 52 -- fix #37 improved defaultProfile Parsing -- fix #38 locale issue - changed App number formatting to US -- fix #39 changed equal to equals string for kbd entry -- add - default actionmap to choose from (it is on the ignore list) -V 2.18 - BETA Build 51 -- fix - layout works now for Win10 -- fix - uses game defaultProfile again -- fix - keyboard command for all Ctrl keys fixed -- fix - keyboard command formatting -- improvement - timeout ~4 sec for kbd modifiers in Joystick Mode (Esc no longer needed) -- improvement - ActivationMode handling finished -- improvement - user ActivationMode change indication in mapping tree -- improvement - Blending adds multiTap=1 to overwrite double taps -- improvement - Dump List: added ActivationModes; device checkBox applied to list -- update - doc SCJMapper_QGuide V2.18beta.pdf -V 2.17 - BETA Build 50 -- update - Updated for SC Alpha 2.0/2.1PTU using new actionmap syntax (no longer use device attribute) -- update - Complete new QuickReference Guide -- update - Supports actionmaps with -- add - ActivationMode - Use Context Menu in ActionTree (or read the manual) -- add - PTU file usage in Settings -- add - Prepared JS Modifiers (but SC cannot right now - so it is disabled) -- add - full mouse settings -- improvement - some GUI improvements -- improvement - reworked blending -- removed - global JS or GP blend options in Settings -- removed - ignoreversion from Settings -- NOTE: - Dump Log does not work right now as CIG does no longer list detected controllers in the log file -- NOTE: - Right now a number of binds behave erratically e.g. addbind does not work at all - so be aware that your map is not necessarily wrong but the game may just have a bug there -V 2.16 - BETA Build 49 -- update - Updated for AC Alpha 1.3 defaultProfile does no longer have js1_ or xi_ marks form commands -- NOTE: - Dump Log does not work right now as CIG does no longer list detected controllers in the log file -V 2.15 - BETA Build 48 -- update - Updated for AC Alpha 1.1.6 new files locations to find files and mappings -- NOTE: - Dump Log does not work right now as CIG does no longer list detected controllers in the log file -V 2.14 - BETA Build 47 -- update - added new defaultProfile (CIG allows some more joystick mappings) -V 2.13 - BETA Build 46 -- update - added new defaultProfile and actionmaps from AC 1.1.1 -- add - keyboard modifier for joystick (e.g. rctrl+js1_xy) - Press ESC to clear modifiers -- fix - device checkboxes are now applied after Reassign -- fix - invert checkbox handling (removed flight invert - use the one in Tuning) -- fix - Add UICustomization Header and Devices List in any case -V 2.12 - BETA Build 45 -- improvement - SCJM maintains mappings in USER rather than data folder (AC 1.03) -- improvement - UICustomization Header for joystick updated (label is the filename minus "layout_") (AC 1.03) -V 2.11 - BETA Build 44 -- fix - reading of deadzone value (if not a number should not break anymore) -- fix - writing the proper deadzone XML if first used -- fix - reading addbind commands from existing mappings will appear now in the tree -- improvement - better handling of the default mapping name from config file -- improvement - mapping name added to XML mapping (first line comment extended with mapping name) -V 2.10 - Build 43 - Production -- new feature - added Action Tree context menu for Assign, Clear and Blend -- fix - issue for Js Reassignment if more than one was not yet assigned -- improvement - Right click in Action Tree selects the items (no need to select and then right click anymore) -V 2.10 - BETA Build 41 -- fix - issue with null ptr assignment in Device Tuning (review and fix of AC1.0 changes) -- fix - disabled first joystick tab when gamepad is second or later -- improvement - added tooltips for device tabs showing Name and GUID -- improvement - added full 4 number version for beta builds -V 2.10 - BETA Build 40 -- rework for AC 1.0 -- new feature - add DumpLog to get the AC detected Controller assignments from logfile -- new feature - add Invert checkboxes for supported option items -- new feature - context menu in treeview allows to add/delete action sub items (support addbind mapping in XML) -- update - cannot longer assign cross device mappings (AC 1.0 related - use addbind above) -- update - new options naming and structure (not compatible with pre 2.10 - delete them in the file and then reload) -- update - Profile Version to 1 -V 2.8 - BETA Build 37 -- new feature - add checkboxes to show Joystick, Gamepad, Kbd and Mapped Only -- fix - Blended ones don't reload with proper visual -V 2.8 - BETA Build 36 -- new feature - add invert for single mappings -- improvement - initialization and assignment of Joystick devices -V 2.8 - BETA Build 34 -- new feature - add keyboard input -- new feature - add gamepad input as xboxpad -- new feature - add gamepad for tuning -- new feature - blend single entries with -- fix - tuning copy to all axis now applies immediately -- improvement - cleanup of some inconsistencies -V 2.7 - Build 33 -- fix - if an axis is not mapped the prog will not longer crash (was null ptr exception) -- doc update 2.7 -V 2.7 - BETA -- new feature - Joystick Tuning -V 2.6 -- fix - taking actionmaps from config file now works -- improvement - added actionmap vehicle_driver -V 2.5 -- new feature - support and maintain option tags -- improvement - support and maintain version and ignoreversion attribute / can force ignoreversion="1" -- improvement - makes backup copy before each save (in my documents e.g. layout_my_xyz.xml.backup) -- Update of the Guide for V2.5 -V 2.4 -- improvement - add new actionmaps for AC 0.9 (flycam, spaceship_turret) -- improvement - supports now assignment of js1 .. js8 - SC may not support all though... -- Update of the Guide for V2.4 -V 2.3 -- new feature - allow reassignment of the jsN group -- improvement - uniquely identified devices with the same name (use GUID) -- improvement - shows jsN assignment in Joystick tab -- improvement - detection of the SC install path extended to one more Registry entry -- fix - blend unmapped works properly now -- fix - manual entry of SC directory works now -- Update of the Guide for V2.3 -V 2.2 -- new feature - option to ignore actionmaps in Settings -- improvement - add actionmaps for multiplayer, singleplayer, player -- improvement - GUI layout of Joystick tabs for more than 4 devices -- Update of the Guide for V2.2 -V 2.1 -- program is maintained at "https://github.com/SCToolsfactory/SCJMapper-V2/releases" -- new feature - option to blend unmapped actions -- improvement - ignore buttons in Settings -- improvement - override the built in detection of the SC folder in Settings -- added - trace log for resolving crash and other issues -- Update of the Guide for V2.1 -V 2.0 -- program is maintained at "https://github.com/bm98/SCJMapper-V2/releases" -- new feature - get defaultProfile.xml from game assets -- new feature - get actionsmaps from game assets -- new feature - reset to defaults -- new feature - load and save own maps to gamefolders (makes backup in My Documents\SCJMapper) -- new feature - filter the action tree -- new feature - drag and drop an mapping file into the XML window -- new feature - make throttle assignment for any axis -- improved joystick detection (jitter avoidance, limit can be set in Program config file) -- improved button detection (blend buttons that are always on) -- improved sizeable window -- improved settings persist between sessions -- Update of the Guide for V2.0 -- removed defaultProfile.xml from distribution (REMOVE IT FROM YOUR FOLDER - else it will be taken as action list) -V 1.4PRE -- using a new Managed DirectX assembly and built with .Net4 (Hope this works for Win8.1) -- added Joystick properties and Axis Names from the Joystick driver -V 1.3 -- new feature - read the original defaultProfile.xml from SC to derive the actions (must be in the EXE folder) -- added support for up to 8 devices -- added multibinding i.e. bind the same action to multiple buttons, one for kbd, one for xbox etc. if the profile supports it -- added Dump List - a readable list of the commands (can be saved as txt file - using Save as) -- fixed "Find 1st" -- Update of the Guide -- removed MappingVars file from distribution (REMOVE IT FROM YOUR FOLDER - else it will be taken as action list) -V 1.2 -- added support for rebinding xboxpad and ps3pad -- added Find 1st for a Control -- fixed Hat direction not maintained as last Control used -- some GUI refinements -- Update of the Guide (incl MappingVar.csv format) -MappingVar file -- added commands that where missing -- changed from keyboard to xboxpad rebinding where possible to leave kbd intact -V 1.1 -- fixed issue with less than 3 joysticks attached -V 1.0 initial diff --git a/doc/SCJMapper_QGuide V2.34beta.pdf b/doc/SCJMapper_QGuide V2.34beta.pdf new file mode 100644 index 0000000..adbdbe1 Binary files /dev/null and b/doc/SCJMapper_QGuide V2.34beta.pdf differ diff --git a/doc/SCJMapper_QGuide V2.x.pub b/doc/SCJMapper_QGuide V2.x.pub index b70fc44..b8104a2 100644 Binary files a/doc/SCJMapper_QGuide V2.x.pub and b/doc/SCJMapper_QGuide V2.x.pub differ diff --git a/graphics/Folder.png b/graphics/Folder.png new file mode 100644 index 0000000..48df359 Binary files /dev/null and b/graphics/Folder.png differ diff --git a/graphics/Info.png b/graphics/Info.png new file mode 100644 index 0000000..76876e2 Binary files /dev/null and b/graphics/Info.png differ diff --git a/graphics/LArrow.png b/graphics/LArrow.png new file mode 100644 index 0000000..d8bdcd4 Binary files /dev/null and b/graphics/LArrow.png differ diff --git a/graphics/Locked.png b/graphics/Locked.png new file mode 100644 index 0000000..cace675 Binary files /dev/null and b/graphics/Locked.png differ diff --git a/graphics/Magic.png b/graphics/Magic.png new file mode 100644 index 0000000..b7e612e Binary files /dev/null and b/graphics/Magic.png differ diff --git a/graphics/Monitor.png b/graphics/Monitor.png new file mode 100644 index 0000000..2cd99bc Binary files /dev/null and b/graphics/Monitor.png differ diff --git a/graphics/NPad.png b/graphics/NPad.png new file mode 100644 index 0000000..1c8e57a Binary files /dev/null and b/graphics/NPad.png differ diff --git a/graphics/RArrow.png b/graphics/RArrow.png new file mode 100644 index 0000000..8513eb8 Binary files /dev/null and b/graphics/RArrow.png differ diff --git a/graphics/RSI.png b/graphics/RSI.png new file mode 100644 index 0000000..83e462e Binary files /dev/null and b/graphics/RSI.png differ diff --git a/graphics/Settings.png b/graphics/Settings.png new file mode 100644 index 0000000..033e0a8 Binary files /dev/null and b/graphics/Settings.png differ diff --git a/graphics/User.png b/graphics/User.png new file mode 100644 index 0000000..0496ab7 Binary files /dev/null and b/graphics/User.png differ