V 2.30 - BETA Build 64 - first commit

- add - Tab to show all mappings for the current input (Tabbed with XML other Dump items)
- add - Setting (enabled, disabled -> default) to automatically switch the new tabs - either Input or Dump
- fix - issue with user activations modes while dumping the mapping list
- fix - issue with loading a map with gamepad mappings and the gamepad is not connected
pull/104/head
bm98 7 years ago
parent 96d0ff837d
commit b3f9dbbacc

@ -295,6 +295,15 @@ namespace SCJMapper_V2
set { this["ListModifiers"] = value; }
}
[UserScopedSettingAttribute( )]
[DefaultSettingValueAttribute( "False" )]
public Boolean AutoTabXML
{
get { return (Boolean)this["AutoTabXML"]; }
set { this["AutoTabXML"] = value; }
}
//**** Form Table

117
FormMain.Designer.cs generated

@ -120,16 +120,20 @@
this.lblPTU = new System.Windows.Forms.Label();
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
this.label2 = new System.Windows.Forms.Label();
this.txFilter = new System.Windows.Forms.TextBox();
this.lblProfileUsed = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.btClearFilter = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.cbxShowMappedOnly = new System.Windows.Forms.CheckBox();
this.cbxShowMouse = new System.Windows.Forms.CheckBox();
this.cbxShowKeyboard = new System.Windows.Forms.CheckBox();
this.cbxShowJoystick = new System.Windows.Forms.CheckBox();
this.cbxShowGamepad = new System.Windows.Forms.CheckBox();
this.txFilter = new System.Windows.Forms.TextBox();
this.tcXML = new System.Windows.Forms.TabControl();
this.tPageOther = new System.Windows.Forms.TabPage();
this.lbxOther = new System.Windows.Forms.ListBox();
this.tPageDump = new System.Windows.Forms.TabPage();
this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
this.tsBtReset = new System.Windows.Forms.ToolStripDropDownButton();
this.resetDefaultsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -157,6 +161,9 @@
this.tableLayoutPanel3.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
this.tableLayoutPanel5.SuspendLayout();
this.tcXML.SuspendLayout();
this.tPageOther.SuspendLayout();
this.tPageDump.SuspendLayout();
this.statusStrip1.SuspendLayout();
this.SuspendLayout();
//
@ -177,10 +184,9 @@
this.rtb.DetectUrls = false;
this.rtb.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtb.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtb.Location = new System.Drawing.Point(686, 81);
this.rtb.Location = new System.Drawing.Point(3, 3);
this.rtb.Name = "rtb";
this.tlpanel.SetRowSpan(this.rtb, 2);
this.rtb.Size = new System.Drawing.Size(362, 686);
this.rtb.Size = new System.Drawing.Size(348, 654);
this.rtb.TabIndex = 21;
this.rtb.Text = "";
this.rtb.WordWrap = false;
@ -354,6 +360,7 @@
this.lblLastJ.Size = new System.Drawing.Size(224, 22);
this.lblLastJ.TabIndex = 14;
this.lblLastJ.Text = "...";
this.lblLastJ.TextChanged += new System.EventHandler(this.lblLastJ_TextChanged);
this.lblLastJ.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lblLastJ_KeyDown);
//
// cmMouseEntry
@ -614,6 +621,7 @@
// tdiTxDefActivationMode
//
this.tdiTxDefActivationMode.BackColor = System.Drawing.Color.PapayaWhip;
this.tdiTxDefActivationMode.Font = new System.Drawing.Font("Segoe UI", 9F);
this.tdiTxDefActivationMode.Name = "tdiTxDefActivationMode";
this.tdiTxDefActivationMode.ReadOnly = true;
this.tdiTxDefActivationMode.Size = new System.Drawing.Size(160, 23);
@ -814,8 +822,8 @@
this.tlpanel.Controls.Add(this.tableLayoutPanel2, 1, 3);
this.tlpanel.Controls.Add(this.tableLayoutPanel3, 2, 3);
this.tlpanel.Controls.Add(this.tableLayoutPanel4, 1, 1);
this.tlpanel.Controls.Add(this.rtb, 2, 1);
this.tlpanel.Controls.Add(this.tableLayoutPanel5, 0, 3);
this.tlpanel.Controls.Add(this.tcXML, 2, 1);
this.tlpanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpanel.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize;
this.tlpanel.Location = new System.Drawing.Point(0, 0);
@ -1057,28 +1065,6 @@
this.tableLayoutPanel5.Size = new System.Drawing.Size(364, 78);
this.tableLayoutPanel5.TabIndex = 29;
//
// label2
//
this.tableLayoutPanel5.SetColumnSpan(this.label2, 2);
this.label2.Location = new System.Drawing.Point(3, 32);
this.label2.Margin = new System.Windows.Forms.Padding(3);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(83, 23);
this.label2.TabIndex = 27;
this.label2.Text = "Action Filter:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// txFilter
//
this.tableLayoutPanel5.SetColumnSpan(this.txFilter, 2);
this.txFilter.Dock = System.Windows.Forms.DockStyle.Top;
this.txFilter.Location = new System.Drawing.Point(147, 32);
this.txFilter.Name = "txFilter";
this.txFilter.Size = new System.Drawing.Size(138, 22);
this.txFilter.TabIndex = 25;
this.txFilter.WordWrap = false;
this.txFilter.TextChanged += new System.EventHandler(this.txFilter_TextChanged);
//
// lblProfileUsed
//
this.tableLayoutPanel5.SetColumnSpan(this.lblProfileUsed, 4);
@ -1114,6 +1100,17 @@
this.btClearFilter.UseVisualStyleBackColor = true;
this.btClearFilter.Click += new System.EventHandler(this.btClearFilter_Click);
//
// label2
//
this.tableLayoutPanel5.SetColumnSpan(this.label2, 2);
this.label2.Location = new System.Drawing.Point(3, 32);
this.label2.Margin = new System.Windows.Forms.Padding(3);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(83, 23);
this.label2.TabIndex = 27;
this.label2.Text = "Action Filter:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// cbxShowMappedOnly
//
this.cbxShowMappedOnly.AutoSize = true;
@ -1175,6 +1172,63 @@
this.cbxShowGamepad.UseVisualStyleBackColor = true;
this.cbxShowGamepad.CheckedChanged += new System.EventHandler(this.cbxShowTreeOptions_CheckedChanged);
//
// txFilter
//
this.tableLayoutPanel5.SetColumnSpan(this.txFilter, 2);
this.txFilter.Dock = System.Windows.Forms.DockStyle.Top;
this.txFilter.Location = new System.Drawing.Point(147, 32);
this.txFilter.Name = "txFilter";
this.txFilter.Size = new System.Drawing.Size(138, 22);
this.txFilter.TabIndex = 25;
this.txFilter.WordWrap = false;
this.txFilter.TextChanged += new System.EventHandler(this.txFilter_TextChanged);
//
// tcXML
//
this.tcXML.Controls.Add(this.tPageDump);
this.tcXML.Controls.Add(this.tPageOther);
this.tcXML.Dock = System.Windows.Forms.DockStyle.Fill;
this.tcXML.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tcXML.Location = new System.Drawing.Point(686, 81);
this.tcXML.Name = "tcXML";
this.tlpanel.SetRowSpan(this.tcXML, 2);
this.tcXML.SelectedIndex = 0;
this.tcXML.Size = new System.Drawing.Size(362, 686);
this.tcXML.TabIndex = 30;
//
// tPageOther
//
this.tPageOther.Controls.Add(this.lbxOther);
this.tPageOther.Location = new System.Drawing.Point(4, 22);
this.tPageOther.Name = "tPageOther";
this.tPageOther.Padding = new System.Windows.Forms.Padding(3);
this.tPageOther.Size = new System.Drawing.Size(354, 660);
this.tPageOther.TabIndex = 0;
this.tPageOther.Text = "All Mappings";
this.tPageOther.UseVisualStyleBackColor = true;
//
// lbxOther
//
this.lbxOther.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbxOther.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbxOther.FormattingEnabled = true;
this.lbxOther.ItemHeight = 14;
this.lbxOther.Location = new System.Drawing.Point(3, 3);
this.lbxOther.Name = "lbxOther";
this.lbxOther.Size = new System.Drawing.Size(348, 654);
this.lbxOther.TabIndex = 0;
//
// tPageDump
//
this.tPageDump.Controls.Add(this.rtb);
this.tPageDump.Location = new System.Drawing.Point(4, 22);
this.tPageDump.Name = "tPageDump";
this.tPageDump.Padding = new System.Windows.Forms.Padding(3);
this.tPageDump.Size = new System.Drawing.Size(354, 660);
this.tPageDump.TabIndex = 1;
this.tPageDump.Text = "Dumps (XML, Logs etc.)";
this.tPageDump.UseVisualStyleBackColor = true;
//
// toolStripStatusLabel2
//
this.toolStripStatusLabel2.BackColor = System.Drawing.Color.DarkKhaki;
@ -1350,6 +1404,9 @@
this.tableLayoutPanel4.ResumeLayout(false);
this.tableLayoutPanel5.ResumeLayout(false);
this.tableLayoutPanel5.PerformLayout();
this.tcXML.ResumeLayout(false);
this.tPageOther.ResumeLayout(false);
this.tPageDump.ResumeLayout(false);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.ResumeLayout(false);
@ -1468,6 +1525,10 @@
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label lblAssigned;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
private System.Windows.Forms.TabControl tcXML;
private System.Windows.Forms.TabPage tPageOther;
private System.Windows.Forms.ListBox lbxOther;
private System.Windows.Forms.TabPage tPageDump;
}
}

