diff --git a/ActivationModes.xlsx b/ActivationModes.xlsx
new file mode 100644
index 0000000..9bb7c45
Binary files /dev/null and b/ActivationModes.xlsx differ
diff --git a/AppSettings.cs b/AppSettings.cs
index 2cb5e01..0b3cd6c 100644
--- a/AppSettings.cs
+++ b/AppSettings.cs
@@ -264,6 +264,35 @@ namespace SCJMapper_V2
}
+ //**** Form Table
+
+ // Control bound settings
+ [UserScopedSettingAttribute( )]
+ [DefaultSettingValueAttribute( "1000, 900" )]
+ public Size FormTableSize
+ {
+ get { return ( Size )this["FormTableSize"]; }
+ set { this["FormTableSize"] = value; }
+ }
+
+ [UserScopedSettingAttribute( )]
+ [DefaultSettingValueAttribute( "760, 320" )]
+ public Point FormTableLocation
+ {
+ get { return ( Point )this["FormTableLocation"]; }
+ set { this["FormTableLocation"] = value; }
+ }
+
+ [UserScopedSettingAttribute( )]
+ [DefaultSettingValueAttribute( "" )]
+ public string FormTableColumnWidth
+ {
+ get { return ( string )this["FormTableColumnWidth"]; }
+ set { this["FormTableColumnWidth"] = value; }
+ }
+
+
+
#endregion
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
index 00978c8..c055433 100644
--- a/Form1.Designer.cs
+++ b/Form1.Designer.cs
@@ -15,7 +15,7 @@
{
timer1.Stop( );
// Unacquire all DirectInput objects.
- foreach ( JoystickCls js in m_Joystick ) js.FinishDX( );
+ foreach ( Joystick.JoystickCls js in m_Joystick ) js.FinishDX( );
m_Joystick.Clear( );
if ( disposing && ( components != null ) ) {
@@ -85,7 +85,7 @@
this.tdiAddMod3 = new System.Windows.Forms.ToolStripMenuItem();
this.tc1 = new System.Windows.Forms.TabControl();
this.tabJS1 = new System.Windows.Forms.TabPage();
- this.UC_JoyPanel = new SCJMapper_V2.UC_JoyPanel();
+ this.UC_JoyPanel = new SCJMapper_V2.Joystick.UC_JoyPanel();
this.panel1 = new System.Windows.Forms.Panel();
this.btClip = new System.Windows.Forms.Button();
this.txRebind = new System.Windows.Forms.TextBox();
@@ -101,6 +101,8 @@
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
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();
@@ -145,7 +147,6 @@
this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
- this.btDumpProfile = new System.Windows.Forms.Button();
this.cmCopyPaste.SuspendLayout();
this.panel2.SuspendLayout();
this.cmMouseEntry.SuspendLayout();
@@ -801,6 +802,7 @@
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, 2);
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);
@@ -831,9 +833,30 @@
this.btJSTuning.Name = "btJSTuning";
this.btJSTuning.Size = new System.Drawing.Size(120, 23);
this.btJSTuning.TabIndex = 17;
- this.btJSTuning.Text = "Device Tuning";
+ 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(171, 63);
+ 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;
@@ -1326,16 +1349,6 @@
this.statusStrip1.TabIndex = 26;
this.statusStrip1.Text = "statusStrip1";
//
- // 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);
- //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -1411,7 +1424,7 @@
private System.Windows.Forms.ToolStripMenuItem tsiSaveAs;
private System.Windows.Forms.SaveFileDialog SFD;
private System.Windows.Forms.ImageList IL;
- private UC_JoyPanel UC_JoyPanel;
+ private Joystick.UC_JoyPanel UC_JoyPanel;
private System.Windows.Forms.TableLayoutPanel tlpanel;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
@@ -1492,6 +1505,7 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
private System.Windows.Forms.Button btDumpProfile;
+ private System.Windows.Forms.Button btTable;
}
}
diff --git a/Form1.cs b/Form1.cs
index c704c03..a1c88fb 100644
--- a/Form1.cs
+++ b/Form1.cs
@@ -10,6 +10,12 @@ using System.Windows.Forms;
using SharpDX.DirectInput;
using System.IO;
+using SCJMapper_V2.SC;
+using SCJMapper_V2.Table;
+using SCJMapper_V2.Keyboard;
+using SCJMapper_V2.Mouse;
+using SCJMapper_V2.Gamepad;
+using SCJMapper_V2.Joystick;
namespace SCJMapper_V2
{
@@ -60,8 +66,9 @@ namespace SCJMapper_V2
///
private ActionTree m_AT = null;
- private FormJSCalCurve JSCAL = null;
+ private OGL.FormJSCalCurve JSCAL = null;
+ private FormTable FTAB = null;
#region Tools section
@@ -431,7 +438,6 @@ namespace SCJMapper_V2
}
}
m_AT.FilterTree( txFilter.Text );
-
}
@@ -453,10 +459,10 @@ namespace SCJMapper_V2
try {
log.Debug( "Get Keyboard device" );
- m_Keyboard = new KeyboardCls( new Keyboard( directInput ), this );
+ m_Keyboard = new KeyboardCls( new SharpDX.DirectInput.Keyboard( directInput ), this );
log.Debug( "Get Mouse device" );
- m_Mouse = new MouseCls( new Mouse( directInput ), this );
+ m_Mouse = new MouseCls( new SharpDX.DirectInput.Mouse( directInput ), this );
}
catch ( Exception ex ) {
@@ -488,7 +494,7 @@ namespace SCJMapper_V2
}
}
else {
- jsDevice = new Joystick( directInput, instance.InstanceGuid );
+ jsDevice = new SharpDX.DirectInput.Joystick( directInput, instance.InstanceGuid );
log.DebugFormat( "Create the device interface for: {0}", jsDevice.Information.ProductName );
}
@@ -665,6 +671,7 @@ namespace SCJMapper_V2
catch {
; // just ignore
}
+ UpdateTable( );
}
@@ -698,6 +705,16 @@ namespace SCJMapper_V2
m_AppSettings.FormSize = this.Size;
m_AppSettings.FormLocation = this.Location;
+
+ if ( FTAB != null ) {
+ m_AppSettings.FormTableLocation = FTAB.LastLocation;
+ m_AppSettings.FormTableSize = FTAB.LastSize;
+ m_AppSettings.FormTableColumnWidth = FTAB.LastColSize;
+
+ FTAB.Close( );
+ FTAB = null;
+ }
+
m_AppSettings.Save( );
}
@@ -799,6 +816,7 @@ namespace SCJMapper_V2
{
if ( m_AT.UpdateSelectedItem( JoystickCls.MakeThrottle( lblLastJ.Text, cbxThrottle.Checked ), InputMode, true ) ) {
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
+ UpdateTableSelectedItem( );
}
else MySounds.PlayNotfound( );
}
@@ -807,6 +825,7 @@ namespace SCJMapper_V2
{
if ( m_AT.CanBlendBinding ) {
m_AT.BlendBinding( );
+ UpdateTableSelectedItem( );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
else MySounds.PlayCannot( );
@@ -816,6 +835,7 @@ namespace SCJMapper_V2
{
if ( m_AT.CanClearBinding || m_AT.CanBlendBinding ) {
m_AT.ClearBinding( );
+ UpdateTableSelectedItem( );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
else MySounds.PlayCannot( );
@@ -929,6 +949,7 @@ namespace SCJMapper_V2
// start over
InitActionTree( false );
rtb.Text = "";
+ UpdateTable( );
}
private void resetDefaultsToolStripMenuItem_Click( object sender, EventArgs e )
@@ -936,6 +957,7 @@ namespace SCJMapper_V2
// start over and if chosen, load defaults from SC game
InitActionTree( true );
rtb.Text = "";
+ UpdateTable( );
}
private void tsDDbtMappings_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
@@ -1255,6 +1277,7 @@ namespace SCJMapper_V2
m_AT.IgnoreMaps = m_AppSettings.IgnoreActionmaps;
// and start over with an empty tree
InitActionTree( false );
+ UpdateTable( );
}
timer1.Enabled = true;
@@ -1304,7 +1327,7 @@ namespace SCJMapper_V2
{
timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy
- JSCAL = new FormJSCalCurve( );
+ JSCAL = new OGL.FormJSCalCurve( );
// get current mapping from ActionMaps
String nodeText = "";
@@ -1582,9 +1605,76 @@ namespace SCJMapper_V2
lblLastJ.Text = ctrl;
}
+ #endregion
- #endregion
+ // Called when the table must be rebuild
+ private void UpdateTable( )
+ {
+ // only if needed
+ if ( ( FTAB != null ) && FTAB.Visible ) {
+ m_AT.ActionMaps.toDataSet( FTAB.DS_AMaps);
+ FTAB.Populate( );
+ }
+ }
+
+ // Called when an entry has been modified
+ private void UpdateTableSelectedItem( )
+ {
+ // only if needed
+ if ( ( FTAB != null ) && FTAB.Visible ) {
+ string actionID = m_AT.SelectedActionID;
+ m_AT.ActionMaps.updateDataSet( FTAB.DS_AMaps, actionID );
+ FTAB.UpdateRow( actionID );
+ }
+ }
+
+ // Show the Table Window
+ private void btTable_Click( object sender, EventArgs e )
+ {
+ if (FTAB == null ) {
+ FTAB = new FormTable( );
+ FTAB.EditActionEvent += FTAB_EditActionEvent;
+ FTAB.UpdateEditEvent += FTAB_UpdateEditEvent;
+ }
+
+ if ( FTAB.Visible ) {
+ m_AppSettings.FormTableSize = FTAB.LastSize;
+ m_AppSettings.FormTableLocation = FTAB.LastLocation;
+ m_AppSettings.FormTableColumnWidth = FTAB.LastColSize;
+ FTAB.Hide( );
+
+ } else {
+ FTAB.Show( );
+ FTAB.Size = m_AppSettings.FormTableSize;
+ FTAB.Location = m_AppSettings.FormTableLocation;
+ FTAB.LastColSize = m_AppSettings.FormTableColumnWidth;
+ UpdateTable( );
+ }
+
+ }
+
+ // called when the user clicks Update from the Table Window
+ private void FTAB_UpdateEditEvent( object sender, UpdateEditEventArgs e )
+ {
+ ActionTree newTree = m_AT.UpdateFromDataSet( FTAB.DS_AMaps );
+
+ // returns a null if no changes have been found
+ if ( newTree != null ) {
+ m_AT = newTree; // make it the valid one
+ m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked );
+ m_AT.ReloadTreeView( );
+ if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
+ }
+
+ }
+
+
+ // called when the user if the TAB form wants to edit a row
+ private void FTAB_EditActionEvent( object sender, EditRowEventArgs e )
+ {
+ m_AT.FindAndSelectActionKey( e.Actionmap, e.Actionkey, e.Nodeindex );
+ }
}
diff --git a/Form1.resx b/Form1.resx
index 5ed21a6..87c7bab 100644
--- a/Form1.resx
+++ b/Form1.resx
@@ -128,7 +128,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA6
- EAAAAk1TRnQBSQFMAgEBCQEAAUgBEAFIAhABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+ EAAAAk1TRnQBSQFMAgEBCQEAAWABEAFgAhABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AUADAAEwAwABAQEAAQgGAAEMGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
@@ -470,6 +470,15 @@
x1//2Q==
+
+ 133, 17
+
+
+ 209, 17
+
+
+ 421, 17
+
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
@@ -542,15 +551,6 @@
Tesk88046SuRb2gfwdMB6S/DHs/UzS4d0QAAAABJRU5ErkJggg==
-
- 133, 17
-
-
- 209, 17
-
-
- 421, 17
-
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
diff --git a/Gamepad/GamepadCls.cs b/Gamepad/GamepadCls.cs
index bbe4d37..a989bbf 100644
--- a/Gamepad/GamepadCls.cs
+++ b/Gamepad/GamepadCls.cs
@@ -8,7 +8,7 @@ using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Collections.Specialized;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Gamepad
{
///
/// Handles one JS device as DXInput device
diff --git a/Gamepad/UC_GpadPanel.Designer.cs b/Gamepad/UC_GpadPanel.Designer.cs
index 0189403..9836e24 100644
--- a/Gamepad/UC_GpadPanel.Designer.cs
+++ b/Gamepad/UC_GpadPanel.Designer.cs
@@ -1,4 +1,4 @@
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Gamepad
{
partial class UC_GpadPanel
{
diff --git a/Gamepad/UC_GpadPanel.cs b/Gamepad/UC_GpadPanel.cs
index 32200f0..069665f 100644
--- a/Gamepad/UC_GpadPanel.cs
+++ b/Gamepad/UC_GpadPanel.cs
@@ -7,7 +7,7 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Gamepad
{
public partial class UC_GpadPanel : UserControl
{
diff --git a/Joystick/DeviceDeadzoneParameter.cs b/Joystick/DeviceDeadzoneParameter.cs
index d30fc55..4b0d362 100644
--- a/Joystick/DeviceDeadzoneParameter.cs
+++ b/Joystick/DeviceDeadzoneParameter.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
public class DeviceDeadzoneParameter
{
diff --git a/Joystick/DeviceTuningParameter.cs b/Joystick/DeviceTuningParameter.cs
index 32ff379..af11aa8 100644
--- a/Joystick/DeviceTuningParameter.cs
+++ b/Joystick/DeviceTuningParameter.cs
@@ -5,7 +5,7 @@ using System.Text;
using System.Xml;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// set of parameters to tune the Joystick
@@ -59,7 +59,7 @@ namespace SCJMapper_V2
m_type = m_device.DevClass;
m_devInstanceNo = ( m_device as JoystickCls ).JSAssignment;
}
- else if ( GamepadCls.IsDeviceClass( m_device.DevClass ) ) {
+ else if ( Gamepad.GamepadCls.IsDeviceClass( m_device.DevClass ) ) {
m_type = m_device.DevClass;
m_devInstanceNo = 1; // supports ONE gamepad
}
diff --git a/Joystick/Deviceoptions.cs b/Joystick/Deviceoptions.cs
index 347b6ee..cf0e209 100644
--- a/Joystick/Deviceoptions.cs
+++ b/Joystick/Deviceoptions.cs
@@ -6,7 +6,7 @@ using System.Xml;
using System.IO;
using System.Xml.Linq;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// Maintains an Deviceoptions - something like:
diff --git a/Joystick/FormReassign.Designer.cs b/Joystick/FormReassign.Designer.cs
index e7f829b..109117a 100644
--- a/Joystick/FormReassign.Designer.cs
+++ b/Joystick/FormReassign.Designer.cs
@@ -1,4 +1,4 @@
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
partial class FormReassign
{
diff --git a/Joystick/FormReassign.cs b/Joystick/FormReassign.cs
index a43340e..8e00cad 100644
--- a/Joystick/FormReassign.cs
+++ b/Joystick/FormReassign.cs
@@ -7,7 +7,7 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
partial class FormReassign : Form
{
diff --git a/Joystick/JoystickCls.cs b/Joystick/JoystickCls.cs
index fcc750c..4b57c4c 100644
--- a/Joystick/JoystickCls.cs
+++ b/Joystick/JoystickCls.cs
@@ -8,7 +8,7 @@ using System.Windows.Forms;
using System.Drawing;
using System.Text.RegularExpressions;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// Handles one JS device as DXInput device
@@ -322,7 +322,7 @@ namespace SCJMapper_V2
// ****************** CLASS *************************
- private Joystick m_device;
+ private SharpDX.DirectInput.Joystick m_device;
private JoystickState m_state = new JoystickState( );
private JoystickState m_prevState = new JoystickState( );
@@ -413,7 +413,7 @@ namespace SCJMapper_V2
/// A DXInput device
/// The WinHandle of the main window
/// The respective JS panel to show the properties
- public JoystickCls( Joystick device, Control hwnd, int joystickNum, UC_JoyPanel panel, int tabIndex )
+ public JoystickCls( SharpDX.DirectInput.Joystick device, Control hwnd, int joystickNum, UC_JoyPanel panel, int tabIndex )
{
log.DebugFormat( "JoystickCls ctor - Entry with {0}", device.Information.ProductName );
diff --git a/Joystick/JoystickList.cs b/Joystick/JoystickList.cs
index f0d6b49..6c72972 100644
--- a/Joystick/JoystickList.cs
+++ b/Joystick/JoystickList.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
public class JoystickList : List
{
diff --git a/Joystick/JsReassingList.cs b/Joystick/JsReassingList.cs
index 11902a4..0919833 100644
--- a/Joystick/JsReassingList.cs
+++ b/Joystick/JsReassingList.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
public struct JsReassingR
{
diff --git a/Joystick/Modifiers.cs b/Joystick/Modifiers.cs
index 74efeca..c9f5a42 100644
--- a/Joystick/Modifiers.cs
+++ b/Joystick/Modifiers.cs
@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Xml;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// Maintain actionmap Modifiers
diff --git a/Joystick/Options.cs b/Joystick/Options.cs
index 6472a56..815b329 100644
--- a/Joystick/Options.cs
+++ b/Joystick/Options.cs
@@ -7,7 +7,7 @@ using System.IO;
using System.Xml.Linq;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// Maintains an Options - something like:
diff --git a/Joystick/OptionsInvert.cs b/Joystick/OptionsInvert.cs
index 3882675..730647d 100644
--- a/Joystick/OptionsInvert.cs
+++ b/Joystick/OptionsInvert.cs
@@ -5,7 +5,7 @@ using System.Text;
using System.Xml;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
public class OptionsInvert
{
@@ -74,7 +74,7 @@ namespace SCJMapper_V2
m_type = m_device.DevClass;
m_devInstanceNo = ( m_device as JoystickCls ).JSAssignment;
}
- else if ( GamepadCls.IsDeviceClass( m_device.DevClass ) ) {
+ else if ( Gamepad.GamepadCls.IsDeviceClass( m_device.DevClass ) ) {
m_type = m_device.DevClass;
m_devInstanceNo = 1; // supports ONE gamepad
}
diff --git a/Joystick/UC_JoyPanel.Designer.cs b/Joystick/UC_JoyPanel.Designer.cs
index a16878b..a489574 100644
--- a/Joystick/UC_JoyPanel.Designer.cs
+++ b/Joystick/UC_JoyPanel.Designer.cs
@@ -1,4 +1,4 @@
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
partial class UC_JoyPanel
{
diff --git a/Joystick/UC_JoyPanel.cs b/Joystick/UC_JoyPanel.cs
index 3310ab2..054793f 100644
--- a/Joystick/UC_JoyPanel.cs
+++ b/Joystick/UC_JoyPanel.cs
@@ -7,7 +7,7 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
public partial class UC_JoyPanel : UserControl
{
diff --git a/Joystick/UICustHeader.cs b/Joystick/UICustHeader.cs
index 13425a7..5b1e64c 100644
--- a/Joystick/UICustHeader.cs
+++ b/Joystick/UICustHeader.cs
@@ -6,7 +6,7 @@ using System.Xml;
using System.IO;
using System.Xml.Linq;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// Maintains an CustomisationUIHeader - something like:
diff --git a/Joystick/xyPoints.cs b/Joystick/xyPoints.cs
index dad459c..aa657c0 100644
--- a/Joystick/xyPoints.cs
+++ b/Joystick/xyPoints.cs
@@ -5,7 +5,7 @@ using System.Text;
using OpenTK;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Joystick
{
///
/// contains the x(in) and y(out) points of the nonlin curve for joysticks (MAX 3 interpolation pts)
@@ -18,7 +18,7 @@ namespace SCJMapper_V2
private Vector2[] m_points = null;
private double[] m_outCurve = null;
private int m_Npoints = 0;
- private CalcCurve m_curve;
+ private OGL.CalcCurve m_curve;
public xyPoints( int maxPoints )
{
@@ -86,7 +86,7 @@ namespace SCJMapper_V2
Setup( 1 );
float[] cout = new float[m_maxpts * 2];
int resolution = m_maxpts; // The number of points in the bezier curve
- m_curve = new BezierInterpolation( m_points, resolution );
+ m_curve = new OGL.BezierInterpolation( m_points, resolution );
Vector2 pos = Vector2.One;
for ( int p = 0; p <= resolution; p++ ) {
pos = m_curve.CalculatePoint( ( float )p / ( float )resolution );
@@ -104,7 +104,7 @@ namespace SCJMapper_V2
float[] cout = new float[m_maxpts * 2];
int resolution = m_maxpts; // The number of points in the bezier curve
- m_curve = new BezierInterpolation( m_points, resolution );
+ m_curve = new OGL.BezierInterpolation( m_points, resolution );
Vector2 pos = Vector2.One;
for ( int p = 0; p <= resolution; p++ ) {
pos = m_curve.CalculatePoint( ( float )p / ( float )resolution );
@@ -123,7 +123,7 @@ namespace SCJMapper_V2
float[] cout = new float[m_maxpts * 2];
int resolution = m_maxpts; // The number of points in the bezier curve
- m_curve = new BezierInterpolation( m_points, resolution );
+ m_curve = new OGL.BezierInterpolation( m_points, resolution );
Vector2 pos = Vector2.One;
for ( int p = 0; p <= resolution; p++ ) {
pos = m_curve.CalculatePoint( ( float )p / ( float )resolution );
@@ -143,7 +143,7 @@ namespace SCJMapper_V2
float[] cout = new float[m_maxpts * 2];
int resolution = m_maxpts-1; // The number of points in the bezier curve
- m_curve = new BezierInterpolation( m_points, resolution );
+ m_curve = new OGL.BezierInterpolation( m_points, resolution );
Vector2 pos = Vector2.One;
for ( int p = 0; p <= resolution; p++ ) {
pos = m_curve.CalculatePoint( ( float )p / ( float )resolution );
diff --git a/Keyboard/KeyboardCls.cs b/Keyboard/KeyboardCls.cs
index f3f78c0..45df264 100644
--- a/Keyboard/KeyboardCls.cs
+++ b/Keyboard/KeyboardCls.cs
@@ -7,7 +7,7 @@ using System.Windows.Forms;
using SharpDX;
using System.Text.RegularExpressions;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Keyboard
{
///
/// Handles one Keyboard device as DXInput device
@@ -244,7 +244,7 @@ namespace SCJMapper_V2
#endregion
- private Keyboard m_device;
+ private SharpDX.DirectInput.Keyboard m_device;
private KeyboardState m_state = new KeyboardState( );
private Control m_hwnd;
@@ -288,7 +288,7 @@ namespace SCJMapper_V2
///
/// A DXInput device
/// The WinHandle of the main window
- public KeyboardCls( Keyboard device, Control hwnd )
+ public KeyboardCls( SharpDX.DirectInput.Keyboard device, Control hwnd )
{
log.DebugFormat( "KeyboardCls ctor - Entry with {0}", device.Information.ProductName );
diff --git a/Mouse/MouseCls.cs b/Mouse/MouseCls.cs
index 8b9f72a..b6634ef 100644
--- a/Mouse/MouseCls.cs
+++ b/Mouse/MouseCls.cs
@@ -8,7 +8,7 @@ using SharpDX;
using System.Reflection;
using System.Text.RegularExpressions;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.Mouse
{
///
/// Handles one Mouse device as DXInput device
@@ -120,7 +120,7 @@ namespace SCJMapper_V2
#endregion
- private Mouse m_device;
+ private SharpDX.DirectInput.Mouse m_device;
private MouseState m_state = new MouseState( );
private MouseState m_prevState = new MouseState( );
@@ -167,7 +167,7 @@ namespace SCJMapper_V2
///
/// A DXInput device
/// The WinHandle of the main window
- public MouseCls( Mouse device, Control hwnd )
+ public MouseCls( SharpDX.DirectInput.Mouse device, Control hwnd )
{
log.DebugFormat( "MouseCls cTor - Entry with {0}", device.Information.ProductName );
diff --git a/OGL/BezierSeries.cs b/OGL/BezierSeries.cs
index 6b1296b..5c91a86 100644
--- a/OGL/BezierSeries.cs
+++ b/OGL/BezierSeries.cs
@@ -6,7 +6,7 @@ using System.Windows.Forms.DataVisualization.Charting;
using System.Windows.Forms;
using OpenTK;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.OGL
{
public class BezierPointCollection : List
{
diff --git a/OGL/CalcBezierCurve.cs b/OGL/CalcBezierCurve.cs
index 734dd2a..a70e6e6 100644
--- a/OGL/CalcBezierCurve.cs
+++ b/OGL/CalcBezierCurve.cs
@@ -2,7 +2,7 @@
using OpenTK;
using System.Collections.Generic;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.OGL
{
public abstract class CalcCurve
{
diff --git a/OGL/CubicSpline.cs b/OGL/CubicSpline.cs
index 5f61f67..922a7a5 100644
--- a/OGL/CubicSpline.cs
+++ b/OGL/CubicSpline.cs
@@ -27,59 +27,59 @@
using System;
using OpenTK;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.OGL
{
- ///
- /// Cubic spline interpolation.
- /// Call Fit (or use the corrector constructor) to compute spline coefficients, then Eval to evaluate the spline at other X coordinates.
- ///
- ///
- ///
- /// This is implemented based on the wikipedia article:
- /// http://en.wikipedia.org/wiki/Spline_interpolation
- /// I'm not sure I have the right to include a copy of the article so the equation numbers referenced in
- /// comments will end up being wrong at some point.
- ///
- ///
- /// This is not optimized, and is not MT safe.
- /// This can extrapolate off the ends of the splines.
- /// You must provide points in X sort order.
- ///
- ///
- public class CubicSpline
- {
- #region Fields
-
- // N-1 spline coefficients for N points
- private float[] a;
- private float[] b;
-
- // Save the original x and y for Eval
- private float[] xOrig;
- private float[] yOrig;
-
- #endregion
-
- #region Ctor
-
- ///
- /// Default ctor.
- ///
- public CubicSpline()
- {
- }
-
- ///
- /// Construct and call Fit.
- ///
- /// Input. X coordinates to fit.
- /// Input. Y coordinates to fit.
- /// Optional slope constraint for the first point. Single.NaN means no constraint.
- /// Optional slope constraint for the final point. Single.NaN means no constraint.
- public CubicSpline(float[] x, float[] y, float startSlope = float.NaN, float endSlope = float.NaN, bool debug = false)
- {
- Fit(x, y, startSlope, endSlope );
- }
+ ///
+ /// Cubic spline interpolation.
+ /// Call Fit (or use the corrector constructor) to compute spline coefficients, then Eval to evaluate the spline at other X coordinates.
+ ///
+ ///
+ ///
+ /// This is implemented based on the wikipedia article:
+ /// http://en.wikipedia.org/wiki/Spline_interpolation
+ /// I'm not sure I have the right to include a copy of the article so the equation numbers referenced in
+ /// comments will end up being wrong at some point.
+ ///
+ ///
+ /// This is not optimized, and is not MT safe.
+ /// This can extrapolate off the ends of the splines.
+ /// You must provide points in X sort order.
+ ///
+ ///
+ public class CubicSpline
+ {
+ #region Fields
+
+ // N-1 spline coefficients for N points
+ private float[] a;
+ private float[] b;
+
+ // Save the original x and y for Eval
+ private float[] xOrig;
+ private float[] yOrig;
+
+ #endregion
+
+ #region Ctor
+
+ ///
+ /// Default ctor.
+ ///
+ public CubicSpline()
+ {
+ }
+
+ ///
+ /// Construct and call Fit.
+ ///
+ /// Input. X coordinates to fit.
+ /// Input. Y coordinates to fit.
+ /// Optional slope constraint for the first point. Single.NaN means no constraint.
+ /// Optional slope constraint for the final point. Single.NaN means no constraint.
+ public CubicSpline(float[] x, float[] y, float startSlope = float.NaN, float endSlope = float.NaN, bool debug = false)
+ {
+ Fit(x, y, startSlope, endSlope );
+ }
///
/// Construct and call Fit.
@@ -106,161 +106,161 @@ namespace SCJMapper_V2
/// Throws if Fit has not been called.
///
private void CheckAlreadyFitted( )
- {
- if (a == null) throw new Exception("Fit must be called before you can evaluate.");
- }
-
- private int _lastIndex = 0;
-
- ///
- /// Find where in xOrig the specified x falls, by simultaneous traverse.
- /// This allows xs to be less than x[0] and/or greater than x[n-1]. So allows extrapolation.
- /// This keeps state, so requires that x be sorted and xs called in ascending order, and is not multi-thread safe.
- ///
- private int GetNextXIndex(float x)
- {
- if (x < xOrig[_lastIndex])
- {
- throw new ArgumentException("The X values to evaluate must be sorted.");
- }
-
- while ((_lastIndex < xOrig.Length - 2) && (x > xOrig[_lastIndex + 1]))
- {
- _lastIndex++;
- }
-
- return _lastIndex;
- }
-
- ///
- /// Evaluate the specified x value using the specified spline.
- ///
- /// The x value.
- /// Which spline to use.
- /// Turn on console output. Default is false.
- /// The y value.
- private float EvalSpline(float x, int j)
- {
- float dx = xOrig[j + 1] - xOrig[j];
- float t = (x - xOrig[j]) / dx;
- float y = (1 - t) * yOrig[j] + t * yOrig[j + 1] + t * (1 - t) * (a[j] * (1 - t) + b[j] * t); // equation 9
- return y;
- }
-
- #endregion
-
- #region Fit*
-
- ///
- /// Fit x,y and then eval at points xs and return the corresponding y's.
- /// This does the "natural spline" style for ends.
- /// This can extrapolate off the ends of the splines.
- /// You must provide points in X sort order.
- ///
- /// Input. X coordinates to fit.
- /// Input. Y coordinates to fit.
- /// Input. X coordinates to evaluate the fitted curve at.
- /// Optional slope constraint for the first point. Single.NaN means no constraint.
- /// Optional slope constraint for the final point. Single.NaN means no constraint.
- /// Turn on console output. Default is false.
- /// The computed y values for each xs.
- public float[] FitAndEval(float[] x, float[] y, float[] xs, float startSlope = float.NaN, float endSlope = float.NaN)
- {
- Fit(x, y, startSlope, endSlope);
- return Eval(xs);
- }
-
- ///
- /// Compute spline coefficients for the specified x,y points.
- /// This does the "natural spline" style for ends.
- /// This can extrapolate off the ends of the splines.
- /// You must provide points in X sort order.
- ///
- /// Input. X coordinates to fit.
- /// Input. Y coordinates to fit.
- /// Optional slope constraint for the first point. Single.NaN means no constraint.
- /// Optional slope constraint for the final point. Single.NaN means no constraint.
- /// Turn on console output. Default is false.
- public void Fit(float[] x, float[] y, float startSlope = float.NaN, float endSlope = float.NaN)
- {
- if (Single.IsInfinity(startSlope) || Single.IsInfinity(endSlope))
- {
- throw new Exception("startSlope and endSlope cannot be infinity.");
- }
-
- // Save x and y for eval
- this.xOrig = x;
- this.yOrig = y;
-
- int n = x.Length;
- float[] r = new float[n]; // the right hand side numbers: wikipedia page overloads b
-
- TriDiagonalMatrixF m = new TriDiagonalMatrixF(n);
- float dx1, dx2, dy1, dy2;
-
- // First row is different (equation 16 from the article)
- if (float.IsNaN(startSlope))
- {
- dx1 = x[1] - x[0];
- m.C[0] = 1.0f / dx1;
- m.B[0] = 2.0f * m.C[0];
- r[0] = 3 * (y[1] - y[0]) / (dx1 * dx1);
- }
- else
- {
- m.B[0] = 1;
- r[0] = startSlope;
- }
-
- // Body rows (equation 15 from the article)
- for (int i = 1; i < n - 1; i++)
- {
- dx1 = x[i] - x[i - 1];
- dx2 = x[i + 1] - x[i];
-
- m.A[i] = 1.0f / dx1;
- m.C[i] = 1.0f / dx2;
- m.B[i] = 2.0f * (m.A[i] + m.C[i]);
-
- dy1 = y[i] - y[i - 1];
- dy2 = y[i + 1] - y[i];
- r[i] = 3 * (dy1 / (dx1 * dx1) + dy2 / (dx2 * dx2));
- }
-
- // Last row also different (equation 17 from the article)
- if (float.IsNaN(endSlope))
- {
- dx1 = x[n - 1] - x[n - 2];
- dy1 = y[n - 1] - y[n - 2];
- m.A[n - 1] = 1.0f / dx1;
- m.B[n - 1] = 2.0f * m.A[n - 1];
- r[n - 1] = 3 * (dy1 / (dx1 * dx1));
- }
- else
- {
- m.B[n - 1] = 1;
- r[n - 1] = endSlope;
- }
-
- // k is the solution to the matrix
- float[] k = m.Solve(r);
-
- // a and b are each spline's coefficients
- this.a = new float[n - 1];
- this.b = new float[n - 1];
-
- for (int i = 1; i < n; i++)
- {
- dx1 = x[i] - x[i - 1];
- dy1 = y[i] - y[i - 1];
- a[i - 1] = k[i - 1] * dx1 - dy1; // equation 10 from the article
- b[i - 1] = -k[i] * dx1 + dy1; // equation 11 from the article
- }
- }
-
- #endregion
-
- #region Eval*
+ {
+ if (a == null) throw new Exception("Fit must be called before you can evaluate.");
+ }
+
+ private int _lastIndex = 0;
+
+ ///
+ /// Find where in xOrig the specified x falls, by simultaneous traverse.
+ /// This allows xs to be less than x[0] and/or greater than x[n-1]. So allows extrapolation.
+ /// This keeps state, so requires that x be sorted and xs called in ascending order, and is not multi-thread safe.
+ ///
+ private int GetNextXIndex(float x)
+ {
+ if (x < xOrig[_lastIndex])
+ {
+ throw new ArgumentException("The X values to evaluate must be sorted.");
+ }
+
+ while ((_lastIndex < xOrig.Length - 2) && (x > xOrig[_lastIndex + 1]))
+ {
+ _lastIndex++;
+ }
+
+ return _lastIndex;
+ }
+
+ ///
+ /// Evaluate the specified x value using the specified spline.
+ ///
+ /// The x value.
+ /// Which spline to use.
+ /// Turn on console output. Default is false.
+ /// The y value.
+ private float EvalSpline(float x, int j)
+ {
+ float dx = xOrig[j + 1] - xOrig[j];
+ float t = (x - xOrig[j]) / dx;
+ float y = (1 - t) * yOrig[j] + t * yOrig[j + 1] + t * (1 - t) * (a[j] * (1 - t) + b[j] * t); // equation 9
+ return y;
+ }
+
+ #endregion
+
+ #region Fit*
+
+ ///
+ /// Fit x,y and then eval at points xs and return the corresponding y's.
+ /// This does the "natural spline" style for ends.
+ /// This can extrapolate off the ends of the splines.
+ /// You must provide points in X sort order.
+ ///
+ /// Input. X coordinates to fit.
+ /// Input. Y coordinates to fit.
+ /// Input. X coordinates to evaluate the fitted curve at.
+ /// Optional slope constraint for the first point. Single.NaN means no constraint.
+ /// Optional slope constraint for the final point. Single.NaN means no constraint.
+ /// Turn on console output. Default is false.
+ /// The computed y values for each xs.
+ public float[] FitAndEval(float[] x, float[] y, float[] xs, float startSlope = float.NaN, float endSlope = float.NaN)
+ {
+ Fit(x, y, startSlope, endSlope);
+ return Eval(xs);
+ }
+
+ ///
+ /// Compute spline coefficients for the specified x,y points.
+ /// This does the "natural spline" style for ends.
+ /// This can extrapolate off the ends of the splines.
+ /// You must provide points in X sort order.
+ ///
+ /// Input. X coordinates to fit.
+ /// Input. Y coordinates to fit.
+ /// Optional slope constraint for the first point. Single.NaN means no constraint.
+ /// Optional slope constraint for the final point. Single.NaN means no constraint.
+ /// Turn on console output. Default is false.
+ public void Fit(float[] x, float[] y, float startSlope = float.NaN, float endSlope = float.NaN)
+ {
+ if (Single.IsInfinity(startSlope) || Single.IsInfinity(endSlope))
+ {
+ throw new Exception("startSlope and endSlope cannot be infinity.");
+ }
+
+ // Save x and y for eval
+ this.xOrig = x;
+ this.yOrig = y;
+
+ int n = x.Length;
+ float[] r = new float[n]; // the right hand side numbers: wikipedia page overloads b
+
+ TriDiagonalMatrixF m = new TriDiagonalMatrixF(n);
+ float dx1, dx2, dy1, dy2;
+
+ // First row is different (equation 16 from the article)
+ if (float.IsNaN(startSlope))
+ {
+ dx1 = x[1] - x[0];
+ m.C[0] = 1.0f / dx1;
+ m.B[0] = 2.0f * m.C[0];
+ r[0] = 3 * (y[1] - y[0]) / (dx1 * dx1);
+ }
+ else
+ {
+ m.B[0] = 1;
+ r[0] = startSlope;
+ }
+
+ // Body rows (equation 15 from the article)
+ for (int i = 1; i < n - 1; i++)
+ {
+ dx1 = x[i] - x[i - 1];
+ dx2 = x[i + 1] - x[i];
+
+ m.A[i] = 1.0f / dx1;
+ m.C[i] = 1.0f / dx2;
+ m.B[i] = 2.0f * (m.A[i] + m.C[i]);
+
+ dy1 = y[i] - y[i - 1];
+ dy2 = y[i + 1] - y[i];
+ r[i] = 3 * (dy1 / (dx1 * dx1) + dy2 / (dx2 * dx2));
+ }
+
+ // Last row also different (equation 17 from the article)
+ if (float.IsNaN(endSlope))
+ {
+ dx1 = x[n - 1] - x[n - 2];
+ dy1 = y[n - 1] - y[n - 2];
+ m.A[n - 1] = 1.0f / dx1;
+ m.B[n - 1] = 2.0f * m.A[n - 1];
+ r[n - 1] = 3 * (dy1 / (dx1 * dx1));
+ }
+ else
+ {
+ m.B[n - 1] = 1;
+ r[n - 1] = endSlope;
+ }
+
+ // k is the solution to the matrix
+ float[] k = m.Solve(r);
+
+ // a and b are each spline's coefficients
+ this.a = new float[n - 1];
+ this.b = new float[n - 1];
+
+ for (int i = 1; i < n; i++)
+ {
+ dx1 = x[i] - x[i - 1];
+ dy1 = y[i] - y[i - 1];
+ a[i - 1] = k[i - 1] * dx1 - dy1; // equation 10 from the article
+ b[i - 1] = -k[i] * dx1 + dy1; // equation 11 from the article
+ }
+ }
+
+ #endregion
+
+ #region Eval*
///
/// Evaluate the spline at the specified x coordinate.
@@ -313,104 +313,104 @@ namespace SCJMapper_V2
}
///
- /// Evaluate (compute) the slope of the spline at the specified x coordinates.
- /// This can extrapolate off the ends of the splines.
- /// You must provide X's in ascending order.
- /// The spline must already be computed before calling this, meaning you must have already called Fit() or FitAndEval().
- ///
- /// Input. X coordinates to evaluate the fitted curve at.
- /// The computed y values for each x.
- public float[] EvalSlope(float[] x )
- {
- CheckAlreadyFitted();
-
- int n = x.Length;
- float[] qPrime = new float[n];
- _lastIndex = 0; // Reset simultaneous traversal in case there are multiple calls
-
- for (int i = 0; i < n; i++)
- {
- // Find which spline can be used to compute this x (by simultaneous traverse)
- int j = GetNextXIndex(x[i]);
-
- // Evaluate using j'th spline
- float dx = xOrig[j + 1] - xOrig[j];
- float dy = yOrig[j + 1] - yOrig[j];
- float t = (x[i] - xOrig[j]) / dx;
-
- // From equation 5 we could also compute q' (qp) which is the slope at this x
- qPrime[i] = dy / dx
- + (1 - 2 * t) * (a[j] * (1 - t) + b[j] * t) / dx
- + t * (1 - t) * (b[j] - a[j]) / dx;
-
- }
-
- return qPrime;
- }
-
- #endregion
-
- #region Static Methods
-
- ///
- /// Static all-in-one method to fit the splines and evaluate at X coordinates.
- ///
- /// Input. X coordinates to fit.
- /// Input. Y coordinates to fit.
- /// Input. X coordinates to evaluate the fitted curve at.
- /// Optional slope constraint for the first point. Single.NaN means no constraint.
- /// Optional slope constraint for the final point. Single.NaN means no constraint.
- /// The computed y values for each xs.
- public static float[] Compute(float[] x, float[] y, float[] xs, float startSlope = float.NaN, float endSlope = float.NaN )
- {
- CubicSpline spline = new CubicSpline();
- return spline.FitAndEval(x, y, xs, startSlope, endSlope );
- }
-
- ///
- /// Fit the input x,y points using a 'geometric' strategy so that y does not have to be a single-valued
- /// function of x.
- ///
- /// Input x coordinates.
- /// Input y coordinates, do not need to be a single-valued function of x.
- /// How many output points to create.
- /// Output (interpolated) x values.
- /// Output (interpolated) y values.
- public static void FitGeometric(float[] x, float[] y, int nOutputPoints, out float[] xs, out float[] ys)
- {
- // Compute distances
- int n = x.Length;
- float[] dists = new float[n]; // cumulative distance
- dists[0] = 0;
- float totalDist = 0;
-
- for (int i = 1; i < n; i++)
- {
- float dx = x[i] - x[i - 1];
- float dy = y[i] - y[i - 1];
- float dist = (float)Math.Sqrt(dx * dx + dy * dy);
- totalDist += dist;
- dists[i] = totalDist;
- }
-
- // Create 'times' to interpolate to
- float dt = totalDist / (nOutputPoints - 1);
- float[] times = new float[nOutputPoints];
- times[0] = 0;
-
- for (int i = 1; i < nOutputPoints; i++)
- {
- times[i] = times[i - 1] + dt;
- }
-
- // Spline fit both x and y to times
- CubicSpline xSpline = new CubicSpline();
- xs = xSpline.FitAndEval(dists, x, times);
-
- CubicSpline ySpline = new CubicSpline();
- ys = ySpline.FitAndEval(dists, y, times);
- }
-
- #endregion
- }
+ /// Evaluate (compute) the slope of the spline at the specified x coordinates.
+ /// This can extrapolate off the ends of the splines.
+ /// You must provide X's in ascending order.
+ /// The spline must already be computed before calling this, meaning you must have already called Fit() or FitAndEval().
+ ///
+ /// Input. X coordinates to evaluate the fitted curve at.
+ /// The computed y values for each x.
+ public float[] EvalSlope(float[] x )
+ {
+ CheckAlreadyFitted();
+
+ int n = x.Length;
+ float[] qPrime = new float[n];
+ _lastIndex = 0; // Reset simultaneous traversal in case there are multiple calls
+
+ for (int i = 0; i < n; i++)
+ {
+ // Find which spline can be used to compute this x (by simultaneous traverse)
+ int j = GetNextXIndex(x[i]);
+
+ // Evaluate using j'th spline
+ float dx = xOrig[j + 1] - xOrig[j];
+ float dy = yOrig[j + 1] - yOrig[j];
+ float t = (x[i] - xOrig[j]) / dx;
+
+ // From equation 5 we could also compute q' (qp) which is the slope at this x
+ qPrime[i] = dy / dx
+ + (1 - 2 * t) * (a[j] * (1 - t) + b[j] * t) / dx
+ + t * (1 - t) * (b[j] - a[j]) / dx;
+
+ }
+
+ return qPrime;
+ }
+
+ #endregion
+
+ #region Static Methods
+
+ ///
+ /// Static all-in-one method to fit the splines and evaluate at X coordinates.
+ ///
+ /// Input. X coordinates to fit.
+ /// Input. Y coordinates to fit.
+ /// Input. X coordinates to evaluate the fitted curve at.
+ /// Optional slope constraint for the first point. Single.NaN means no constraint.
+ /// Optional slope constraint for the final point. Single.NaN means no constraint.
+ /// The computed y values for each xs.
+ public static float[] Compute(float[] x, float[] y, float[] xs, float startSlope = float.NaN, float endSlope = float.NaN )
+ {
+ CubicSpline spline = new CubicSpline();
+ return spline.FitAndEval(x, y, xs, startSlope, endSlope );
+ }
+
+ ///
+ /// Fit the input x,y points using a 'geometric' strategy so that y does not have to be a single-valued
+ /// function of x.
+ ///
+ /// Input x coordinates.
+ /// Input y coordinates, do not need to be a single-valued function of x.
+ /// How many output points to create.
+ /// Output (interpolated) x values.
+ /// Output (interpolated) y values.
+ public static void FitGeometric(float[] x, float[] y, int nOutputPoints, out float[] xs, out float[] ys)
+ {
+ // Compute distances
+ int n = x.Length;
+ float[] dists = new float[n]; // cumulative distance
+ dists[0] = 0;
+ float totalDist = 0;
+
+ for (int i = 1; i < n; i++)
+ {
+ float dx = x[i] - x[i - 1];
+ float dy = y[i] - y[i - 1];
+ float dist = (float)Math.Sqrt(dx * dx + dy * dy);
+ totalDist += dist;
+ dists[i] = totalDist;
+ }
+
+ // Create 'times' to interpolate to
+ float dt = totalDist / (nOutputPoints - 1);
+ float[] times = new float[nOutputPoints];
+ times[0] = 0;
+
+ for (int i = 1; i < nOutputPoints; i++)
+ {
+ times[i] = times[i - 1] + dt;
+ }
+
+ // Spline fit both x and y to times
+ CubicSpline xSpline = new CubicSpline();
+ xs = xSpline.FitAndEval(dists, x, times);
+
+ CubicSpline ySpline = new CubicSpline();
+ ys = ySpline.FitAndEval(dists, y, times);
+ }
+
+ #endregion
+ }
}
diff --git a/OGL/FormJSCalCurve.Designer.cs b/OGL/FormJSCalCurve.Designer.cs
index 004c1d7..f6fd709 100644
--- a/OGL/FormJSCalCurve.Designer.cs
+++ b/OGL/FormJSCalCurve.Designer.cs
@@ -1,4 +1,4 @@
-namespace SCJMapper_V2
+namespace SCJMapper_V2.OGL
{
partial class FormJSCalCurve
{
diff --git a/OGL/FormJSCalCurve.cs b/OGL/FormJSCalCurve.cs
index 2ed3795..af26c33 100644
--- a/OGL/FormJSCalCurve.cs
+++ b/OGL/FormJSCalCurve.cs
@@ -12,12 +12,15 @@ using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Input;
-using SCJMapper_V2.TextureLoaders;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;
-namespace SCJMapper_V2
+using SCJMapper_V2.OGL.TextureLoaders;
+using SCJMapper_V2.Joystick;
+
+
+namespace SCJMapper_V2.OGL
{
public partial class FormJSCalCurve : Form
{
diff --git a/OGL/LoaderDDS.cs b/OGL/LoaderDDS.cs
index 07a57e7..06bd4b0 100644
--- a/OGL/LoaderDDS.cs
+++ b/OGL/LoaderDDS.cs
@@ -19,7 +19,7 @@ using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
-namespace SCJMapper_V2.TextureLoaders
+namespace SCJMapper_V2.OGL.TextureLoaders
{
///
/// Expects the presence of a valid OpenGL Context and Texture Compression Extensions (GL 1.5) and Cube Maps (GL 1.3).
diff --git a/OGL/LoaderStatics.cs b/OGL/LoaderStatics.cs
index 67705b3..b34b4fb 100644
--- a/OGL/LoaderStatics.cs
+++ b/OGL/LoaderStatics.cs
@@ -10,7 +10,7 @@ using System;
using OpenTK.Graphics.OpenGL;
-namespace SCJMapper_V2.TextureLoaders
+namespace SCJMapper_V2.OGL.TextureLoaders
{
/// The parameters in this class have only effect on the following Texture loads.
diff --git a/OGL/RK4Integrator.cs b/OGL/RK4Integrator.cs
index c8bc3e3..ed0467b 100644
--- a/OGL/RK4Integrator.cs
+++ b/OGL/RK4Integrator.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using OpenTK;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.OGL
{
///
/// 4th order Runge-Kutta integrator
diff --git a/OGL/TriDiagonalMatrix.cs b/OGL/TriDiagonalMatrix.cs
index 13d0197..c4902e4 100644
--- a/OGL/TriDiagonalMatrix.cs
+++ b/OGL/TriDiagonalMatrix.cs
@@ -28,7 +28,7 @@ using System;
using System.Diagnostics;
using System.Text;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.OGL
{
///
/// A tri-diagonal matrix has non-zero entries only on the main diagonal, the diagonal above the main (super), and the
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index 44fa18a..3921dca 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion( "2.22.0.56" )]
-[assembly: AssemblyFileVersion( "2.22.0.56" )]
+[assembly: AssemblyVersion( "2.23.0.57" )]
+[assembly: AssemblyFileVersion( "2.23.0.57" )]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index b74e668..750f24f 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18444
+// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -91,22 +91,21 @@ namespace SCJMapper_V2.Properties {
}
///
- /// Looks up a localized string similar to <profile version="0">
+ /// Looks up a localized string similar to <profile version="1" optionsVersion="2" rebindVersion="2" >
/// <platforms>
- /// <PC keyboard="1" xboxpad="1" ps3pad="1" joystick="1" />
- /// <Xbox keyboard="1" xboxpad="1" ps3pad="0" />
- /// <PS3 keyboard="1" xboxpad="0" ps3pad="1" />
+ /// <PC keyboard="1" mouse="1" xboxpad="1" ps3pad="0" joystick="1" />
+ /// <Xbox keyboard="1" xboxpad="1" ps3pad="0" />
+ /// <PS3 keyboard="1" xboxpad="0" ps3pad="1" />
/// </platforms>
///
- /// <actiongroup action="v_attack1">
- /// <action name="v_attack1_group1" />
- /// <action name="v_attack1_group2" />
- /// <action name="v_attack1_group3" />
+ /// <actiongroup action="v_attack1" >
+ /// <action name="v_attack1_group1" />
+ /// <action name="v_attack1_group2" />
+ /// <action name="v_attack1_group3" />
/// </actiongroup>
- ///
- /// <CustomisationUIHeader>
- /// <keyboard label="Default" description="@ui_KeyboardDefaultDesc" image="KeyboardDefault" />
- /// <xboxpad labe [rest of string was truncated]";.
+ ///
+ /// <ActivationModes>
+ /// <ActivationMode name="tap" onPress="0 [rest of string was truncated]";.
///
internal static string defaultProfile {
get {
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
index 5f87ec0..70dda92 100644
--- a/Properties/Settings.Designer.cs
+++ b/Properties/Settings.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18444
+// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -12,7 +12,7 @@ namespace SCJMapper_V2.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/SC/ActivationModes.cs b/SC/ActivationModes.cs
index f13b8ca..e702938 100644
--- a/SC/ActivationModes.cs
+++ b/SC/ActivationModes.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.SC
{
///
/// Defines a single activation mode
diff --git a/SC/CryXMLlib/Conversions.cs b/SC/CryXMLlib/Conversions.cs
index ba73d68..8866825 100644
--- a/SC/CryXMLlib/Conversions.cs
+++ b/SC/CryXMLlib/Conversions.cs
@@ -22,9 +22,12 @@ namespace SCJMapper_V2.CryXMLlib
// Return new array.
T[] res = new T[len];
+ /*
for ( int i = 0; i < len; i++ ) {
- res[i] = source[i + start];
+ resOLD[i] = source[i + start];
}
+ */
+ Array.ConstrainedCopy( source, ( int )start, res, 0, ( int )len );
return res;
}
@@ -43,9 +46,12 @@ namespace SCJMapper_V2.CryXMLlib
// Return new array.
T[] res = new T[len];
+ /*
for ( int i = 0; i < len; i++ ) {
res[i] = source[i + offset];
}
+ */
+ Array.ConstrainedCopy( source, ( int )offset, res, 0, ( int )len );
return res;
}
}
diff --git a/SC/CryXMLlib/CryXmlBinReader.cs b/SC/CryXMLlib/CryXmlBinReader.cs
index 29a7866..d9388e8 100644
--- a/SC/CryXMLlib/CryXmlBinReader.cs
+++ b/SC/CryXMLlib/CryXmlBinReader.cs
@@ -56,30 +56,30 @@ namespace SCJMapper_V2.CryXMLlib
return null;
}
- BinaryReader binReader = new BinaryReader( File.Open( filename, FileMode.Open ) );
- try {
- UInt32 fileSize = ( UInt32 )binReader.BaseStream.Length;
+ using ( BinaryReader binReader = new BinaryReader( File.Open( filename, FileMode.Open ) ) ) {
+ try {
+ UInt32 fileSize = ( UInt32 )binReader.BaseStream.Length;
- if ( fileSize < CryXMLHeader.MySize( ) ) {
- result = EResult.NotBinXml;
- SetErrorDescription( "File is not a binary XML file (file size is too small)." );
- return null;
- }
+ if ( fileSize < CryXMLHeader.MySize( ) ) {
+ result = EResult.NotBinXml;
+ SetErrorDescription( "File is not a binary XML file (file size is too small)." );
+ return null;
+ }
- // read from binary file and map the content into the memory
- CryXmlBinContext pData = Create( binReader, fileSize, out result );
+ // read from binary file and map the content into the memory
+ CryXmlBinContext pData = Create( binReader, fileSize, out result );
- if ( result != EResult.Success ) return null; // Well...
+ if ( result != EResult.Success ) return null; // Well...
- // Return first node
- CryXmlNodeRef n = pData.pBinaryNodes[0];
- return n;
+ // Return first node
+ CryXmlNodeRef n = pData.pBinaryNodes[0];
+ return n;
- }
- catch {
- result = EResult.NotBinXml;
- SetErrorDescription( "Exception in BinaryReader." );
- return null;
+ } catch {
+ result = EResult.NotBinXml;
+ SetErrorDescription( "Exception in BinaryReader." );
+ return null;
+ }
}
}
@@ -97,7 +97,7 @@ namespace SCJMapper_V2.CryXMLlib
UInt32 fileSize = ( UInt32 )binBuffer.Length;
- try {
+ try {
if ( fileSize < CryXMLHeader.MySize( ) ) {
result = EResult.NotBinXml;
SetErrorDescription( "File is not a binary XML file (file size is too small)." );
@@ -113,8 +113,7 @@ namespace SCJMapper_V2.CryXMLlib
CryXmlNodeRef n = pData.pBinaryNodes[0];
return n;
- }
- catch {
+ } catch {
result = EResult.NotBinXml;
SetErrorDescription( "Exception in buffer reader" );
return null;
@@ -166,18 +165,17 @@ namespace SCJMapper_V2.CryXMLlib
// Create binary nodes to wrap the ones to read later
pData.pBinaryNodes = new List( ); // dynamic list used, not an array
- for ( int i=0; i < header.nNodeCount; i++ ) { pData.pBinaryNodes.Add( new CryXmlBinNode( ) ); }
+ for ( int i = 0; i < header.nNodeCount; i++ ) { pData.pBinaryNodes.Add( new CryXmlBinNode( ) ); }
// map file content to binary.. here we really allocate arrays of elements and copy rather than the original which worked well with ptrs in c++
try {
pData.pAttributes = ( CryXMLAttribute[] )Array.CreateInstance( typeof( CryXMLAttribute ), header.nAttributeCount ); // alloc enough
UInt32 incr = CryXMLAttribute.MySize( ); // size of one element to read
- for ( UInt32 aIdx=0; aIdx < header.nAttributeCount; aIdx++ ) {
+ for ( UInt32 aIdx = 0; aIdx < header.nAttributeCount; aIdx++ ) {
pData.pAttributes[aIdx] = Conversions.ByteToType( fileContents, header.nAttributeTablePosition + aIdx * incr );
}
- }
- catch ( Exception e ) {
+ } catch ( Exception e ) {
SetErrorDescription( string.Format( "EXC Attributes: {0}", e.Message ) );
return null;
}
@@ -185,11 +183,10 @@ namespace SCJMapper_V2.CryXMLlib
try {
pData.pChildIndices = ( CryXMLNodeIndex[] )Array.CreateInstance( typeof( CryXMLNodeIndex ), header.nChildCount ); // alloc enough
UInt32 incr = CryXMLNodeIndex.MySize( ); // size of one element to read
- for ( UInt32 aIdx=0; aIdx < header.nChildCount; aIdx++ ) {
+ for ( UInt32 aIdx = 0; aIdx < header.nChildCount; aIdx++ ) {
pData.pChildIndices[aIdx] = Conversions.ByteToType( fileContents, header.nChildTablePosition + aIdx * incr );
}
- }
- catch ( Exception e ) {
+ } catch ( Exception e ) {
SetErrorDescription( string.Format( "EXC ChildIndices: {0}", e.Message ) );
return null;
}
@@ -197,11 +194,10 @@ namespace SCJMapper_V2.CryXMLlib
try {
pData.pNodes = ( CryXMLNode[] )Array.CreateInstance( typeof( CryXMLNode ), header.nNodeCount ); // alloc enough
UInt32 incr = CryXMLNode.MySize( ); // size of one element to read
- for ( UInt32 aIdx=0; aIdx < header.nNodeCount; aIdx++ ) {
+ for ( UInt32 aIdx = 0; aIdx < header.nNodeCount; aIdx++ ) {
pData.pNodes[aIdx] = Conversions.ByteToType( fileContents, header.nNodeTablePosition + aIdx * incr );
}
- }
- catch ( Exception e ) {
+ } catch ( Exception e ) {
SetErrorDescription( string.Format( "EXC Nodes: {0}", e.Message ) );
return null;
}
@@ -209,8 +205,7 @@ namespace SCJMapper_V2.CryXMLlib
try {
pData.pStringDataLength = header.nStringDataSize;
pData.pStringData = fileContents.SliceL( header.nStringDataPosition, header.nStringDataSize );
- }
- catch ( Exception e ) {
+ } catch ( Exception e ) {
SetErrorDescription( string.Format( "EXC StringData: {0}", e.Message ) );
return null;
}
diff --git a/SC/CryXMLlib/XmlTree.cs b/SC/CryXMLlib/XmlTree.cs
index e08ccc0..0d7cf7c 100644
--- a/SC/CryXMLlib/XmlTree.cs
+++ b/SC/CryXMLlib/XmlTree.cs
@@ -24,8 +24,8 @@ namespace SCJMapper_V2.CryXMLlib
public string XML_string
{
get {
- string xml = "";
- foreach ( string s in m_doc ) xml += string.Format( "{0}\n", s );
+ string xml = ""; string CR = string.Format("\n");
+ foreach ( string s in m_doc ) xml += ( s + CR );
return xml;
}
}
diff --git a/SC/DProfileReader.cs b/SC/DProfileReader.cs
index c442c31..a899b37 100644
--- a/SC/DProfileReader.cs
+++ b/SC/DProfileReader.cs
@@ -4,7 +4,7 @@ using System.Text;
using System.Xml;
using System.IO;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.SC
{
///
/// should read the default profile - may be replacing the MappingVars once
@@ -150,7 +150,7 @@ namespace SCJMapper_V2
ac.defBinding = attr["joystick"];
ac.defActivationMode = actMode;
if ( ac.defBinding == " " ) {
- ac.defBinding = JoystickCls.BlendedInput;
+ ac.defBinding = Joystick.JoystickCls.BlendedInput;
m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
else if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
@@ -166,7 +166,7 @@ namespace SCJMapper_V2
ac.defBinding = attr["keyboard"];
ac.defActivationMode = actMode;
if ( ac.defBinding == " " ) {
- ac.defBinding = KeyboardCls.BlendedInput;
+ ac.defBinding = Keyboard.KeyboardCls.BlendedInput;
m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
else if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
@@ -182,7 +182,7 @@ namespace SCJMapper_V2
ac.defBinding = attr["mouse"];
ac.defActivationMode = actMode;
if ( ac.defBinding == " " ) {
- ac.defBinding = MouseCls.BlendedInput;
+ ac.defBinding = Mouse.MouseCls.BlendedInput;
m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
else if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
@@ -198,7 +198,7 @@ namespace SCJMapper_V2
ac.defBinding = attr["xboxpad"];
ac.defActivationMode = actMode;
if ( ac.defBinding == " " ) {
- ac.defBinding = GamepadCls.BlendedInput;
+ ac.defBinding = Gamepad.GamepadCls.BlendedInput;
m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
else if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
diff --git a/SC/SCDefaultProfile.cs b/SC/SCDefaultProfile.cs
index 39882fa..00fb8b4 100644
--- a/SC/SCDefaultProfile.cs
+++ b/SC/SCDefaultProfile.cs
@@ -7,7 +7,7 @@ using System.IO;
using SCJMapper_V2.CryXMLlib;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.SC
{
///
diff --git a/SC/SCLogExtract.cs b/SC/SCLogExtract.cs
index bf69fe5..c6f5d20 100644
--- a/SC/SCLogExtract.cs
+++ b/SC/SCLogExtract.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.IO;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.SC
{
public class SCLogExtract
{
diff --git a/SC/SCMappings.cs b/SC/SCMappings.cs
index b5e3144..6d5639b 100644
--- a/SC/SCMappings.cs
+++ b/SC/SCMappings.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.IO;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.SC
{
///
/// Finds and returns the Mappings from SC Bundle
diff --git a/SC/SCPath.cs b/SC/SCPath.cs
index 0c6c0dc..0aa170e 100644
--- a/SC/SCPath.cs
+++ b/SC/SCPath.cs
@@ -5,7 +5,7 @@ using System.Text;
using System.IO;
using Microsoft.Win32;
-namespace SCJMapper_V2
+namespace SCJMapper_V2.SC
{
///
/// Find the SC pathes and folders
@@ -15,6 +15,8 @@ namespace SCJMapper_V2
private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod( ).DeclaringType );
private static readonly AppSettings appSettings = new AppSettings( );
+ private static bool hasInformed = false; // prevent msgbox chains..
+
///
/// Try to locate the launcher under "App Paths"
///
@@ -123,12 +125,18 @@ namespace SCJMapper_V2
log.Debug( "SCBasePath - Entry" );
appSettings.Reload( ); // local instance - reload as it might be changed outside
String scp = "";
+
if ( appSettings.UserSCPathUsed ) {
// User has priority
scp = appSettings.UserSCPath;
log.InfoFormat( "SCBasePath - user defined folder given: {0}", scp );
if ( !Directory.Exists( scp ) ) {
log.WarnFormat( "SCBasePath - user defined folder does not exist: {0}", scp );
+ string issue = string.Format( "Cannot find the user defined SC Installation Path !!\n\n" +
+ "Enter the folder where CIGLauncher.exe is located");
+
+ if ( !hasInformed ) System.Windows.Forms.MessageBox.Show( issue, "Cannot find the user defined SC Installation Path !!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation );
+ hasInformed = true;
return ""; // sorry path does not exist
}
}
@@ -143,6 +151,14 @@ namespace SCJMapper_V2
scp = SCLauncherFile1;
if ( String.IsNullOrEmpty( scp ) ) {
log.Warn( "SCBasePath - cannot find any valid SC path" );
+ // Issue a warning here to let the user know
+ string issue = string.Format( "Cannot find the SC Installation Path !!\n\n" +
+ "Use Settings to provide the path manually (don't forget to Check the Box left of the path to use it)\n\n" +
+ "Enter the folder where CIGLauncher.exe is located");
+
+ if ( !hasInformed ) System.Windows.Forms.MessageBox.Show( issue, "Cannot find SC Installation Path !!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation );
+ hasInformed = true;
+
return ""; // sorry did not found a thing..
}
}
@@ -177,6 +193,7 @@ namespace SCJMapper_V2
/// Returns the SC Client path
/// AC 1.1.6: E:\G\StarCitizen\StarCitizen\Public
/// SC 2x: alternatively use PTU path E:\G\StarCitizen\StarCitizen\Test
+ /// SC 2.2.2: alternatively search path in E:\G\StarCitizen\StarCitizen\Live (don't know but this was mentioned in CIGs relnotes lately)
///
static public String SCClientPath
{
@@ -187,14 +204,33 @@ namespace SCJMapper_V2
if ( String.IsNullOrEmpty( scp ) ) return ""; // no valid one can be found
//
scp = Path.Combine( scp, "StarCitizen" );
- if ( appSettings.UsePTU )
- scp = Path.Combine( scp, "Test" );
- else
- scp = Path.Combine( scp, "Public" );
+ string scpX = "";
+ if ( appSettings.UsePTU ) {
+ scpX = Path.Combine( scp, "Test" );
+ if ( Directory.Exists( scp ) ) return scpX;
+ } else {
+ scpX = Path.Combine( scp, "Public" );
+ if ( Directory.Exists( scp ) ) return scpX;
+ // SC 2.2.2+ did not found it so try Live now
+ scpX = Path.Combine( scp, "Live" );
+ if ( Directory.Exists( scp ) ) return scpX;
+ }
- if ( Directory.Exists( scp ) ) return scp;
- log.WarnFormat( "SCClientDataPath - StarCitizen\\Public or for PTU \\Test subfolder does not exist: {0}", scp );
+ log.WarnFormat( "SCClientDataPath - StarCitizen\\Public, StarCitizen\\Live or for PTU \\Test subfolder does not exist: {0}", scp );
+
+ // Issue a warning here to let the user know
+ string issue = string.Format( "Cannot find the SC Client Path !!\n\n" +
+ "Tried to look for:\n" +
+ "{0}\\Public or \n" +
+ "{0}\\Live or \n" +
+ "{0}\\Test (if PTU was enabled)\n\n" +
+ "The program cannot load or save in GameFolders\n\n" +
+ "Please submit a bug report, adding your complete SC game folder structure");
+
+ if (!hasInformed) System.Windows.Forms.MessageBox.Show( issue, "Cannot find SC Client Path !!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation );
+ hasInformed = true;
+
return "";
}
}
diff --git a/SCJMapper-V2.csproj b/SCJMapper-V2.csproj
index 6f9b721..9602197 100644
--- a/SCJMapper-V2.csproj
+++ b/SCJMapper-V2.csproj
@@ -1,5 +1,5 @@
-
+
Debug
x86
@@ -10,7 +10,7 @@
Properties
SCJMapper_V2
SCJMapper
- v4.0
+ v4.5.2
512
@@ -40,6 +40,7 @@
DEBUG;TRACE
prompt
4
+ false
x86
@@ -49,6 +50,7 @@
TRACE
prompt
4
+ false
Cassini_Logo_Icon.ico
@@ -65,6 +67,7 @@
prompt
false
false
+ false
bin\Release\
@@ -76,6 +79,7 @@
false
false
false
+ false
@@ -122,6 +126,22 @@
+
+
+ DS_ActionMaps.xsd
+
+
+ True
+ True
+ DS_ActionMaps.xsd
+
+
+
+ Form
+
+
+ FormTable.cs
+
@@ -206,6 +226,9 @@
Form1.cs
Designer
+
+ FormTable.cs
+
FormJSCalCurve.cs
@@ -232,6 +255,17 @@
UC_GpadPanel.cs
+
+ DS_ActionMaps.xsd
+
+
+ Designer
+ MSDataSetGenerator
+ DS_ActionMaps.Designer.cs
+
+
+ DS_ActionMaps.xsd
+
Always
diff --git a/SCJMapper-V2.sln b/SCJMapper-V2.sln
index 391240a..8df0fde 100644
--- a/SCJMapper-V2.sln
+++ b/SCJMapper-V2.sln
@@ -1,6 +1,8 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25123.0
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SCJMapper-V2", "SCJMapper-V2.csproj", "{B5F8B339-E02E-4F6D-BF62-D776F165910F}"
EndProject
Global
diff --git a/Table/DS_ActionMap.cs b/Table/DS_ActionMap.cs
new file mode 100644
index 0000000..a68327f
--- /dev/null
+++ b/Table/DS_ActionMap.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SCJMapper_V2.Table
+{
+ class DS_ActionMap
+ {
+ static public string ActionMapShown( string actionMap, int amCount )
+ {
+ string amShown = string.Format("{0,2:00}-{1}", amCount, actionMap);
+ return amShown;
+ }
+
+ static public string ActionMapFromAMShown( string actionMapShown )
+ {
+ string ret = actionMapShown.Substring(3); // must match the above formatting
+ return ret;
+ }
+
+
+
+ static public string ActionID( string actionMap, string acKey, int actionCommandIndex )
+ {
+ string acID = string.Format("{0}.{1}.{2}", actionMap, acKey, actionCommandIndex ); // make a unique key
+ return acID;
+ }
+
+
+
+
+ static public string ActionMap( string actionID )
+ {
+ string[] e = actionID.Split( new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
+ // we have actionmap.actionkey.nodeindex
+ string actionKey = e[0];
+ return actionKey;
+ }
+
+ static public string ActionMap( DS_ActionMaps.T_ActionRow acr )
+ {
+ return ActionMap( acr.ID_Action );
+ }
+
+
+
+ ///
+ /// decompose the Action from the ActionID string
+ /// matches the composing ActionIDShown
+ ///
+ ///
+ ///
+ static public string Action( string actionID )
+ {
+ string[] e =actionID.Split( new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
+ // we have actionmap.actionkey.nodeindex
+ string actionKey = e[1];
+ return actionKey.Substring( 1 );
+ }
+
+ static public string Action( DS_ActionMaps.T_ActionRow acr )
+ {
+ return Action( acr.ID_Action );
+ }
+
+
+
+ static public string ActionKey( string actionID )
+ {
+ string[] e = actionID.Split( new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
+ // we have actionmap.actionkey.nodeindex
+ string actionKey = e[1];
+ return actionKey;
+ }
+
+ static public string ActionKey( DS_ActionMaps.T_ActionRow acr )
+ {
+ return ActionKey( acr.ID_Action );
+ }
+
+
+
+ static public int ActionCommandIndex( string actionID )
+ {
+ string[] e =actionID.Split( new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
+ // we have actionmap.actionkey.nodeindex
+ int actionCommandIndex = int.Parse( e[2] );
+ return actionCommandIndex;
+ }
+
+ static public int ActionCommandIndex( DS_ActionMaps.T_ActionRow acr )
+ {
+ return ActionCommandIndex( acr.ID_Action );
+ }
+
+
+
+ static public string DevInput ( DS_ActionMaps.T_ActionRow acr )
+ {
+ if ( acr.Blended )
+ return DeviceCls.BlendedInput;
+ else
+ return acr.Usr_Binding;
+ }
+
+ }
+}
diff --git a/Table/DS_ActionMaps.Designer.cs b/Table/DS_ActionMaps.Designer.cs
new file mode 100644
index 0000000..ef66903
--- /dev/null
+++ b/Table/DS_ActionMaps.Designer.cs
@@ -0,0 +1,1330 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+#pragma warning disable 1591
+
+namespace SCJMapper_V2.Table {
+
+
+ ///
+ ///Represents a strongly typed in-memory cache of data.
+ ///
+ [global::System.Serializable()]
+ [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+ [global::System.ComponentModel.ToolboxItem(true)]
+ [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")]
+ [global::System.Xml.Serialization.XmlRootAttribute("DS_ActionMaps")]
+ [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")]
+ public partial class DS_ActionMaps : global::System.Data.DataSet {
+
+ private T_ActionMapDataTable tableT_ActionMap;
+
+ private T_ActionDataTable tableT_Action;
+
+ private global::System.Data.DataRelation relationT_ActionMap_T_Action;
+
+ private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public DS_ActionMaps() {
+ this.BeginInit();
+ this.InitClass();
+ global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
+ base.Tables.CollectionChanged += schemaChangedHandler;
+ base.Relations.CollectionChanged += schemaChangedHandler;
+ this.EndInit();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected DS_ActionMaps(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) :
+ base(info, context, false) {
+ if ((this.IsBinarySerialized(info, context) == true)) {
+ this.InitVars(false);
+ global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
+ this.Tables.CollectionChanged += schemaChangedHandler1;
+ this.Relations.CollectionChanged += schemaChangedHandler1;
+ return;
+ }
+ string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string))));
+ if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) {
+ global::System.Data.DataSet ds = new global::System.Data.DataSet();
+ ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema)));
+ if ((ds.Tables["T_ActionMap"] != null)) {
+ base.Tables.Add(new T_ActionMapDataTable(ds.Tables["T_ActionMap"]));
+ }
+ if ((ds.Tables["T_Action"] != null)) {
+ base.Tables.Add(new T_ActionDataTable(ds.Tables["T_Action"]));
+ }
+ this.DataSetName = ds.DataSetName;
+ this.Prefix = ds.Prefix;
+ this.Namespace = ds.Namespace;
+ this.Locale = ds.Locale;
+ this.CaseSensitive = ds.CaseSensitive;
+ this.EnforceConstraints = ds.EnforceConstraints;
+ this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add);
+ this.InitVars();
+ }
+ else {
+ this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema)));
+ }
+ this.GetSerializationData(info, context);
+ global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
+ base.Tables.CollectionChanged += schemaChangedHandler;
+ this.Relations.CollectionChanged += schemaChangedHandler;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.Browsable(false)]
+ [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+ public T_ActionMapDataTable T_ActionMap {
+ get {
+ return this.tableT_ActionMap;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.Browsable(false)]
+ [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+ public T_ActionDataTable T_Action {
+ get {
+ return this.tableT_Action;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.BrowsableAttribute(true)]
+ [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)]
+ public override global::System.Data.SchemaSerializationMode SchemaSerializationMode {
+ get {
+ return this._schemaSerializationMode;
+ }
+ set {
+ this._schemaSerializationMode = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)]
+ public new global::System.Data.DataTableCollection Tables {
+ get {
+ return base.Tables;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)]
+ public new global::System.Data.DataRelationCollection Relations {
+ get {
+ return base.Relations;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void InitializeDerivedDataSet() {
+ this.BeginInit();
+ this.InitClass();
+ this.EndInit();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public override global::System.Data.DataSet Clone() {
+ DS_ActionMaps cln = ((DS_ActionMaps)(base.Clone()));
+ cln.InitVars();
+ cln.SchemaSerializationMode = this.SchemaSerializationMode;
+ return cln;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override bool ShouldSerializeTables() {
+ return false;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override bool ShouldSerializeRelations() {
+ return false;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) {
+ if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) {
+ this.Reset();
+ global::System.Data.DataSet ds = new global::System.Data.DataSet();
+ ds.ReadXml(reader);
+ if ((ds.Tables["T_ActionMap"] != null)) {
+ base.Tables.Add(new T_ActionMapDataTable(ds.Tables["T_ActionMap"]));
+ }
+ if ((ds.Tables["T_Action"] != null)) {
+ base.Tables.Add(new T_ActionDataTable(ds.Tables["T_Action"]));
+ }
+ this.DataSetName = ds.DataSetName;
+ this.Prefix = ds.Prefix;
+ this.Namespace = ds.Namespace;
+ this.Locale = ds.Locale;
+ this.CaseSensitive = ds.CaseSensitive;
+ this.EnforceConstraints = ds.EnforceConstraints;
+ this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add);
+ this.InitVars();
+ }
+ else {
+ this.ReadXml(reader);
+ this.InitVars();
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() {
+ global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream();
+ this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null));
+ stream.Position = 0;
+ return global::System.Xml.Schema.XmlSchema.Read(new global::System.Xml.XmlTextReader(stream), null);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal void InitVars() {
+ this.InitVars(true);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal void InitVars(bool initTable) {
+ this.tableT_ActionMap = ((T_ActionMapDataTable)(base.Tables["T_ActionMap"]));
+ if ((initTable == true)) {
+ if ((this.tableT_ActionMap != null)) {
+ this.tableT_ActionMap.InitVars();
+ }
+ }
+ this.tableT_Action = ((T_ActionDataTable)(base.Tables["T_Action"]));
+ if ((initTable == true)) {
+ if ((this.tableT_Action != null)) {
+ this.tableT_Action.InitVars();
+ }
+ }
+ this.relationT_ActionMap_T_Action = this.Relations["T_ActionMap_T_Action"];
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ private void InitClass() {
+ this.DataSetName = "DS_ActionMaps";
+ this.Prefix = "";
+ this.Namespace = "http://tempuri.org/DS_ActionMaps.xsd";
+ this.EnforceConstraints = true;
+ this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
+ this.tableT_ActionMap = new T_ActionMapDataTable();
+ base.Tables.Add(this.tableT_ActionMap);
+ this.tableT_Action = new T_ActionDataTable();
+ base.Tables.Add(this.tableT_Action);
+ this.relationT_ActionMap_T_Action = new global::System.Data.DataRelation("T_ActionMap_T_Action", new global::System.Data.DataColumn[] {
+ this.tableT_ActionMap.ID_ActionMapColumn}, new global::System.Data.DataColumn[] {
+ this.tableT_Action.REF_ActionMapColumn}, false);
+ this.Relations.Add(this.relationT_ActionMap_T_Action);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ private bool ShouldSerializeT_ActionMap() {
+ return false;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ private bool ShouldSerializeT_Action() {
+ return false;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) {
+ if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) {
+ this.InitVars();
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+ DS_ActionMaps ds = new DS_ActionMaps();
+ global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+ global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+ global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny();
+ any.Namespace = ds.Namespace;
+ sequence.Items.Add(any);
+ type.Particle = sequence;
+ global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+ if (xs.Contains(dsSchema.TargetNamespace)) {
+ global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+ global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+ try {
+ global::System.Xml.Schema.XmlSchema schema = null;
+ dsSchema.Write(s1);
+ for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+ schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+ s2.SetLength(0);
+ schema.Write(s2);
+ if ((s1.Length == s2.Length)) {
+ s1.Position = 0;
+ s2.Position = 0;
+ for (; ((s1.Position != s1.Length)
+ && (s1.ReadByte() == s2.ReadByte())); ) {
+ ;
+ }
+ if ((s1.Position == s1.Length)) {
+ return type;
+ }
+ }
+ }
+ }
+ finally {
+ if ((s1 != null)) {
+ s1.Close();
+ }
+ if ((s2 != null)) {
+ s2.Close();
+ }
+ }
+ }
+ xs.Add(dsSchema);
+ return type;
+ }
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public delegate void T_ActionMapRowChangeEventHandler(object sender, T_ActionMapRowChangeEvent e);
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public delegate void T_ActionRowChangeEventHandler(object sender, T_ActionRowChangeEvent e);
+
+ ///
+ ///Represents the strongly named DataTable class.
+ ///
+ [global::System.Serializable()]
+ [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+ public partial class T_ActionMapDataTable : global::System.Data.TypedTableBase {
+
+ private global::System.Data.DataColumn columnID_ActionMap;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapDataTable() {
+ this.TableName = "T_ActionMap";
+ this.BeginInit();
+ this.InitClass();
+ this.EndInit();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal T_ActionMapDataTable(global::System.Data.DataTable table) {
+ this.TableName = table.TableName;
+ if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+ this.CaseSensitive = table.CaseSensitive;
+ }
+ if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+ this.Locale = table.Locale;
+ }
+ if ((table.Namespace != table.DataSet.Namespace)) {
+ this.Namespace = table.Namespace;
+ }
+ this.Prefix = table.Prefix;
+ this.MinimumCapacity = table.MinimumCapacity;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected T_ActionMapDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) :
+ base(info, context) {
+ this.InitVars();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn ID_ActionMapColumn {
+ get {
+ return this.columnID_ActionMap;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.Browsable(false)]
+ public int Count {
+ get {
+ return this.Rows.Count;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRow this[int index] {
+ get {
+ return ((T_ActionMapRow)(this.Rows[index]));
+ }
+ }
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionMapRowChangeEventHandler T_ActionMapRowChanging;
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionMapRowChangeEventHandler T_ActionMapRowChanged;
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionMapRowChangeEventHandler T_ActionMapRowDeleting;
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionMapRowChangeEventHandler T_ActionMapRowDeleted;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void AddT_ActionMapRow(T_ActionMapRow row) {
+ this.Rows.Add(row);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRow AddT_ActionMapRow(string ID_ActionMap) {
+ T_ActionMapRow rowT_ActionMapRow = ((T_ActionMapRow)(this.NewRow()));
+ object[] columnValuesArray = new object[] {
+ ID_ActionMap};
+ rowT_ActionMapRow.ItemArray = columnValuesArray;
+ this.Rows.Add(rowT_ActionMapRow);
+ return rowT_ActionMapRow;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRow FindByID_ActionMap(string ID_ActionMap) {
+ return ((T_ActionMapRow)(this.Rows.Find(new object[] {
+ ID_ActionMap})));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public override global::System.Data.DataTable Clone() {
+ T_ActionMapDataTable cln = ((T_ActionMapDataTable)(base.Clone()));
+ cln.InitVars();
+ return cln;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Data.DataTable CreateInstance() {
+ return new T_ActionMapDataTable();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal void InitVars() {
+ this.columnID_ActionMap = base.Columns["ID_ActionMap"];
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ private void InitClass() {
+ this.columnID_ActionMap = new global::System.Data.DataColumn("ID_ActionMap", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnID_ActionMap);
+ this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+ this.columnID_ActionMap}, true));
+ this.columnID_ActionMap.AllowDBNull = false;
+ this.columnID_ActionMap.ReadOnly = true;
+ this.columnID_ActionMap.Unique = true;
+ this.columnID_ActionMap.DefaultValue = ((string)("\"\""));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRow NewT_ActionMapRow() {
+ return ((T_ActionMapRow)(this.NewRow()));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+ return new T_ActionMapRow(builder);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Type GetRowType() {
+ return typeof(T_ActionMapRow);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowChanged(e);
+ if ((this.T_ActionMapRowChanged != null)) {
+ this.T_ActionMapRowChanged(this, new T_ActionMapRowChangeEvent(((T_ActionMapRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowChanging(e);
+ if ((this.T_ActionMapRowChanging != null)) {
+ this.T_ActionMapRowChanging(this, new T_ActionMapRowChangeEvent(((T_ActionMapRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowDeleted(e);
+ if ((this.T_ActionMapRowDeleted != null)) {
+ this.T_ActionMapRowDeleted(this, new T_ActionMapRowChangeEvent(((T_ActionMapRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowDeleting(e);
+ if ((this.T_ActionMapRowDeleting != null)) {
+ this.T_ActionMapRowDeleting(this, new T_ActionMapRowChangeEvent(((T_ActionMapRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void RemoveT_ActionMapRow(T_ActionMapRow row) {
+ this.Rows.Remove(row);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+ global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+ global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+ DS_ActionMaps ds = new DS_ActionMaps();
+ global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+ any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+ any1.MinOccurs = new decimal(0);
+ any1.MaxOccurs = decimal.MaxValue;
+ any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+ sequence.Items.Add(any1);
+ global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+ any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+ any2.MinOccurs = new decimal(1);
+ any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+ sequence.Items.Add(any2);
+ global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+ attribute1.Name = "namespace";
+ attribute1.FixedValue = ds.Namespace;
+ type.Attributes.Add(attribute1);
+ global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+ attribute2.Name = "tableTypeName";
+ attribute2.FixedValue = "T_ActionMapDataTable";
+ type.Attributes.Add(attribute2);
+ type.Particle = sequence;
+ global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+ if (xs.Contains(dsSchema.TargetNamespace)) {
+ global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+ global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+ try {
+ global::System.Xml.Schema.XmlSchema schema = null;
+ dsSchema.Write(s1);
+ for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+ schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+ s2.SetLength(0);
+ schema.Write(s2);
+ if ((s1.Length == s2.Length)) {
+ s1.Position = 0;
+ s2.Position = 0;
+ for (; ((s1.Position != s1.Length)
+ && (s1.ReadByte() == s2.ReadByte())); ) {
+ ;
+ }
+ if ((s1.Position == s1.Length)) {
+ return type;
+ }
+ }
+ }
+ }
+ finally {
+ if ((s1 != null)) {
+ s1.Close();
+ }
+ if ((s2 != null)) {
+ s2.Close();
+ }
+ }
+ }
+ xs.Add(dsSchema);
+ return type;
+ }
+ }
+
+ ///
+ ///Represents the strongly named DataTable class.
+ ///
+ [global::System.Serializable()]
+ [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+ public partial class T_ActionDataTable : global::System.Data.TypedTableBase {
+
+ private global::System.Data.DataColumn columnID_Action;
+
+ private global::System.Data.DataColumn columnREF_ActionMap;
+
+ private global::System.Data.DataColumn columnActionName;
+
+ private global::System.Data.DataColumn columnDevice;
+
+ private global::System.Data.DataColumn columnDef_Binding;
+
+ private global::System.Data.DataColumn columnDef_Modifier;
+
+ private global::System.Data.DataColumn columnAddBind;
+
+ private global::System.Data.DataColumn columnUsr_Binding;
+
+ private global::System.Data.DataColumn columnUsr_Modifier;
+
+ private global::System.Data.DataColumn columnBlended;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionDataTable() {
+ this.TableName = "T_Action";
+ this.BeginInit();
+ this.InitClass();
+ this.EndInit();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal T_ActionDataTable(global::System.Data.DataTable table) {
+ this.TableName = table.TableName;
+ if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+ this.CaseSensitive = table.CaseSensitive;
+ }
+ if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+ this.Locale = table.Locale;
+ }
+ if ((table.Namespace != table.DataSet.Namespace)) {
+ this.Namespace = table.Namespace;
+ }
+ this.Prefix = table.Prefix;
+ this.MinimumCapacity = table.MinimumCapacity;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected T_ActionDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) :
+ base(info, context) {
+ this.InitVars();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn ID_ActionColumn {
+ get {
+ return this.columnID_Action;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn REF_ActionMapColumn {
+ get {
+ return this.columnREF_ActionMap;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn ActionNameColumn {
+ get {
+ return this.columnActionName;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn DeviceColumn {
+ get {
+ return this.columnDevice;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn Def_BindingColumn {
+ get {
+ return this.columnDef_Binding;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn Def_ModifierColumn {
+ get {
+ return this.columnDef_Modifier;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn AddBindColumn {
+ get {
+ return this.columnAddBind;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn Usr_BindingColumn {
+ get {
+ return this.columnUsr_Binding;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn Usr_ModifierColumn {
+ get {
+ return this.columnUsr_Modifier;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataColumn BlendedColumn {
+ get {
+ return this.columnBlended;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ [global::System.ComponentModel.Browsable(false)]
+ public int Count {
+ get {
+ return this.Rows.Count;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRow this[int index] {
+ get {
+ return ((T_ActionRow)(this.Rows[index]));
+ }
+ }
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionRowChangeEventHandler T_ActionRowChanging;
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionRowChangeEventHandler T_ActionRowChanged;
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionRowChangeEventHandler T_ActionRowDeleting;
+
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public event T_ActionRowChangeEventHandler T_ActionRowDeleted;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void AddT_ActionRow(T_ActionRow row) {
+ this.Rows.Add(row);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRow AddT_ActionRow(string ID_Action, T_ActionMapRow parentT_ActionMapRowByT_ActionMap_T_Action, string ActionName, string Device, string Def_Binding, string Def_Modifier, bool AddBind, string Usr_Binding, string Usr_Modifier, bool Blended) {
+ T_ActionRow rowT_ActionRow = ((T_ActionRow)(this.NewRow()));
+ object[] columnValuesArray = new object[] {
+ ID_Action,
+ null,
+ ActionName,
+ Device,
+ Def_Binding,
+ Def_Modifier,
+ AddBind,
+ Usr_Binding,
+ Usr_Modifier,
+ Blended};
+ if ((parentT_ActionMapRowByT_ActionMap_T_Action != null)) {
+ columnValuesArray[1] = parentT_ActionMapRowByT_ActionMap_T_Action[0];
+ }
+ rowT_ActionRow.ItemArray = columnValuesArray;
+ this.Rows.Add(rowT_ActionRow);
+ return rowT_ActionRow;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRow FindByID_Action(string ID_Action) {
+ return ((T_ActionRow)(this.Rows.Find(new object[] {
+ ID_Action})));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public override global::System.Data.DataTable Clone() {
+ T_ActionDataTable cln = ((T_ActionDataTable)(base.Clone()));
+ cln.InitVars();
+ return cln;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Data.DataTable CreateInstance() {
+ return new T_ActionDataTable();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal void InitVars() {
+ this.columnID_Action = base.Columns["ID_Action"];
+ this.columnREF_ActionMap = base.Columns["REF_ActionMap"];
+ this.columnActionName = base.Columns["ActionName"];
+ this.columnDevice = base.Columns["Device"];
+ this.columnDef_Binding = base.Columns["Def_Binding"];
+ this.columnDef_Modifier = base.Columns["Def_Modifier"];
+ this.columnAddBind = base.Columns["AddBind"];
+ this.columnUsr_Binding = base.Columns["Usr_Binding"];
+ this.columnUsr_Modifier = base.Columns["Usr_Modifier"];
+ this.columnBlended = base.Columns["Blended"];
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ private void InitClass() {
+ this.columnID_Action = new global::System.Data.DataColumn("ID_Action", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnID_Action);
+ this.columnREF_ActionMap = new global::System.Data.DataColumn("REF_ActionMap", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnREF_ActionMap);
+ this.columnActionName = new global::System.Data.DataColumn("ActionName", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnActionName);
+ this.columnDevice = new global::System.Data.DataColumn("Device", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnDevice);
+ this.columnDef_Binding = new global::System.Data.DataColumn("Def_Binding", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnDef_Binding);
+ this.columnDef_Modifier = new global::System.Data.DataColumn("Def_Modifier", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnDef_Modifier);
+ this.columnAddBind = new global::System.Data.DataColumn("AddBind", typeof(bool), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnAddBind);
+ this.columnUsr_Binding = new global::System.Data.DataColumn("Usr_Binding", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnUsr_Binding);
+ this.columnUsr_Modifier = new global::System.Data.DataColumn("Usr_Modifier", typeof(string), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnUsr_Modifier);
+ this.columnBlended = new global::System.Data.DataColumn("Blended", typeof(bool), null, global::System.Data.MappingType.Element);
+ base.Columns.Add(this.columnBlended);
+ this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+ this.columnID_Action}, true));
+ this.columnID_Action.AllowDBNull = false;
+ this.columnID_Action.ReadOnly = true;
+ this.columnID_Action.Unique = true;
+ this.columnID_Action.DefaultValue = ((string)("\"\""));
+ this.columnREF_ActionMap.AllowDBNull = false;
+ this.columnREF_ActionMap.ReadOnly = true;
+ this.columnREF_ActionMap.Caption = "ActionMap";
+ this.columnREF_ActionMap.DefaultValue = ((string)("\"\""));
+ this.columnActionName.AllowDBNull = false;
+ this.columnActionName.ReadOnly = true;
+ this.columnActionName.DefaultValue = ((string)("\"\""));
+ this.columnDevice.ReadOnly = true;
+ this.columnDef_Binding.ReadOnly = true;
+ this.columnDef_Binding.Caption = "Default Binding";
+ this.columnDef_Modifier.ReadOnly = true;
+ this.columnDef_Modifier.Caption = "Default Act.Mode";
+ this.columnAddBind.ReadOnly = true;
+ this.columnAddBind.Caption = "addbind Cmd";
+ this.columnAddBind.DefaultValue = ((bool)(false));
+ this.columnUsr_Binding.Caption = "User Binding";
+ this.columnUsr_Modifier.Caption = "User Act.Mode";
+ this.columnBlended.AllowDBNull = false;
+ this.columnBlended.DefaultValue = ((bool)(false));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRow NewT_ActionRow() {
+ return ((T_ActionRow)(this.NewRow()));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+ return new T_ActionRow(builder);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override global::System.Type GetRowType() {
+ return typeof(T_ActionRow);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowChanged(e);
+ if ((this.T_ActionRowChanged != null)) {
+ this.T_ActionRowChanged(this, new T_ActionRowChangeEvent(((T_ActionRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowChanging(e);
+ if ((this.T_ActionRowChanging != null)) {
+ this.T_ActionRowChanging(this, new T_ActionRowChangeEvent(((T_ActionRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowDeleted(e);
+ if ((this.T_ActionRowDeleted != null)) {
+ this.T_ActionRowDeleted(this, new T_ActionRowChangeEvent(((T_ActionRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+ base.OnRowDeleting(e);
+ if ((this.T_ActionRowDeleting != null)) {
+ this.T_ActionRowDeleting(this, new T_ActionRowChangeEvent(((T_ActionRow)(e.Row)), e.Action));
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void RemoveT_ActionRow(T_ActionRow row) {
+ this.Rows.Remove(row);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+ global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+ global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+ DS_ActionMaps ds = new DS_ActionMaps();
+ global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+ any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+ any1.MinOccurs = new decimal(0);
+ any1.MaxOccurs = decimal.MaxValue;
+ any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+ sequence.Items.Add(any1);
+ global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+ any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+ any2.MinOccurs = new decimal(1);
+ any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+ sequence.Items.Add(any2);
+ global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+ attribute1.Name = "namespace";
+ attribute1.FixedValue = ds.Namespace;
+ type.Attributes.Add(attribute1);
+ global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+ attribute2.Name = "tableTypeName";
+ attribute2.FixedValue = "T_ActionDataTable";
+ type.Attributes.Add(attribute2);
+ type.Particle = sequence;
+ global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+ if (xs.Contains(dsSchema.TargetNamespace)) {
+ global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+ global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+ try {
+ global::System.Xml.Schema.XmlSchema schema = null;
+ dsSchema.Write(s1);
+ for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+ schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+ s2.SetLength(0);
+ schema.Write(s2);
+ if ((s1.Length == s2.Length)) {
+ s1.Position = 0;
+ s2.Position = 0;
+ for (; ((s1.Position != s1.Length)
+ && (s1.ReadByte() == s2.ReadByte())); ) {
+ ;
+ }
+ if ((s1.Position == s1.Length)) {
+ return type;
+ }
+ }
+ }
+ }
+ finally {
+ if ((s1 != null)) {
+ s1.Close();
+ }
+ if ((s2 != null)) {
+ s2.Close();
+ }
+ }
+ }
+ xs.Add(dsSchema);
+ return type;
+ }
+ }
+
+ ///
+ ///Represents strongly named DataRow class.
+ ///
+ public partial class T_ActionMapRow : global::System.Data.DataRow {
+
+ private T_ActionMapDataTable tableT_ActionMap;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal T_ActionMapRow(global::System.Data.DataRowBuilder rb) :
+ base(rb) {
+ this.tableT_ActionMap = ((T_ActionMapDataTable)(this.Table));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string ID_ActionMap {
+ get {
+ return ((string)(this[this.tableT_ActionMap.ID_ActionMapColumn]));
+ }
+ set {
+ this[this.tableT_ActionMap.ID_ActionMapColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRow[] GetT_ActionRows() {
+ if ((this.Table.ChildRelations["T_ActionMap_T_Action"] == null)) {
+ return new T_ActionRow[0];
+ }
+ else {
+ return ((T_ActionRow[])(base.GetChildRows(this.Table.ChildRelations["T_ActionMap_T_Action"])));
+ }
+ }
+ }
+
+ ///
+ ///Represents strongly named DataRow class.
+ ///
+ public partial class T_ActionRow : global::System.Data.DataRow {
+
+ private T_ActionDataTable tableT_Action;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ internal T_ActionRow(global::System.Data.DataRowBuilder rb) :
+ base(rb) {
+ this.tableT_Action = ((T_ActionDataTable)(this.Table));
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string ID_Action {
+ get {
+ return ((string)(this[this.tableT_Action.ID_ActionColumn]));
+ }
+ set {
+ this[this.tableT_Action.ID_ActionColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string REF_ActionMap {
+ get {
+ return ((string)(this[this.tableT_Action.REF_ActionMapColumn]));
+ }
+ set {
+ this[this.tableT_Action.REF_ActionMapColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string ActionName {
+ get {
+ return ((string)(this[this.tableT_Action.ActionNameColumn]));
+ }
+ set {
+ this[this.tableT_Action.ActionNameColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string Device {
+ get {
+ try {
+ return ((string)(this[this.tableT_Action.DeviceColumn]));
+ }
+ catch (global::System.InvalidCastException e) {
+ throw new global::System.Data.StrongTypingException("The value for column \'Device\' in table \'T_Action\' is DBNull.", e);
+ }
+ }
+ set {
+ this[this.tableT_Action.DeviceColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string Def_Binding {
+ get {
+ try {
+ return ((string)(this[this.tableT_Action.Def_BindingColumn]));
+ }
+ catch (global::System.InvalidCastException e) {
+ throw new global::System.Data.StrongTypingException("The value for column \'Def_Binding\' in table \'T_Action\' is DBNull.", e);
+ }
+ }
+ set {
+ this[this.tableT_Action.Def_BindingColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string Def_Modifier {
+ get {
+ try {
+ return ((string)(this[this.tableT_Action.Def_ModifierColumn]));
+ }
+ catch (global::System.InvalidCastException e) {
+ throw new global::System.Data.StrongTypingException("The value for column \'Def_Modifier\' in table \'T_Action\' is DBNull.", e);
+ }
+ }
+ set {
+ this[this.tableT_Action.Def_ModifierColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool AddBind {
+ get {
+ try {
+ return ((bool)(this[this.tableT_Action.AddBindColumn]));
+ }
+ catch (global::System.InvalidCastException e) {
+ throw new global::System.Data.StrongTypingException("The value for column \'AddBind\' in table \'T_Action\' is DBNull.", e);
+ }
+ }
+ set {
+ this[this.tableT_Action.AddBindColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string Usr_Binding {
+ get {
+ try {
+ return ((string)(this[this.tableT_Action.Usr_BindingColumn]));
+ }
+ catch (global::System.InvalidCastException e) {
+ throw new global::System.Data.StrongTypingException("The value for column \'Usr_Binding\' in table \'T_Action\' is DBNull.", e);
+ }
+ }
+ set {
+ this[this.tableT_Action.Usr_BindingColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public string Usr_Modifier {
+ get {
+ try {
+ return ((string)(this[this.tableT_Action.Usr_ModifierColumn]));
+ }
+ catch (global::System.InvalidCastException e) {
+ throw new global::System.Data.StrongTypingException("The value for column \'Usr_Modifier\' in table \'T_Action\' is DBNull.", e);
+ }
+ }
+ set {
+ this[this.tableT_Action.Usr_ModifierColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool Blended {
+ get {
+ return ((bool)(this[this.tableT_Action.BlendedColumn]));
+ }
+ set {
+ this[this.tableT_Action.BlendedColumn] = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRow T_ActionMapRow {
+ get {
+ return ((T_ActionMapRow)(this.GetParentRow(this.Table.ParentRelations["T_ActionMap_T_Action"])));
+ }
+ set {
+ this.SetParentRow(value, this.Table.ParentRelations["T_ActionMap_T_Action"]);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool IsDeviceNull() {
+ return this.IsNull(this.tableT_Action.DeviceColumn);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void SetDeviceNull() {
+ this[this.tableT_Action.DeviceColumn] = global::System.Convert.DBNull;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool IsDef_BindingNull() {
+ return this.IsNull(this.tableT_Action.Def_BindingColumn);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void SetDef_BindingNull() {
+ this[this.tableT_Action.Def_BindingColumn] = global::System.Convert.DBNull;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool IsDef_ModifierNull() {
+ return this.IsNull(this.tableT_Action.Def_ModifierColumn);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void SetDef_ModifierNull() {
+ this[this.tableT_Action.Def_ModifierColumn] = global::System.Convert.DBNull;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool IsAddBindNull() {
+ return this.IsNull(this.tableT_Action.AddBindColumn);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void SetAddBindNull() {
+ this[this.tableT_Action.AddBindColumn] = global::System.Convert.DBNull;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool IsUsr_BindingNull() {
+ return this.IsNull(this.tableT_Action.Usr_BindingColumn);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void SetUsr_BindingNull() {
+ this[this.tableT_Action.Usr_BindingColumn] = global::System.Convert.DBNull;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public bool IsUsr_ModifierNull() {
+ return this.IsNull(this.tableT_Action.Usr_ModifierColumn);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public void SetUsr_ModifierNull() {
+ this[this.tableT_Action.Usr_ModifierColumn] = global::System.Convert.DBNull;
+ }
+ }
+
+ ///
+ ///Row event argument class
+ ///
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public class T_ActionMapRowChangeEvent : global::System.EventArgs {
+
+ private T_ActionMapRow eventRow;
+
+ private global::System.Data.DataRowAction eventAction;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRowChangeEvent(T_ActionMapRow row, global::System.Data.DataRowAction action) {
+ this.eventRow = row;
+ this.eventAction = action;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionMapRow Row {
+ get {
+ return this.eventRow;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataRowAction Action {
+ get {
+ return this.eventAction;
+ }
+ }
+ }
+
+ ///
+ ///Row event argument class
+ ///
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public class T_ActionRowChangeEvent : global::System.EventArgs {
+
+ private T_ActionRow eventRow;
+
+ private global::System.Data.DataRowAction eventAction;
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRowChangeEvent(T_ActionRow row, global::System.Data.DataRowAction action) {
+ this.eventRow = row;
+ this.eventAction = action;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public T_ActionRow Row {
+ get {
+ return this.eventRow;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
+ public global::System.Data.DataRowAction Action {
+ get {
+ return this.eventAction;
+ }
+ }
+ }
+ }
+}
+
+#pragma warning restore 1591
\ No newline at end of file
diff --git a/Table/DS_ActionMaps.cs b/Table/DS_ActionMaps.cs
new file mode 100644
index 0000000..f1c8c4e
--- /dev/null
+++ b/Table/DS_ActionMaps.cs
@@ -0,0 +1,11 @@
+namespace SCJMapper_V2.Table
+{
+
+
+ partial class DS_ActionMaps
+ {
+ partial class T_ActionDataTable
+ {
+ }
+ }
+}
diff --git a/Table/DS_ActionMaps.xsc b/Table/DS_ActionMaps.xsc
new file mode 100644
index 0000000..05b0199
--- /dev/null
+++ b/Table/DS_ActionMaps.xsc
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Table/DS_ActionMaps.xsd b/Table/DS_ActionMaps.xsd
new file mode 100644
index 0000000..9928752
--- /dev/null
+++ b/Table/DS_ActionMaps.xsd
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Table/DS_ActionMaps.xss b/Table/DS_ActionMaps.xss
new file mode 100644
index 0000000..2706a30
--- /dev/null
+++ b/Table/DS_ActionMaps.xss
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+ 494
+ 253
+
+
+ 494
+ 287
+
+
+ 627
+ 287
+
+
+
+
+
\ No newline at end of file
diff --git a/Table/FormTabEvents.cs b/Table/FormTabEvents.cs
new file mode 100644
index 0000000..f54c757
--- /dev/null
+++ b/Table/FormTabEvents.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SCJMapper_V2.Table
+{
+
+ ///
+ /// A driver custom event to callback for exposure
+ ///
+ public class EditRowEventArgs : EventArgs
+ {
+ public string Actionmap { get; private set; }
+ public string Actionkey { get; private set; }
+ public int Nodeindex { get; private set; }
+
+ public EditRowEventArgs( string actionmap, string actionkey, int nodeindex )
+ {
+ Actionmap = actionmap;
+ Actionkey = actionkey;
+ Nodeindex = nodeindex;
+ }
+ }
+
+ ///
+ /// A driver custom event to callback for exposure
+ ///
+ public class UpdateEditEventArgs : EventArgs
+ {
+ public UpdateEditEventArgs( )
+ {
+ }
+ }
+
+
+
+}
diff --git a/Table/FormTable.Designer.cs b/Table/FormTable.Designer.cs
new file mode 100644
index 0000000..048c23f
--- /dev/null
+++ b/Table/FormTable.Designer.cs
@@ -0,0 +1,374 @@
+namespace SCJMapper_V2.Table
+{
+ partial class FormTable
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing && ( components != null ) ) {
+ components.Dispose( );
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.components = new System.ComponentModel.Container();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormTable));
+ this.DGV = new System.Windows.Forms.DataGridView();
+ this.dS_ActionMaps = new SCJMapper_V2.Table.DS_ActionMaps();
+ this.dSActionMapsBindingSource = new System.Windows.Forms.BindingSource(this.components);
+ this.txFilterAction = new System.Windows.Forms.TextBox();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.btCancelEdit = new System.Windows.Forms.Button();
+ this.chkEditBlend = new System.Windows.Forms.CheckBox();
+ this.btUpdateFromEdit = new System.Windows.Forms.Button();
+ this.btClrFilterUsrBinding = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txFilterUsrBinding = new System.Windows.Forms.TextBox();
+ this.btClrFilterDefBinding = new System.Windows.Forms.Button();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txFilterDefBinding = new System.Windows.Forms.TextBox();
+ this.btClrFilterAction = new System.Windows.Forms.Button();
+ this.chkKbd = new System.Windows.Forms.CheckBox();
+ this.chkMouse = new System.Windows.Forms.CheckBox();
+ this.chkGamepad = new System.Windows.Forms.CheckBox();
+ this.chkJoystick = new System.Windows.Forms.CheckBox();
+ this.label1 = new System.Windows.Forms.Label();
+ ((System.ComponentModel.ISupportInitialize)(this.DGV)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.dS_ActionMaps)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.dSActionMapsBindingSource)).BeginInit();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.tableLayoutPanel2.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // DGV
+ //
+ this.DGV.AllowUserToAddRows = false;
+ this.DGV.AllowUserToDeleteRows = false;
+ this.DGV.AllowUserToOrderColumns = true;
+ dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
+ this.DGV.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
+ this.DGV.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
+ this.DGV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ this.DGV.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.DGV.Location = new System.Drawing.Point(3, 3);
+ this.DGV.Name = "DGV";
+ this.DGV.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ this.DGV.Size = new System.Drawing.Size(438, 230);
+ this.DGV.TabIndex = 0;
+ this.DGV.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.DGV_CellMouseDoubleClick);
+ this.DGV.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.DGV_CellValueChanged);
+ this.DGV.ColumnWidthChanged += new System.Windows.Forms.DataGridViewColumnEventHandler(this.DGV_ColumnWidthChanged);
+ this.DGV.RowHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.DGV_RowHeaderMouseClick);
+ //
+ // dS_ActionMaps
+ //
+ this.dS_ActionMaps.DataSetName = "Table.DS_ActionMaps";
+ this.dS_ActionMaps.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
+ //
+ // dSActionMapsBindingSource
+ //
+ this.dSActionMapsBindingSource.DataSource = this.dS_ActionMaps;
+ this.dSActionMapsBindingSource.Position = 0;
+ //
+ // txFilterAction
+ //
+ this.txFilterAction.Location = new System.Drawing.Point(93, 6);
+ this.txFilterAction.Name = "txFilterAction";
+ this.txFilterAction.Size = new System.Drawing.Size(109, 22);
+ this.txFilterAction.TabIndex = 1;
+ this.txFilterAction.TextChanged += new System.EventHandler(this.txFilterAction_TextChanged);
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 2;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 300F));
+ this.tableLayoutPanel1.Controls.Add(this.DGV, 0, 0);
+ this.tableLayoutPanel1.Controls.Add(this.panel2, 1, 1);
+ this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 1, 0);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+ this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(1);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 2;
+ 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, 50F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(744, 286);
+ this.tableLayoutPanel1.TabIndex = 2;
+ //
+ // panel2
+ //
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel2.Location = new System.Drawing.Point(447, 239);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(294, 44);
+ this.panel2.TabIndex = 2;
+ //
+ // tableLayoutPanel2
+ //
+ this.tableLayoutPanel2.ColumnCount = 1;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel2.Controls.Add(this.panel1, 0, 0);
+ this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(447, 3);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 2;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 209F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(294, 230);
+ this.tableLayoutPanel2.TabIndex = 3;
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.btCancelEdit);
+ this.panel1.Controls.Add(this.chkEditBlend);
+ this.panel1.Controls.Add(this.btUpdateFromEdit);
+ this.panel1.Controls.Add(this.btClrFilterUsrBinding);
+ this.panel1.Controls.Add(this.label3);
+ this.panel1.Controls.Add(this.txFilterUsrBinding);
+ this.panel1.Controls.Add(this.btClrFilterDefBinding);
+ this.panel1.Controls.Add(this.label2);
+ this.panel1.Controls.Add(this.txFilterDefBinding);
+ this.panel1.Controls.Add(this.btClrFilterAction);
+ this.panel1.Controls.Add(this.chkKbd);
+ this.panel1.Controls.Add(this.chkMouse);
+ this.panel1.Controls.Add(this.chkGamepad);
+ this.panel1.Controls.Add(this.chkJoystick);
+ this.panel1.Controls.Add(this.label1);
+ this.panel1.Controls.Add(this.txFilterAction);
+ this.panel1.Location = new System.Drawing.Point(3, 3);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(288, 202);
+ this.panel1.TabIndex = 1;
+ //
+ // btCancelEdit
+ //
+ this.btCancelEdit.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btCancelEdit.ForeColor = System.Drawing.Color.DarkOliveGreen;
+ this.btCancelEdit.Location = new System.Drawing.Point(183, 170);
+ this.btCancelEdit.Name = "btCancelEdit";
+ this.btCancelEdit.Size = new System.Drawing.Size(97, 28);
+ this.btCancelEdit.TabIndex = 13;
+ this.btCancelEdit.Text = "Undo Edits";
+ this.btCancelEdit.UseVisualStyleBackColor = true;
+ this.btCancelEdit.Click += new System.EventHandler(this.btCancelEdit_Click);
+ //
+ // chkEditBlend
+ //
+ this.chkEditBlend.AutoSize = true;
+ this.chkEditBlend.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.chkEditBlend.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.chkEditBlend.ForeColor = System.Drawing.Color.Firebrick;
+ this.chkEditBlend.Location = new System.Drawing.Point(184, 145);
+ this.chkEditBlend.Name = "chkEditBlend";
+ this.chkEditBlend.Size = new System.Drawing.Size(96, 17);
+ this.chkEditBlend.TabIndex = 12;
+ this.chkEditBlend.Text = "Edit Blending";
+ this.chkEditBlend.UseVisualStyleBackColor = true;
+ this.chkEditBlend.CheckedChanged += new System.EventHandler(this.chkEditBlend_CheckedChanged);
+ //
+ // btUpdateFromEdit
+ //
+ this.btUpdateFromEdit.Enabled = false;
+ this.btUpdateFromEdit.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btUpdateFromEdit.ForeColor = System.Drawing.Color.Firebrick;
+ this.btUpdateFromEdit.Location = new System.Drawing.Point(10, 169);
+ this.btUpdateFromEdit.Name = "btUpdateFromEdit";
+ this.btUpdateFromEdit.Size = new System.Drawing.Size(97, 30);
+ this.btUpdateFromEdit.TabIndex = 12;
+ this.btUpdateFromEdit.Text = "Accept Edits";
+ this.btUpdateFromEdit.UseVisualStyleBackColor = true;
+ this.btUpdateFromEdit.Click += new System.EventHandler(this.btUpdateFromEdit_Click);
+ //
+ // btClrFilterUsrBinding
+ //
+ this.btClrFilterUsrBinding.Location = new System.Drawing.Point(222, 60);
+ this.btClrFilterUsrBinding.Name = "btClrFilterUsrBinding";
+ this.btClrFilterUsrBinding.Size = new System.Drawing.Size(58, 23);
+ this.btClrFilterUsrBinding.TabIndex = 11;
+ this.btClrFilterUsrBinding.Text = "Clear";
+ this.btClrFilterUsrBinding.UseVisualStyleBackColor = true;
+ this.btClrFilterUsrBinding.Click += new System.EventHandler(this.btClrFilterUsrBinding_Click);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(7, 65);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(80, 13);
+ this.label3.TabIndex = 10;
+ this.label3.Text = "Usr Bind Filter";
+ //
+ // txFilterUsrBinding
+ //
+ this.txFilterUsrBinding.Location = new System.Drawing.Point(93, 62);
+ this.txFilterUsrBinding.Name = "txFilterUsrBinding";
+ this.txFilterUsrBinding.Size = new System.Drawing.Size(109, 22);
+ this.txFilterUsrBinding.TabIndex = 9;
+ this.txFilterUsrBinding.TextChanged += new System.EventHandler(this.txFilterUsrBinding_TextChanged);
+ //
+ // btClrFilterDefBinding
+ //
+ this.btClrFilterDefBinding.Location = new System.Drawing.Point(222, 32);
+ this.btClrFilterDefBinding.Name = "btClrFilterDefBinding";
+ this.btClrFilterDefBinding.Size = new System.Drawing.Size(58, 23);
+ this.btClrFilterDefBinding.TabIndex = 8;
+ this.btClrFilterDefBinding.Text = "Clear";
+ this.btClrFilterDefBinding.UseVisualStyleBackColor = true;
+ this.btClrFilterDefBinding.Click += new System.EventHandler(this.btClrFilterBinding_Click);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(7, 37);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(81, 13);
+ this.label2.TabIndex = 7;
+ this.label2.Text = "Def Bind Filter";
+ //
+ // txFilterDefBinding
+ //
+ this.txFilterDefBinding.Location = new System.Drawing.Point(93, 34);
+ this.txFilterDefBinding.Name = "txFilterDefBinding";
+ this.txFilterDefBinding.Size = new System.Drawing.Size(109, 22);
+ this.txFilterDefBinding.TabIndex = 6;
+ this.txFilterDefBinding.TextChanged += new System.EventHandler(this.txFilterBinding_TextChanged);
+ //
+ // btClrFilterAction
+ //
+ this.btClrFilterAction.Location = new System.Drawing.Point(222, 4);
+ this.btClrFilterAction.Name = "btClrFilterAction";
+ this.btClrFilterAction.Size = new System.Drawing.Size(58, 23);
+ this.btClrFilterAction.TabIndex = 5;
+ this.btClrFilterAction.Text = "Clear";
+ this.btClrFilterAction.UseVisualStyleBackColor = true;
+ this.btClrFilterAction.Click += new System.EventHandler(this.btClrFilterAction_Click);
+ //
+ // chkKbd
+ //
+ this.chkKbd.AutoSize = true;
+ this.chkKbd.Location = new System.Drawing.Point(222, 105);
+ this.chkKbd.Name = "chkKbd";
+ this.chkKbd.Size = new System.Drawing.Size(46, 17);
+ this.chkKbd.TabIndex = 4;
+ this.chkKbd.Text = "Kbd";
+ this.chkKbd.UseVisualStyleBackColor = true;
+ this.chkKbd.CheckedChanged += new System.EventHandler(this.chkKbd_CheckedChanged);
+ //
+ // chkMouse
+ //
+ this.chkMouse.AutoSize = true;
+ this.chkMouse.Location = new System.Drawing.Point(158, 105);
+ this.chkMouse.Name = "chkMouse";
+ this.chkMouse.Size = new System.Drawing.Size(61, 17);
+ this.chkMouse.TabIndex = 4;
+ this.chkMouse.Text = "Mouse";
+ this.chkMouse.UseVisualStyleBackColor = true;
+ this.chkMouse.CheckedChanged += new System.EventHandler(this.chkMouse_CheckedChanged);
+ //
+ // chkGamepad
+ //
+ this.chkGamepad.AutoSize = true;
+ this.chkGamepad.Location = new System.Drawing.Point(80, 105);
+ this.chkGamepad.Name = "chkGamepad";
+ this.chkGamepad.Size = new System.Drawing.Size(75, 17);
+ this.chkGamepad.TabIndex = 4;
+ this.chkGamepad.Text = "Gamepad";
+ this.chkGamepad.UseVisualStyleBackColor = true;
+ this.chkGamepad.CheckedChanged += new System.EventHandler(this.chkGamepad_CheckedChanged);
+ //
+ // chkJoystick
+ //
+ this.chkJoystick.AutoSize = true;
+ this.chkJoystick.Location = new System.Drawing.Point(10, 105);
+ this.chkJoystick.Name = "chkJoystick";
+ this.chkJoystick.Size = new System.Drawing.Size(65, 17);
+ this.chkJoystick.TabIndex = 3;
+ this.chkJoystick.Text = "Joystick";
+ this.chkJoystick.UseVisualStyleBackColor = true;
+ this.chkJoystick.CheckedChanged += new System.EventHandler(this.chkJoystick_CheckedChanged);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(7, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(69, 13);
+ this.label1.TabIndex = 2;
+ this.label1.Text = "Action Filter";
+ //
+ // FormTable
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(744, 286);
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.DoubleBuffered = true;
+ this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MinimumSize = new System.Drawing.Size(760, 320);
+ this.Name = "FormTable";
+ this.Text = "FormTable";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormTable_FormClosing);
+ this.LocationChanged += new System.EventHandler(this.FormTable_LocationChanged);
+ this.SizeChanged += new System.EventHandler(this.FormTable_SizeChanged);
+ ((System.ComponentModel.ISupportInitialize)(this.DGV)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.dS_ActionMaps)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.dSActionMapsBindingSource)).EndInit();
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.tableLayoutPanel2.ResumeLayout(false);
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.DataGridView DGV;
+ private System.Windows.Forms.BindingSource dSActionMapsBindingSource;
+ private DS_ActionMaps dS_ActionMaps;
+ private System.Windows.Forms.TextBox txFilterAction;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Button btClrFilterDefBinding;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txFilterDefBinding;
+ private System.Windows.Forms.Button btClrFilterAction;
+ private System.Windows.Forms.CheckBox chkKbd;
+ private System.Windows.Forms.CheckBox chkMouse;
+ private System.Windows.Forms.CheckBox chkGamepad;
+ private System.Windows.Forms.CheckBox chkJoystick;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btClrFilterUsrBinding;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox txFilterUsrBinding;
+ private System.Windows.Forms.Button btUpdateFromEdit;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ private System.Windows.Forms.CheckBox chkEditBlend;
+ private System.Windows.Forms.Button btCancelEdit;
+ }
+}
\ No newline at end of file
diff --git a/Table/FormTable.cs b/Table/FormTable.cs
new file mode 100644
index 0000000..595693f
--- /dev/null
+++ b/Table/FormTable.cs
@@ -0,0 +1,269 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace SCJMapper_V2.Table
+{
+ public partial class FormTable : Form
+ {
+ public FormTable( )
+ {
+ InitializeComponent( );
+
+ DS_AMaps = new DS_ActionMaps( ); // init once
+ m_bSrc.DataSource = DS_AMaps;
+ m_bSrc.DataMember = "T_Action";
+ m_bSrc.Filter = "ActionName LIKE '*view*'";
+
+ DGV.AutoGenerateColumns = true;
+ DGV.DataSource = m_bSrc;
+ DGV.MultiSelect = false;
+ DGV.Columns["ID_Action"].Visible = false;
+ DGV.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCells );
+
+
+
+ btUpdateFromEdit.Enabled = chkEditBlend.Checked;
+ DGV.Columns["Usr_Binding"].ReadOnly = true;
+ DGV.Columns["Usr_Modifier"].ReadOnly = true;
+ DGV.ReadOnly = !chkEditBlend.Checked;
+ }
+
+
+
+ public event EventHandler EditActionEvent;
+ private void RaiseEditActionEvent( string actionmap, string actionkey, int nodeindex )
+ {
+ if ( EditActionEvent != null ) {
+ EditActionEvent( this, new EditRowEventArgs( actionmap, actionkey, nodeindex ) );
+ }
+ }
+
+ public event EventHandler UpdateEditEvent;
+ private void RaiseUpdateEditEvent( )
+ {
+ if ( UpdateEditEvent != null ) {
+ UpdateEditEvent( this, new UpdateEditEventArgs( ) );
+ }
+ }
+
+
+ public Size LastSize { get; set; }
+ public Point LastLocation { get; set; }
+ public string LastColSize { get; set; }
+
+ private BindingSource m_bSrc = new BindingSource();
+
+ ///
+ /// Assign or retrieve the underlying DataSet
+ ///
+ public DS_ActionMaps DS_AMaps { get; private set; }
+
+
+ ///
+ /// Populate the view from the dataset
+ ///
+ public void Populate( )
+ {
+ DGV.SuspendLayout( );
+ // m_bSrc.ResetBindings( false );
+
+ if ( !string.IsNullOrEmpty( LastColSize ) ) {
+ string[] e = LastColSize.Split( new char [] {';'}, StringSplitOptions.RemoveEmptyEntries );
+ for ( int i = 0; i < e.Length; i++ ) {
+ DGV.Columns[i].Width = int.Parse( e[i] );
+ }
+ }
+ DGV.AllowUserToResizeColumns = true;
+ ComposeFilter( );
+ DGV.ResumeLayout( );
+ }
+
+ ///
+ /// Update a single row with given actionID (from DS_ActionMap)
+ /// Note: the dataset needs to be updated by the caller before
+ ///
+ /// ActionID of the row to update
+ public void UpdateRow( string actionID )
+ {
+ if ( string.IsNullOrEmpty( actionID ) ) return; // nothing to do
+ // Populate( ); // cheap
+ }
+
+
+ ///
+ /// A row is set to be edited
+ /// resolve ID and callback to owner
+ ///
+ ///
+ private void EditRow( int rowIndex )
+ {
+ string id = DGV.Rows[rowIndex].Cells["ID_Action"].Value.ToString();
+ // we have nn-actionmap.actionkey.nodeindex
+ string actionMap = DS_ActionMap.ActionMap(id);
+ string actionKey = DS_ActionMap.ActionKey(id);
+ int nodeIndex = DS_ActionMap.ActionCommandIndex(id);
+
+ RaiseEditActionEvent( actionMap, actionKey, nodeIndex );
+ }
+
+
+
+
+
+ private void ComposeFilter( )
+ {
+ string actFilter = string.Format( "(ActionName LIKE '*{0}*')", txFilterAction.Text );
+ string defBindFilter = string.Format( "(Def_Binding LIKE '*{0}*')", txFilterDefBinding.Text );
+ string usrBindFilter = string.Format( "(Usr_Binding LIKE '*{0}*')", txFilterUsrBinding.Text );
+ string deviceFilter = "";
+ if ( ( chkJoystick.Checked == false ) && ( chkGamepad.Checked == false ) && ( chkMouse.Checked == false ) && ( chkKbd.Checked == false ) ) {
+ // none checked means all
+ deviceFilter = "( Device LIKE '*' )";
+ } else {
+ deviceFilter = "( Device='X'"
+ + ( ( chkJoystick.Checked ) ? string.Format( " OR Device = 'joystick'" ) : "" )
+ + ( ( chkGamepad.Checked ) ? string.Format( " OR Device = 'xboxpad'" ) : "" )
+ + ( ( chkMouse.Checked ) ? string.Format( " OR Device = 'mouse'" ) : "" )
+ + ( ( chkKbd.Checked ) ? string.Format( " OR Device = 'keyboard'" ) : "" )
+ + " )";
+ }
+
+ m_bSrc.Filter =
+ actFilter + " AND " + defBindFilter + " AND " + usrBindFilter + " AND " + deviceFilter;
+ }
+
+ private void txFilterAction_TextChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+ private void txFilterBinding_TextChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+ private void txFilterUsrBinding_TextChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+
+ private void btClrFilterAction_Click( object sender, EventArgs e )
+ {
+ txFilterAction.Text = "";
+ }
+
+ private void btClrFilterBinding_Click( object sender, EventArgs e )
+ {
+ txFilterDefBinding.Text = "";
+ }
+
+ private void btClrFilterUsrBinding_Click( object sender, EventArgs e )
+ {
+ txFilterUsrBinding.Text = "";
+ }
+
+
+ private void chkJoystick_CheckedChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+ private void chkGamepad_CheckedChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+ private void chkMouse_CheckedChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+ private void chkKbd_CheckedChanged( object sender, EventArgs e )
+ {
+ ComposeFilter( );
+ }
+
+ private void FormTable_FormClosing( object sender, FormClosingEventArgs e )
+ {
+ if ( e.CloseReason == CloseReason.UserClosing ) {
+ this.Hide( );
+ e.Cancel = true;
+ }
+ }
+
+
+ private void FormTable_LocationChanged( object sender, EventArgs e )
+ {
+ LastLocation = this.Location;
+ }
+
+ private void FormTable_SizeChanged( object sender, EventArgs e )
+ {
+ LastSize = this.Size;
+ }
+
+ private void DGV_ColumnWidthChanged( object sender, DataGridViewColumnEventArgs e )
+ {
+ string setting = "";
+ foreach ( DataGridViewColumn col in DGV.Columns ) {
+ setting += string.Format( "{0};", col.Width.ToString( ) );
+ }
+ LastColSize = setting;
+ }
+
+
+
+ private void DGV_RowHeaderMouseClick( object sender, DataGridViewCellMouseEventArgs e )
+ {
+ EditRow( e.RowIndex );
+ }
+
+ private void DGV_CellMouseDoubleClick( object sender, DataGridViewCellMouseEventArgs e )
+ {
+ EditRow( e.RowIndex );
+ }
+
+
+ private void btUpdateFromEdit_Click( object sender, EventArgs e )
+ {
+ RaiseUpdateEditEvent( ); // accept will be done after updating the main tree
+ }
+
+ private void chkEditBlend_CheckedChanged( object sender, EventArgs e )
+ {
+ btUpdateFromEdit.Enabled = chkEditBlend.Checked;
+ DGV.ReadOnly = !chkEditBlend.Checked;
+ }
+
+ private void btCancelEdit_Click( object sender, EventArgs e )
+ {
+ bool test = DS_AMaps.HasChanges( );
+ DS_AMaps.RejectChanges( );
+ //m_bSrc.ResetBindings( false );
+ }
+
+ private void DGV_CellValueChanged( object sender, DataGridViewCellEventArgs e )
+ {
+ if ( e.ColumnIndex == DGV.Columns["Blended"].Index ) {
+ if ( ( bool )DGV.Rows[e.RowIndex].Cells[DGV.Columns["Blended"].Index].Value == true )
+ DGV.Rows[e.RowIndex].Cells[DGV.Columns["Usr_Binding"].Index].Value = DeviceCls.BlendedInput;
+ else
+ DGV.Rows[e.RowIndex].Cells[DGV.Columns["Usr_Binding"].Index].Value = ""; // don't know anything else...
+ }
+ }
+
+
+
+ }
+
+
+
+}
diff --git a/Table/FormTable.resx b/Table/FormTable.resx
new file mode 100644
index 0000000..4538504
--- /dev/null
+++ b/Table/FormTable.resx
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 152, 17
+
+
+
+
+ AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvc
+ 3yTb2+Ak29viJNvb4iTb2+Mk29rlJNvb5iTb3OYk29zmJNvd5yTb3uck293nJNvd5yTb3egk29vgJNvb
+ 3STb2+Ak29vhJNvb4STb2+Ak29vhJNvb4CTb298k29vgJNvb3yTb294k29vfJNvb3STb290k29veJNvb
+ 3STb298k29vhJNvb5CTb2+Yk29vmJNvb5CTb2+Ik29viJNvb4STb294k29vbJNvb2yTb29sk29vbJNvb
+ 2yTb29sk29vbJNvb3STb294k29vcJNvb3iTb294k29vfJNvb3yTb298k29vfJNvb3STb29sk29vbJNvb
+ 2yTb29sk29vbJNvb3CQHCDn6BQU/+gUFRvoFBE36BQlW+gUTYfoFHGj6BR1q+gUjbvoFKnX6BSp0+gUp
+ cvoFKXP6BSh0+gUWVPoFBDD6BQU7+gUFQfoFBUn6BQVE+gUFR/oFBUP6BQU7+gUFP/oFBTz6BQU4+gUF
+ NvoFBS36BQUv+gUFM/oFBTb6BQVB+gUFUvoFBWL6BQdx+gUGcfoFBVv6BQVO+gUFTPoFBUb6BQU1+gUF
+ KPoFBRr6BQUQ+gUFDvoFBQj6BQUG+gUFDfoFBSH6BQUw+gUFK/oFBTP6BQU4+gUFOfoFBT36BQU++gUF
+ NvoFBSX6BQUR+gUFCPoFBQX6BQUF+gUFBfoFBQb6AABE/wAASv8AAFH/AApZ/wAWZv8AI2//ACh2/wAn
+ dv8AL33/ADWD/wA1gv8AMX7/ADN//wAwfP8AKHT/AANI/wAAP/8AAEf/AABR/wAATf8AAEr/AABM/wAA
+ T/8AAE3/AABD/wAAQf8AAD7/AAA9/wAAOv8AADz/AABC/wAAUP8AAGX/AAB2/wAOhP8ACYD/AABj/wAA
+ Vv8AAFH/AABM/wAAQv8AADP/AAAg/wAAD/8AAAb/AAAH/wAADP8AABP/AAAj/wAALP8AADH/AAA4/wAA
+ P/8AAEL/AABE/wAAP/8AAB//AAAF/wAABP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIDU/8AA1b/ABRh/wAk
+ bv8AMHj/ADR9/wA1gf8ANYH/ADiF/wA/if8AQor/AD2G/wA+h/8AOoT/ADaA/wAcZv8AAEz/AABU/wAA
+ Vv8AAFP/AABS/wAAVP8AAF3/AABZ/wAAT/8AAEr/AABK/wAAUP8AAEz/AABL/wAAVP8AAGX/AAB0/wAO
+ g/8AIJL/ABiL/wADcf8AAF7/AABV/wAATv8AAEj/AAA5/wAAI/8AABH/AAAH/wAADP8AABX/AAAk/wAA
+ Lv8AADb/AAA4/wAAOf8AADf/AAA5/wAAN/8AAC3/AAAM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ Af8CC13/AA5f/wAhbP8ALXn/ADWA/wA5hP8AOob/AD6K/wBCjP8ASI//AEqS/wBFjf8AQIn/ADqD/wA3
+ gP8AMXv/AAZX/wAAVv8AAFP/AABS/wAAVP8AAFf/AABc/wAAW/8AAFj/AABX/wAAW/8AAGL/AABd/wAA
+ X/8AAmn/AAZ5/wAMgv8AHI7/AC2e/wAnl/8ACnv/AABl/wAAW/8AAFH/AABK/wAAPf8AACn/AAAd/wAA
+ Ev8AABH/AAAY/wAAKv8AADf/AAA8/wAAOP8AAC7/AAAe/wAAFv8AABD/AAAI/wAAAv8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAH/Ahln/wAYaP8AHmz/AC55/wA2gv8AOIX/ADqG/wBBi/8AR5D/AEuS/wBM
+ lP8ASpP/AEKL/wA6hP8AN4L/ADeB/wAaY/8AAEz/AABW/wAAUf8AAFT/AABa/wAAXf8AAFz/AABe/wAG
+ bf8ABG7/AAZv/wAGbv8AB3P/ABaB/wAaiv8AH5L/AC2e/wBArf8AOan/AByM/wAHc/8AAWr/AABg/wAA
+ Wf8AAFb/AABG/wAAL/8AACP/AAAn/wAAM/8AADX/AAA5/wAAOP8AADr/AAA2/wAAH/8AAA//AAAC/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wIYZ/8AFmn/ABlo/wAjb/8AMHv/ADSB/wA8
+ hv8ARI3/AEqT/wBNlf8ATZb/AEyT/wBEi/8APYb/ADuE/wA+hv8AM33/AAJJ/wAATv8AAFP/AABU/wAA
+ XP8AAF3/AABj/wAAZ/8ADHX/AA95/wATfP8AGIH/ABuE/wAmlP8ALJz/ADGi/wBArv8AVL3/AFC5/wAy
+ n/8AHIb/ABV//wAQev8AA2//AABn/wAAXv8AAEv/AABE/wAARf8AAEj/AAA//wAAPf8AADz/AABD/wAA
+ Pv8AACf/AAAW/wAACv8AAAf/AAAQ/wAADP8AAAP/AAAA/wAAAP8AAAD/AAAA/wAAAf8CHGv/AB1r/wAh
+ bf8AJ3D/ADF4/wAzfP8AOYD/AEKJ/wBJkv8AS5P/AE2U/wBNk/8ASY//AESM/wBGjP8ASI7/AESM/wAT
+ W/8AAEj/AABS/wAAXf8AAGH/AABn/wAAb/8AAnL/AAt8/wAQfv8AIYn/ACyV/wA1m/8AO6T/AESt/wBM
+ tf8AWL//AG3K/wBuyP8AULT/ADyd/wA3lv8ALpP/AByH/wAPe/8ACnX/AAlt/wAIZ/8ABGH/AAJb/wAB
+ WP8AAFb/AABQ/wAARf8AADb/AAAn/wAAH/8AABf/AAAV/wAAG/8AAAv/AAAB/wAAAP8AAAD/AAAA/wAA
+ AP8AAAH/Ai13/wAod/8AKXf/AC54/wA1fP8AO4H/ADuC/wBFif8AUJX/AFWX/wBZmf8AXJr/AFyY/wBZ
+ mP8AV5j/AFWY/wBRlv8AMHz/AABS/wAAXv8AAGf/AABt/wAAc/8ABXj/AA5+/wAUhf8AGoj/AC2V/wA7
+ of8ARKj/AFK0/wBjwf8Ab8v/AHnT/wCR3P8Ak9z/AHrN/wBmuv8AWrH/AE2p/wBAov8AO5v/ADiX/wA1
+ k/8ALYr/ACSA/wAVeP8ABnD/AAFi/wAAU/8AAEX/AAAw/wAAKv8AACf/AAAi/wAAGv8AABX/AAAE/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAB/wITQf8AEUD/ABRH/wAUTv8AGlX/ACJh/wAnav8AOHj/AFCK/wVj
+ mf8QcKL/EnWn/wxzpv8Gbab/AGSi/wBhoP8AXqD/AFWZ/wARc/8ACXT/ABF7/wATgP8AFYH/AB2K/wAg
+ jv8AI5H/ACeU/wA2nv8AQqb/AFWw/wBuxv8AUrv/ADKs/wBDs/8AcM//BJLb/wCD0/8AaMH/AHXF/wBw
+ wf8Abb3/AGu7/wBkuP8AWbD/AEql/wA2lf8AIYH/AA1z/wABZf8AAFL/AABE/wAAM/8AACz/AAAm/wAA
+ Jf8AACf/AAAv/wAAHf8AAAj/AAAA/wAAAP8AAAD/AAAA/wAAAf8BABP/AAAP/wAAF/8AACL/AAAt/wAA
+ PP8ADE//AClm/wBEfP8BWIz/BGOW/wRlmv8CWpf/AU2R/wBHk/8APY//AEaV/wBUnf8AUJz/AFWh/wBi
+ q/8AZq//AF6s/wBarP8AWK3/AFCq/wBQq/8AUq//AF60/wBww/8AQ63/ABaM/wEnmf8AP6r/Ale8/xOG
+ 0v8KbsH/B2q1/wKZ0/8AoNr/AJrY/wCO0/8AgMr/AGq//wBSrv8APZz/ACqK/wAXeP8ABWf/AABZ/wAA
+ Tf8AAD7/AAA1/wAALf8AACn/AAAf/wAAG/8AABD/AAAE/wAAAP8AAAD/AAAA/wAAAP8AAAH/AQIH/wAA
+ B/8AAAz/AAAT/wAAHv8AATf/ABJR/wAmYf8AN3L/ADt4/wA1d/8AMHf/ADF6/wAtef8AMoD/ADaG/wBB
+ k/8ATJv/AF6n/wBys/8CicP/CpfO/w2Z0P8Jlc7/BZHN/wKNzf8Aicv/AIvM/wCOz/8AUKf/ADWS/wBi
+ tP8Hh87/AIjU/zW75/+Q7vv/auH3/1bZ9f9Kz/D/Ncft/xm36P8Fotz/AIrR/wB1xf8AXrb/AEyn/wA7
+ mf8AJ4j/ABZ3/wADa/8AAF3/AABQ/wAAQP8AAC//AAAj/wAAFP8AAA7/AAAF/wAADP8AABj/AAAK/wAA
+ AP8AAAD/AAAB/wICHP8AABz/AAAp/wABM/8ACj7/ABhS/wAgWv8AJGH/ACZn/wAhZP8AIWP/ACtt/wA7
+ ff8AQ4X/AFCP/wBbmv8AWZz/AFuf/wBco/8AVKL/AGWu/wN5u/8Ih8T/CpTL/w+e0/8Podb/CaDW/w+l
+ 2/8Bcrv/AFWh/wBwt/8Ag8j/AJrZ/wKx5/9S2fT/5v7//8D1/v+g7Pv/geT5/2DX8/87xez/GLLj/wKg
+ 2v8AjdL/AHzE/wBsuf8AW67/AEqf/wA5kv8AJYP/ABZz/wASbv8AClz/AAVG/wACOf8AASX/AAAQ/wAA
+ F/8AACT/AAAe/wAABf8AAAD/AAAA/wAAAf8BAiP/AAAo/wAAOv8AC0n/ABxZ/wAqZP8ALmf/ACNj/wAd
+ Yf8AJmX/ADFt/wA/ev8ATIj/AE2O/wBRkv8AYJ7/AnGr/wd7s/8MgLn/D4O9/wyFv/8Dg7//BonD/xmZ
+ zv8jpNb/KKnZ/yWs2/8Fi8v/BHm6/wuUy/8Qo9f/Hq3e/xm45/820/T/w/T8///////p/v7/sO/8/37g
+ 9v9X0PD/Nb/o/xuv4f8En9j/AI/O/wB7wv8Aa7j/AF+w/wBVpv8ASZv/ADuR/wAxiP8AJnz/ABtx/wAQ
+ Zf8AB1f/AARN/wAAP/8AAkn/AAFC/wAALP8AABP/AAAC/wAAAf8AAAP/AQIZ/wAAKv8ABEL/ABtX/wAo
+ Y/8ALmf/AChh/wAeWv8AE1P/ABFV/wATWv8AFWH/ABpn/wAca/8AIXH/ADCA/wBNl/8BaKr/Bn65/xaR
+ xf8hmsz/HJvO/xyczv81rNj/R7je/1fB4/8tr9v/IaLQ/0G43f9BwOX/YdHu/4zo+f9x5fj/uvX9////
+ ////////9v///7vy/P+C4Pb/Vc3u/zK85f8Tqdz/BZTS/wGGxv8AdL7/AGW0/wBdrv8ATqL/AESY/wA+
+ j/8ANoj/AC5+/wAldP8AGmn/AAxd/wAEVP8AAVL/AABM/wAAQP8AADP/AAAi/wAADP8AAAb/AgIM/wEB
+ Cv8AAB3/AAQ9/wAMS/8AFlL/ABlT/wASTP8ADkb/AA9J/wAOTf8ABkf/AAA7/wAARP8ABlj/ABhs/wAp
+ e/8APov/AFCb/wBfp/8AcbL/BoO9/xaSx/8uodD/SrHa/2PA4v9Etd7/PK/X/1m93/9vyuf/Ycjo/4XZ
+ 8f9g1PH/feD2//b9/////////////+7+///B9P3/kOX5/2nW8v9Ox+v/Lrbk/xOm3P8Jntb/AI3N/wB6
+ v/8AbLX/AFWk/wBHmP8AOo7/ACyC/wAgdf8AFmr/AA5g/wAJVv8AA0j/AANK/wABRP8AADn/AAAx/wAA
+ K/8AACP/AAAZ/wICGf8BAB//AAA1/wAUU/8AHlv/AB9c/wAYVv8ABUX/AAE+/wABPv8AADb/AAAo/wAD
+ MP8ABUv/AApf/wAOZv8AEGj/ABxz/wAuhP8AQpL/AFSd/wBqq/8Lgrn/NJvJ/0+s1f8+p9P/QqfQ/3TC
+ 4P+Ayub/gc7p/3/M5/990u3/XMrr/7zs+P/9////+v////T////Y+f7/sO/8/4ji9/9m1PL/SMXr/yay
+ 4v8IoNf/ApXS/wCIy/8AfML/AG+5/wBeqP8AVJ7/AEuW/wBAif8ANHz/ACZv/wAbZf8AFlr/AAtH/wAH
+ O/8AAy//AAEn/wAAHv8AACD/AAAp/wAAMP8CAzX/Aixn/wAybP8AQHf/AEl//wBIgf8AN3P/ACFe/wAb
+ WP8AE1X/AAxP/wANUf8AEFz/AA5g/wAKX/8AC2H/ABxw/wAyhf8APo//AEqW/wBgov8OerL/LJDA/zCT
+ xv8pksP/UabP/3/B3/+Ozef/gszn/3TF4/+Z1uz/e87r/5TZ8P/p/P7/8v///+/////c+v7/wvP9/6Ho
+ +P932fP/Scbr/y+45f8Uq93/AJrU/wCJyv8AecD/AGu0/wBZpv8ATJj/AEWQ/wBAjP8AOIP/ADF5/wAs
+ cP8AKG3/ACRn/wAaYP8ADU//AAM//wABOP8AAjP/AAU7/wAIPf8AAi7/AQMe/wJYkP8AX5T/AGaX/wBr
+ nf8Ab6H/AGue/wBjlv8DZ5f/C2uc/wFPjP8ANnn/ACZv/wAfa/8AIW//ACNw/wAsdP8AO4D/AEaJ/wBa
+ mP8Jcaj/JYW3/zeWxP85k8L/Z6/P/4DB3/9qutz/OaHO/yyZyf+Ax+L/i9Tr/1jA5P9JvOT/WsHn/6fh
+ 8v+m4PT/xvP8/7rw/f+T4fX/Zs3u/ze35P8TpNn/AJXQ/wCMzP8Ahcb/AH3B/wBos/8AVaL/AEaT/wA3
+ hP8ALnn/ACVv/wAgZv8AHGD/ACNm/wAhZv8AF1z/AApJ/wAEPv8AAz3/AANC/wACQ/8AA0D/AAI+/wIE
+ Nv8CVov/AFuP/wBhlv8AYZj/AGGY/wBil/8FaJr/HHqp/xlonP8CSon/AEqI/wBSj/8AWJP/AFuV/wBa
+ k/8AVo7/AFqR/wBHgf8AMGv/AlOI/x56qf9Mm8L/dLPT/4TC3f9Op87/EHiy/wBZnv8AXaD/F4i//xuM
+ xf8QgsL/AHG7/wBgt/8Aa7z/AG/B/ziZ0v+b3PL/jN/2/1HB5/8jqtz/CprS/wCBxP8Ab7n/AGaw/wBm
+ r/8AXav/AFWi/wBKl/8AOIX/ACly/wAeZv8AFFv/AA1S/wAPU/8ADVL/AAVH/wACQP8AATz/AAI6/wAC
+ Of8AADT/AAAw/wAAMv8CAzP/AluP/wBjkv8AbJr/AGyd/wBnmv8BYJT/GmmW/y5/p/8ocpr/JWiS/x5g
+ jv8XXYv/EF2L/wdcjP8GXoz/CGqV/wBEcv8ADDf/AClc/xpsmP9DkLb/cK/O/3O31P8/nMf/BVub/wAv
+ eP8AR4z/Bmqp/wBNmf8ARJP/ADuR/wAtif8AN5b/AE+o/wBetP8AW7L/E2qz/1as1f9Vv+T/KKjY/wiT
+ zf8Aer7/AFyp/wBHlf8AQI7/ADyM/wA+i/8APIf/ADV//wArdP8AHmb/ABFY/wAITP8ABkf/AApK/wAL
+ Sv8ACEX/AAI//wABNv8AAC7/AAAr/wAAKf8AACv/AgMu/wJck/8AZ5j/AHGd/wByn/8Abp//AGea/w5h
+ lf8cZpX/JWqS/zZ6mv9Ii6P/V5mp/2Kjr/9hoq3/hbK3/2+arf8AABD/ABRA/wFBb/8wf6H/Wp29/1yl
+ xv8lgrL/AEOC/wAVXP8AIGb/AC52/wpgov8BLn7/ABZp/wAIYf8AGnb/ADGF/wBYp/8AZrL/AGCy/wBF
+ mf8AQ5D/Qp/L/ziw2v8OlMv/AHy7/wBhp/8ASpP/ADOA/wAjcv8AGmb/ABpj/wAeZv8AHmP/ABpc/wAT
+ Vv8AC07/AAhL/wALTv8ACEj/AAlF/wAGQ/8ABD3/AAAw/wAAKP8AACL/AAAi/wIDKf8CWJL/AGeb/wBv
+ nv8AdKP/AXGi/w5qnP8acKD/G26f/xZfkv8PToP/DEp+/wxNf/8XXoj/PICa/4a1v/87U2P/AAAJ/wAZ
+ Rf8HUHj/MXqf/y2Bp/8HWo3/ACNh/wABPP8AAz3/ABVW/wAsdv8AE1D/AAlB/wAAN/8AAEb/AAZg/wAa
+ cP8APY//Alun/wFVpv8AMYX/BDB6/0ijy/83rNj/Do7G/wB1tP8AZKf/AFGZ/wA9if8AJHP/ABJe/wAG
+ Uf8AAkX/AAZH/wALSf8ACkf/AAtL/wAPVf8AD1X/AAVJ/wAGR/8AB0X/AAI9/wAANv8AACv/AAAg/wAA
+ HP8CAx//AVeQ/whpm/8ui7T/M4+4/yB9qv8aapz/GWeY/xhqmf8XZpX/FVuN/xZakf8SVI3/CU2G/wpU
+ iv8LVIf/AAQN/wAAB/8AHEX/DFt//xRpkP8BQXX/ABFE/wAAGf8AABv/AAAO/wAJL/8ACUD/AAAV/wAA
+ Cv8AABb/AAAo/wAAPP8ABFH/ABJt/wAjfv8ANoz/AAth/wIITf9JnMP/RbLd/yKbzf8LicL/A3u4/wBt
+ r/8AX6j/AEiW/wA9if8AI3D/ABJY/wAJTP8AB0f/AAZH/wAFR/8ACk//AApS/wAFTf8ABEn/AAJE/wAC
+ Q/8AADz/AAAu/wAAIv8AABv/AgMd/wVTj/8cbJz/VqLG/ziNuP8ieKP/FWWU/xNhk/8VY5L/FF6M/xBQ
+ gP8QS37/E1OJ/xRTiP8QVIb/BEZ+/wAACf8AAA//AB9L/wFNd/8BSHX/ABxR/wABKf8AAAH/AAAA/wAA
+ AP8AAAr/AAAC/wAAAP8AAAD/AAAF/wAGMv8AATf/AABF/wABV/8AEmv/ABZw/wAAQv8ZMGX/UbLa/0Kt
+ 2P8wptP/HpzP/wuQyP8AgcD/AG6v/wBgp/8AWqH/AFOb/wBGjf8AMnz/ACl2/wATXP8ACVH/AAtT/wAQ
+ Wf8AGmD/ABhf/wARWP8ADFH/AABA/wAAOP8AADX/AAAv/wICL/8HUIr/FGCU/zqNtv8ziLb/Kn2m/xxy
+ nf8TYZD/FV6I/xVhjP8VXYz/EUx//w9Fef8IPnD/AjZg/wAWKv8AAAb/AAEa/wATQf8AGkn/ABM//wAm
+ U/8AF0f/AAAD/wAAAP8AAAP/AAAC/wAAAP8AAAD/AAAA/wAAB/8AAxb/AAEX/wAALf8AAED/AAJX/wAA
+ VP8IFFj/O5C8/z6o0/8zo8//HpbI/w2Oxf8Ci8T/AIC+/wBxr/8AaKr/AGut/wBprP8AYKf/AGCm/wBW
+ nv8AKnX/ABVe/wAUYP8AGWL/ACRp/wAqcv8AHGT/AAtQ/wAGS/8ADlP/AAxQ/wAITf8CC0//AkV+/whG
+ eP8aaZX/KoCs/yp8pP8oeqD/F2WO/xFSef8SVnz/F2CH/xdii/8OWYX/AS9R/wAFDf8AAAD/AAAA/wAA
+ Bv8AAA7/Aw8v/wI5Yv8AKVr/AAQr/wAAA/8AAAL/AAEG/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAX/AAgz/wMGVv8UMHj/KYKz/x+Nuv8Nfa//BXet/wBzq/8AdK3/AH64/wB0rf8AZKL/AGCi/wBu
+ rv8AcK//AGus/wBmp/8AX6D/AFab/wBIjv8ARY3/AC12/wAtcv8AIGb/ABJX/wAKSf8ABUP/AAxM/wAJ
+ S/8ACU3/AhNV/wJKif8AOW3/BUpz/xppk/8gc53/InKZ/xttkv8UWYD/EUx0/xFTd/8LV3v/Ai5F/wAB
+ A/8AAAD/AAAA/wAAAP8AAAD/BRIg/yttkf8CKVv/AAAg/wAACP8AAAD/AAcO/wAECv8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAK/wADMv8GM3X/LpfC/y2YxP8Sfq7/AHGk/wBsov8AbqX/AG6m/wBp
+ pP8AZZ//AGGf/wBamv8AVZP/AFSO/wBSjv8AU5T/AE6P/wBMjf8AV5j/AEiJ/wA5ff8AMnP/ACNk/wAY
+ WP8ADEn/AAQ7/wACNv8ABDL/AAQp/wIFJv8CWJn/ADp2/wA6af8QU3z/F2CL/xVdh/8WYIT/F2SI/xFa
+ g/8DOVn/AA0X/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAUJ/x5kff9HncD/GkRz/wAAAP8AAAD/AAAA/wIS
+ IP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8AAAD/AAAC/wAPNf8AIF//KoO0/zqjz/8njLz/DXir/wBr
+ nv8AZpv/AGmh/wBrpf8AaaP/AGOc/wBdmf8AW5X/AFeQ/wBVjv8AVo//AFiW/wBbm/8AW5r/AFWW/wBQ
+ jv8AR4L/ADV3/wAlaf8AFlb/AAtA/wAGMP8ABDD/AAIv/wAAKv8CAi3/Aj96/wAuZf8AJ1f/BDhi/w9M
+ df8RT3j/Dkty/w9UeP8ENU7/AAQI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wcNEf8OLDr/L3mZ/zuI
+ ov8eUG3/Bhov/wIJEP8CERv/AAML/wAAAP8AAAD/AAAA/wAAAP8AAAX/AQkP/wIcNf8VSHj/NI27/z2g
+ zP8okcL/FICx/wRuov8AZpn/AGSY/wBnnf8AaqP/AGym/wBnn/8AZJv/AGOa/wBimP8BXpb/AVyW/wBa
+ lv8AV5P/AFKM/wBOh/8ATIb/AEiD/wA/ff8ANHT/ACtn/wAhXP8AGFj/AAxS/wACSv8AADz/AgMx/wIi
+ WP8AHE//AB9O/wAmVv8BOmT/Bj1o/wQsV/8AFCX/AAAA/wAAAP8AAAD/AAMJ/wABCP8GAgH/BgoL/wAD
+ CP8KJS3/ByU3/xYzSf8waoH/LnOW/0aMrv9Nian/OWuI/yJPbv8TLUL/Chgm/wkZIv8hQVb/O3CO/0aL
+ r/8+irH/P5O9/zWTvv8ki7v/GYK2/whwo/8AXpL/AFWK/wBPhv8AU4r/AFiR/wFYk/8AUo7/AE6I/wBN
+ h/8ATYn/AE+M/wBUjf8AVpL/AFaS/wBWjP8AVov/AFeM/wBTif8ASIH/ADt0/wApZf8AGFX/AA1E/wAE
+ NP8AACf/AAAa/wEBEv8CHlX/ABpR/wAeU/8AH1L/AB9I/wAaPv8ABhT/AAAA/wAAAP8DCxP/ABkv/wBE
+ b/8AQHL/Ay5X/wMLGP8AAAD/AAAA/wALFf8TRWP/JWqM/y54mf82fJ3/OH2c/z2Bof8+g6b/PYWp/zuB
+ p/87g6f/RpC1/0GMs/8ygqn/J3un/xpyo/8QbaP/CW2k/wVnoP8BU4z/AER7/wBCd/8AQXn/AEaB/wBR
+ iv8AWI7/AFiP/wBVjf8AU4v/AFOL/wBOiP8ASoX/AEmG/wBCgP8AN3P/AC9q/wAmX/8AHlX/ABNH/wAK
+ Pv8ABC//AAEY/wAABP8AAAD/AAAA/wAAAP8AAAD/AhlY/wAVT/8AEUL/AAg2/wACFv8AAAP/AAAA/wAA
+ AP8AAQH/CDha/wA8cf8APWT/ADJN/wAXIf8AAAD/AAMJ/wAZLv8ANlr/Bkxv/wtFaf8HPmb/BkJp/wNB
+ Z/8ERmz/B091/wxagf8WZYr/G2qP/xhskf8WbJX/D2qW/wdpl/8DZZn/AGGW/wBgmf8AWpf/AEeB/wA5
+ b/8ANGr/AC9o/wAuav8AL27/ACxq/wAmZP8AIF3/ABlW/wATUP8ADUX/AAhE/wAFRf8AA0X/AAA7/wAA
+ Mv8AACX/AAAd/wAAGf8AABv/AAAR/wAAAf8AAAD/AAAA/wAAAP8AAAD/AAAB/wIZYf8ACEf/AAEx/wAB
+ Nv8AACb/AAAM/wAAAP8ACSj/AAs6/wAIGf8AECn/AAYJ/wAAAP8AAAL/AA4k/wAiRP8ALlP/AC1R/wAr
+ Tf8AHz//ACBA/wAjRf8AJkf/ACtK/wAvUv8BNFn/AjRb/wIxXP8BL1//ASxg/wAqY/8AJWL/AB5b/wAY
+ W/8AFmX/ABFk/wAHRf8AAi//AAEn/wAALP8AAC//AAAz/wAANP8AADH/AAAu/wAAJ/8AACP/AAAe/wAA
+ Hv8AACD/AAAe/wAAGP8AABb/AAAU/wAADP8AAAb/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ Af8CJ3X/AA5c/wAGTP8ADlb/AApS/wAAHv8AAAD/AAYQ/wAJJf8AAAD/AAAA/wAABf8ACSb/ABVD/wAe
+ SP8AIUb/ACNK/wAkTP8AHT//AAAG/wAAAv8AAAL/AAAC/wAAAf8AAAT/AAAK/wAADv8AABP/AAAb/wAA
+ If8AACf/AAAl/wAAJ/8AADH/AABG/wAASP8AACv/AAAX/wAAFv8AABz/AAAh/wAAJv8AACj/AAAl/wAA
+ If8AAB3/AAAa/wAAGv8AABr/AAAX/wAAD/8AAAf/AAAB/wAABP8AAAL/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAH/AiJy/wAZa/8AF2f/ABdo/wAGOP8AAAD/AAED/wADGP8AAAD/AAAH/wAI
+ Kv8AE0n/ABxT/wAeUP8AHk//ACBN/wAiTf8AI1H/ABYz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAv8AAAn/AAAN/wAADP8AABH/AAAf/wAANv8AADn/AAAg/wAAE/8AABf/AAAc/wAA
+ HP8AAB7/AAAf/wAAHv8AABz/AAAa/wAAHf8AAB7/AAAf/wAAIv8AAB7/AAAV/wAAC/8AAAb/AAAB/wAA
+ Af8AAAX/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAB/wIcbv8AFmn/ABFf/wATYv8DD0n/ChIe/wAB
+ AP8AEEH/AAtD/wAVUf8AGlz/ABpX/wAcUv8AH1T/AB9W/wAiV/8AI1X/ACFV/wALIP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAC/wAAEf8AACn/AAAu/wAA
+ Gf8AAA//AAAW/wAAIP8AAB//AAAa/wAAGv8AAB3/AAAb/wAAHf8AACr/AAAs/wAALP8AAC//AAAk/wAA
+ Hv8AABj/AAAN/wAAB/8AAAT/AAAE/wAAAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8CEWf/AAlf/wAI
+ WP8AC1j/AxVc/wgZXP8AACL/AAYl/wAVXv8AG13/ABdY/wAVVP8AF1H/ABtT/wAdVP8AHlT/ABxQ/wAX
+ Sf8AAgv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAv/AAAf/wAAI/8AAA//AAAG/wAAD/8AABn/AAAh/wAAGf8AABH/AAAQ/wAAEf8AAB7/AAAt/wAA
+ Lv8AADH/AAAn/wAAG/8AABT/AAAQ/wAAC/8AAAz/AAAJ/wAAB/8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAH/AgRc/wAAU/8AAFD/AABN/wACTf8AAEX/AABC/wADQv8ADlL/ABFS/wAPUP8ADlD/ABFM/wAW
+ Tv8AF0z/ABZK/wAVSf8ACzH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAF/wAAGP8AABn/AAAD/wAAAP8AAAX/AAAN/wAAGP8AAA3/AAAD/wAA
+ AP8AAAr/AAAb/wAAFP8AABf/AAAk/wAAGP8AAAz/AAAJ/wAAB/8AAAb/AAAL/wAACP8AAAb/AAAD/wAA
+ Af8AAAD/AAAA/wAAAP8AAAD/AAAB/wAAQ/8AADv/AAAy/wAALv8AACr/AAAl/wAAKv8AADj/AABA/wAA
+ QP8AAEH/AABA/wAEQP8ABD//AAM7/wACOv8AAjX/AAAM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAb/AAAG/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAv8AAAD/AAAA/wAACf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ Af8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8fIUnlHR9D5R0fPOUdHznlHR855R0f
+ PuUdH0blHR9M5R0fVOUdH1XlHR9S5R0fUuUeIVXlHiJU5R4gTuUeH0zlHR495RoaHOUaGhvlGhob5Roa
+ G+UaGhvlGhob5RoaG+UaGhvlGhob5RoaG+UaGhvlGhsc5RobHOUaGxzlGhsc5RobHOUaGxzlGhse5Rob
+ IeUaGxzlGhsb5RobHOUaGxvlGhsb5RobG+UaGxzlGhsc5RobG+UaGxvlGhob5R0hJuUbHB7lGhsb5Rob
+ HOUaGxzlGhsc5RobHOUaGx3lGhsc5RobHeUaGxzlGhsc5RobHOUaGxzlGhob5RoaG+UaGhvl9fb3DPX2
+ 9wz19vcM9fb3DPX29wz19vgM9fb4DPX2+Az19vgM9fb4DPX2+Az19vgM9fb4DPX2+Az19vcM9fb3DPX1
+ 9Qzz8/MM8/PzDPPz8wzz8/MM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz
+ 9Azz8/QM8/P0DPP09Azz9PQM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/T0DPPz
+ 9Az19/gM8/T1DPPz9Azz8/QM8/P0DPPz9Azz9PQM8/T0DPPz9Azz8/QM8/P0DPPz9Azz8/QM8/P0DPPz
+ 9Azz8/QM8/PzDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP//////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////8=
+
+
+
\ No newline at end of file
diff --git a/actions/ActionCls.cs b/actions/ActionCls.cs
index f98f447..2e17284 100644
--- a/actions/ActionCls.cs
+++ b/actions/ActionCls.cs
@@ -4,6 +4,12 @@ using System.Text;
using System.Xml;
using System.IO;
+using SCJMapper_V2.SC;
+using SCJMapper_V2.Keyboard;
+using SCJMapper_V2.Mouse;
+using SCJMapper_V2.Gamepad;
+using SCJMapper_V2.Joystick;
+
namespace SCJMapper_V2
{
///
@@ -335,7 +341,6 @@ namespace SCJMapper_V2
/// Updates an actionCommand with a new input (command)
///
/// The input command
- /// The actionCommand to update
public void UpdateCommandFromInput( String devInput, int accIndex ) // ActionCommandCls actionCmd )
{
//log.Debug( "UpdateCommandFromInput - Entry" );
diff --git a/actions/ActionCommandCls.cs b/actions/ActionCommandCls.cs
index 5019268..f4f6476 100644
--- a/actions/ActionCommandCls.cs
+++ b/actions/ActionCommandCls.cs
@@ -3,6 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
+using SCJMapper_V2.SC;
+using SCJMapper_V2.Joystick;
+
namespace SCJMapper_V2
{
///
@@ -153,6 +156,22 @@ namespace SCJMapper_V2
return newAc;
}
+
+ ///
+ /// Updates an actionCommand with a new input (command)
+ ///
+ /// The input command
+ public void UpdateCommandFromInput( String devInput, ActionCls.ActionDevice actionDevice) // ActionCommandCls actionCmd )
+ {
+ // Apply the input to the ActionTree
+ this.DevInput = ActionCls.BlendInput( devInput, actionDevice );
+ if ( ActionCls.IsBlendedInput( this.DevInput ) || string.IsNullOrEmpty( devInput ) ) {
+ this.ActivationMode = new ActivationMode( ActivationMode.Default ); // reset activation mode if the input is empty
+ }
+ }
+
+
+
///
/// Strange behavior of SC - needs a proper multitap to accept ActivationModes
///
diff --git a/actions/ActionMapCls.cs b/actions/ActionMapCls.cs
index 264cd43..033f30f 100644
--- a/actions/ActionMapCls.cs
+++ b/actions/ActionMapCls.cs
@@ -4,6 +4,8 @@ using System.Text;
using System.Xml;
using System.IO;
+using SCJMapper_V2.Joystick;
+
namespace SCJMapper_V2
{
///
diff --git a/actions/ActionMapsCls.cs b/actions/ActionMapsCls.cs
index cb7981e..dd02ca8 100644
--- a/actions/ActionMapsCls.cs
+++ b/actions/ActionMapsCls.cs
@@ -1,9 +1,23 @@
-using System;
+
+
+#define USE_DS_ACTIONMAPS
+
+
+using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Windows.Forms;
using System.IO;
+using System.Data;
+
+using SCJMapper_V2.SC;
+using SCJMapper_V2.Table;
+using SCJMapper_V2.Keyboard;
+using SCJMapper_V2.Mouse;
+using SCJMapper_V2.Gamepad;
+using SCJMapper_V2.Joystick;
+
namespace SCJMapper_V2
{
@@ -71,7 +85,7 @@ namespace SCJMapper_V2
///
/// Clears a read but not longer known entry
///
- public void Clear_jsEntry(int index)
+ public void Clear_jsEntry( int index )
{
m_js[index] = "";
m_GUIDs[index] = "";
@@ -136,7 +150,7 @@ namespace SCJMapper_V2
///
public List InvertCheckList
{
- set {
+ set {
m_invertCB = value;
m_options.InvertCheckList = m_invertCB;
}
@@ -161,7 +175,7 @@ namespace SCJMapper_V2
// create the Joystick assignments
Array.Resize( ref m_js, JoystickCls.JSnum_MAX + 1 );
Array.Resize( ref m_GUIDs, JoystickCls.JSnum_MAX + 1 );
- for ( int i=0; i < JoystickCls.JSnum_MAX; i++ ) {
+ for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
m_js[i] = ""; m_GUIDs[i] = "";
}
@@ -195,7 +209,7 @@ namespace SCJMapper_V2
newMaps.m_options = this.m_options;
newMaps.m_modifiers = this.m_modifiers;
- for ( int i=0; i < JoystickCls.JSnum_MAX; i++ ) {
+ for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
newMaps.jsN[i] = this.jsN[i]; newMaps.jsNGUID[i] = this.jsNGUID[i];
}
@@ -223,13 +237,81 @@ namespace SCJMapper_V2
} );
if ( ACM == null ) {
; // this.Add( newAcm ); // no, add new
- }
- else {
+ } else {
ACM.Merge( newAcm ); // yes, merge it
}
}
+#if USE_DS_ACTIONMAPS // see and (un)define on top of file to allow for editing the DataSet entities
+
+ public void toDataSet( DS_ActionMaps dsa )
+ {
+ dsa.Clear( );
+ if ( dsa.HasChanges( ) ) dsa.T_ActionMap.AcceptChanges( );
+
+ int AMcount = 1;
+ foreach ( ActionMapCls am in this ) {
+ DS_ActionMaps.T_ActionMapRow amr = dsa.T_ActionMap.NewT_ActionMapRow();
+ string amShown = DS_ActionMap.ActionMapShown(am.name, AMcount++);
+
+ amr.ID_ActionMap = amShown;
+ dsa.T_ActionMap.AddT_ActionMapRow( amr );
+
+ foreach ( ActionCls ac in am ) {
+ int ilIndex = 0;
+ while ( ac.inputList.Count > ilIndex ) {
+ DS_ActionMaps.T_ActionRow ar = dsa.T_Action.NewT_ActionRow();
+ ar.ID_Action = DS_ActionMap.ActionID( am.name, ac.key, ac.inputList[ilIndex].NodeIndex ); // make a unique key
+ ar.AddBind = ( ilIndex > 0 ); // all but the first are addbinds
+ ar.REF_ActionMap = amShown;
+ ar.ActionName = ac.name;
+ ar.Device = ac.device;
+ ar.Def_Binding = ac.defBinding;
+ ar.Def_Modifier = ac.defActivationMode.Name;
+ ar.Usr_Binding = ac.inputList[ilIndex].DevInput;
+ ar.Usr_Modifier = ac.inputList[ilIndex].ActivationMode.Name;
+ ar.Blended = DeviceCls.IsBlendedInput( ac.inputList[ilIndex].Input );
+ dsa.T_Action.AddT_ActionRow( ar );
+
+ ilIndex++;
+ }
+
+ }// each Action
+ }// each ActionMap
+
+ // finally
+ if ( dsa.HasChanges( ) )
+ dsa.AcceptChanges( );
+ }
+
+ public void updateDataSet( DS_ActionMaps dsa, string actionID )
+ {
+ foreach ( ActionMapCls am in this ) {
+ DS_ActionMaps.T_ActionMapRow amr = dsa.T_ActionMap.NewT_ActionMapRow();
+
+ foreach ( ActionCls ac in am ) {
+ int ilIndex = 0;
+ while ( ac.inputList.Count > ilIndex ) {
+ if ( actionID == DS_ActionMap.ActionID( am.name, ac.key, ac.inputList[ilIndex].NodeIndex ) ) {
+ DS_ActionMaps.T_ActionRow ar =dsa.T_Action.FindByID_Action(actionID);
+ ar.Usr_Binding = ac.inputList[ilIndex].DevInput;
+ ar.Usr_Modifier = ac.inputList[ilIndex].ActivationMode.Name;
+ ar.Blended = DeviceCls.IsBlendedInput( ac.inputList[ilIndex].Input );
+ ar.AcceptChanges( );
+ return;
+ }
+ ilIndex++;
+ }
+ }// each Action
+ }// each ActionMap
+
+ }
+
+#endif
+
+
+
///
/// Dump the ActionMaps as partial XML nicely formatted
///
@@ -248,7 +330,7 @@ namespace SCJMapper_V2
r += String.Format( " profileName=\"{0}\" \n", fileName.Replace( SCMappings.c_MapStartsWith, "" ) ); //AC2 add profilename
// now the devices (our addition)
- for ( int i=0; i < JoystickCls.JSnum_MAX; i++ ) {
+ for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
if ( !String.IsNullOrEmpty( jsN[i] ) ) r += String.Format( "\tjs{0}=\"{1}\" ", i + 1, jsN[i] );
if ( !String.IsNullOrEmpty( jsNGUID[i] ) ) r += String.Format( "js{0}G=\"{1}\" \n", i + 1, jsNGUID[i] );
}
@@ -265,12 +347,12 @@ namespace SCJMapper_V2
dr.devType = KeyboardCls.DeviceClass; dr.instNo = 1; m_uiCustHeader.AddInstances( dr );
dr.devType = MouseCls.DeviceClass; dr.instNo = 1; m_uiCustHeader.AddInstances( dr );
// do we use Gamepad ??
- if ( GamepadCls.RegisteredDevices>0 ) {
+ if ( GamepadCls.RegisteredDevices > 0 ) {
dr.devType = GamepadCls.DeviceClass; dr.instNo = 1; m_uiCustHeader.AddInstances( dr );
}
// all Joysticks
- for ( int i=0; i < JoystickCls.JSnum_MAX; i++ ) {
+ for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
if ( !String.IsNullOrEmpty( jsN[i] ) ) {
dr.devType = JoystickCls.DeviceClass; dr.instNo = i + 1; m_uiCustHeader.AddInstances( dr );
}
@@ -325,12 +407,11 @@ namespace SCJMapper_V2
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++ ) {
+ 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 )];
}
- }
- else {
+ } else {
return false;
}
}
@@ -341,30 +422,25 @@ namespace SCJMapper_V2
while ( !reader.EOF ) { //!String.IsNullOrEmpty( x ) ) {
- if ( reader.Name.ToLowerInvariant() == "actionmap" ) {
+ if ( reader.Name.ToLowerInvariant( ) == "actionmap" ) {
String x = reader.ReadOuterXml( );
ActionMapCls acm = new ActionMapCls( );
if ( acm.fromXML( x ) ) {
this.Merge( acm ); // merge list
}
- }
- else if ( reader.Name.ToLowerInvariant( ) == "customisationuiheader" ) {
+ } else if ( reader.Name.ToLowerInvariant( ) == "customisationuiheader" ) {
String x = reader.ReadOuterXml( );
m_uiCustHeader.fromXML( x );
- }
- else if ( reader.Name.ToLowerInvariant( ) == "deviceoptions" ) {
+ } else if ( reader.Name.ToLowerInvariant( ) == "deviceoptions" ) {
String x = reader.ReadOuterXml( );
m_deviceOptions.fromXML( x );
- }
- else if ( reader.Name.ToLowerInvariant( ) == "options" ) {
+ } else if ( reader.Name.ToLowerInvariant( ) == "options" ) {
String x = reader.ReadOuterXml( );
m_options.fromXML( x );
- }
- else if ( reader.Name.ToLowerInvariant( ) == "modifiers" ) {
+ } else if ( reader.Name.ToLowerInvariant( ) == "modifiers" ) {
String x = reader.ReadOuterXml( );
m_modifiers.fromXML( x );
- }
- else {
+ } else {
reader.Read( );
}
diff --git a/actions/ActionTree.cs b/actions/ActionTree.cs
index 12d4efd..58fbaf6 100644
--- a/actions/ActionTree.cs
+++ b/actions/ActionTree.cs
@@ -4,7 +4,15 @@ using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
+
using SCJMapper_V2.Properties;
+using SCJMapper_V2.SC;
+using SCJMapper_V2.Table;
+using SCJMapper_V2.Keyboard;
+using SCJMapper_V2.Mouse;
+using SCJMapper_V2.Gamepad;
+using SCJMapper_V2.Joystick;
+
namespace SCJMapper_V2
{
@@ -30,8 +38,7 @@ namespace SCJMapper_V2
public TreeView Ctrl
{
get { return m_ctrl; }
- set
- {
+ set {
m_ctrl = value;
// copy props needed
m_MasterTree.Font = m_ctrl.Font; // assign font to master tree as well
@@ -102,8 +109,7 @@ namespace SCJMapper_V2
public Boolean CanAssignBinding
{
- get
- {
+ get {
if ( Ctrl.SelectedNode == null ) return false;
else return ( Ctrl.SelectedNode.Level == 1 ) || ( Ctrl.SelectedNode.Level == 2 );
}
@@ -111,8 +117,7 @@ namespace SCJMapper_V2
public Boolean CanBlendBinding
{
- get
- {
+ get {
if ( Ctrl.SelectedNode == null ) return false;
else return ( Ctrl.SelectedNode.Level == 1 );
}
@@ -120,8 +125,7 @@ namespace SCJMapper_V2
public Boolean CanClearBinding
{
- get
- {
+ get {
if ( Ctrl.SelectedNode == null ) return false;
else return ( Ctrl.SelectedNode.Level == 1 ) && IsMappedAction;
}
@@ -130,8 +134,7 @@ namespace SCJMapper_V2
public Boolean CanAddBinding
{
- get
- {
+ get {
if ( Ctrl.SelectedNode == null ) return false;
else return ( Ctrl.SelectedNode.Level == 1 ) && IsMappedAction;
}
@@ -139,8 +142,7 @@ namespace SCJMapper_V2
public Boolean CanDelBinding
{
- get
- {
+ get {
if ( Ctrl.SelectedNode == null ) return false;
else return ( Ctrl.SelectedNode.Level == 2 );
}
@@ -148,8 +150,7 @@ namespace SCJMapper_V2
public Boolean IsMappedAction
{
- get
- {
+ get {
if ( ( Ctrl.SelectedNode.Level == 0 ) || ( Ctrl.SelectedNode.Level > 2 ) ) return false; // not on node
if ( Ctrl.SelectedNode == null ) return false; // no node selected
if ( Ctrl.SelectedNode.Parent == null ) return false; // ERROR EXIT
@@ -233,8 +234,7 @@ namespace SCJMapper_V2
///
public List InvertCheckList
{
- set
- {
+ set {
if ( ActionMaps != null ) ActionMaps.InvertCheckList = value; // just propagate if possible
else {
log.Error( "ActionTree-InvertCheckList: Program error - ActionMaps not yet created" );
@@ -260,8 +260,7 @@ namespace SCJMapper_V2
// could be a gamepad then
if ( ActionTreeNode.CommandFromNodeText( nodeText ).Contains( "xi_" ) ) {
return m_gamepad;
- }
- else return null; // nope...
+ } else return null; // nope...
}
}
return null;
@@ -289,8 +288,7 @@ namespace SCJMapper_V2
// must update the devices and instances for inversion before dumping the XML
UpdateDeviceInformation( );
return ActionMaps.toXML( fileName ); // just propagate if possible
- }
- else {
+ } else {
log.Error( "ActionTree-toXML: Program error - ActionMaps not yet created" );
return "";
}
@@ -369,8 +367,7 @@ namespace SCJMapper_V2
foreach ( ActionTreeNode stn in tn.Nodes ) {
if ( ( stn.Tag != null ) && ( ( Boolean )stn.Tag == true ) ) {
; // don't create it i.e hide it - though you cannot hide TreeViewNodes at all...
- }
- else {
+ } else {
ActionTreeNode tnAction = new ActionTreeNode( stn ); tnMap.Nodes.Add( tnAction ); // copy level 1 nodes
foreach ( ActionTreeInputNode istn in stn.Nodes ) {
ActionTreeInputNode tnActionInput = new ActionTreeInputNode( istn ); tnAction.Nodes.Add( tnActionInput ); // copy level 2 nodes
@@ -484,8 +481,7 @@ namespace SCJMapper_V2
cn.ImageKey = devID; cn.BackColor = Color.White; // some stuff does not work properly...
if ( ActivationMode.IsDefault( defActivationModeName ) ) {
cn.NodeFont = FontAction;
- }
- else {
+ } else {
cn.NodeFont = FontActionActivated;
}
Array.Resize( ref cnl, cnl.Length + 1 ); cnl[cnl.Length - 1] = cn;
@@ -508,8 +504,7 @@ namespace SCJMapper_V2
cn.Command = ac.defBinding; cn.BackColor = JoystickCls.JsNColor( jNum );
}
}
- }
- else if ( ac.actionDevice == ActionCls.ActionDevice.AD_Gamepad ) {
+ } else if ( ac.actionDevice == ActionCls.ActionDevice.AD_Gamepad ) {
acc.DevID = GamepadCls.DeviceID;
if ( applyDefaults ) {
if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
@@ -517,8 +512,7 @@ namespace SCJMapper_V2
cn.Command = ac.defBinding; cn.BackColor = GamepadCls.XiColor( );
}
}
- }
- else if ( ac.actionDevice == ActionCls.ActionDevice.AD_Keyboard ) {
+ } else if ( ac.actionDevice == ActionCls.ActionDevice.AD_Keyboard ) {
acc.DevID = KeyboardCls.DeviceID;
if ( applyDefaults ) {
if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
@@ -526,8 +520,7 @@ namespace SCJMapper_V2
cn.Command = ac.defBinding; cn.BackColor = KeyboardCls.KbdColor( );
}
}
- }
- else if ( ac.actionDevice == ActionCls.ActionDevice.AD_Mouse ) { // 20151220BM: add mouse device (from AC 2.0 defaultProfile usage)
+ } else if ( ac.actionDevice == ActionCls.ActionDevice.AD_Mouse ) { // 20151220BM: add mouse device (from AC 2.0 defaultProfile usage)
acc.DevID = MouseCls.DeviceID;
if ( applyDefaults ) {
if ( !String.IsNullOrEmpty( ac.defBinding ) ) {
@@ -539,7 +532,7 @@ namespace SCJMapper_V2
}
}//for
- tn = new ActionTreeNode( acm.name, cnl ); tn.Name = acm.name; tn.Action = acm.name; // name it to find it..
+ tn = new ActionTreeNode( acm.name, cnl ); tn.Name = acm.name; tn.Action = acm.name; // name it to find it..
tn.ImageIndex = 0; tn.NodeFont = FontActionmap; // new Font( m_MasterTree.Font, FontStyle.Bold );
m_MasterTree.BackColor = Color.White; // fix for defect TreeView (cut off bold text)
m_MasterTree.Nodes.Add( tn ); // add to control
@@ -587,8 +580,7 @@ namespace SCJMapper_V2
ActionCommandCls acc = ac.FindActionInputObject( ActionTreeNode.CommandFromNodeText( atn.Text ) ); if ( acc == null ) return am; // ERROR exit
am = new ActivationModes( ac.defActivationMode, acc.ActivationMode ); // policy: get the default first, then the attached one
return am;
- }
- else if ( Ctrl.SelectedNode.Level == 2 ) {
+ } else if ( Ctrl.SelectedNode.Level == 2 ) {
// this is a child of an action with further commands
ActionTreeNode patn = ( Ctrl.SelectedNode.Parent as ActionTreeNode ); // the parent treenode
ActionTreeNode atn = ( Ctrl.SelectedNode as ActionTreeNode ); // the treenode from a level 1
@@ -621,14 +613,12 @@ namespace SCJMapper_V2
// new am is either a named one or the Default from Profile (which is the default from the Action due to multiTaps..)
if ( ActivationMode.IsDefault( newActivationModeName ) ) {
acc.ActivationMode = new ActivationMode( ActivationMode.Default );
- }
- else {
+ } else {
acc.ActivationMode = ActivationModes.Instance.ActivationModeByName( newActivationModeName );
}
atn.UpdateAction( acc ); UpdateMasterNode( atn );
Dirty = true;
- }
- else if ( Ctrl.SelectedNode.Level == 2 ) {
+ } else if ( Ctrl.SelectedNode.Level == 2 ) {
// this is a child of an action with further commands
ActionTreeNode patn = ( Ctrl.SelectedNode.Parent as ActionTreeNode ); // the parent treenode from a level 2
ActionTreeNode atn = ( Ctrl.SelectedNode as ActionTreeNode ); // the treenode from a level 2
@@ -639,8 +629,7 @@ namespace SCJMapper_V2
// new am is either a named one or the Default from Profile (which is the default from the Action due to multiTaps..)
if ( ActivationMode.IsDefault( newActivationModeName ) ) {
acc.ActivationMode = new ActivationMode( ActivationMode.Default );
- }
- else {
+ } else {
acc.ActivationMode = ActivationModes.Instance.ActivationModeByName( newActivationModeName );
}
atn.UpdateAction( acc ); UpdateMasterNode( atn );
@@ -674,11 +663,14 @@ namespace SCJMapper_V2
ac.UpdateCommandFromInput( ActionCls.DevInput( input, inKind ), acc.NodeIndex + 1 );
atn.UpdateAction( acc ); UpdateMasterNode( atn );
Dirty = true;
- }
- else if ( Ctrl.SelectedNode.Level == 2 ) {
+ } else if ( Ctrl.SelectedNode.Level == 2 ) {
// this is a child of an action with further commands
ActionTreeNode patn = ( Ctrl.SelectedNode.Parent as ActionTreeNode ); // the parent treenode from a level 2
ActionTreeNode atn = ( Ctrl.SelectedNode as ActionTreeNode ); // the treenode from a level 2
+ if ( string.IsNullOrEmpty( input ) )
+ atn.Action = "UNDEF"; // apply UNDEF
+ else
+ atn.Action = ""; // remove UNDEF
ActionCls ac = FindActionObject( patn.Parent.Name, patn.Name ); // the related action in an actionmap
if ( ac == null ) return false; // ERROR exit
if ( checkKind && ( ac.actionDevice != inKind ) ) return false; // ERROR exit
@@ -696,16 +688,16 @@ namespace SCJMapper_V2
/// Find an action with name in a actionmap
///
/// The actionmap name
- /// The action
+ /// The action
/// The input
/// An actionCommand or null if not found
- private ActionCommandCls FindActionInputObject( String actionMap, String action, String devInput )
+ private ActionCommandCls FindActionInputObject( String actionMap, String actionKey, String devInput )
{
- log.Debug( "FindActionInputObject - Entry" );
+ //log.Debug( "FindActionInputObject - Entry" );
// Apply the input to the ActionTree
ActionCls ac = null; ActionCommandCls acc = null;
ActionMapCls ACM = ActionMaps.Find( delegate( ActionMapCls _ACM ) { return _ACM.name == actionMap; } );
- if ( ACM != null ) ac = ACM.Find( delegate ( ActionCls _AC ) { return _AC.key == action; } );
+ if ( ACM != null ) ac = ACM.Find( delegate ( ActionCls _AC ) { return _AC.key == actionKey; } );
if ( ac != null ) acc = ac.inputList.Find( delegate ( ActionCommandCls _ACC ) { return _ACC.DevInput == devInput; } );
if ( acc == null ) {
log.Error( "FindActionInputObject - Action Input not found in tree" );
@@ -718,16 +710,16 @@ namespace SCJMapper_V2
/// Find an action with name in a actionmap
///
/// The actionmap name
- /// The action
+ /// The action
/// The input
/// An actionCommand or null if not found
- private ActionCommandCls FindActionInputObject( String actionMap, String action, int index )
+ private ActionCommandCls FindActionInputObject( ActionTree tree, String actionMap, String actionKey, int index )
{
- log.Debug( "FindActionInputObject - Entry" );
+ //log.Debug( "FindActionInputObject - Entry" );
// Apply the input to the ActionTree
ActionCls ac = null; ActionCommandCls acc = null;
- ActionMapCls ACM = ActionMaps.Find( delegate( ActionMapCls _ACM ) { return _ACM.name == actionMap; } );
- if ( ACM != null ) ac = ACM.Find( delegate ( ActionCls _AC ) { return _AC.key == action; } );
+ ActionMapCls ACM = tree.ActionMaps.Find( delegate( ActionMapCls _ACM ) { return _ACM.name == actionMap; } );
+ if ( ACM != null ) ac = ACM.Find( delegate ( ActionCls _AC ) { return _AC.key == actionKey; } );
if ( ac != null ) acc = ac.inputList.Find( delegate ( ActionCommandCls _ACC ) { return _ACC.NodeIndex == index; } );
if ( acc == null ) {
log.Error( "FindActionInputObject - Action Input not found in tree" );
@@ -747,7 +739,7 @@ namespace SCJMapper_V2
/// An action or null if not found
private ActionCls FindActionObject( String actionMap, String action )
{
- log.Debug( "FindActionObject - Entry" );
+ //log.Debug( "FindActionObject - Entry" );
// Apply the input to the ActionTree
ActionCls ac = null;
ActionMapCls ACM = ActionMaps.Find( delegate( ActionMapCls acm ) { return acm.name == actionMap; } );
@@ -802,23 +794,20 @@ namespace SCJMapper_V2
matn.UpdateAction( acc ); UpdateMasterNode( matn );
matn.Nodes.Clear( ); // clear add childs - those don't persist from newly loaded actionmaps
first = false;
- }
- else {
+ } else {
// have to recreate the action child nodes
ActionTreeInputNode matin = new ActionTreeInputNode( "UNDEF" ); matin.ImageKey = "Add";
acc.NodeIndex = matin.Index; // assign visual reference
matn.Nodes.Add( matin ); // add to master tree
matin.UpdateAction( acc ); UpdateMasterNode( matin );
}
- }
- catch {
+ } catch {
; // key not found
}
Dirty = true;
} // foreach
}
- }
- catch {
+ } catch {
; // map key not found ??
}
}
@@ -828,6 +817,42 @@ namespace SCJMapper_V2
}
+ ///
+ /// Find a control that contains the string and mark it
+ /// this method is applied to the GUI TreeView only
+ ///
+ /// The string to find
+ public void FindAndSelectActionKey( String actionmap, String actionKey, int nodeIndex )
+ {
+ log.Debug( "FindAndSelectActionKey - Entry" );
+
+ foreach ( ActionTreeNode tn in Ctrl.Nodes ) {
+ if ( String.IsNullOrEmpty( actionmap ) || ( tn.Text == actionmap ) ) {
+ // have to search nodes of nodes
+ foreach ( ActionTreeNode stn in tn.Nodes ) {
+ if ( stn.Name == actionKey ) {
+ if ( nodeIndex < 0 ) {
+ Ctrl.SelectedNode = stn;
+ Ctrl.SelectedNode.EnsureVisible( );
+ } else {
+ // have to search nodes of nodes
+ int ni = 0;
+ foreach ( ActionTreeInputNode sstn in stn.Nodes ) {
+ if ( ni++ == nodeIndex ) {
+ Ctrl.SelectedNode = sstn;
+ Ctrl.SelectedNode.EnsureVisible( );
+ return; // exit all loops
+ }
+ }
+ }
+ return; // exit all loops
+ }
+ }
+ }
+ }
+ }
+
+
///
/// Find a control that contains the string and mark it
/// this method is applied to the GUI TreeView only
@@ -888,6 +913,28 @@ namespace SCJMapper_V2
}
+ ///
+ /// Find a control that contains the Action (exact match)
+ ///
+ /// The actionmap to find the string
+ /// The string to find
+ public String FindActionKey( String actionmap, String actionKey )
+ {
+ log.Debug( "FindActionKey - Entry" );
+
+ foreach ( ActionTreeNode tn in Ctrl.Nodes ) {
+ if ( String.IsNullOrEmpty( actionmap ) || ( tn.Text == actionmap ) ) {
+ // have to search nodes of nodes
+ foreach ( ActionTreeNode stn in tn.Nodes ) {
+ if ( stn.Name == actionKey ) {
+ return stn.Text;
+ }
+ }
+ }
+ }
+ return "";
+ }
+
///
/// Find a control that contains the Action (exact match)
///
@@ -991,22 +1038,100 @@ namespace SCJMapper_V2
///
public String SelectedAction
{
- get
- {
+ get {
if ( Ctrl.SelectedNode == null ) return "";
if ( Ctrl.SelectedNode.Level == 1 ) {
ActionTreeNode matn = FindMasterAction( ( ActionTreeNode )Ctrl.SelectedNode );
return ActionTreeNode.ActionFromNodeText( matn.Text );
- }
- else if ( Ctrl.SelectedNode.Level == 2 ) {
+ } else if ( Ctrl.SelectedNode.Level == 2 ) {
ActionTreeNode matn = FindMasterAction( ( ActionTreeNode )Ctrl.SelectedNode.Parent ); // the parent treenode
return ActionTreeNode.ActionFromNodeText( matn.Text );
+ } else return "";
+ }
+ }
+
+ ///
+ /// Returns the ActionID (DS_ActionMap) of the selected item
+ ///
+ public String SelectedActionID
+ {
+ get {
+ if ( Ctrl.SelectedNode == null ) return "";
+ if ( ( Ctrl.SelectedNode.Level == 0 ) || ( Ctrl.SelectedNode.Level > 2 ) ) return ""; // ERROR exit
+ if ( Ctrl.SelectedNode.Parent == null ) return ""; // ERROR exit
+
+ // has a parent - must be level 1 or 2
+ if ( Ctrl.SelectedNode.Level == 1 ) {
+ // this is the main node with Action Cmd
+ ActionTreeNode atn = ( Ctrl.SelectedNode as ActionTreeNode ); // the treenode from a level 1
+ ActionCls ac = FindActionObject( atn.Parent.Name, atn.Name ); // the related action in an actionmap
+ if ( ac == null ) return ""; // ERROR exit
+ ActionCommandCls acc = ac.FindActionInputObject( ActionTreeNode.CommandFromNodeText( atn.Text ) );
+ if ( acc == null ) return ""; // ERROR exit
+ // have it - continue
+ string actionID = DS_ActionMap.ActionID(atn.Parent.Name,ac.key, acc.NodeIndex );
+ return actionID;
+
+ } else if ( Ctrl.SelectedNode.Level == 2 ) {
+ // this is a child of an action with further commands
+ ActionTreeNode patn = ( Ctrl.SelectedNode.Parent as ActionTreeNode ); // the parent treenode from a level 2
+ ActionTreeNode atn = ( Ctrl.SelectedNode as ActionTreeNode ); // the treenode from a level 2
+ ActionCls ac = FindActionObject( patn.Parent.Name, patn.Name ); // the related action in an actionmap
+ if ( ac == null ) return ""; // ERROR exit
+ ActionCommandCls acc = ac.FindActionInputObject( atn.Index );
+ if ( acc == null ) return ""; // ERROR exit
+ // have it - continue
+ string actionID = DS_ActionMap.ActionID(atn.Parent.Name,ac.key, acc.NodeIndex );
+ return actionID;
+
+ } else return "";
+ }
+ }
+
+
+ ///
+ /// Update from all edits in the dataset DS_ActionMaps
+ /// /// The dataset to update from
+ /// returns a null if no changes have been found
+ public ActionTree UpdateFromDataSet( DS_ActionMaps dsa )
+ {
+ ActionTree nTree = new ActionTree( this.m_jsList, this.m_gamepad ); // just a copy
+ // full copy from 'this'
+ nTree.m_MasterTree = this.m_MasterTree;
+ nTree.m_ctrl = this.m_ctrl;
+ nTree.IgnoreMaps = this.IgnoreMaps;
+ nTree.m_Filter = this.m_Filter;
+ nTree.ActionMaps = this.ActionMaps.ReassignJsN( new JsReassingList( ) ); // re-use this method with no reassign for full copy of the tree
+
+ int countChanges = 0;
+ foreach ( DS_ActionMaps.T_ActionRow ar in dsa.T_Action ) {
+ if ( ar.RowState== System.Data.DataRowState.Modified ) {
+ countChanges++;
+ ActionCommandCls acc = FindActionInputObject(nTree, DS_ActionMap.ActionMap(ar), DS_ActionMap.ActionKey(ar), DS_ActionMap.ActionCommandIndex(ar));
+ if ( acc != null ) {
+ acc.UpdateCommandFromInput( ActionCls.DevInput( DS_ActionMap.DevInput( ar ), ActionCls.ADevice( ar.Device ) ), ActionCls.ADevice( ar.Device ) );
+ ar.Usr_Binding = acc.DevInput; // feedback the right one
+ } else {
+ ; // DEBUG should not happen...
+ }
}
- else return "";
}
+
+ // finally if there were any changes
+ if ( countChanges > 0 ) {
+ dsa.AcceptChanges( );
+
+ nTree.Dirty = true;
+ return nTree;
+ }
+ else {
+ return null;
+ }
+
}
+
///
/// Reports a summary list of the mapped items
///
@@ -1037,14 +1162,12 @@ namespace SCJMapper_V2
if ( !String.IsNullOrEmpty( acc.Input ) /* && !( acc.Input == DeviceCls.BlendedInput )*/ ) {
if ( acc.DevInput == ac.defBinding ) {
rep = String.Format( " {0} . {1} _ {2}", ac.name.PadRight( padAction ), acc.DevID.PadRight( padDevice ), acc.Input.PadRight( padInput ) );
- }
- else {
+ } else {
rep = String.Format( " {0} + {1} _ {2}", ac.name.PadRight( padAction ), acc.DevID.PadRight( padDevice ), acc.Input.PadRight( padInput ) ); // my binding
}
if ( acc.ActivationMode == ActivationMode.Default ) {
rep += String.Format( " . [{1}] {0}\n", ac.defActivationMode.Name, ac.defActivationMode.MultiTap );
- }
- else {
+ } else {
rep += String.Format( " # [{1}] {0}\n", acc.ActivationMode.Name, acc.ActivationMode.MultiTap );
}
diff --git a/actions/ActionTreeNode.cs b/actions/ActionTreeNode.cs
index 2ef9df0..12316b6 100644
--- a/actions/ActionTreeNode.cs
+++ b/actions/ActionTreeNode.cs
@@ -164,6 +164,7 @@ namespace SCJMapper_V2
if ( String.IsNullOrEmpty( actionCmd.Input ) ) {
// new unmapped
this.Command = ""; this.BackColor = MyColors.UnassignedColor;
+ if ( this.Level == 2 ) this.Action = "UNDEF"; // apply UNDEF - 20160525 fix addbind not showing UNDEF if assigned
}
// blended mapped ones - can only get a Blend Background
else if ( actionCmd.Input == DeviceCls.BlendedInput ) {
@@ -172,6 +173,7 @@ namespace SCJMapper_V2
else {
// mapped ( regular ones )
this.Command = actionCmd.DevInput;
+ if ( this.Level == 2 ) this.Action = ""; // remove UNDEF - 20160525 fix addbind not showing UNDEF if assigned
// background is along the input
this.BackColor = ActionCls.DeviceColor( actionCmd.DevInput );
}
diff --git a/app.config b/app.config
index ddab76c..82f85ca 100644
--- a/app.config
+++ b/app.config
@@ -1,27 +1,25 @@
-
+
-
+
-
+
-
+ spaceship_defensive, spaceship_auto_weapons, spaceship_power, spaceship_radar, spaceship_hud, zero_gravity_general, zero_gravity_eva, IFCS_controls"/>
-
-
+
+
diff --git a/doc/ReadMe.txt b/doc/ReadMe.txt
index 1f0a721..83b16ac 100644
--- a/doc/ReadMe.txt
+++ b/doc/ReadMe.txt
@@ -1,10 +1,10 @@
-SC Joystick Mapper V 2.22 - Build 56 BETA
-(c) Cassini, StandardToaster - 11-March-2016
+SC Joystick Mapper V 2.23 - Build 57 BETA
+(c) Cassini, StandardToaster - 27-May-2016
Contains 9 files:
-SCJMapper.exe The program (V2.22)
-SCJMapper.exe.config Program config (V2.22) - MUST be in the same folder as the Exe file
+SCJMapper.exe The program (V2.23)
+SCJMapper.exe.config Program config (V2.23) - 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
@@ -13,7 +13,7 @@ Ionic.Zip.Reduced.dll Managed Zip Assembly - MUST be in th
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.22beta.pdf Quick Guide
+SCJMapper_QGuide V2.23beta.pdf Quick Guide
ReadMe.txt This file
graphics folder Skybox Images - graphics folder MUST be in the same folder as the Exe file
@@ -29,6 +29,15 @@ Scanned for viruses before packing...
cassini@burri-web.org
Changelog:
+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
diff --git a/doc/SCJMapper_QGuide V2.21beta.pdf b/doc/SCJMapper_QGuide V2.21beta.pdf
new file mode 100644
index 0000000..ca7b363
Binary files /dev/null and b/doc/SCJMapper_QGuide V2.21beta.pdf differ
diff --git a/doc/SCJMapper_QGuide V2.22beta.pdf b/doc/SCJMapper_QGuide V2.22beta.pdf
new file mode 100644
index 0000000..a020403
Binary files /dev/null and b/doc/SCJMapper_QGuide V2.22beta.pdf differ
diff --git a/doc/SCJMapper_QGuide V2.23beta.pdf b/doc/SCJMapper_QGuide V2.23beta.pdf
new file mode 100644
index 0000000..6b7e931
Binary files /dev/null and b/doc/SCJMapper_QGuide V2.23beta.pdf differ
diff --git a/doc/SCJMapper_QGuide V2.x.pub b/doc/SCJMapper_QGuide V2.x.pub
index 00261ea..d5c577d 100644
Binary files a/doc/SCJMapper_QGuide V2.x.pub and b/doc/SCJMapper_QGuide V2.x.pub differ