V 2.34 - BETA Build 68

- improvement - complete rework of XML defaultProfile/mapping parsing
- add - provide CIG mappings from game assets
- update - unclutter GUI, allow more scaling
- internal cleanup - consistent type naming, others
- fix - overwritten profile actions removed in Assignment Tab
- update - doc SCJMapper_QGuide V2.34beta.pdf
pull/104/head v2.34beta
bm98 6 years ago
parent 8a7819cca8
commit 66f3d27771

789
FormMain.Designer.cs generated

File diff suppressed because it is too large Load Diff

@ -135,7 +135,7 @@ namespace SCJMapper_V2
private void UpdateDDMapping(string mapName )
{
tsDDbtMappings.Text = mapName;
msSelectMapping.Text = mapName;
m_AppSettings.DefMappingName = mapName; m_AppSettings.Save( );
}
@ -178,9 +178,14 @@ namespace SCJMapper_V2
private void LoadMappingDD()
{
SCMappings.UpdateMappingNames( );
tsDDbtMappings.DropDownItems.Clear( );
msSelectMapping.DropDownItems.Clear( );
foreach ( string s in SCMappings.MappingNames ) {
tsDDbtMappings.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ) );
if ( !SCMappings.IsUserMapping( s ) ) {
msSelectMapping.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ), IL2.Images["RSI"] );
}
else {
msSelectMapping.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ), IL2.Images["User"] );
}
}
}
@ -189,8 +194,8 @@ namespace SCJMapper_V2
/// </summary>
private void SCFileIndication()
{
if ( string.IsNullOrEmpty( SCPath.SCClientMappingPath ) ) tsDDbtMappings.BackColor = MyColors.InvalidColor;
else tsDDbtMappings.BackColor = MyColors.MappingColor;
if ( string.IsNullOrEmpty( SCPath.SCClientMappingPath ) ) msSelectMapping.BackColor = MyColors.InvalidColor;
else msSelectMapping.BackColor = MyColors.MappingColor;
}
@ -229,7 +234,7 @@ namespace SCJMapper_V2
// load mappings
log.Debug( "Loading Mappings" );
LoadMappingDD( );
tsDDbtMappings.Text = m_AppSettings.DefMappingName;
msSelectMapping.Text = m_AppSettings.DefMappingName;
SCFileIndication( );
@ -237,7 +242,7 @@ namespace SCJMapper_V2
log.Debug( "Loading Other" );
txMappingName.Text = m_AppSettings.MyMappingName;
SetRebindField( txMappingName.Text );
foreach ( ToolStripDropDownItem d in tsDDbtMappings.DropDownItems ) {
foreach ( ToolStripDropDownItem d in msSelectMapping.DropDownItems ) {
if ( d.Text == txMappingName.Text ) {
UpdateDDMapping( txMappingName.Text );
break;
@ -286,7 +291,7 @@ namespace SCJMapper_V2
if ( jsIndex >= 0 ) DeviceInst.JoystickInst = DeviceInst.JoystickListRef[jsIndex];
// init PTU folder usage sign
lblPTU.Visible = false; // m_AppSettings.UsePTU; no longer used
//lblPTU.Visible = false; // m_AppSettings.UsePTU; no longer used
if ( m_AppSettings.UsePTU ) log.Debug( "Using PTU Folders" );
// Auto Tab XML
@ -341,11 +346,8 @@ namespace SCJMapper_V2
Brush foreBrush = new SolidBrush( Color.Black );
//This construct will hell you to deside which tab page have current focus
//to change the style.
//This construct will tell you which tab page has focus to change the style.
if ( e.Index == this.tc1.SelectedIndex ) {
//This line of code will help you to change the apperance like size,name,style.
f = new Font( e.Font, FontStyle.Bold | FontStyle.Bold );
f = new Font( e.Font, FontStyle.Bold );
Rectangle tabRect = tc1.Bounds;
@ -418,7 +420,7 @@ namespace SCJMapper_V2
m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked );
// Init with default profile filepath
m_AT.LoadProfileTree( addDefaultBinding );
lblProfileUsed.Text = SCDefaultProfile.UsedDefProfile; // SCA 2.2 show used profile
tslblProfileUsed.Text = SCDefaultProfile.UsedDefProfile; // SCA 2.2 show used profile
// Activation Update
tdiCbxActivation.Items.Clear( );
@ -645,6 +647,7 @@ namespace SCJMapper_V2
; // just ignore
}
UpdateTable( );
UpdateAssignmentList( );
}
@ -739,7 +742,7 @@ namespace SCJMapper_V2
cbxThrottle.Checked = false; cbxThrottle.Enabled = false;
}
// Update joystick modifiers - not currently used
btMakeMod.Enabled = JoystickCls.ValidModifier( ctrl );
//btMakeMod.Enabled = JoystickCls.ValidModifier( ctrl );
}
@ -816,25 +819,56 @@ namespace SCJMapper_V2
else MySounds.PlayCannot( );
}
//TODO
// possibly obsolete - we dont support to make own modifiers - button is invisible
private void btMakeMod_Click( object sender, EventArgs e )
// General Area Items
private void btDump_Click( object sender, EventArgs e )
{
Dump( );
}
// possibly obsolete - we dont support to make own modifiers
private void Cbx_CheckedChanged( object sender, EventArgs e )
private void btGrab_Click( object sender, EventArgs e )
{
Grab( );
}
private void btClearFilter_Click( object sender, EventArgs e )
{
txFilter.Text = "";
}
// General Area Items
private void txFilter_TextChanged( object sender, EventArgs e )
{
m_AT.FilterTree( txFilter.Text );
}
private void btDump_Click( object sender, EventArgs e )
private void cbxAutoTabXML_CheckedChanged( object sender, EventArgs e )
{
Dump( );
m_AppSettings.AutoTabXML = cbxAutoTabXML.Checked; m_AppSettings.Save( );
}
private void btDumpList_Click( object sender, EventArgs e )
// Toolstrip Items
private void meResetDefaults_Click( object sender, EventArgs e )
{
// start over and if chosen, load defaults from SC game
InitActionTree( true );
rtb.Text = "";
UpdateTable( );
UpdateAssignmentList( );
}
private void meResetEmpty_Click( object sender, EventArgs e )
{
// start over
cbxShowMappedOnly.Checked = false; // else it might get empty..
InitActionTree( false );
rtb.Text = "";
UpdateTable( );
UpdateAssignmentList( );
}
private void meDumpMappingList_Click( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_XML );
@ -842,122 +876,246 @@ namespace SCJMapper_V2
rtb.Text = string.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActionsCSV( m_AppSettings.ListModifiers ) );
else
rtb.Text = string.Format( "-- {0} - SC Joystick Mapping --\n{1}", DateTime.Now, m_AT.ReportActions( ) );
}
private void btDumpLog_Click( object sender, EventArgs e )
private void meDumpLogfile_Click( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_XML );
rtb.Text = string.Format( "-- {0} - SC Joystick AC Log Controller Detection --\n{1}", DateTime.Now, SCLogExtract.ExtractLog( ) );
}
private void btDumpProfile_Click( object sender, EventArgs e )
private void meDumpDefaultProfile_Click( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_XML );
rtb.Text = SCDefaultProfile.DefaultProfile( );
}
private void btGrab_Click( object sender, EventArgs e )
private void meDumpActiontreeAsXML_Click( object sender, EventArgs e )
{
Grab( );
Dump( );
}
private void btClearFilter_Click( object sender, EventArgs e )
// Dialogs
// Show the Table Window
private void meShowToggleTable_Click( object sender, EventArgs e )
{
txFilter.Text = "";
bool created = false;
if ( FTAB == null ) {
FTAB = new FormTable( );
FTAB.EditActionEvent += FTAB_EditActionEvent;
FTAB.UpdateEditEvent += FTAB_UpdateEditEvent;
created = true;
}
if ( FTAB.Visible ) {
m_AppSettings.FormTableSize = FTAB.LastSize;
m_AppSettings.FormTableLocation = FTAB.LastLocation;
m_AppSettings.FormTableColumnWidth = FTAB.LastColSize;
FTAB.Hide( );
}
else {
FTAB.Show( );
if ( created ) {
FTAB.Size = m_AppSettings.FormTableSize;
FTAB.Location = m_AppSettings.FormTableLocation;
FTAB.LastColSize = m_AppSettings.FormTableColumnWidth;
}
// reload the data to display
UpdateTable( );
}
}
private void txFilter_TextChanged( object sender, EventArgs e )
private void meShowOptionsDialog_Click( object sender, EventArgs e )
{
m_AT.FilterTree( txFilter.Text );
timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy
FormOptions OPT = new FormOptions( );
// Have to attach here to capture the currently valid settings
UpdateTuningItems( );
UpdateMoreOptionItems( );
DeviceList devlist = new DeviceList( );
if ( m_AppSettings.DetectGamepad && ( DeviceInst.GamepadRef != null ) ) {
devlist.Add( DeviceInst.GamepadRef );
}
devlist.AddRange( DeviceInst.JoystickListRef );
OPT.TuningOptions = m_AT.ActionMaps.TuningOptions;
OPT.DeviceOptions = m_AT.ActionMaps.DeviceOptions;
OPT.Devicelist = devlist;
OPT.ShowDialog( this );
m_AT.Dirty = true;
OPT = null; // get rid and create a new one next time..
devlist = null;
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
timer1.Enabled = true;
}
private void cbxAutoTabXML_CheckedChanged( object sender, EventArgs e )
private void meShowDeviceTuningDialog_Click( object sender, EventArgs e )
{
m_AppSettings.AutoTabXML = cbxAutoTabXML.Checked; m_AppSettings.Save( );
}
timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy
// Toolstrip Items
JSCAL = new OGL.FormJSCalCurve( );
private void tsBtReset_ButtonClick( object sender, EventArgs e )
{
// Have to attach here to capture the currently valid settings
UpdateTuningItems( );
// run
JSCAL.TuningOptions = m_AT.ActionMaps.TuningOptions;
JSCAL.ShowDialog( this );
m_AT.Dirty = true;
JSCAL = null; // get rid and create a new one next time..
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
timer1.Enabled = true;
}
private void resetEmptyToolStripMenuItem_Click( object sender, EventArgs e )
// Settings
private void meSettingsDialog_Click( object sender, EventArgs e )
{
// start over
InitActionTree( false );
rtb.Text = "";
UpdateTable( );
// have to stop polling while the Settings window is open
timer1.Enabled = false;
if ( m_AppSettings.ShowSettings( "" ) != System.Windows.Forms.DialogResult.Cancel ) {
m_AppSettings.Reload( ); // must reload in case of any changes in the form
// then reload the profile and mappings
LoadMappingDD( );
// indicates (in)valid folders
SCFileIndication( );
// now update the contents according to new settings
foreach ( JoystickCls j in DeviceInst.JoystickListRef ) j.ApplySettings( ); // update Seetings
m_AT.IgnoreMaps = m_AppSettings.IgnoreActionmaps;
// and start over with an empty tree
InitActionTree( false );
UpdateTable( );
}
timer1.Enabled = true;
}
private void resetDefaultsToolStripMenuItem_Click( object sender, EventArgs e )
private void meJsReassignDialog_Click( object sender, EventArgs e )
{
// start over and if chosen, load defaults from SC game
InitActionTree( true );
rtb.Text = "";
UpdateTable( );
// have to stop polling while the Reassign window is open
timer1.Enabled = false;
if ( DeviceInst.JoystickListRef.ShowReassign( ) != DialogResult.Cancel ) {
// copy the action tree while reassigning the jsN mappings from OLD to NEW
ActionTree newTree = m_AT.ReassignJsN( DeviceInst.JoystickListRef.JsReassingList );
// we have still the old assignment in the ActionMap - change it here (map does not know about the devices)
JoystickCls j = null;
// for all supported jsN devices
for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
j = DeviceInst.JoystickListRef.Find_jsN( i + 1 );
if ( j != null ) {
newTree.ActionMaps.jsN[i] = j.DevName; newTree.ActionMaps.jsNGUID[i] = j.DevInstanceGUID;
}
else {
newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsNGUID[i] = "";
}
}
m_AT.NodeSelectedEvent -= M_AT_NodeSelectedEvent; // disconnect the Event
m_AT = newTree; // make it the valid one
m_AT.NodeSelectedEvent += M_AT_NodeSelectedEvent; // reconnect the Event
m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked );
m_AT.ReloadTreeView( );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
timer1.Enabled = true;
}
private void tsDDbtMappings_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
// Load maps
private void msSelectMapping_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
{
UpdateDDMapping( e.ClickedItem.Text );
}
private void loadToolStripMenuItem_Click( object sender, EventArgs e )
private void meDefaultsLoadAndGrab_Click( object sender, EventArgs e )
{
// start over
InitActionTree( true );
rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName );
Grab( );
if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) {
txMappingName.Text = m_AppSettings.DefMappingName;
SetRebindField( txMappingName.Text );
}
btGrab.BackColor = MyColors.DirtyColor;
btDump.BackColor = MyColors.DirtyColor;
txMappingName.BackColor = MyColors.ValidColor;
}
private void loadAndGrabToolStripMenuItem_Click( object sender, EventArgs e )
private void meResetLoadAndGrab_Click( object sender, EventArgs e )
{
// start over
InitActionTree( false );
rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName );
Grab( );
if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) {
txMappingName.Text = m_AppSettings.DefMappingName;
SetRebindField( txMappingName.Text );
}
btDump.BackColor = MyColors.DirtyColor;
Grab( );
txMappingName.BackColor = MyColors.ValidColor;
}
private void resetLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e )
private void meLoadAndGrab_Click( object sender, EventArgs e )
{
// start over
InitActionTree( false );
rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName );
Grab( );
if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) {
txMappingName.Text = m_AppSettings.DefMappingName;
SetRebindField( txMappingName.Text );
}
Grab( );
btDump.BackColor = MyColors.DirtyColor;
txMappingName.BackColor = MyColors.ValidColor;
}
private void defaultsLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e )
private void meLoad_Click( object sender, EventArgs e )
{
// start over
InitActionTree( true );
rtb.Text = SCMappings.Mapping( m_AppSettings.DefMappingName );
Grab( );
if ( SCMappings.IsUserMapping( m_AppSettings.DefMappingName ) ) {
txMappingName.Text = m_AppSettings.DefMappingName;
SetRebindField( txMappingName.Text );
}
btDump.BackColor = MyColors.DirtyColor;
btGrab.BackColor = MyColors.DirtyColor;
txMappingName.BackColor = MyColors.ValidColor;
}
private void tsDDbtMappings_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
{
}
private void loadToolStripMenuItem_Click( object sender, EventArgs e )
{
}
private void loadAndGrabToolStripMenuItem_Click( object sender, EventArgs e )
{
}
private void resetLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e )
{
}
private void defaultsLoadAndGrabToolStripMenuItem_Click( object sender, EventArgs e )
{
}
// Context Menu Items
// RTB Menu
@ -1221,62 +1379,6 @@ namespace SCJMapper_V2
}
// Settings
private void btSettings_Click( object sender, EventArgs e )
{
// have to stop polling while the Settings window is open
timer1.Enabled = false;
if ( m_AppSettings.ShowSettings( "" ) != System.Windows.Forms.DialogResult.Cancel ) {
m_AppSettings.Reload( ); // must reload in case of any changes in the form
// then reload the profile and mappings
LoadMappingDD( );
// indicates (in)valid folders
SCFileIndication( );
// now update the contents according to new settings
foreach ( JoystickCls j in DeviceInst.JoystickListRef ) j.ApplySettings( ); // update Seetings
m_AT.IgnoreMaps = m_AppSettings.IgnoreActionmaps;
// and start over with an empty tree
InitActionTree( false );
UpdateTable( );
}
timer1.Enabled = true;
}
private void btJsReassign_Click( object sender, EventArgs e )
{
// have to stop polling while the Reassign window is open
timer1.Enabled = false;
if ( DeviceInst.JoystickListRef.ShowReassign( ) != DialogResult.Cancel ) {
// copy the action tree while reassigning the jsN mappings from OLD to NEW
ActionTree newTree = m_AT.ReassignJsN( DeviceInst.JoystickListRef.JsReassingList );
// we have still the old assignment in the ActionMap - change it here (map does not know about the devices)
JoystickCls j = null;
// for all supported jsN devices
for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
j = DeviceInst.JoystickListRef.Find_jsN( i + 1 );
if ( j != null ) {
newTree.ActionMaps.jsN[i] = j.DevName; newTree.ActionMaps.jsNGUID[i] = j.DevInstanceGUID;
}
else {
newTree.ActionMaps.jsN[i] = ""; newTree.ActionMaps.jsNGUID[i] = "";
}
}
m_AT.NodeSelectedEvent -= M_AT_NodeSelectedEvent; // disconnect the Event
m_AT = newTree; // make it the valid one
m_AT.NodeSelectedEvent += M_AT_NodeSelectedEvent; // reconnect the Event
m_AT.DefineShowOptions( cbxShowJoystick.Checked, cbxShowGamepad.Checked, cbxShowKeyboard.Checked, cbxShowMouse.Checked, cbxShowMappedOnly.Checked );
m_AT.ReloadTreeView( );
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
}
timer1.Enabled = true;
}
// Joystick Tuning
@ -1427,55 +1529,6 @@ namespace SCJMapper_V2
}
private void btJSTuning_Click( object sender, EventArgs e )
{
timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy
JSCAL = new OGL.FormJSCalCurve( );
// Have to attach here to capture the currently valid settings
UpdateTuningItems( );
// run
JSCAL.TuningOptions = m_AT.ActionMaps.TuningOptions;
JSCAL.ShowDialog( this );
m_AT.Dirty = true;
JSCAL = null; // get rid and create a new one next time..
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
timer1.Enabled = true;
}
private void btOptions_Click( object sender, EventArgs e )
{
timer1.Enabled = false; // must be off while a modal window is shown, else DX gets crazy
FormOptions OPT = new FormOptions( );
// Have to attach here to capture the currently valid settings
UpdateTuningItems( );
UpdateMoreOptionItems( );
DeviceList devlist = new DeviceList( );
if ( m_AppSettings.DetectGamepad && ( DeviceInst.GamepadRef != null ) ) {
devlist.Add( DeviceInst.GamepadRef );
}
devlist.AddRange( DeviceInst.JoystickListRef );
OPT.TuningOptions = m_AT.ActionMaps.TuningOptions;
OPT.DeviceOptions = m_AT.ActionMaps.DeviceOptions;
OPT.Devicelist = devlist;
OPT.ShowDialog( this );
m_AT.Dirty = true;
OPT = null; // get rid and create a new one next time..
devlist = null;
if ( m_AT.Dirty ) btDump.BackColor = MyColors.DirtyColor;
timer1.Enabled = true;
}
// Keyboard Input
@ -1532,11 +1585,8 @@ namespace SCJMapper_V2
e.Handled = true;
}
// text of input has changed
private void lblLastJ_TextChanged( object sender, EventArgs e )
private void UpdateAssignmentList()
{
AutoTabXML_Assignment( EATabXML.Tab_Assignment );
string devInput = Act.DevInput( lblLastJ.Text, InputMode );
RTF.RTFformatter RTF = new RTF.RTFformatter( );
m_AT.FindAllActionsRTF( devInput, RTF );
@ -1547,6 +1597,12 @@ namespace SCJMapper_V2
}
lbxOther.Rtf = RTF.RTFtext;
}
// text of input has changed
private void lblLastJ_TextChanged( object sender, EventArgs e )
{
AutoTabXML_Assignment( EATabXML.Tab_Assignment );
UpdateAssignmentList( );
}
// maintain the global modifier store
@ -1656,38 +1712,6 @@ namespace SCJMapper_V2
}
}
// Show the Table Window
private void btTable_Click( object sender, EventArgs e )
{
bool created = false;
if ( FTAB == null ) {
FTAB = new FormTable( );
FTAB.EditActionEvent += FTAB_EditActionEvent;
FTAB.UpdateEditEvent += FTAB_UpdateEditEvent;
created = true;
}
if ( FTAB.Visible ) {
m_AppSettings.FormTableSize = FTAB.LastSize;
m_AppSettings.FormTableLocation = FTAB.LastLocation;
m_AppSettings.FormTableColumnWidth = FTAB.LastColSize;
FTAB.Hide( );
}
else {
FTAB.Show( );
if ( created ) {
FTAB.Size = m_AppSettings.FormTableSize;
FTAB.Location = m_AppSettings.FormTableLocation;
FTAB.LastColSize = m_AppSettings.FormTableColumnWidth;
}
// reload the data to display
UpdateTable( );
}
}
// called when the user clicks Update from the Table Window
private void FTAB_UpdateEditEvent( object sender, UpdateEditEventArgs e )
{
@ -1712,6 +1736,5 @@ namespace SCJMapper_V2
{
m_AT.FindAndSelectActionKey( e.Actionmap, e.Actionkey, e.Nodeindex );
}
}
}