@ -87,19 +87,21 @@ namespace SCJMapper_V2
// take care of the sequence.. mouse overrides key but both override joy and game
if ( m_mouseIn ) { // 20151220BM: add mouse device (from AC 2.0 defaultProfile usage)
return ActionCls.ActionDevice.AD_Mouse;
} else if ( m_keyIn ) {
}
else if ( m_keyIn ) {
return ActionCls.ActionDevice.AD_Keyboard;
} else {
}
else {
if ( IsGamepadTab( tc1.SelectedTab ) ) {
return ActionCls.ActionDevice.AD_Gamepad;
} else {
}
else {
return ActionCls.ActionDevice.AD_Joystick;
}
}
}
}
/// <summary>
/// Get the current JsN string for the active device tab
/// </summary>
@ -110,8 +112,25 @@ namespace SCJMapper_V2
return jp.JsName;
}
#endregion
// tab index for the tcXML control
private enum EATabXML
{
Tab_XML = 0,
Tab_Assignment,
}
private void AutoTabXML_Assignment( EATabXML tab )
{
if ( m_AppSettings.AutoTabXML ) {
if ( tcXML.SelectedIndex != (int)tab ) {
tcXML.SelectedTab = tcXML.TabPages[(int)tab];
if ( tab == EATabXML.Tab_Assignment )
lblLastJ.Select( ); // select again as when changing the Tabs
}
}
}
#endregion
#region Main Form Handling
@ -230,7 +249,8 @@ namespace SCJMapper_V2
Grab( );
m_AppSettings.MyMappingName = txMappingName.Text; m_AppSettings.Save( );// last used - persist
txMappingName.BackColor = MyColors.SuccessColor;
} else {
}
else {
log.WarnFormat( "Last used mapping not available ({0})", txMappingName.Text );
txMappingName.BackColor = MyColors.ErrorColor;
}
@ -260,10 +280,16 @@ namespace SCJMapper_V2
lblPTU.Visible = m_AppSettings.UsePTU;
if ( m_AppSettings.UsePTU ) log.Debug( "Using PTU Folders" );
// poll the XInput
log.Debug( "Start XInput polling" );
timer1_Tick( null,null );
timer1.Start( ); // this one polls the joysticks to show the props
// Select XML tab to start with
AutoTabXML_Assignment( EATabXML.Tab_XML );
m_appLoading = false; // no longer
}
@ -319,7 +345,8 @@ namespace SCJMapper_V2
}
tabRegion.Exclude( TabItemRect );
e.Graphics.FillRegion( backBrush, tabRegion );
} else {
}
else {
f = e.Font;
foreBrush = new SolidBrush( e.ForeColor );
}
@ -340,7 +367,8 @@ namespace SCJMapper_V2
if ( e.Index == this.tc1.SelectedIndex ) {
f.Dispose( );
backBrush.Dispose( );
} else {
}
else {
backBrush.Dispose( );
foreBrush.Dispose( );
}
@ -389,7 +417,8 @@ namespace SCJMapper_V2
// valid Device Tab
if ( IsGamepadTab( tc1.TabPages[deviceTabIndex] ) ) {
; // ignore gamepads
} else if ( DeviceInst.JoystickListRef.Count > joyStickIndex ) {
}
else if ( DeviceInst.JoystickListRef.Count > joyStickIndex ) {
// there is a joystick device left..
DeviceInst.JoystickListRef[joyStickIndex].JSAssignment = joyStickIndex + 1; // assign number 1..
m_AT.ActionMaps.jsN[deviceTabIndex] = DeviceInst.JoystickListRef[joyStickIndex].DevName;
@ -458,7 +487,8 @@ namespace SCJMapper_V2
break; // get only the first one
}
}
} else {
}
else {
myDxJoystick myJs = new myDxJoystick( );
myJs.js = new SharpDX.DirectInput.Joystick( directInput, instance.InstanceGuid );
myJs.prodName = instance.ProductName;
@ -502,7 +532,8 @@ namespace SCJMapper_V2
// first panel - The Tab content exists already
log.Debug( "Add first Joystick panel" );
uUC_JoyPanelNew = UC_JoyPanel;
} else {
}
else {
log.Debug( "Add next Joystick panel" );
// setup the further tab contents along the reference one in TabPage[0] (the control named UC_JoyPanel)
tc1.TabPages.Add( "" ); // numbering is 1 based for the user
@ -510,7 +541,7 @@ namespace SCJMapper_V2
uUC_JoyPanelNew.Size = UC_JoyPanel.Size; uUC_JoyPanelNew.Location = UC_JoyPanel.Location;
//uUC_JoyPanelNew.Dock = UC_JoyPanel.Dock; uUC_JoyPanelNew.Anchor = UC_JoyPanel.Anchor;
//uUC_JoyPanelNew.AutoScaleMode = UC_JoyPanel.AutoScaleMode; uUC_JoyPanelNew.AutoSize = UC_JoyPanel.AutoSize;
}
// common part
tc1.TabPages[tabs].Text = string.Format( "Joystick {0}", nJs + 1 ); // numbering is 1 based for the user
@ -607,6 +638,8 @@ namespace SCJMapper_V2
{
log.Debug( "Dump - Entry" );
AutoTabXML_Assignment( EATabXML.Tab_XML );
rtb.Text = string.Format( "<!-- {0} - SC Joystick Mapping - {1} -->\n{2}", DateTime.Now, txMappingName.Text, m_AT.toXML( txMappingName.Text ) );
btDump.BackColor = btClear.BackColor; btDump.UseVisualStyleBackColor = btClear.UseVisualStyleBackColor; // neutral again
@ -663,14 +696,16 @@ namespace SCJMapper_V2
ctrl = DeviceInst.GamepadRef.GetLastChange( );
timer1.Interval = 750; // allow more time to release buttons [msec]
}
} else {
}
else {
// poll active Joystick
DeviceInst.JoystickRef.GetData( ); // poll the device
// add keyboard modifier - if there are ..
if ( DeviceInst.KeyboardRef == null ) {
// no keyboard => no modifier
ctrl = JSStr( ) + DeviceInst.JoystickRef.GetLastChange( ); // show last handled JS control
} else {
}
else {
UpdateModifiers( ); // get the last keyboard modifer to compose the command, also handles the modifier lifetime
ctrl = JSStr( ) + m_persistentMods + DeviceInst.JoystickRef.GetLastChange( ); // show last handled JS control
}
@ -682,7 +717,8 @@ namespace SCJMapper_V2
// Handle Throttle checkbox
if ( JoystickCls.CanThrottle( ctrl ) ) {
cbxThrottle.Enabled = true;
} else {
}
else {
cbxThrottle.Checked = false; cbxThrottle.Enabled = false;
}
// Update joystick modifiers - not currently used
@ -696,7 +732,7 @@ namespace SCJMapper_V2
private void treeView1_NodeMouseClick( object sender, TreeNodeMouseClickEventArgs e )
{
if ( e.Button == MouseButtons.Right ) {
treeView1.SelectedNode = e.Node;
treeView1.SelectedNode = e.Node; // trigger ActionTree events..
}
}
@ -736,7 +772,8 @@ 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( );
}
else MySounds.PlayNotfound( );
}
private void btBlend_Click( object sender, EventArgs e )
@ -745,7 +782,8 @@ namespace SCJMapper_V2
m_AT.BlendBinding( );
UpdateTableSelectedItem( );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
} else MySounds.PlayCannot( );
}
else MySounds.PlayCannot( );
}
private void btClear_Click( object sender, EventArgs e )
@ -754,7 +792,8 @@ namespace SCJMapper_V2
m_AT.ClearBinding( );
UpdateTableSelectedItem( );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
} else MySounds.PlayCannot( );
}
else MySounds.PlayCannot( );
}
//TODO
@ -777,6 +816,8 @@ namespace SCJMapper_V2
private void btDumpList_Click( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_XML );
if ( m_AppSettings.UseCSVListing )
rtb.Text = string.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActionsCSV( m_AppSettings.ListModifiers ) );
else
@ -786,12 +827,15 @@ namespace SCJMapper_V2
private void btDumpLog_Click( object sender, EventArgs e )
{
rtb.Text = string.Format( "-- {0} - SC Joystick AC Log Controller Detection --\n{1}", DateTime.Now, SCLogExtract.ExtractLog( ) );
AutoTabXML_Assignment( EATabXML.Tab_XML );
rtb.Text = string.Format( "-- {0} - SC Joystick AC Log Controller Detection --\n{1}", DateTime.Now, SCLogExtract.ExtractLog( ) );
}
private void btDumpProfile_Click( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_XML );
rtb.Text = SCDefaultProfile.DefaultProfile( SCDefaultProfile.DefaultProfileName );
}
@ -1078,13 +1122,15 @@ namespace SCJMapper_V2
break;
}
}
} else {
}
else {
dropEnabled = false;
}
if ( dropEnabled ) {
e.Effect = DragDropEffects.Copy;
} else {
}
else {
e.Effect = DragDropEffects.None;
}
}
@ -1100,6 +1146,9 @@ namespace SCJMapper_V2
private void btSaveMyMapping_Click( object sender, EventArgs e )
{
bool cancel = false;
AutoTabXML_Assignment( EATabXML.Tab_XML );
if ( SCMappings.IsValidMappingName( txMappingName.Text ) ) {
Dump( );
if ( SCMappings.MappingFileExists( txMappingName.Text ) ) {
@ -1116,7 +1165,8 @@ namespace SCJMapper_V2
m_AppSettings.MyMappingName = txMappingName.Text; m_AppSettings.Save( );// last used - persist
txMappingName.BackColor = MyColors.SuccessColor;
}
} else {
}
else {
txMappingName.BackColor = MyColors.ErrorColor;
}
}
@ -1125,7 +1175,8 @@ namespace SCJMapper_V2
{
if ( SCMappings.IsValidMappingName( txMappingName.Text ) ) {
txMappingName.BackColor = MyColors.ValidColor;
} else {
}
else {
txMappingName.BackColor = MyColors.InvalidColor;
}
}
@ -1140,7 +1191,7 @@ namespace SCJMapper_V2
private void btClip_Click( object sender, EventArgs e )
{
System.Windows.Forms.Clipboard.SetText( txRebind.Text );
Clipboard.SetText( txRebind.Text );
}
@ -1183,7 +1234,8 @@ namespace SCJMapper_V2
j = DeviceInst.JoystickListRef.Find_jsN( i + 1 );
if ( j != null ) {
newTree.ActionMaps.jsN[i] = j.DevName; newTree.ActionMaps.jsNGUID[i] = j.DevInstanceGUID;
} else {
}
else {
newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsNGUID[i] = "";
}
}
@ -1280,9 +1332,9 @@ namespace SCJMapper_V2
tuning.AssignDynamicItems( dev, null, nodeText );
}
}
// GP commands that are supported
else if ( nodeText.ToLowerInvariant( ).Contains( "_thumblx" ) || nodeText.ToLowerInvariant( ).Contains( "_thumbrx" )
|| nodeText.ToLowerInvariant( ).Contains( "_thumbly" ) || nodeText.ToLowerInvariant( ).Contains( "_thumbry" ) ) {
// GP commands that are supported
else if ( nodeText.ToLowerInvariant( ).Contains( "_thumblx" ) || nodeText.ToLowerInvariant( ).Contains( "_thumbrx" )
|| nodeText.ToLowerInvariant( ).Contains( "_thumbly" ) || nodeText.ToLowerInvariant( ).Contains( "_thumbry" ) ) {
// update dynamic properties
tuning.GameDevice = dev;
tuning.NodeText = nodeText;
@ -1294,7 +1346,8 @@ namespace SCJMapper_V2
tuning.AssignDynamicItems( dev, null, nodeText );
}
}
} else if ( tuning != null && tuning.DevInstanceNo > 0 ) {
}
else if ( tuning != null && tuning.DevInstanceNo > 0 ) {
// a device was assigned but the action is not mapped
// try to find the gamedevice here ??
if ( JoystickCls.IsDeviceClass( tuning.DeviceClass ) ) {
@ -1346,8 +1399,7 @@ namespace SCJMapper_V2
UpdateOptionItem( "turret_aim_pitch", "v_aim_pitch", "spaceship_turret" );
UpdateOptionItem( "turret_aim_yaw", "v_aim_yaw", "spaceship_turret" );
}
private void btJSTuning_Click( object sender, EventArgs e )
{
@ -1385,7 +1437,6 @@ namespace SCJMapper_V2
}
devlist.AddRange( DeviceInst.JoystickListRef );
OPT.TuningOptions = m_AT.ActionMaps.TuningOptions;
OPT.DeviceOptions = m_AT.ActionMaps.DeviceOptions;
OPT.Devicelist = devlist;
@ -1401,14 +1452,11 @@ namespace SCJMapper_V2
}
// Keyboard Input
bool m_keyIn = false;
bool m_mouseIn = false;
private void btJsKbd_Click( object sender, EventArgs e )
{
m_keyIn = ( !m_keyIn );
@ -1425,7 +1473,8 @@ namespace SCJMapper_V2
lblLastJ.Focus( );
DeviceInst.KeyboardRef.Activate( );
DeviceInst.KeyboardRef.GetData( ); // poll to aquire once
} else {
}
else {
m_mouseIn = false; // not longer
lblLastJ.BackColor = MyColors.ValidColor;
btJsKbd.ImageKey = "J";
@ -1444,7 +1493,8 @@ namespace SCJMapper_V2
// don't override modifiers when we are in mouse mode and the mod is the same and there is no kbd entry....
if ( m_mouseIn && ( keyModS == modS ) && ( m_persistentMods == ( modS + "+" ) ) ) {
; // nothing here -
} else {
}
else {
lblLastJ.Text = DeviceInst.KeyboardRef.GetLastChange( true );
m_mouseIn = false; // clear on kbd input
}
@ -1456,6 +1506,22 @@ namespace SCJMapper_V2
e.Handled = true;
}
// text of input has changed
private void lblLastJ_TextChanged( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_Assignment );
string devInput = ActionCls.DevInput( lblLastJ.Text, InputMode );
List<string> r = m_AT.FindAllActions( devInput );
lbxOther.Items.Clear( );
foreach ( string s in r ) lbxOther.Items.Add( s );
// have to check if throttle is used and if - add those to the list
string altDevInput = JoystickCls.MakeThrottle( devInput, true );
if ( altDevInput != devInput ) {
r = m_AT.FindAllActions( altDevInput );
foreach ( string s in r ) lbxOther.Items.Add( s );
}
}
// maintain the global modifier store
@ -1469,11 +1535,13 @@ namespace SCJMapper_V2
if ( modS.Contains( KeyboardCls.ClearMods ) ) {
// allow to cancel modifiers
m_persistentMods = ""; // kill persistent ones
} else {
}
else {
m_persistentMods = modS + "+";
m_modifierTimeout = c_modifierTime; // restart show interval
}
} else {
}
else {
if ( m_modifierTimeout <= 0 ) {
m_persistentMods = ""; // modifier timed out
m_mouseIn = false;
@ -1502,7 +1570,8 @@ namespace SCJMapper_V2
if ( int.TryParse( (string)ts.Tag, out btNum ) ) {
// got a button (most likely..)
item = "mouse" + btNum.ToString( );
} else if ( (string)ts.Tag == "X" )
}
else if ( (string)ts.Tag == "X" )
item = "maxis_x";
else if ( (string)ts.Tag == "Y" )
item = "maxis_y";
@ -1521,12 +1590,14 @@ namespace SCJMapper_V2
if ( DeviceInst.KeyboardRef == null ) {
// no keyboard = no modifier
ctrl = MouseCls.MakeCtrl( item, "" ); // show last handled JS control
} else {
}
else {
UpdateModifiers( );
ctrl = MouseCls.MakeCtrl( item, m_persistentMods ); // show last handled JS control
}
m_mouseIn = true; // for this one only
} else if ( KeyboardCls.IsDeviceClass( device ) ) {
}
else if ( KeyboardCls.IsDeviceClass( device ) ) {
UpdateModifiers( );
ctrl = KeyboardCls.MakeCtrl( item, m_persistentMods ); // show last handled JS control
}
@ -1577,7 +1648,8 @@ namespace SCJMapper_V2
m_AppSettings.FormTableColumnWidth = FTAB.LastColSize;
FTAB.Hide( );
} else {
}
else {
FTAB.Show( );
if ( created ) {
@ -1615,5 +1687,6 @@ namespace SCJMapper_V2
{
m_AT.FindAndSelectActionKey( e.Actionmap, e.Actionkey, e.Nodeindex );
}
}
}

@ -120,6 +120,92 @@
<metadata name="cmCopyPaste.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>300, 17</value>
</metadata>
<metadata name="IL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>494, 17</value>
</metadata>
<data name="IL.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8
EAAAAk1TRnQBSQFMAgEBCQEAAZgBEQGYAREBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQABEgBDwgSMwABSAJP
AUgBbQPsA/QBvAESMAADkQFIAVYBTwFIA0kB7AP/AbwBEjAAAUgDTwJWAk8BTgFIAe0D/wHwARIwAAFI
A1cDVgJPAUgB9wP/AfABEjAAAUgEVwFWAlcBVgFIAe8D/wHwARIwAAORAUgCVwFIA3EBvAP/AfEBEjMA
AUgCVwFIAfED8gP/AfEBEjMAAUgCTwFIAfQG/wHyARIzAAEUAbsCCAf/AfMBEjMAARIB9Ab/AfQB8QG8
Ae8BEjMAARIB9AX/AfQBBwPyARIzAAESAfQF/wHxAbwC/wESAfEzAAESBv8CvAH/ARIB8TQAARIG/wHv
AbwBEgHxNQAJEgHxNwAB/zAAAXQFRgHyBgAB8wH3AXQB7QGLAf8JAAH/AfQLAAEHFQABRgclAfIFAAG7
AU0CUgFMAZEB/wgAAkMBFQkAAUMBFQFDAgAB8AsAAfAEAAFGCSUB8gMAAfQBdAGTAfACCQG7AbQIAAFD
AhUIAAHyAUMBFQFDAQACBwHtCAAB/wGSAbwB7wIAAUYCJQH/AUwDJQIaAiUBGwIAAfABTQH0AvMBGQHw
AQkBkAYAAQcBQwEVARMBQwH0BQABBwEVARQBFQFDAQAB9wG8Ae0JAAH3AfABkgEAAXQCJQH2Av8BTAEl
AfYC/wMlAgAB8gGaA/8B9AHzAfIB8AH/BQAB9AFDARUB6gH5Ag8DHwFDARQBHwEUARUBQwH/Ae0B8AHs
AeoBbQHvAwAB7wEOAewB7wHwAewBAAFGAiUBRgP/AfYD/wMlAgAH/wH0AfMBuwYAAUMBbQHqAUQCEAMg
AQ4BbQEUAhABEQEAAewBvAH3AeoB6wESAewBBwHsARIB6wFtAgcB6wEAAUYDKwFMBf8EKwMAAbsG/wG0
AYsGAAFDARUBEgEgAQ4BDwEfAiACFQERARQBEAFDAQABbQLsAe0BFAFtAZIB7AGSAW0B6gHtAewB7QEO
AQABRgRMAfYD/wF0BEwDAAG7A/8BuwGRAfcBvAGQBgABQwHsARQBDwIfAQABDgEPAQEBHgFEAUMBEAER
AgAB9wHvAesC7wHtAZIB7QHvAfcBkQLvAgABRgNMAfYF/wF0A0wEAAG7Af8BuwG0AfIBuwG8AYsGAAG8
ARQBDgEQAUMBRQEeAQEBQwEeAW8BDgIQAwAC7AG8AewBBwG8AW0CvAGNAbwBFQG8AgABRgJMARoD/wFM
A/8DTAQAAf8BvAL0ArQBkAH/BwABQwEQAW0BFQEBAREBFQEOAR4BCwEfAg4DAAHyAfMB7AHyBfQB8gES
AfIB8wIAAfMBUwFMAZoC/wNMAv8CTAFNBQAB9AG7AfMBtAGQCQABFQIRAR4BAAcOBQABvALwBQAC8AG8
AREDAAHzAVMKTQoAAfMB/wEAAfQBuwHwBQAB7AEQAQ8BFQMAAUMCDwH0BQABEQcAAf8BAAETBQAB8wlT
DAABvAG7Af8CAAGRJQAB8wdTEgABu3EAIP8HAAFDAQAB8hYAAf8O8QHwBv8B9AMoBv8FAAEOAZEBrgKR
AeoB/wcAC/8CAAH/AfEDawGLAZEBiwSKAUkBSgGRAfEG/wEoAykBKAX/BAABQwGaAXoBUgGRAbUBEgHx
BgAB9wEHAbwCBwLvAwcB8AHyAQcBAAH/AfECBgGLAZABuwWLAlABawHxBv8BUAQpASgE/wMAAQ8BBwGR
AnMBkQG1AbQBQwH0BAAB/wG8Ae8DvAMHAbwBBwHwAfIB8QEAAf8B8QIGAYsBkAG7BJABbAFQAVEBawHx
B/8FUAFzA/8BAAEUAVIB8wK8AQcB9wGRArQBDgH0BAAB/wG8Ae8D8AK8AvABvAHxAfIB8AEAAf8B8QKL
AZABswG7ASkBswFxA1ABkAFrAfEC/wFzBSgFUAFzAv8CAAEaAfQB9wESAUMBEQG7AZEBegHsAf8C8QHz
AQAB/wHvAfcBvAbwAbwC8QG8AQAB/wHyA5ABswG7ArMDUQEpAbMBawHyAf8NUAGZAf8CAAEOAe8BEwHq
ARUBDwGRAQ8BDgXxAQAB/wHtAbwJ8gHwAQcBAAH/AfIEswG6AYsBKQR4AVEBawHyAf8OUAH/BAABbQER
AUMBEAEVAfEC/wH0Av8CAAH/AfcB8QjyAfEB8AG8AQAB/wHyBLMBugG7ASgCeAFQAXgBKAFrAfIB/wEp
DFABKAH/BAABuwG0AZEBbQkAAf8BkgHxAfIG8wHyAvEB8AEAAf8B8wSzAbkBugHcAbQBSQJQAUkBawHz
Av8BUAV4AVcEUQEpAv8DAAHzAQABkQETCwABkgHxAfIC8wEHAZIC8wHyAfEB8gHzAQAB/wHzBrkBugHb
A9wB2wFrAfMH/wEoBFcBUAP/AwAB8AEOAewBFQsAAe0B8QHyAvMB7QHvAvMB8gHxAfIB/wEAAf8B8wza
AYsB8wb/AZkEeAFXBP8BAAHxAQABBwHtAewBrgHyCgABBwLyAvMBvAPzAfIB8QHyAgAB/w/zBv8BKQR4
Bf8BAAFuAXkBvAH3ARMB8AwAAvIG8wHyAfEB9AIAAf8I8wHyAfcB8gH3AfIB9wHzBv8BHAN4Bv8B7QHr
AbwC7w4AAvEG8gLxAwAB/wHzDf8B7wf/AZkBUAj/ARMB8AHqHAAg/wIAAfMB9wH/GwABQgFNAT4HAAE+
AwABKAMAAUADAAEwAwABAQEAAQEFAAGAAQEWAAP/AQAB4AcAAeAvAAHgBwAB4AcAAeAHAAHgBwAB4AcA
AeAHAAHgAQEGAAHgAQMGAAHgAQcGAAH3Bf8B+AEPAcAB/wGfAf0C/wHwAQcBwAF/AY8B+AHfAf0B4AED
AYABfwGPAfABjwHwAcABAQGAAT8BAwHgAQcB8AGAAQEBgAEfAwACgAEBAYABHwGAAQABgAEAAYABAQHA
AR8BgAEAAYABAAGAAQEBwAEfAYABAAGAAQABgAEBAeABHwGAAQEBgAEAAYABAQHgAR8BwAEBAcABAQGA
AQEB8AF/AcABAQHDAeEBwAEDAf8BIwHgAQMB5wHjAeABBwH/AY0E/wHwAQ8B/wH9Dv8EAAH8AT8C/wQA
AfgBDwHgAQMEAAHwAQ8BwAEBBAABwAEHAYABAQQAAYABBwGAAQEEAAGAAQABgAEBBAABwAEAAYABAQQA
AeABAQGAAQEEAAHgAf8BgAEBBAAB4AH/AcABAQQAAeEB/wHAAQEEAAGAAf8BwAEDBAABgQH/AeABAwQA
AQMB/wHgAQcEAAEHA/8EAAHHA/8L
</value>
</data>
<metadata name="cmMouseEntry.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>761, 17</value>
</metadata>
<metadata name="cmAddDel.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>652, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -384,89 +470,15 @@
x1//2Q==
</value>
</data>
<metadata name="cmAddDel.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>652, 17</value>
<metadata name="OFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 17</value>
</metadata>
<metadata name="IL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>494, 17</value>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>209, 17</value>
</metadata>
<metadata name="SFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>421, 17</value>
</metadata>
<data name="IL.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8
EAAAAk1TRnQBSQFMAgEBCQEAAYgBEQGIAREBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQABEgBDwgSMwABSAJP
AUgBbQPsA/QBvAESMAADkQFIAVYBTwFIA0kB7AP/AbwBEjAAAUgDTwJWAk8BTgFIAe0D/wHwARIwAAFI
A1cDVgJPAUgB9wP/AfABEjAAAUgEVwFWAlcBVgFIAe8D/wHwARIwAAORAUgCVwFIA3EBvAP/AfEBEjMA
AUgCVwFIAfED8gP/AfEBEjMAAUgCTwFIAfQG/wHyARIzAAEUAbsCCAf/AfMBEjMAARIB9Ab/AfQB8QG8
Ae8BEjMAARIB9AX/AfQBBwPyARIzAAESAfQF/wHxAbwC/wESAfEzAAESBv8CvAH/ARIB8TQAARIG/wHv
AbwBEgHxNQAJEgHxNwAB/zAAAXQFRgHyBgAB8wH3AXQB7QGLAf8JAAH/AfQLAAEHFQABRgclAfIFAAG7
AU0CUgFMAZEB/wgAAkMBFQkAAUMBFQFDAgAB8AsAAfAEAAFGCSUB8gMAAfQBdAGTAfACCQG7AbQIAAFD
AhUIAAHyAUMBFQFDAQACBwHtCAAB/wGSAbwB7wIAAUYCJQH/AUwDJQIaAiUBGwIAAfABTQH0AvMBGQHw
AQkBkAYAAQcBQwEVARMBQwH0BQABBwEVARQBFQFDAQAB9wG8Ae0JAAH3AfABkgEAAXQCJQH2Av8BTAEl
AfYC/wMlAgAB8gGaA/8B9AHzAfIB8AH/BQAB9AFDARUB6gH5Ag8DHwFDARQBHwEUARUBQwH/Ae0B8AHs
AeoBbQHvAwAB7wEOAewB7wHwAewBAAFGAiUBRgP/AfYD/wMlAgAH/wH0AfMBuwYAAUMBbQHqAUQCEAMg
AQ4BbQEUAhABEQEAAewBvAH3AeoB6wESAewBBwHsARIB6wFtAgcB6wEAAUYDKwFMBf8EKwMAAbsG/wG0
AYsGAAFDARUBEgEgAQ4BDwEfAiACFQERARQBEAFDAQABbQLsAe0BFAFtAZIB7AGSAW0B6gHtAewB7QEO
AQABRgRMAfYD/wF0BEwDAAG7A/8BuwGRAfcBvAGQBgABQwHsARQBDwIfAQABDgEPAQEBHgFEAUMBEAER
AgAB9wHvAesC7wHtAZIB7QHvAfcBkQLvAgABRgNMAfYF/wF0A0wEAAG7Af8BuwG0AfIBuwG8AYsGAAG8
ARQBDgEQAUMBRQEeAQEBQwEeAW8BDgIQAwAC7AG8AewBBwG8AW0CvAGNAbwBFQG8AgABRgJMARoD/wFM
A/8DTAQAAf8BvAL0ArQBkAH/BwABQwEQAW0BFQEBAREBFQEOAR4BCwEfAg4DAAHyAfMB7AHyBfQB8gES
AfIB8wIAAfMBUwFMAZoC/wNMAv8CTAFNBQAB9AG7AfMBtAGQCQABFQIRAR4BAAcOBQABvALwBQAC8AG8
AREDAAHzAVMKTQoAAfMB/wEAAfQBuwHwBQAB7AEQAQ8BFQMAAUMCDwH0BQABEQcAAf8BAAETBQAB8wlT
DAABvAG7Af8CAAGRJQAB8wdTEgABu3EAIP8HAAFDAQAB8hYAAf8O8QHwBv8B9AMoBv8FAAEOAZEBrgKR
AeoB/wcAC/8CAAH/AfEDawGLAZEBiwSKAUkBSgGRAfEG/wEoAykBKAX/BAABQwGaAXoBUgGRAbUBEgHx
BgAB9wEHAbwCBwLvAwcB8AHyAQcBAAH/AfECBgGLAZABuwWLAlABawHxBv8BUAQpASgE/wMAAQ8BBwGR
AnMBkQG1AbQBQwH0BAAB/wG8Ae8DvAMHAbwBBwHwAfIB8QEAAf8B8QIGAYsBkAG7BJABbAFQAVEBawHx
B/8FUAFzA/8BAAEUAVIB8wK8AQcB9wGRArQBDgH0BAAB/wG8Ae8D8AK8AvABvAHxAfIB8AEAAf8B8QKL
AZABswG7ASkBswFxA1ABkAFrAfEC/wFzBSgFUAFzAv8CAAEaAfQB9wESAUMBEQG7AZEBegHsAf8C8QHz
AQAB/wHvAfcBvAbwAbwC8QG8AQAB/wHyA5ABswG7ArMDUQEpAbMBawHyAf8NUAGZAf8CAAEOAe8BEwHq
ARUBDwGRAQ8BDgXxAQAB/wHtAbwJ8gHwAQcBAAH/AfIEswG6AYsBKQR4AVEBawHyAf8OUAH/BAABbQER
AUMBEAEVAfEC/wH0Av8CAAH/AfcB8QjyAfEB8AG8AQAB/wHyBLMBugG7ASgCeAFQAXgBKAFrAfIB/wEp
DFABKAH/BAABuwG0AZEBbQkAAf8BkgHxAfIG8wHyAvEB8AEAAf8B8wSzAbkBugHcAbQBSQJQAUkBawHz
Av8BUAV4AVcEUQEpAv8DAAHzAQABkQETCwABkgHxAfIC8wEHAZIC8wHyAfEB8gHzAQAB/wHzBrkBugHb
A9wB2wFrAfMH/wEoBFcBUAP/AwAB8AEOAewBFQsAAe0B8QHyAvMB7QHvAvMB8gHxAfIB/wEAAf8B8wza
AYsB8wb/AZkEeAFXBP8BAAHxAQABBwHtAewBrgHyCgABBwLyAvMBvAPzAfIB8QHyAgAB/w/zBv8BKQR4
Bf8BAAFuAXkBvAH3ARMB8AwAAvIG8wHyAfEB9AIAAf8I8wHyAfcB8gH3AfIB9wHzBv8BHAN4Bv8B7QHr
AbwC7w4AAvEG8gLxAwAB/wHzDf8B7wf/AZkBUAj/ARMB8AHqHAAg/wIAAfMB9wH/GwABQgFNAT4HAAE+
AwABKAMAAUADAAEwAwABAQEAAQEFAAGAAQEWAAP/AQAB4AcAAeAvAAHgBwAB4AcAAeAHAAHgBwAB4AcA
AeAHAAHgAQEGAAHgAQMGAAHgAQcGAAH3Bf8B+AEPAcAB/wGfAf0C/wHwAQcBwAF/AY8B+AHfAf0B4AED
AYABfwGPAfABjwHwAcABAQGAAT8BAwHgAQcB8AGAAQEBgAEfAwACgAEBAYABHwGAAQABgAEAAYABAQHA
AR8BgAEAAYABAAGAAQEBwAEfAYABAAGAAQABgAEBAeABHwGAAQEBgAEAAYABAQHgAR8BwAEBAcABAQGA
AQEB8AF/AcABAQHDAeEBwAEDAf8BIwHgAQMB5wHjAeABBwH/AY0E/wHwAQ8B/wH9Dv8EAAH8AT8C/wQA
AfgBDwHgAQMEAAHwAQ8BwAEBBAABwAEHAYABAQQAAYABBwGAAQEEAAGAAQABgAEBBAABwAEAAYABAQQA
AeABAQGAAQEEAAHgAf8BgAEBBAAB4AH/AcABAQQAAeEB/wHAAQEEAAGAAf8BwAEDBAABgQH/AeABAwQA
AQMB/wHgAQcEAAEHA/8EAAHHA/8L
</value>
</data>
<data name="btSaveMyMapping.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
@ -539,18 +551,6 @@
Tesk88046SuRb2gfwdMB6S/DHs/UzS4d0QAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="cmMouseEntry.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>761, 17</value>
</metadata>
<metadata name="OFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 17</value>
</metadata>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>209, 17</value>
</metadata>
<metadata name="SFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>421, 17</value>
</metadata>
<data name="tsBtReset.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8