@ -128,7 +128,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8
EAAAAk1TRnQBSQFMAgEBCQEAAagBEQGoAREBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
EAAAAk1TRnQBSQFMAgEBCQEAAVgBEgFYARIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -207,278 +207,6 @@
<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>
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
x1//2Q==
</value>
</data>
<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="btSaveMyMapping.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
@ -551,42 +279,287 @@
Tesk88046SuRb2gfwdMB6S/DHs/UzS4d0QAAAABJRU5ErkJggg==
</value>
</data>
<data name="tsBtReset.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="label4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
VEPFEv0j3g3A94woz3mmbBnHX//Z
</value>
</data>
<data name="tsDDbtMappings.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<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>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>555, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>894, 17</value>
</metadata>
<data name="msSelectMapping.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
@ -601,32 +574,127 @@
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="tsBtLoad.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<metadata name="IL2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>999, 17</value>
</metadata>
<data name="IL2.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAM9SURBVEhL7dTrU0xhHAfww7htWmIlRSUiacbf4BVvvGDM
MORaRjEYsu2E0iS3WKKLbrIIG9lNi213H7nMItnOnm1ach9D1O7Wbp1okfH1nC3NYMQ4r8z4znzenfl9
n9885xzmf36b/Pz8ULVaXcpxXA/Lsl6LxcILbDZbj8lk4gsLCxf3Pfp3ocNLHA4HfhWj0dgil8snCM9m
ZWVJB5Kenj6KGuIb/C06nY54PB50dXXB7Xb3a2trg9frhdPphMFg6DabzR3fthPcq7vP041599NHPP+E
5TueNHXZ7fbPzZy1xaJWze4bzzBarZYIG/A8j/b29u+4XC50d3f37fJzhIOcqLVAWcsit45DAduIYs6O
+JyS5pEL18T0F7S2tqKzs9N36h8JJT/iOzz44HiL+cVVYCoaMJQ8w/DqRximb8Iw42MEcTxCign8l6ck
+gpeN7/Bx/fvgE/0tJ/e/x7Nqwc2BB++gojaL4ipdmKmwdVL78As8wfE3PBApsgjzAWNhnjaXHC3tiD3
ag0UlQRpuhrsHMD+6ltYV1qO0IIbmGFyIlr3nHrRb6b+NaI0jyFLOkIYA71kr+MNEk7rwRwzY/BFO4aU
cwMapGYhqWjEDP0rRGuaEFXxAFEXH/aLrnqG6eUNCNiSTZh7NUbSyNYjXKlFUOVLTCvjEHnG9ofqEVlG
nWG/M/18I6aerEPAJmVvgbXegil7ziH4xH1MOW6mbosSSYdHFN1EwPr9hKmlBTYrbc48hcD86wjPM4k2
ufA6wo5W04I9hLl9zUg4lsXU9OOQKS8jVHlJtLDsK5h0QANpglBgNBD6RSJiewFGZ6gRknlWtIl7yxGc
UQbp2oy+AqsV4Yoc+KeUIGiHeBPSSjF+WxGk8WlCwVVSb+UQnnQIIzcfwXh5jmhBijwEbj0KaRwtEC6Z
tTUgZMM+SBL3YdzGA6IFbjqIcRuyIF25jTA1VdqSu3X09Uw6iKGrdmJsQqZossTdGLN2F/xXKAhzqqgo
rFJ99uTc1ENgFm1FwOpU8eJS6fAUSGKT1/v+qCqVasS8lMw5zILNKr+l8juSZYprklgF+Rt+sYqbfsuS
b0mWyNfJ4pKlvoJ/OAzzFclFUL2L/h02AAAAAElFTkSuQmCC
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
GQAAAk1TRnQBSQFMAgEBAwEAARgBAAEYAQABMAEAATABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABwAMAATADAAEBAQABCAYAASQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/2sAHP8JAAH/SAAB/wL0
AfME8AHzAvQB/0MAAf8B8wG6HKwBugHzAf9KAAH/AfIBBwG0AYsMawGLAfcBvAHzAf8aAAH0AfABBwHv
ApIB7wEHAfAB9BgAAf8B8wGyIKwBsgHzAf9GAAHzAfcWawG7AfQVAAH/AfEB9wHvAQcCvALxArwBBwHv
AfcB8QH/FAAB/wEJJKwBCQH/QwAB9AG7GmsBuwH0EgAB8QGSAe8B8ArxAfAB7wGSAfESAAH/AQkmrAEJ
Af9BAAHzAmsaigJrAfQPAAH/AfAB7wHwDvEB8AHvAfAB/w8AAf8B8yisAfMB/0AAAfcBaxyKAWsBuw4A
AfQBvAEHBPEB8AH3AZABiwJrAosBkQG8BPEBBwG8AfQOAAH/KqwB/z8AAfQBax4GAWsB/wwAAf8BvAEH
BPEBkQprAZEBvAPxAQcBvAH/DQAB8yqsAfM/AAHzAWseigFrAfMMAAHwAQcD8QG7A2sCigGLAvMBiwOK
AmsBkQPxAQcB8A0AAboqrAG6PwAB9AFrHooBawHzCwAB8QHvA/EB9wFrAYoEBgG7Av8BtAQGAYoBawGR
A/EB7wHxCwAB/wGyBqwXsw6sAf8+AAH/AWseigFrAfQKAAH/AZIB8ALxAe8BawEGBYoBkALzAYsFigEG
AWsBkQLxAfABkgH/CgAB/wesAbMBZgINGWYBswesAf8/AAGQHooBiwsAAfEBBwPxAWsRBgGKAWsBvALx
AQcB8QoAAf8GrAGzAa0BDQEQBQ0GQwpmBUMBrQGzBqwB/z0AAf8B9AEHAYoBkBmKAYsBkAEGAbwKAAH/
AZID8QGRE4oBBgGRA/EBkgH/CQAB/wasAbMBrQkNBUMIZgVDAQ0BrQGzBqwB/zgAAf8BGwEaAXkBUgMr
AWsCkBeLApABgQGRCwAB8wHvAvIB8QFrCYoCawmKAWsBvALyAe8B8wkAAf8GrAGzAa0NDQFDBWYCQwFm
AkMEDQGtAbMGrAH/NgAB8wGZAisBMQUyAUsBawKzAZATiwKQAbMBkAFrAfILAAHwAQcC8gHvAYoGiwGK
AYsBuwK8AbsBiwGKBosBigGRAvIBBwHwCQAB/wasArMODQJDA2YEQwUNArMGrAH/NAAB9AGZASsKMgFL
AWsBkAKzEZADswGKAWsB8gwAAQcB8ALyAZEBigWQAYoBiwG8BPEBvAGLAYoFkAGKAYsC8gHwAQcJAAH/
BqwCsw8NBkMHDQKzBqwB/zMAAfMBKwExDDIBTAHqAYoFswmQBbMBgQFrAQcB/w0AAfcB8QLyAosBswG6
AbMCkAEGAe8G8gHvAQYCkAGzAboBswGQAWsC8gHxAfcJAAH/BqwCswINAmUEDQRmAWUHZgENAmYBZQEN
ARACDQKzBqwB/zMAAXkQMgFMAeoBawGKAYEBkAGzB5ABswGQAbMBigFrAZEBvAH/DwABkgPyAYsBkAH0
Af8BGQKzAWsB8AbyAfEBawKzAfQB/wEZAbMBawHwAvIBkgkAAf8GrAKzAQ0BQwGzAdsBiwINAWwBugHb
AbMDiwG0A7oB2wG0AUMBswHbAbMEDQKzBqwB/zIAAf8BKxIyATEBTAFKAQYJswGKAbsB8wH/EgABkgPy
AYsBswH0Af8BGQKzAWsB8gbzAfIBawKzAfQB/wEZAbMBawHwAvIBkgkAAf8GrAKzAg0BtAHbAbMCDQGz
A9sCkAGLAbQF2wFsAYsC2wFmAg8BDQKzBqwB/zIAAfMBKxQyAUoBigmzAYoBuxQAAfcB8gHzAfIBiwGQ
AbMBugOzAYoBuwH/BPMB/wG7AYoDswG6ArMBawHyAfMB8gH3CQAB/wasArMCDQGQAtsBZgENAbQC2wG0
A4sBkAO0AtsBiwFsAtsBiwMPArMGrAH/MgAB9AErFDIBbAuzAWsB/xMAAQcB8AH0AfIBkQGQBrMBiwH0
BP8B9AGLAZAGswGLAfIB9AHwAQcJAAH/BqwCswEPAQ0BbALbAbQBiwLbAbMHDQFmAtsBtAFmAtsBkAEK
Ag8CswasAf8yAAH/ASsTMgFSAWsLswGKAfMTAAHwAbwB9AHzAbsBigazAYoBiwG7AvMBuwGLAYoGswGB
AZEB8wH0AbwB8AkAAf8GrAKzAQ8BDQFmBtsBiwYNAYsD2wGzAQ0BtAHbAbQBDQIPArMGrAH/MwABUhMy
AVEBiguzAYoBuxMAAfMB7wH/AfMB8gFrAbMBuQazAYoCawGKCLMBigHwAfMB9AHvAfMJAAH/BqwCswEP
Ag0BugXbAbQBZgQNAZAD2wG0AWYBDQGRAtsBZgEKAQ8CswasAf8zAAEaATESMgFKAZAMswGREwAB/wGS
AfQB/wHzAbQBigHaAbkPswHaAbMBkQHzAf8B9AGSAf8JAAH/BqwBuQGzAg8BDQG0AtsBtATbAZABDQFm
AbQD2wGLAQ0BDwEKAYsC2wFsAQ4BDwGzAbkGrAH/MwAB/wErATIBUxAyAWwNswFrAf8TAAHxAbwB/wLz
AWsBswHaDrkB2gG5AWsB8AHzAf8BvAHxCgAB/wasAboBswEPAQ4BCgGLAtsBZgFsAbQD2wFsAboC2wG6
AWwEDQFmAtsBkAEKAQ8BswG6BqwB/zQAARoBKwJZD1MBbA2zAQYB9BMAAf8BkgH0Af8B8wG7AWsC2gW5
AvQFuQLaAYoB9wHzAf8B9AGSAf8KAAH/BqwBugGzAQ8CCgFsAtsBiwENAQ8BiwLbAZABugHbAboBFQYN
AboB2wG0AQ0BDwGzAboGrAH/NQABGgErATICWQ1TAWwNswGKAfMUAAGSAQcC/wHzAbUBawG5AtoCuQHc
Av8B3AK5A9oBigGRAfMC/wEHAZILAAH/BqwBugGzAQ4BCgEPAUMD2wO6AtsCtALbBLoDiwG0AtsBDQEP
AbMBugasAf82AAH0AZkBMQVZCVMBbA2zAYoB8hQAAfcB7wG8Av8B8wG7AWsBkAPaAdsC9ATaAbMBawH3
AfMC/wG8Ae8BkgsAAf8GrAG6AbMBDgEKAQ4BDQG6BdwC2wG6AZEB3AHbA9wB4QG0ApEBtALcAWwBCgGz
AboGrAH/OAAB9AGZASsBMQEyAVMBWQdTAVkBbAGzDLkBigHyFAABkgHxAe8B8QL/AvMBtAFrAZACuQLf
ArkBswGKAZEB8QHzAv8B8QHvAfEBkgsAAf8GrAG6AbMBDgMKAZEB3AbbAbQBZgG6BNsB3AG0A5EBugHc
AYsBDQGzAboGrAH/OgAB/wHzARoBMQlTAWwBswy5AYoB9BQAAZIB8gHwAe8BvAL/AfQC8wG7AZEBiwJr
AYsBkAG1AfIB8wH0Av8BvAHvAfAB8gGSCwAB/wasAboBswEOAgoCDQdDAw0CQwNmAUMBDQFDAQ0CQwIN
AbMBugasAf88AAGZATEJUwFLAZAB2gm5AdoBuQFrAf8UAAGSAvIB8QHvAQcB9AL/AfQI8wH0Av8B9AEH
Ae8B8QLyAZILAAH/BqwBugGzAg4BCgcOAQ8CDQIPAQ4FDQEPAQ0BDwEQAQ8CCgGzAboGrAH/PAABUgpT
AVIBawLaCLkB2gGzAbsVAAGSBPICkgEHAfQK/wH0AQcCkgTyAZILAAH/BqwBugGzCgoCDwINAg4BDwQN
AQ8CDgEPAQoCDgGzAboGrAH/OwAB9gExC1kBSgGBA9oEuQPaAYoB9BUAAZIB8gHzAvIBkgH/AfEB9wHv
AbwC8wL/AvMBvAHvAfcB8QH/AZIC8gHzAfIBkgsAAf8GrAG6AbkBCgIOBwoBDgEPAQ0BDwIKAQ4BDwIN
Ag8BDgEKAQ4CCgEOAbkBugasAf87AAEbATELWQFSAewBgQHaAd8E2gHfAbkBBgG8FgAB7wHxAfMC8gHv
AfQCAAH0AfABBwHvApIB7wEHAfAB9AIAAfQB7wLyAfMB8QHvCwAB/wasAdsBuQEKAQ4BCgUOAQoBDgMP
AQ4BCgEOAQoBDgIPAQ0BDwMKAw4BuQHbBqwB/zsAAZkBUgtZAVMBdAG8AYsBBgGQAbkBswGBAQYBkQHy
FwABBwHwAfQC8gEHAfIOAAHyAQcC8gH0AfABBwsAAf8GrAK6AQ4BAAYKAQ4BCgMOAQoBDgIKAQ4CCgIO
AQoDDgIAAroGrAH/OwABdAFTDFkBKwH/AQAB8wHwAbsBvAHzAf8ZAAHxAQcB/wLzArwOAAK8AvMB/wEH
AfELAAH/BqwBswHbAWwaDQFsAdsBswasAf87AAFSDVkBMQH/IAAB9AHvAf8B9AHzAfIB7wHzDAAB8wHv
AfIB8wH0Af8B7wH0CwAB/wesAbkB2xq6AdsBuQesAf87AAFSDVkBMQHzIQABBwHyAf8C8wHwAfcB9AoA
AfQB9wHwAvMB/wHyAQcMAAH/CKwBshqzAbIIrAH/OwABUg1ZATEBGyEAAfMB7wL/AvMBvAH3AfMIAAHz
AfcBvALzAv8B7wHzDAAB/yysAf87AAFSDVkBMQEbIgAC8AH/AfQC8wHwAe8BvAHyAfQC/wH0AfIBvAHv
AfAC8wH0Af8C8A4AAboqrAG6PAABeQFTDFkBMQH0IgAB9AGSAfMB/wH0A/MB8AEHAe8CkgHvAQcB8APz
AfQB/wHzAZIB9A4AAfMqrAHzPAABGgFSDFkBKwH/IwAB8gH3AfIC/wzzAv8B8gH3AfIPAAH/KqwB/zwA
Af8BMQxZAZklAAHzAZIB8AP/CPMD/wHwAZIB8xAAAf8B8yisAfMB/z0AARoBUgFeCVkBMQH0JgAB9AHw
Ae8B8gT/AvQE/wHyAe8B8AH0EgAB/wEJJqwBCQH/PwABmQFSAV4G5QFZATEBGikAAfMBBwH3AbwB8gHz
Av8B8wHyAbwB9wEHAfMVAAH/AQkkrAEJAf9BAAEaAVIBMQFSAVkBWAFSATEBdAEbLAAB/wHxAQcB7wKS
Ae8BBwHxAf8YAAH/AfMBsiCsAbIB8wH/RAAB8wEaAZkBGgHzAf9SAAH/AfMBuxusAbMBuwHzAf+hABz/
OgABQgFNAT4HAAE+AwABKAMAAcADAAEwAwABAQEAAQEFAAGAAQQWAAP/AQAN/wHAAgABAwH+BgAD/wEA
AQ8H/wH+BAABfwYAAv8B4AIAAX8C/wHgAQcC/wH4BAABHwYAAv8BgAIAAR8C/wIAAv8B8AQAAQ8GAAH/
Af4DAAEHAf8B/gIAAX8B/wHgBAABBwYAAf8B/AMAAQMB/wH4AgABHwH/AcAEAAEDBgAB/wH8AwABAwH/
AfACAAEPAf8BwAQAAQMGAAH/AfgDAAEBAf8B4AIAAQcB/wHABAABAwYAAf8B+AMAAQEB/wHgAgABBwH/
AcAEAAEDBgAB/wH4AwABAQH/AcACAAEDAf8BgAQAAQEGAAH/AfgDAAEBAf8BgAIAAQEB/wGABAABAQYA
Af8B/AMAAQMB/wGAAgABAQH/AYAEAAEBBgAB/wHwAwABAwH/BAAB/wGABAABAQYAAf4EAAEHAf8EAAH/
AYAEAAEBBgAB+AQAAQcB/wQAAf8BgAQAAQEGAAHgBAABDwH/BAAB/wGABAABAQYAAcAEAAEfAf8EAAH/
AYAEAAEBBgABwAQAAX8B/wQAAf8BgAQAAQEGAAGAAwABAwL/BAAB/wGABAABAQYAAYADAAEPAv8EAAH/
AYAEAAEBBgABgAMAAQcC/wQAAf8BgAQAAQEGAAGAAwABBwL/BAAB/wGABAABAQYAAcADAAEHAv8EAAH/
AYAEAAEBBgABwAMAAQcC/wQAAf8BgAQAAQEGAAHAAwABAwL/AYACAAEBAf8BgAQAAQEGAAHgAwABAwL/
AYACAAEBAf8BgAQAAQEGAAHwAwABAwL/AcACAAEDAf8BgAQAAQEGAAH4AwABAwL/AcACAAEDAf8BgAQA
AQEGAAH+AwABAwL/AcACAAEDAf8BgAQAAQEGAAH/AYACAAEDAv8BwAIAAQMB/wGABAABAQYAAf8B4AIA
AQMC/wHAAgABAwH/AYAEAAEBBgAB/wHgAgABBwL/AcACAAEDAf8BgAQAAQEGAAH/AcACAAEHAv8BwAIA
AQMB/wGABAABAQYAAf8BwAIAAQ8C/wHAAWABBgEDAf8BgAQAAQEGAAH/AcACAAEfAv8BwAF/Af4BAwH/
AYAEAAEBBgAB/wHAAQABIAF/Av8BwAF/Af4BAwH/AYAEAAEBBgAB/wHAAQABPwP/AcABPwH8AQMB/wGA
BAABAQYAAf8BwAEAAT8D/wHgAR8B+AEHAf8BgAQAAQEGAAH/AcABAAE/A/8B4AEPAfABBwH/AYAEAAEB
BgAB/wHAAQABPwP/AfACAAEPAf8BwAQAAQMGAAH/AcABAAE/A/8B8AIAAQ8B/wHABAABAwYAAf8BwAEA
AT8D/wH4AgABHwH/AcAEAAEDBgAB/wHAAQABfwP/AfwCAAE/Af8BwAQAAQMGAAH/AeABAAF/A/8B/gIA
AX8B/wHgBAABBwYAAf8B8AEABf8BgAEBAv8B8AQAAQ8GAAH/AfgBAQX/AeABBwL/AfgEAAEfBgAB/wH+
AQcJ/wH+BAABfwYADf8BwAIAAQMB/wYACw==
</value>
</data>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>555, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>55</value>
</metadata>