@ -68,6 +68,7 @@
this.cbxCSVListing = new System.Windows.Forms.CheckBox();
this.cbxPTU = new System.Windows.Forms.CheckBox();
this.cbxDetectGamepad = new System.Windows.Forms.CheckBox();
this.cbxAutoTabXML = new System.Windows.Forms.CheckBox();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox3.SuspendLayout();
@ -424,6 +425,7 @@
//
// groupBox4
//
this.groupBox4.Controls.Add(this.cbxAutoTabXML);
this.groupBox4.Controls.Add(this.cbxListModifiers);
this.groupBox4.Controls.Add(this.cbxCSVListing);
this.groupBox4.Controls.Add(this.cbxPTU);
@ -460,7 +462,7 @@
//
this.cbxPTU.AutoSize = true;
this.cbxPTU.BackColor = System.Drawing.Color.SandyBrown;
this.cbxPTU.Location = new System.Drawing.Point(145, 21);
this.cbxPTU.Location = new System.Drawing.Point(9, 67);
this.cbxPTU.Name = "cbxPTU";
this.cbxPTU.Size = new System.Drawing.Size(108, 17);
this.cbxPTU.TabIndex = 7;
@ -477,6 +479,16 @@
this.cbxDetectGamepad.Text = "Use Gamepad";
this.cbxDetectGamepad.UseVisualStyleBackColor = true;
//
// cbxAutoTabXML
//
this.cbxAutoTabXML.AutoSize = true;
this.cbxAutoTabXML.Location = new System.Drawing.Point(9, 44);
this.cbxAutoTabXML.Name = "cbxAutoTabXML";
this.cbxAutoTabXML.Size = new System.Drawing.Size(247, 17);
this.cbxAutoTabXML.TabIndex = 10;
this.cbxAutoTabXML.Text = "Switch XML/Assignment tab automatically";
this.cbxAutoTabXML.UseVisualStyleBackColor = true;
//
// FormSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@ -552,5 +564,6 @@
private System.Windows.Forms.TextBox txJS9;
private System.Windows.Forms.CheckBox cbxCSVListing;
private System.Windows.Forms.CheckBox cbxListModifiers;
private System.Windows.Forms.CheckBox cbxAutoTabXML;
}
}