@ -19,7 +19,7 @@ namespace SCJMapper_V2.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -105,7 +105,7 @@ namespace SCJMapper_V2.Properties {
/// &lt;/actiongroup&gt;
///
/// &lt;ActivationModes &gt;
/// &lt;ActivationMode name=&quot;tap&quot; onPres [rest of string was truncated]&quot;;.
/// &lt;ActivationMode name=&quot;tap&quot; onPress= [rest of string was truncated]&quot;;.
/// </summary>
internal static string defaultProfile {
get {
@ -113,6 +113,26 @@ namespace SCJMapper_V2.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Folder {
get {
object obj = ResourceManager.GetObject("Folder", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Home {
get {
object obj = ResourceManager.GetObject("Home", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -123,6 +143,46 @@ namespace SCJMapper_V2.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Info {
get {
object obj = ResourceManager.GetObject("Info", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap LArrow {
get {
object obj = ResourceManager.GetObject("LArrow", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Load {
get {
object obj = ResourceManager.GetObject("Load", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Monitor {
get {
object obj = ResourceManager.GetObject("Monitor", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -133,6 +193,46 @@ namespace SCJMapper_V2.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap NPad {
get {
object obj = ResourceManager.GetObject("NPad", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap RArrow {
get {
object obj = ResourceManager.GetObject("RArrow", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap RSI {
get {
object obj = ResourceManager.GetObject("RSI", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Settings {
get {
object obj = ResourceManager.GetObject("Settings", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

@ -118,25 +118,55 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Load" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Load.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="hornet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\hornet.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="defaultProfile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\defaultprofile.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
<data name="aurora" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\aurora.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Cassini_Logo2_s" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Cassini_Logo2_s.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LArrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\LArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="YPR" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\YPR.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="aurora" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\aurora.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Info" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Info.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Notes" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Notes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RArrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\RArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Cassini_Logo2_s" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Cassini_Logo2_s.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="defaultProfile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\defaultprofile.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="Monitor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Monitor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RSI" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\RSI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="_300i1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\300i.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Home" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Home.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Settings" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\Settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="NPad" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\graphics\NPad.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

@ -42,7 +42,11 @@ cassini@burri-web.org
Changelog:
V 2.34 - BETA Build 68
- improvement - complete rework of XML defaultProfile/mapping parsing
- add - provide CIG mappings from game assets
- update - unclutter GUI, allow more scaling
- internal cleanup - consistent type naming, others
- fix - overwritten profile actions removed in Assignment Tab
- update - doc SCJMapper_QGuide V2.34beta.pdf
V 2.33 - BETA Build 67
- update for SC 3.0.0 Alpha public
- fix - finding SC game folder - may work automatically for 3.0 Alpha else define it in Settings

@ -384,7 +384,7 @@ namespace SCJMapper_V2.SC
where ( x.Name == "modifiers" )
select x;
foreach ( XElement modifier in modifiers ) {
ValidContent &= Modifiers.Instance.FromXML( modifier );
ValidContent &= Modifiers.Instance.FromXML( modifier, true );
}
IEnumerable<XElement> actionmaps = from x in el.Elements( )

@ -14,11 +14,11 @@ namespace SCJMapper_V2.SC
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod( ).DeclaringType );
public const string c_MapStartsWith = "layout_"; // we only allow those mapping names
private const string c_UserMapStartsWith = c_MapStartsWith + "my_"; // we only allow those mapping names
public const string c_MapStartsWith = "layout_"; // we only allow those mapping names
private const string c_UserMapStartsWith = c_MapStartsWith + "my_"; // we only allow those mapping names
static private List<string> m_scMappings = new List<string>( );
static private SCGameMaps m_scGameMaps = new SCGameMaps( );
/// <summary>
/// Returns true if a mapping file exists
@ -52,7 +52,7 @@ namespace SCJMapper_V2.SC
/// <returns>True if it is a user mapping name</returns>
static public bool IsUserMapping( string mapName )
{
return mapName.StartsWith( c_UserMapStartsWith );
return Path.GetFileNameWithoutExtension( mapName ).StartsWith( c_UserMapStartsWith );
}
/// <summary>
@ -69,11 +69,14 @@ namespace SCJMapper_V2.SC
}
static public void UpdateMappingNames( )
static public void UpdateMappingNames()
{
if ( Directory.Exists( SCPath.SCClientMappingPath ) ) {
m_scMappings.Clear( );
m_scMappings = ( List<string> )Directory.EnumerateFiles( SCPath.SCClientMappingPath ).ToList( );
m_scMappings = (List<string>)Directory.EnumerateFiles( SCPath.SCClientMappingPath ).ToList( );
foreach ( KeyValuePair<string, string> kv in m_scGameMaps ) {
m_scMappings.Insert( 0, kv.Key ); // insert before others
}
}
else {
log.Warn( "UpdateMappingNames - cannot find SC Mapping directory" );
@ -87,8 +90,7 @@ namespace SCJMapper_V2.SC
/// <returns>A list of filenames - can be empty</returns>
static public List<string> MappingNames
{
get
{
get {
log.Debug( "MappingNames - Entry" );
if ( m_scMappings.Count == 0 ) {
UpdateMappingNames( );
@ -98,20 +100,27 @@ namespace SCJMapper_V2.SC
}
/// <summary>
/// Returns the sought default profile as string from GameData.pak
/// Returns the sought mapping
/// </summary>
/// <param name="defaultProfileName">The filename of the profile to be extracted</param>
/// <param name="mappingName">The filename of the profile to be extracted</param>
/// <returns>A string containing the file contents</returns>
static public string Mapping( string mappingName )
{
string retVal = "";
string mFile = Path.Combine( SCPath.SCClientMappingPath, ( mappingName + ".xml" ) );
if ( File.Exists( mFile ) ) {
using ( StreamReader sr = new StreamReader( mFile ) ) {
retVal = sr.ReadToEnd( );
if ( IsUserMapping( mappingName ) ) {
string mFile = Path.Combine( SCPath.SCClientMappingPath, ( mappingName + ".xml" ) );
if ( File.Exists( mFile ) ) {
using ( StreamReader sr = new StreamReader( mFile ) ) {
retVal = sr.ReadToEnd( );
}
}
}
else {
// game mapping
if ( m_scGameMaps.ContainsKey( mappingName ) ) {
retVal = m_scGameMaps[mappingName];
}
}
return retVal;
}

@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SCJMapper_V2.CryXMLlib;
using SCJMapper_V2.p4kFile;
namespace SCJMapper_V2.SC
{
/// <summary>
/// Maintains the game mappings contained in the p4k file
/// </summary>
public class SCGameMaps: SortedList<string, string>
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod( ).DeclaringType );
public SCGameMaps()
{
if ( File.Exists( SCPath.SCData_p4k ) ) {
try {
var PD = new p4kDirectory( );
IList<p4kFile.p4kFile> fileList = PD.ScanDirectoryContaining( SCPath.SCData_p4k, @"Data\Libs\Config\Mappings\layout_" );
foreach (p4kFile.p4kFile file in fileList ) {
byte[] fContent = PD.GetFile( SCPath.SCData_p4k, file );
// use the binary XML reader
CryXmlNodeRef ROOT = null;
CryXmlBinReader.EResult readResult = CryXmlBinReader.EResult.Error;
CryXmlBinReader cbr = new CryXmlBinReader( );
ROOT = cbr.LoadFromBuffer( fContent, out readResult );
if ( readResult == CryXmlBinReader.EResult.Success ) {
XmlTree tree = new XmlTree( );
tree.BuildXML( ROOT );
this.Add( Path.GetFileNameWithoutExtension(file.Filename), tree.XML_string );
}
else {
log.ErrorFormat( "SCGameMaps - Error in CryXmlBinReader: {0}", cbr.GetErrorDescription( ) );
}
}
}
catch ( Exception ex ) {
log.Error( "SCGameMaps - Unexpected ", ex );
}
}
}
}
}

@ -65,11 +65,10 @@ namespace SCJMapper_V2.p4kFile
private p4kZ64EndOfCentralDirRecord m_z64EndOfCentralDirRecord = null;
/// <summary>
/// Scans directory entries and extract a file (string.EndsWith is used)
/// Scans directory entries and return the a file descriptor (string.EndsWith is used)
/// </summary>
/// <param name="p4kFilename">The p4k file</param>
/// <param name="filename">The filename to look for</param>
/// <param name="bgw">A BackgroundWorker object</param>
public p4kFile ScanDirectoryFor( string p4kFilename, string filename )
{
if ( !File.Exists( p4kFilename ) ) return null;
@ -105,5 +104,45 @@ namespace SCJMapper_V2.p4kFile
}
/// <summary>
/// Scans directory entries and return the a list of matching file descriptors (string.Contains is used)
/// </summary>
/// <param name="p4kFilename">The p4k file</param>
/// <param name="filenamepart">The filename part to look for</param>
public IList<p4kFile> ScanDirectoryContaining( string p4kFilename, string filenamepart )
{
if ( !File.Exists( p4kFilename ) ) return null;
List<p4kFile> fileList = new List<p4kFile>( );
using ( p4kRecReader reader = new p4kRecReader( p4kFilename ) ) {
// work from the end of the file
reader.GotoLastPage( );
m_endOfCentralDirRecord = new p4kEndOfCentralDirRecord( reader );
// position first
reader.Seek( m_endOfCentralDirRecord.RecordOffset - p4kRecReader.PageSize );
m_z64EndOfCentralDirLocator = new p4kZ64EndOfCentralDirLocator( reader );
// for the next the position should be found already - seek it
reader.Seek( m_z64EndOfCentralDirLocator.Z64EndOfCentralDir );
m_z64EndOfCentralDirRecord = new p4kZ64EndOfCentralDirRecord( reader );
// now we should have the start of the directory entries...
// position first
reader.Seek( m_z64EndOfCentralDirRecord.Z64StartOfCentralDir );
// loop all file - as per dir reporting
for ( long i = 0; i < m_z64EndOfCentralDirRecord.NumberOfEntries; i++ ) {
p4kDirectoryEntry de = new p4kDirectoryEntry( reader );
if ( !string.IsNullOrEmpty( filenamepart ) && de.Filename.ToLower( ).Contains( filenamepart.ToLower( ) ) ) {
var p = new p4kFile( de ); // FOUND
fileList.Add( p );
}
}
}
return fileList;
}
}
}

@ -155,6 +155,7 @@
<Compile Include="SC\p4kFile\p4kZ64EndOfCentralDirLocator.cs" />
<Compile Include="SC\p4kFile\p4kZ64EndOfCentralDirRecord.cs" />
<Compile Include="SC\SCActionMapList.cs" />
<Compile Include="SC\SCGameMaps.cs" />
<Compile Include="Table\DS_ActionMap.cs" />
<Compile Include="Table\DS_ActionMaps.cs">
<DependentUpon>DS_ActionMaps.xsd</DependentUpon>
@ -348,6 +349,16 @@
<Content Include="AC_Examples.txt" />
<Content Include="Cassini_Logo_Icon.ico" />
<Content Include="defaultProfile.xml" />
<None Include="graphics\Folder.png" />
<None Include="graphics\Home.png" />
<None Include="graphics\Info.png" />
<None Include="graphics\Monitor.png" />
<None Include="graphics\Settings.png" />
<None Include="graphics\Load.png" />
<None Include="graphics\RArrow.png" />
<None Include="graphics\LArrow.png" />
<None Include="graphics\RSI.png" />
<None Include="graphics\NPad.png" />
<Content Include="ReadMe.txt" />
<None Include="graphics\YPR.png" />
<None Include="graphics\300i.jpg" />

@ -252,8 +252,15 @@ namespace SCJMapper_V2.Actions
if ( string.IsNullOrEmpty( input ) ) input = "";
actModeName = (string)bindingNode.Attribute( "ActivationMode" );
multi = (string)bindingNode.Attribute( "multiTap" );
string device = (string)bindingNode.Attribute( "device" );
//process
input = DeviceCls.fromXML( input ); // move from external to internal blend
if ( !string.IsNullOrEmpty( device ) ) {
// AC1 style - need to reformat mouse and keyboard according to AC2 style now
if ( KeyboardCls.IsDeviceClass( device ) ) input = KeyboardCls.FromAC1( input );
else if ( MouseCls.IsDeviceClass( device ) ) input = MouseCls.FromAC1( input );
else if ( GamepadCls.IsDeviceClass( device ) ) input = GamepadCls.FromAC1( input );
}
Device = Act.DeviceClassFromInput( input );
ActivationMode actMode = null;
if ( !string.IsNullOrEmpty( actModeName ) ) {

@ -342,38 +342,39 @@ namespace SCJMapper_V2.Actions
using ( XmlReader reader = XmlReader.Create( new StringReader( xml ), settings ) ) {
reader.MoveToContent( );
// read the header element
if ( reader.Name == "ActionMaps" ) {
if ( reader.HasAttributes ) {
version = reader["version"];
if ( version == "0" ) version = ACM_VERSION; // update from legacy to actual version
// get the joystick mapping if there is one
for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
jsN[i] = reader[string.Format( "js{0}", i + 1 )];
jsNGUID[i] = reader[string.Format( "js{0}G", i + 1 )];
if ( reader.EOF ) return false;
if ( XNode.ReadFrom( reader ) is XElement el ) {
// read the header element
if ( el.Name.LocalName == "ActionMaps" ) {
if ( el.HasAttributes ) {
version = (string)el.Attribute( "version" );
if ( version == "0" ) version = ACM_VERSION; // update from legacy to actual version
// get the joystick mapping if there is one
for ( int i = 0; i < JoystickCls.JSnum_MAX; i++ ) {
jsN[i] = (string)el.Attribute( string.Format( "js{0}", i + 1 ) );
jsNGUID[i] = (string)el.Attribute( string.Format( "js{0}G", i + 1 ) );
}
}
else {
return false;
}
}
else {
return false;
}
}
// now handle the js assignment from the map
// Reset with the found mapping
DeviceInst.JoystickListRef.ResetJsNAssignment( jsNGUID );
// Only now create the default optiontree for this map, containing included joysticks and the gamepad
CreateNewOptions( );
// now handle the js assignment from the map
// Reset with the found mapping
DeviceInst.JoystickListRef.ResetJsNAssignment( jsNGUID );
// Only now create the default optiontree for this map, containing included joysticks and the gamepad
CreateNewOptions( );
// now read the CIG content of the map
reader.MoveToContent( );
// could be actionmap OR (AC 0.9) deviceoptions OR options
if ( XNode.ReadFrom( reader ) is XElement el ) {
// now read the CIG content of the map
IEnumerable<XElement> actionmaps = from x in el.Elements( )
where ( x.Name == "actionmap" )
select x;
where ( x.Name == "actionmap" )
select x;
foreach ( XElement actionmap in actionmaps ) {
ActionMapCls acm = new ActionMapCls( );
if ( acm.fromXML( actionmap ) ) {
@ -403,8 +404,8 @@ namespace SCJMapper_V2.Actions
}
IEnumerable<XElement> modifiers = from x in el.Elements( )
where ( x.Name == "modifiers" )
select x;
where ( x.Name == "modifiers" )
select x;
foreach ( XElement modifier in modifiers ) {
SC.Modifiers.Instance.FromXML( modifier );
}

@ -867,13 +867,15 @@ namespace SCJMapper_V2.Actions
matn.Nodes.Add( matin ); // add to master tree
matin.UpdateAction( acc ); UpdateMasterNode( matin );
}
} catch {
}
catch {
; // key not found
}
Dirty = true;
} // foreach
}
} catch ( Exception e ) {
}
catch ( Exception e ) {
log.DebugFormat( "ReloadTreeView - Exception in loading Treevie\n{0}", e.Message ); // map key not found ??
}
}
@ -1051,11 +1053,7 @@ namespace SCJMapper_V2.Actions
foreach ( ActionMapCls acm in ActionMaps ) {
// have to search Actions in Maps
foreach ( ActionCls ac in acm ) {
if ( ac.DefBinding == input ) {
aMode = string.Format( "{0};{1}", ac.DefActivationMode.Name, ac.DefActivationMode.MultiTap );
rtf.Write( "profile" ); rtf.WriteTab( ac.Name ); rtf.WriteTab( acm.Name ); rtf.WriteTab( aMode ); rtf.WriteLn( );
rtf.WriteLn( );
}
bool used = false;
foreach ( ActionCommandCls acc in ac.InputList ) {
if ( acc.DevInput == input ) {
aMode = string.Format( "modified;{0};{1}", acc.ActivationMode.Name, acc.ActivationMode.MultiTap );
@ -1065,7 +1063,14 @@ namespace SCJMapper_V2.Actions
rtf.Write( "mapped" ); rtf.WriteTab( ac.Name ); rtf.WriteTab( acm.Name ); rtf.WriteTab( aMode.PadRight( 80 ) ); rtf.WriteLn( );
rtf.RHighlightColor = RTF.RTFformatter.ERColor.ERC_Black;
rtf.WriteLn( );
used = true;
}
used = !string.IsNullOrEmpty( acc.DevInput );
}
if ( ( !used ) && ac.DefBinding == input ) {
aMode = string.Format( "{0};{1}", ac.DefActivationMode.Name, ac.DefActivationMode.MultiTap );
rtf.Write( "profile" ); rtf.WriteTab( ac.Name ); rtf.WriteTab( acm.Name ); rtf.WriteTab( aMode ); rtf.WriteLn( );
rtf.WriteLn( );
}
}
}

@ -1,289 +0,0 @@
SC Joystick Mapper V 2.33 - Build 67 BETA
(c) Cassini, StandardToaster - 23-Dec-2017
Contains 12 files + graphics:
SCJMapper.exe The program (V2.33)
SCJMapper.exe.config Program config (V2.33) - MUST be in the same folder as the Exe file
SharpDX.DirectInput.dll Managed DirectInput Assembly - MUST be in the same folder as the Exe file
SharpDX.dll Managed DirectX Assembly - MUST be in the same folder as the Exe file
OpenTK.dll Managed OpenGL Assembly - MUST be in the same folder as the Exe file
OpenTK.GLControl.dll Managed OpenGL Assembly - MUST be in the same folder as the Exe file
ZstdNet.dll Managed Zip Assembly (v2.33) - MUST be in the same folder as the Exe file
x64/libzstd.dll Native dll for ZstdNet (v2.33) - MUST be in the same folder as the Exe file
x86/libzstd.dll Native dll for ZstdNet (v2.33) - MUST be in the same folder as the Exe file
log4net.dll Managed Logging Assembly - MUST be in the same folder as the Exe file
log4net.config.OFF Config file for logging - To use it - rename as log4net.config and run the program
then look for trace.log in the same folder
SCJMapper_QGuide V2.30beta.pdf Quick Guide
ReadMe.txt This file
graphics folder Skybox Images (V2.32) - graphics folder MUST be in the same folder as the Exe file
NOTE V 2.33:
search order for defaultProfile.xml to build the action tree is:
1. directory where SCJMapper Exe is located
2. directory of <SC>\LIVE\USER
3. extract from <SC>\LIVE\Data.p4k
4. extract from SCJMapper exe file (derived from 3.0 build 695052)
--> in order to get always the most current one use 3. (and therefore remove the ones in 1. and 2.)
--> The one used is shown below the actionTree (Profile: ....)
Read the Guide first RTFM ;-)
Put all files into one folder and hit SCJMapper.exe to run it
For Updates and information visit:
https://github.com/SCToolsfactory/SCJMapper-V2
Scanned for viruses before packing...
cassini@burri-web.org
Changelog:
V 2.33 - BETA Build 67
- update for SC 3.0.0 Alpha public
- fix - finding SC game folder - may work automatically for 3.0 Alpha else define it in Settings
- add - get the defaultProfile.xml from LIVE\data.p4k file if possible (real game assets)
- improvement - caching def profile once it is read from disk
- removed - old SC path and folder locators (SCJM does not longer work with pre 3.0 game)
- removed - reference to Iconic.Zip DLL (replaced with Zstd)
- update - defaultProfile.xml as last resort from PTU 3.0-695052 (Dec 18, build)
V 2.32 - BETA Build 66
- add - path to defaultProfile can be in USER directory of SC
- add - some skyboxes from game captures (thanks to Rellim)
- removed - PTU folders in Settings - no longer used in PTU 3.0
- fix - finding SC game folder - may work automatically for PTU 3.0 else define it in Settings
- update - defaultProfile from PTU 3.0-689345 (Dec 15, build)
V 2.30 - BETA Build 64
- add - Tab to show all mappings for the current input (Tabbed with XML other Dump items)
- add - Setting (enabled, disabled -> default) to automatically switch the new tabs - either Input or Dump
- add - addbind of Mouse input is possible for Keyboard actions - seems to work somehow in the game...
- improvement - mouse mappings in kbd entries in defaultProfile are collected as mouse now and allowed to map
- improvement - removed some unneeded tree scans - to speed things up
- fix - issue with user activations modes while dumping the mapping list
- fix - issue with loading a map with gamepad mappings and the gamepad is not connected
- fixes and refacturing while encountered...
- update - doc SCJMapper_QGuide V2.30beta.pdf
V 2.29 - BETA Build 63
- add - Calibrate gamepad thumb axes (press ABXY buttons all together and wait 2 sec - should zero all 4 axes)
- fix #56 - exception when entering Tuning
- fix - wrong gamepad action codes (xi1_xi_command instead of xi1_command)
- fix - some more issues with gamepads
- fix - options did not properly update when assigning them to another cmd or clearing the entry
- improvement - Options Dialog selection and deselection of items improved
- improvement - Tuning Dialog selection and deselection of items improved
- improvement - Dump Log: added some more interesting captures from the game log file
- improvement - Win7 / Win10 hidden text/controls with High DPI scaling issues partly resolved
- update - doc SCJMapper_QGuide V2.29beta.pdf
V 2.28 - BETA Build 62
- add #48 - Tune Strafe controls
- add - "Options ..." dialog to edit all device and control options
- add - 2 more three 3D scenes for Tuning
- improvement #49 - Mapping area: Current mapping is shown
- improvement - Gamepad support improved, Tab is now always the most left one if gamepads are enabled
- improvement - Dump Log: added some more interesting captures from the game log file
- improvement - Tuning is now closer to CIG implementation, remove Sensitivity, add Saturation instead
- fix #51 - accepting multiple actionmaps in default profile (collects only the first one found)
- fix - bug re- joystick hats (affected No 2..4)
- fixes and refacturing while encountered...
- update - fallback default profile from SC 2.6.3 alpha
- update - doc SCJMapper_QGuide V2.28beta.pdf
V 2.27 - BETA Build 61
- add - Collapse/Expand in context menu in Mapping tree
- improvement - actionmaps are taken from the defaultProfile and will no longer need a program update
- improvement - rename Blend to Disable
- fix - an issue in Seetings for actionmap ignore handling
- update - fallback default profile from SC 2.6.0 alpha
- update - doc SCJMapper_QGuide V2.27beta.pdf
V 2.26 - BETA Build 60
- add - new actionmaps from SC 2.5.0 alpha to choose from in Settings
- update - fallback default profile from SC 2.5.0 alpha
V 2.25 - BETA Build 59
- fix - an issue in parsing options from imported maps
- add - an option to show the actiontree as CSV list with more/less details (change in Settings)
- improvement - In table view add possibility to Blend All visible unmapped entries
V 2.24 - BETA Build 58
- fix - some trouble in SC path finding
V 2.23 - BETA Build 57
- update - Using .Net 4.5.2 Now (seems to handle some scaling issues WinForm apps)
- update - Try to find the SC path also as StarCitizen\Live (instead of Public) was mentioned for SC2.2.2 onwards ???
- fix - addbind UNDEF removed when assigned
- improvement - Issue a infobox if the Client folder cannot be found
(please submit the complete folder structure of your installation as bug report ...)
- add - a table display for mappings
- some internal stuff (namespaces etc)
- update - doc SCJMapper_QGuide V2.23beta.pdf
V 2.22 - BETA Build 56
- fix - try again to fix Win10 scaling issues for some PCs (hidden assignment area)
- improvement - actions with a profile modifier attached will show underlined in the action tree
- improvement - less offensive gamepad color mark ...
- add - a button to dump the used defaultProfile in the right area
- some internal stuff
- update - doc SCJMapper_QGuide V2.22beta.pdf
V 2.21 - BETA Build 55
- fix #40 added Tab entry in Ctrl. context menu
- fix - try to fix Win10 scaling issues (hidden assignment area)
- fix - profile tree color indication also applied when re-reading defaultProfile
- improvement - enumerates up to 12 devices now (though not tested as I don't have 12 ..)
- add - use of SCA 2.2 provided defaultProfile (new location and format)
- add - indication of the used defaultProfile
- add - built in defaultProfile updated to SCA 2.2
V 2.19 - BETA Build 52
- fix #37 improved defaultProfile Parsing
- fix #38 locale issue - changed App number formatting to US
- fix #39 changed equal to equals string for kbd entry
- add - default actionmap to choose from (it is on the ignore list)
V 2.18 - BETA Build 51
- fix - layout works now for Win10
- fix - uses game defaultProfile again
- fix - keyboard command for all Ctrl keys fixed
- fix - keyboard command formatting
- improvement - timeout ~4 sec for kbd modifiers in Joystick Mode (Esc no longer needed)
- improvement - ActivationMode handling finished
- improvement - user ActivationMode change indication in mapping tree
- improvement - Blending adds multiTap=1 to overwrite double taps
- improvement - Dump List: added ActivationModes; device checkBox applied to list
- update - doc SCJMapper_QGuide V2.18beta.pdf
V 2.17 - BETA Build 50
- update - Updated for SC Alpha 2.0/2.1PTU using new actionmap syntax (no longer use device attribute)
- update - Complete new QuickReference Guide
- update - Supports actionmaps with <profile version="1" optionsVersion="2" rebindVersion="2">
- add - ActivationMode - Use Context Menu in ActionTree (or read the manual)
- add - PTU file usage in Settings
- add - Prepared JS Modifiers (but SC cannot right now - so it is disabled)
- add - full mouse settings
- improvement - some GUI improvements
- improvement - reworked blending
- removed - global JS or GP blend options in Settings
- removed - ignoreversion from Settings
- NOTE: - Dump Log does not work right now as CIG does no longer list detected controllers in the log file
- NOTE: - Right now a number of binds behave erratically e.g. addbind does not work at all
so be aware that your map is not necessarily wrong but the game may just have a bug there
V 2.16 - BETA Build 49
- update - Updated for AC Alpha 1.3 defaultProfile does no longer have js1_ or xi_ marks form commands
- NOTE: - Dump Log does not work right now as CIG does no longer list detected controllers in the log file
V 2.15 - BETA Build 48
- update - Updated for AC Alpha 1.1.6 new files locations to find files and mappings
- NOTE: - Dump Log does not work right now as CIG does no longer list detected controllers in the log file
V 2.14 - BETA Build 47
- update - added new defaultProfile (CIG allows some more joystick mappings)
V 2.13 - BETA Build 46
- update - added new defaultProfile and actionmaps from AC 1.1.1
- add - keyboard modifier for joystick (e.g. rctrl+js1_xy) - Press ESC to clear modifiers
- fix - device checkboxes are now applied after Reassign
- fix - invert checkbox handling (removed flight invert - use the one in Tuning)
- fix - Add UICustomization Header and Devices List in any case
V 2.12 - BETA Build 45
- improvement - SCJM maintains mappings in USER rather than data folder (AC 1.03)
- improvement - UICustomization Header for joystick updated (label is the filename minus "layout_") (AC 1.03)
V 2.11 - BETA Build 44
- fix - reading of deadzone value (if not a number should not break anymore)
- fix - writing the proper deadzone XML if first used
- fix - reading addbind commands from existing mappings will appear now in the tree
- improvement - better handling of the default mapping name from config file
- improvement - mapping name added to XML mapping (first line comment extended with mapping name)
V 2.10 - Build 43 - Production
- new feature - added Action Tree context menu for Assign, Clear and Blend
- fix - issue for Js Reassignment if more than one was not yet assigned
- improvement - Right click in Action Tree selects the items (no need to select and then right click anymore)
V 2.10 - BETA Build 41
- fix - issue with null ptr assignment in Device Tuning (review and fix of AC1.0 changes)
- fix - disabled first joystick tab when gamepad is second or later
- improvement - added tooltips for device tabs showing Name and GUID
- improvement - added full 4 number version for beta builds
V 2.10 - BETA Build 40
- rework for AC 1.0
- new feature - add DumpLog to get the AC detected Controller assignments from logfile
- new feature - add Invert checkboxes for supported option items
- new feature - context menu in treeview allows to add/delete action sub items (support addbind mapping in XML)
- update - cannot longer assign cross device mappings (AC 1.0 related - use addbind above)
- update - new options naming and structure (not compatible with pre 2.10 - delete them in the file and then reload)
- update - Profile Version to 1
V 2.8 - BETA Build 37
- new feature - add checkboxes to show Joystick, Gamepad, Kbd and Mapped Only
- fix - Blended ones don't reload with proper visual
V 2.8 - BETA Build 36
- new feature - add invert for single mappings
- improvement - initialization and assignment of Joystick devices
V 2.8 - BETA Build 34
- new feature - add keyboard input
- new feature - add gamepad input as xboxpad
- new feature - add gamepad for tuning
- new feature - blend single entries with <Space>
- fix - tuning copy to all axis now applies immediately
- improvement - cleanup of some inconsistencies
V 2.7 - Build 33
- fix - if an axis is not mapped the prog will not longer crash (was null ptr exception)
- doc update 2.7
V 2.7 - BETA
- new feature - Joystick Tuning
V 2.6
- fix - taking actionmaps from config file now works
- improvement - added actionmap vehicle_driver
V 2.5
- new feature - support and maintain option tags
- improvement - support and maintain version and ignoreversion attribute / can force ignoreversion="1"
- improvement - makes backup copy before each save (in my documents e.g. layout_my_xyz.xml.backup)
- Update of the Guide for V2.5
V 2.4
- improvement - add new actionmaps for AC 0.9 (flycam, spaceship_turret)
- improvement - supports now assignment of js1 .. js8 - SC may not support all though...
- Update of the Guide for V2.4
V 2.3
- new feature - allow reassignment of the jsN group
- improvement - uniquely identified devices with the same name (use GUID)
- improvement - shows jsN assignment in Joystick tab
- improvement - detection of the SC install path extended to one more Registry entry
- fix - blend unmapped works properly now
- fix - manual entry of SC directory works now
- Update of the Guide for V2.3
V 2.2
- new feature - option to ignore actionmaps in Settings
- improvement - add actionmaps for multiplayer, singleplayer, player
- improvement - GUI layout of Joystick tabs for more than 4 devices
- Update of the Guide for V2.2
V 2.1
- program is maintained at "https://github.com/SCToolsfactory/SCJMapper-V2/releases"
- new feature - option to blend unmapped actions
- improvement - ignore buttons in Settings
- improvement - override the built in detection of the SC folder in Settings
- added - trace log for resolving crash and other issues
- Update of the Guide for V2.1
V 2.0
- program is maintained at "https://github.com/bm98/SCJMapper-V2/releases"
- new feature - get defaultProfile.xml from game assets
- new feature - get actionsmaps from game assets
- new feature - reset to defaults
- new feature - load and save own maps to gamefolders (makes backup in My Documents\SCJMapper)
- new feature - filter the action tree
- new feature - drag and drop an mapping file into the XML window
- new feature - make throttle assignment for any axis
- improved joystick detection (jitter avoidance, limit can be set in Program config file)
- improved button detection (blend buttons that are always on)
- improved sizeable window
- improved settings persist between sessions
- Update of the Guide for V2.0
- removed defaultProfile.xml from distribution (REMOVE IT FROM YOUR FOLDER - else it will be taken as action list)
V 1.4PRE
- using a new Managed DirectX assembly and built with .Net4 (Hope this works for Win8.1)
- added Joystick properties and Axis Names from the Joystick driver
V 1.3
- new feature - read the original defaultProfile.xml from SC to derive the actions (must be in the EXE folder)
- added support for up to 8 devices
- added multibinding i.e. bind the same action to multiple buttons, one for kbd, one for xbox etc. if the profile supports it
- added Dump List - a readable list of the commands (can be saved as txt file - using Save as)
- fixed "Find 1st"
- Update of the Guide
- removed MappingVars file from distribution (REMOVE IT FROM YOUR FOLDER - else it will be taken as action list)
V 1.2
- added support for rebinding xboxpad and ps3pad
- added Find 1st for a Control
- fixed Hat direction not maintained as last Control used
- some GUI refinements
- Update of the Guide (incl MappingVar.csv format)
MappingVar file
- added commands that where missing
- changed from keyboard to xboxpad rebinding where possible to leave kbd intact
V 1.1
- fixed issue with less than 3 joysticks attached
V 1.0 initial

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Loading…
Cancel
Save