@ -75,6 +75,9 @@ namespace SCJMapper_V2
// Use PTU
cbxPTU.Checked = m_owner.UsePTU;
// AutoTabXML
cbxAutoTabXML.Checked = m_owner.AutoTabXML;
// Use CSV Listing
cbxCSVListing.Checked = m_owner.UseCSVListing;
cbxListModifiers.Checked = m_owner.ListModifiers;
@ -124,6 +127,9 @@ namespace SCJMapper_V2
}
m_owner.UsePTU = cbxPTU.Checked;
// AutoTabXML
m_owner.AutoTabXML = cbxAutoTabXML.Checked;
// Use CSV Listing
m_owner.UseCSVListing = cbxCSVListing.Checked;
m_owner.ListModifiers = cbxListModifiers.Checked;

@ -657,24 +657,6 @@ namespace SCJMapper_V2.Joystick
/// <returns>The last action as CryEngine compatible string</returns>
public override string GetLastChange( )
{
// TODO: Expand this out into a joystick class (see commit for details)
Dictionary<string, string> axies = new Dictionary<string, string>( )
{
{"X","x"},
{"Y","y"},
{"Z","z"},
{"RotationX","rotx"},
{"RotationY","roty"},
{"RotationZ","rotz"}
};
foreach ( KeyValuePair<string, string> entry in axies ) {
PropertyInfo axisProperty = typeof( JoystickState ).GetProperty( entry.Key );
if ( DidAxisChange2( ( int )axisProperty.GetValue( this.m_state, null ), ( int )axisProperty.GetValue( this.m_prevState, null ) ) )
this.m_lastItem = entry.Value;
}
int[] slider = m_state.Sliders;
int[] pslider = m_prevState.Sliders;
if ( DidAxisChange2( slider[0], pslider[0] ) ) m_lastItem = "slider1";
@ -695,6 +677,25 @@ namespace SCJMapper_V2.Joystick
m_lastItem = "button" + ( bi + 1 ).ToString( );
}
}
// TODO: Expand this out into a joystick class (see commit for details)
Dictionary<string, string> axies = new Dictionary<string, string>( )
{
{"X","x"},
{"Y","y"},
{"Z","z"},
{"RotationX","rotx"},
{"RotationY","roty"},
{"RotationZ","rotz"}
};
foreach ( KeyValuePair<string, string> entry in axies ) {
PropertyInfo axisProperty = typeof( JoystickState ).GetProperty( entry.Key );
if ( DidAxisChange2( (int)axisProperty.GetValue( this.m_state, null ), (int)axisProperty.GetValue( this.m_prevState, null ) ) )
this.m_lastItem = entry.Value;
}
return m_lastItem;
}

@ -345,7 +345,8 @@ namespace SCJMapper_V2.Options
}
else if ( type.ToLowerInvariant( ) == "xboxpad" ) {
string toID = TuneOptionID( GamepadCls.DeviceClass, nInstance );
this[toID].fromXML( xml );
if ( this.ContainsKey( toID ) ) // 20170513: bugfix if gamepad is in the XML but not connected right now - ignore
this[toID].fromXML( xml );
}
}

@ -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.29.0.63" )]
[assembly: AssemblyFileVersion( "2.29.0.63" )]
[assembly: AssemblyVersion( "2.30.0.64" )]
[assembly: AssemblyFileVersion( "2.30.0.64" )]

@ -26,8 +26,8 @@
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>63</ApplicationRevision>
<ApplicationVersion>2.29.0.%2a</ApplicationVersion>
<ApplicationRevision>64</ApplicationRevision>
<ApplicationVersion>2.30.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>

@ -107,7 +107,7 @@ namespace SCJMapper_V2
{
if ( disposing ) {
// dispose managed resources
if (m_MasterTree !=null ) m_MasterTree.Dispose( );
if ( m_MasterTree != null ) m_MasterTree.Dispose( );
}
// free native resources
}
@ -259,30 +259,6 @@ namespace SCJMapper_V2
}
/// <summary>
/// Gets the JS device that is used for one of the Inversion Items supported
/// </summary>
/// <param name="item">The Inversion item</param>
/// <returns>The device used or null</returns>
private DeviceCls GetActionInstance( OptionsInvert.Inversions item )
{
// must get the jsN information used for Options
string nodeText = "";
nodeText = FindAction( OptionsInvert.MappedActions[(int)item].Map, OptionsInvert.MappedActions[(int)item].Action );
if ( !string.IsNullOrWhiteSpace( nodeText ) ) {
DeviceCls dev = DeviceInst.JoystickListRef.Find_jsN( JoystickCls.JSNum( ActionTreeNode.CommandFromNodeText( nodeText ) ) );
if ( dev != null ) return dev;
else {
// could be a gamepad then
if ( ActionTreeNode.CommandFromNodeText( nodeText ).Contains( "xi_" ) ) {
return DeviceInst.GamepadRef;
} else return null; // nope...
}
}
return null;
}
/// <summary>
/// Dumps the actions to an XML string
/// </summary>
@ -291,7 +267,8 @@ namespace SCJMapper_V2
{
if ( ActionMaps != null ) {
return ActionMaps.toXML( fileName ); // just propagate if possible
} else {
}
else {
log.Error( "ActionTree-toXML: Program error - ActionMaps not yet created" );
return "";
}
@ -370,7 +347,8 @@ namespace SCJMapper_V2
foreach ( ActionTreeNode stn in tn.Nodes ) {
if ( ( stn.Tag != null ) && ( (bool)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
@ -485,7 +463,8 @@ 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,7 +487,8 @@ 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 ) ) {
@ -516,7 +496,8 @@ 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 ) ) {
@ -524,7 +505,8 @@ 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 ) ) {
@ -584,7 +566,8 @@ 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
@ -617,14 +600,16 @@ 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 );
NodeSelected( this.SelectedAction, this.SelectedCtrl ); // virtual event - as the selection does not change
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
@ -635,7 +620,8 @@ 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 );
@ -672,7 +658,8 @@ namespace SCJMapper_V2
NodeSelected( this.SelectedAction, this.SelectedCtrl ); // virtual event - as the selection does not change
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
@ -804,7 +791,8 @@ 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
@ -846,7 +834,8 @@ namespace SCJMapper_V2
if ( Ctrl.SelectedNode == stn ) NodeSelected( this.SelectedAction, this.SelectedCtrl );
Ctrl.SelectedNode = stn;
Ctrl.SelectedNode.EnsureVisible( );
} else {
}
else {
// have to search nodes of nodes
int ni = 0;
foreach ( ActionTreeInputNode sstn in stn.Nodes ) {
@ -931,93 +920,44 @@ namespace SCJMapper_V2
/// <summary>
/// Find a control that contains the Action (exact match)
/// Find all actions that are mapped to this input
/// </summary>
/// <param name="actionmap">The actionmap to find the string</param>
/// <param name="text">The string to find</param>
public string FindActionKey( string actionmap, string actionKey )
/// <param name="input">The input string to find</param>
public List<string> FindAllActions( string input )
{
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 "";
}
/// <summary>
/// Find a control that contains the Action (exact match)
/// </summary>
/// <param name="actionmap">The actionmap to find the string</param>
/// <param name="text">The string to find</param>
public string FindAction( string actionmap, string action )
{
log.Debug( "FindAction - 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.Action == action ) {
return stn.Text;
}
List<string> ret = new List<string>( );
if ( string.IsNullOrEmpty( input ) ) return ret; // nothing to find here...
if ( ActionCls.IsBlendedInput(input) ) return ret; // nothing to find here...
ret.Add( "Actions listed for Input: " + input );
ret.Add( "" );
ret.Add( "location - action - actionmap - activation mode" );
ret.Add( "" );
string aMode = "";
foreach ( ActionMapCls acm in ActionMaps ) {
// have to search Actions in Maps
foreach ( ActionCls ac in acm ) {
string l = ""; // return line composition
if ( ac.defBinding == input ) {
ret.Add( "" );
aMode = string.Format( "{0};{1}", ac.defActivationMode.Name, ac.defActivationMode.MultiTap );
l = string.Format( "{0} - {1} - {2} - {3}", "profile",ac.name, acm.name, aMode );
ret.Add( l );
}
}
}
return "";
}
/// <summary>
/// Find a control that contains the Action
/// </summary>
/// <param name="text">The string to find</param>
public string FindAction( string action )
{
return FindAction( "", action );
}
/// <summary>
/// Find a control that contains the Command
/// </summary>
/// <param name="actionmap">The actionmap to find the string</param>
/// <param name="text">The string to find</param>
public string FindCommand( string actionmap, string command )
{
log.Debug( "FindCommand - 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 ) {
foreach ( ActionTreeInputNode istn in stn.Nodes ) {
if ( istn.Command.Contains( command ) ) {
return stn.Text + " - " + istn.Text;
}
foreach ( ActionCommandCls acc in ac.inputList ) {
if ( acc.DevInput == input ) {
aMode = string.Format( "modified;{0};{1}", acc.ActivationMode.Name, acc.ActivationMode.MultiTap );
if ( acc.ActivationMode == ActivationMode.Default )
aMode = string.Format( "default" );
l = string.Format( "{0} - {1} - {2} - {3}", "mapped ", ac.name, acm.name, aMode );
ret.Add( l );
}
}
}
}
return "";
return ret;
}
/// <summary>
/// Find a control that contains the Command
/// </summary>
/// <param name="text">The string to find</param>
public string FindCommand( string command )
{
return FindCommand( "", command );
}
/// <summary>
/// Find a control the the actionmap that contains the Text
/// </summary>
@ -1060,10 +1000,12 @@ namespace SCJMapper_V2
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 "";
}
else return "";
}
}
@ -1089,7 +1031,8 @@ namespace SCJMapper_V2
string actionID = DS_ActionMap.ActionID( atn.Parent.Name, ac.key, acc.NodeIndex );
return actionID;
} 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
@ -1101,7 +1044,8 @@ namespace SCJMapper_V2
string actionID = DS_ActionMap.ActionID( atn.Parent.Name, ac.key, acc.NodeIndex );
return actionID;
} else return "";
}
else return "";
}
}
@ -1115,10 +1059,12 @@ namespace SCJMapper_V2
if ( Ctrl.SelectedNode.Level == 1 ) {
ActionTreeNode matn = FindMasterAction( (ActionTreeNode)Ctrl.SelectedNode );
return ActionTreeNode.CommandFromNodeText( 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.CommandFromNodeText( matn.Text );
} else return "";
}
else return "";
}
}
@ -1144,7 +1090,8 @@ namespace SCJMapper_V2
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 {
}
else {
; // DEBUG should not happen...
}
}
@ -1157,7 +1104,8 @@ namespace SCJMapper_V2
NodeSelected( this.SelectedAction, this.SelectedCtrl );
nTree.Dirty = true;
return nTree;
} else {
}
else {
return null;
}
@ -1195,12 +1143,14 @@ 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 );
}
@ -1241,7 +1191,8 @@ namespace SCJMapper_V2
repList += ";js2-tag;js2-input;js2-mod-tag;js2-mod-mode;js2-mod-multi";
repList += ";js3-tag;js3-input;js3-mod-tag;js3-mod-mode;js3-mod-multi";
repList += ";js4-tag;js4-input;js4-mod-tag;js4-mod-mode;js4-mod-multi";
} else {
}
else {
repList += ";kbd-tag;kbd-input"; // col description line
repList += ";mouse-tag;mouse-input";
repList += ";xpad-tag;xpad-input";
@ -1271,7 +1222,8 @@ namespace SCJMapper_V2
// note: don't add trailing semicolons as the are applied in the output formatting
if ( listModifiers ) {
kbA = "n.a.;;;;"; // defaults tag;input;mod-tag;mod-name;mod-mult
} else {
}
else {
kbA = "n.a.;"; // defaults tag;input
}
moA = kbA; xbA = kbA;
@ -1284,7 +1236,7 @@ namespace SCJMapper_V2
if ( !string.IsNullOrEmpty( acc.Input ) ) {
// set modified - note: don't add trailing semicolons as the are applied in the output formatting
string aTag = "modified"; //default or modified
string aMode = string.Format( "modified;{0};{1}", ac.defActivationMode.Name, ac.defActivationMode.MultiTap );
string aMode = string.Format( "modified;{0};{1}", acc.ActivationMode.Name, acc.ActivationMode.MultiTap );
// change if they are default mappings
if ( acc.DevInput == ac.defBinding ) aTag = "default";
if ( acc.ActivationMode == ActivationMode.Default ) aMode = string.Format( "default;{0};{1}", ac.defActivationMode.Name, ac.defActivationMode.MultiTap );
@ -1298,7 +1250,8 @@ namespace SCJMapper_V2
case ActionCls.ActionDevice.AD_Gamepad: xbA = string.Format( "{0};{1};{2}", aTag, acc.Input, aMode ); break;
default: break;
}//switch
} else {
}
else {
switch ( ActionCls.ADeviceFromDevID( acc.DevID ) ) {
case ActionCls.ActionDevice.AD_Keyboard: kbA = string.Format( "{0};{1}", aTag, acc.Input ); break;
case ActionCls.ActionDevice.AD_Mouse: moA = string.Format( "{0};{1}", aTag, acc.Input ); break;

@ -1,10 +1,10 @@
SC Joystick Mapper V 2.29 - Build 63 BETA
(c) Cassini, StandardToaster - 06-May-2017
SC Joystick Mapper V 2.30 - Build 64 BETA
(c) Cassini, StandardToaster - 13-May-2017
Contains 9 files:
SCJMapper.exe The program (V2.29)
SCJMapper.exe.config Program config (V2.29) - MUST be in the same folder as the Exe file
SCJMapper.exe The program (V2.30)
SCJMapper.exe.config Program config (V2.30) - 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.29beta.pdf Quick Guide
SCJMapper_QGuide V2.30beta.pdf Quick Guide
ReadMe.txt This file
graphics folder Skybox Images (V2.28) - graphics folder MUST be in the same folder as the Exe file
@ -28,6 +28,13 @@ https://github.com/SCToolsfactory/SCJMapper-V2
Scanned for viruses before packing...
cassini@burri-web.org
Changelog:
V 2.30 - BETA Build 64
- add - Tab to show all mappings for the current input (Tabbed with XML other Dump items)
- add - Setting (enabled, disabled -> default) to automatically switch the new tabs - either Input or Dump
- fix - issue with user activations modes while dumping the mapping list
- fix - issue with loading a map with gamepad mappings and the gamepad is not connected
- update - doc SCJMapper_QGuide V2.30beta.pdf
Changelog:
V 2.29 - BETA Build 63
- add - Calibrate gamepad thumb axes (press ABXY buttons all together and wait 2 sec - should zero all 4 axes)

Loading…
Cancel
Save