issue #13 and partly #4 can load from specific defaults

can apply default bindings, prepared for persistence - some have been added
pull/20/head
bm98 10 years ago
parent 778b333ffd
commit c7dcc36bf4

@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Drawing;
namespace SCJMapper_V2
{
sealed class AppSettings : ApplicationSettingsBase
{
// Control bound settings
[UserScopedSettingAttribute( )]
[DefaultSettingValueAttribute( "1000, 900" )]
public Size FormSize
{
get { return ( Size )this["FormSize"]; }
set { this["FormSize"] = value; }
}
[UserScopedSettingAttribute( )]
[DefaultSettingValueAttribute( "10, 10" )]
public Point FormLocation
{
get { return ( Point )this["FormLocation"]; }
set { this["FormLocation"] = value; }
}
// User Config Settings
[UserScopedSettingAttribute( )]
[DefaultSettingValueAttribute( "defaultProfile" )] // from Game Bundle
public String DefProfileName
{
get { return ( String )this["DefProfileName"]; }
set { this["DefProfileName"] = value; }
}
[UserScopedSettingAttribute( )]
[DefaultSettingValueAttribute( "Reset empty" )] // defaults to one of the ResetMode Settings below
public String ResetMode
{
get { return ( String )this["ResetMode"]; }
set { this["ResetMode"] = value; }
}
// Application Settings
[ApplicationScopedSetting( )]
[DefaultSettingValueAttribute( "Reset empty" )]
public String ResetModeEmpty
{
get { return ( String )this["ResetModeEmpty"]; }
set { ; } // cannot be changed
}
[ApplicationScopedSetting( )]
[DefaultSettingValueAttribute( "Reset defaults" )]
public String ResetModeDefault
{
get { return ( String )this["ResetModeDefault"]; }
set { ; } // cannot be changed
}
}
}

98
Form1.Designer.cs generated

@ -34,7 +34,6 @@
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.btDumpList = new System.Windows.Forms.Button();
this.btReset = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.rtb = new System.Windows.Forms.RichTextBox();
this.cmCopyPaste = new System.Windows.Forms.ContextMenuStrip(this.components);
@ -79,7 +78,10 @@
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.btResetDefaults = new System.Windows.Forms.Button();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.tsDDbtProfiles = new System.Windows.Forms.ToolStripDropDownButton();
this.tsDDbtResetMode = new System.Windows.Forms.ToolStripDropDownButton();
this.tsBtReset = new System.Windows.Forms.ToolStripSplitButton();
this.UC_JoyPanel = new SCJMapper_V2.UC_JoyPanel();
this.cmCopyPaste.SuspendLayout();
this.panel3.SuspendLayout();
@ -91,6 +93,7 @@
this.flowLayoutPanel1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.statusStrip1.SuspendLayout();
this.SuspendLayout();
//
// btDumpList
@ -103,19 +106,10 @@
this.btDumpList.UseVisualStyleBackColor = true;
this.btDumpList.Click += new System.EventHandler(this.btDumpList_Click);
//
// btReset
//
this.btReset.Location = new System.Drawing.Point(3, 72);
this.btReset.Name = "btReset";
this.btReset.Size = new System.Drawing.Size(120, 24);
this.btReset.TabIndex = 23;
this.btReset.Text = "Reset";
this.btReset.Click += new System.EventHandler(this.btReset_Click);
//
// label3
//
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Location = new System.Drawing.Point(606, 828);
this.label3.Location = new System.Drawing.Point(606, 834);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(372, 25);
this.label3.TabIndex = 22;
@ -133,7 +127,7 @@
this.rtb.Location = new System.Drawing.Point(606, 81);
this.rtb.Name = "rtb";
this.tlpanel.SetRowSpan(this.rtb, 3);
this.rtb.Size = new System.Drawing.Size(372, 744);
this.rtb.Size = new System.Drawing.Size(372, 750);
this.rtb.TabIndex = 21;
this.rtb.Text = "";
this.rtb.WordWrap = false;
@ -408,7 +402,7 @@
this.treeView1.Name = "treeView1";
this.tlpanel.SetRowSpan(this.treeView1, 3);
this.treeView1.SelectedImageKey = "Selected";
this.treeView1.Size = new System.Drawing.Size(294, 744);
this.treeView1.Size = new System.Drawing.Size(294, 750);
this.treeView1.TabIndex = 16;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
//
@ -492,7 +486,7 @@
// buttonExit
//
this.buttonExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.buttonExit.Location = new System.Drawing.Point(171, 72);
this.buttonExit.Location = new System.Drawing.Point(171, 75);
this.buttonExit.Name = "buttonExit";
this.buttonExit.Size = new System.Drawing.Size(120, 24);
this.buttonExit.TabIndex = 13;
@ -541,7 +535,7 @@
this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tlpanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tlpanel.Size = new System.Drawing.Size(984, 856);
this.tlpanel.Size = new System.Drawing.Size(984, 862);
this.tlpanel.TabIndex = 25;
//
// flowLayoutPanel1
@ -580,28 +574,61 @@
this.tableLayoutPanel2.ColumnCount = 2;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.Controls.Add(this.btReset, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.buttonExit, 1, 2);
this.tableLayoutPanel2.Controls.Add(this.btResetDefaults, 0, 1);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel2.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize;
this.tableLayoutPanel2.Location = new System.Drawing.Point(306, 726);
this.tableLayoutPanel2.Location = new System.Drawing.Point(306, 729);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 3;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(294, 99);
this.tableLayoutPanel2.Size = new System.Drawing.Size(294, 102);
this.tableLayoutPanel2.TabIndex = 24;
//
// btResetDefaults
//
this.btResetDefaults.Location = new System.Drawing.Point(3, 42);
this.btResetDefaults.Name = "btResetDefaults";
this.btResetDefaults.Size = new System.Drawing.Size(120, 24);
this.btResetDefaults.TabIndex = 24;
this.btResetDefaults.Text = "Reset to defaults";
this.btResetDefaults.Click += new System.EventHandler(this.btResetDefaults_Click);
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsDDbtProfiles,
this.tsDDbtResetMode,
this.tsBtReset});
this.statusStrip1.Location = new System.Drawing.Point(0, 840);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(984, 22);
this.statusStrip1.TabIndex = 26;
this.statusStrip1.Text = "statusStrip1";
//
// tsDDbtProfiles
//
this.tsDDbtProfiles.AutoSize = false;
this.tsDDbtProfiles.Image = ((System.Drawing.Image)(resources.GetObject("tsDDbtProfiles.Image")));
this.tsDDbtProfiles.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsDDbtProfiles.Name = "tsDDbtProfiles";
this.tsDDbtProfiles.Size = new System.Drawing.Size(250, 20);
this.tsDDbtProfiles.Text = "Available Profiles";
this.tsDDbtProfiles.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.tsDDbtProfiles_DropDownItemClicked);
//
// tsDDbtResetMode
//
this.tsDDbtResetMode.AutoSize = false;
this.tsDDbtResetMode.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.tsDDbtResetMode.Image = ((System.Drawing.Image)(resources.GetObject("tsDDbtResetMode.Image")));
this.tsDDbtResetMode.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsDDbtResetMode.Name = "tsDDbtResetMode";
this.tsDDbtResetMode.Size = new System.Drawing.Size(150, 20);
this.tsDDbtResetMode.Text = "Reset Mode";
this.tsDDbtResetMode.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.tsDDbtResetMode_DropDownItemClicked);
//
// tsBtReset
//
this.tsBtReset.AutoSize = false;
this.tsBtReset.Image = ((System.Drawing.Image)(resources.GetObject("tsBtReset.Image")));
this.tsBtReset.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsBtReset.Name = "tsBtReset";
this.tsBtReset.Size = new System.Drawing.Size(100, 20);
this.tsBtReset.Text = "Reset";
this.tsBtReset.ToolTipText = "Reset with chosen options";
this.tsBtReset.ButtonClick += new System.EventHandler(this.tsBtReset_ButtonClick);
//
// UC_JoyPanel
//
@ -614,12 +641,14 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(984, 856);
this.ClientSize = new System.Drawing.Size(984, 862);
this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.tlpanel);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(1000, 894);
this.MinimumSize = new System.Drawing.Size(1000, 900);
this.Name = "MainForm";
this.Text = "SC Joystick Mapper";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.Load += new System.EventHandler(this.MainForm_Load);
this.cmCopyPaste.ResumeLayout(false);
this.panel3.ResumeLayout(false);
@ -633,14 +662,16 @@
this.flowLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btDumpList;
private System.Windows.Forms.Button btReset;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.RichTextBox rtb;
private System.Windows.Forms.Button btGrab;
@ -686,7 +717,10 @@
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.Button btResetDefaults;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ToolStripDropDownButton tsDDbtProfiles;
private System.Windows.Forms.ToolStripDropDownButton tsDDbtResetMode;
private System.Windows.Forms.ToolStripSplitButton tsBtReset;
}
}

@ -7,7 +7,6 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
//using SharpDX;
using SharpDX.DirectInput;
using System.IO;
@ -16,6 +15,7 @@ namespace SCJMapper_V2
{
public partial class MainForm : Form
{
AppSettings m_AppSettings = new AppSettings( );
///<remarks>
/// Holds the DXInput Joystick List
@ -44,13 +44,6 @@ namespace SCJMapper_V2
InitializeComponent( );
// some applic initialization
rtb.SelectionTabs = new int[] { 10, 20, 30, 40, 50, 60 }; // short tabs
rtb.DragEnter +=new DragEventHandler(rtb_DragEnter);
rtb.DragDrop +=new DragEventHandler(rtb_DragDrop);
rtb.AllowDrop = true; // add Drop to rtb
String version = Application.ProductVersion; // get the version information
lblTitle.Text += " - V " + version.Substring( 0, version.IndexOf( ".", version.IndexOf( "." ) + 1 ) ); // get the first two elements
}
@ -61,9 +54,36 @@ namespace SCJMapper_V2
/// <param name="e"></param>
private void MainForm_Load( object sender, System.EventArgs e )
{
// some applic initialization
// Assign Size property, since databinding to Size doesn't work well.
this.Size = m_AppSettings.FormSize;
this.Location = m_AppSettings.FormLocation;
// XML RTB
rtb.SelectionTabs = new int[] { 10, 20, 30, 40, 50, 60 }; // short tabs
rtb.DragEnter += new DragEventHandler( rtb_DragEnter );
rtb.DragDrop += new DragEventHandler( rtb_DragDrop );
rtb.AllowDrop = true; // add Drop to rtb
String version = Application.ProductVersion; // get the version information
lblTitle.Text += " - V " + version.Substring( 0, version.IndexOf( ".", version.IndexOf( "." ) + 1 ) ); // get the first two elements
// load profiles
foreach ( String s in SCDefaultProfile.DefaultProfileNames ) {
tsDDbtProfiles.DropDownItems.Add( Path.GetFileNameWithoutExtension( s ) );
}
tsDDbtProfiles.Text = m_AppSettings.DefProfileName;
// load ResetMode
tsDDbtResetMode.DropDownItems.Add( m_AppSettings.ResetModeEmpty );
tsDDbtResetMode.DropDownItems.Add( m_AppSettings.ResetModeDefault );
tsDDbtResetMode.Text = m_AppSettings.ResetMode;
// Init X things
if ( !InitDirectInput( ) )
Close( );
// poll the XInput
timer1.Start( ); // this one polls the joysticks to show the props
}
@ -151,7 +171,7 @@ namespace SCJMapper_V2
// build TreeView and the ActionMaps
m_AT = new ActionTree( );
m_AT.Ctrl = treeView1; // the ActionTree owns the TreeView control
m_AT.LoadTree( addDefaultBinding ); // Init with default profile filepath
m_AT.LoadTree( m_AppSettings.DefProfileName, addDefaultBinding ); // Init with default profile filepath
// default JS to Joystick mapping - can be changed and reloaded from XML
if ( tc1.TabCount > 0 ) { cbJs1.SelectedIndex = 0; m_AT.ActionMaps.js1 = cbJs1.Text; }
@ -186,7 +206,7 @@ namespace SCJMapper_V2
}
else {
// setup the further tab contents along the reference one in TabPage[0] (the control named UC_JoyPanel)
tc1.TabPages.Add("Joystick " + (tabs+1).ToString());
tc1.TabPages.Add( "Joystick " + ( tabs + 1 ).ToString( ) );
UC_JoyPanel uUC_JoyPanelNew = new UC_JoyPanel( );
tc1.TabPages[tabs].Controls.Add( uUC_JoyPanelNew );
uUC_JoyPanelNew.Size = UC_JoyPanel.Size;
@ -215,7 +235,8 @@ namespace SCJMapper_V2
return false;
}
InitActionTree( false );
// load the profile items from the XML
InitActionTree( ( m_AppSettings.ResetMode == m_AppSettings.ResetModeDefault ) );
return true;
}
@ -226,15 +247,22 @@ namespace SCJMapper_V2
/// <returns></returns>
private String JSStr( )
{
if ( (String)tc1.SelectedTab.Tag == ( string )cbJs1.SelectedItem ) return JoystickCls.JSTag( 1 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs1.SelectedItem ) return JoystickCls.JSTag( 1 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs2.SelectedItem ) return JoystickCls.JSTag( 2 );
if ( ( String )tc1.SelectedTab.Tag == ( string )cbJs3.SelectedItem ) return JoystickCls.JSTag( 3 );
return JoystickCls.JSTag( tc1.SelectedIndex+1 ); // return the Joystick number
return JoystickCls.JSTag( tc1.SelectedIndex + 1 ); // return the Joystick number
}
#region Event Handling
private void MainForm_FormClosing( object sender, FormClosingEventArgs e )
{
m_AppSettings.FormSize = this.Size;
m_AppSettings.FormLocation = this.Location;
m_AppSettings.Save( );
}
private void timer1_Tick( object sender, System.EventArgs e )
{
@ -302,16 +330,28 @@ namespace SCJMapper_V2
btGrab.BackColor = btClear.BackColor; btGrab.UseVisualStyleBackColor = btClear.UseVisualStyleBackColor; // neutral again
}
private void btReset_Click( object sender, EventArgs e )
private void tsBtReset_ButtonClick( object sender, EventArgs e )
{
InitActionTree( false ); // start over
// start over and if chosen, load defaults from SC game
InitActionTree( ( m_AppSettings.ResetMode == m_AppSettings.ResetModeDefault ) );
}
private void btResetDefaults_Click( object sender, EventArgs e )
private void tsDDbtProfiles_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
{
InitActionTree( true ); // start over and load defaults from SC game
tsDDbtProfiles.Text = e.ClickedItem.Text;
m_AppSettings.DefProfileName = e.ClickedItem.Text;
m_AppSettings.Save( );
// InitActionTree( ( Settings.Default.ResetMode == Settings.Default.ResetModeDefault ) ); // start over
}
private void tsDDbtResetMode_DropDownItemClicked( object sender, ToolStripItemClickedEventArgs e )
{
tsDDbtResetMode.Text = e.ClickedItem.Text;
m_AppSettings.ResetMode = e.ClickedItem.Text;
m_AppSettings.Save( );
}
private void tsiCopy_Click( object sender, EventArgs e )
{
rtb.Focus( );
@ -395,14 +435,13 @@ namespace SCJMapper_V2
{
// Loads the file into the control.
string[] droppedFilenames = e.Data.GetData( DataFormats.FileDrop, true ) as string[];
if ( droppedFilenames.Length>0 ) rtb.LoadFile( droppedFilenames[0], System.Windows.Forms.RichTextBoxStreamType.PlainText );
}
if ( droppedFilenames.Length > 0 ) rtb.LoadFile( droppedFilenames[0], System.Windows.Forms.RichTextBoxStreamType.PlainText );
}
#endregion
}
}

@ -118,8 +118,79 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cmCopyPaste.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>602, 17</value>
<value>296, 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
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
DgAAAk1TRnQBSQFMAgEBBwEAAYgBBgGIAQYBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
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/yYAAXQFRgHyFQAB/wH0
CwABBxUAAUYHJQHyFAACQwEVCQABQwEVAUMCAAHwCwAB8AQAAUYJJQHyEwABQwIVCAAB8gFDARUBQwEA
AgcB7QgAAf8BkgG8Ae8CAAFGAiUB/wFMAyUCGgIlARsRAAEHAUMBFQETAUMB9AUAAQcBFQEUARUBQwEA
AfcBvAHtCQAB9wHwAZIBAAF0AiUB9gL/AUwBJQH2Av8DJREAAfQBQwEVAeoB+QIPAx8BQwEUAR8BFAEV
AUMB/wHtAfAB7AHqAW0B7wMAAe8BDgHsAe8B8AHsAQABRgIlAUYD/wH2A/8DJRIAAUMBbQHqAUQCEAMg
AQ4BbQEUAhABEQEAAewBvAH3AeoB6wESAewBBwHsARIB6wFtAgcB6wEAAUYDKwFMBf8EKxIAAUMBFQES
ASABDgEPAR8CIAIVAREBFAEQAUMBAAFtAuwB7QEUAW0BkgHsAZIBbQHqAe0B7AHtAQ4BAAFGBEwB9gP/
AXQETBIAAUMB7AEUAQ8CHwEAAQ4BDwEBAR4BRAFDARABEQIAAfcB7wHrAu8B7QGSAe0B7wH3AZEC7wIA
AUYDTAH2Bf8BdANMEgABvAEUAQ4BEAFDAUUBHgEBAUMBHgFvAQ4CEAMAAuwBvAHsAQcBvAFtArwBjQG8
ARUBvAIAAUYCTAEaA/8BTAP/A0wTAAFDARABbQEVAQEBEQEVAQ4BHgELAR8CDgMAAfIB8wHsAfIF9AHy
ARIB8gHzAgAB8wFTAUwBmgL/A0wC/wJMAU0TAAEVAhEBHgEABw4FAAG8AvAFAALwAbwBEQMAAfMBUwpN
FQAB7AEQAQ8BFQMAAUMCDwH0BQABEQcAAf8BAAETBQAB8wlTNwAB8wdTlAAg/wcAAUMBAAHyFgAB/w7x
AfAG/wH0AygG/wUAAQ4BkQGuApEB6gH/BwAL/wIAAf8B8QNrAYsBkQGLBIoBSQFKAZEB8Qb/ASgDKQEo
Bf8EAAFDAZoBegFSAZEBtQESAfEGAAH3AQcBvAIHAu8DBwHwAfIBBwEAAf8B8QIGAYsBkAG7BYsCUAFr
AfEG/wFQBCkBKAT/AwABDwEHAZECcwGRAbUBtAFDAfQEAAH/AbwB7wO8AwcBvAEHAfAB8gHxAQAB/wHx
AgYBiwGQAbsEkAFsAVABUQFrAfEH/wVQAXMD/wEAARQBUgHzArwBBwH3AZECtAEOAfQEAAH/AbwB7wPw
ArwC8AG8AfEB8gHwAQAB/wHxAosBkAGzAbsBKQGzAXEDUAGQAWsB8QL/AXMFKAVQAXMC/wIAARoB9AH3
ARIBQwERAbsBkQF6AewB/wLxAfMBAAH/Ae8B9wG8BvABvALxAbwBAAH/AfIDkAGzAbsCswNRASkBswFr
AfIB/w1QAZkB/wIAAQ4B7wETAeoBFQEPAZEBDwEOBfEBAAH/Ae0BvAnyAfABBwEAAf8B8gSzAboBiwEp
BHgBUQFrAfIB/w5QAf8EAAFtAREBQwEQARUB8QL/AfQC/wIAAf8B9wHxCPIB8QHwAbwBAAH/AfIEswG6
AbsBKAJ4AVABeAEoAWsB8gH/ASkMUAEoAf8EAAG7AbQBkQFtCQAB/wGSAfEB8gbzAfIC8QHwAQAB/wHz
BLMBuQG6AdwBtAFJAlABSQFrAfMC/wFQBXgBVwRRASkC/wMAAfMBAAGRARMLAAGSAfEB8gbzAfIB8QHy
AfMBAAH/AfMGuQG6AdsD3AHbAWsB8wf/ASgEVwFQA/8DAAHwAQ4B7AEVCwAB7QHxAfIG8wHyAfEB8gH/
AQAB/wHzDNoBiwHzBv8BmQR4AVcE/wEAAfEBAAEHAe0B7AGuAfIKAAEHAvIG8wHyAfEB8gIAAf8P8wb/
ASkEeAX/AQABbgF5AbwB9wETAfAMAALyBvMB8gHxAfQCAAH/CPMB8gH3AfIB9wHyAfcB8wb/ARwDeAb/
Ae0B6wG8Au8OAALxBvIC8QMAAf8B8w3/Ae8H/wGZAVAI/wETAfAB6hwAIP8CAAHzAfcB/xsAAUIBTQE+
BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAT/AfgBDwIAAZ8B/QL/AfABBwIAAY8B+AHf
Af0B4AEDAgABjwHwAY8B8AHAAQECAAEDAeABBwHwAYABAQUAAoABAQIAAYABAAGAAQABgAEBAgABgAEA
AYABAAGAAQECAAGAAQABgAEAAYABAQIAAYABAQGAAQABgAEBAgABwAEBAcABAQGAAQECAAHAAQEBwwHh
AcABAwIAAeABAwHnAeMB4AEHAgAE/wHwAQ8CAAb/AgAG/wYAAfwBPwL/BAAB+AEPAeABAwQAAfABDwHA
AQEEAAHAAQcBgAEBBAABgAEHAYABAQQAAYABAAGAAQEEAAHAAQABgAEBBAAB4AEBAYABAQQAAeAB/wGA
AQEEAAHgAf8BwAEBBAAB4QH/AcABAQQAAYAB/wHAAQMEAAGBAf8B4AEDBAABAwH/AeABBwQAAQcD/wQA
AccD/ws=
</value>
</data>
<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>
@ -382,88 +453,103 @@
u459AcHtFiFpohCyiCKghgx2LMobzjENaYBSg7xUjpjyOWWq2lCmMw53SBq6H00dRjdybJJ3o8hMmseA
Y77zcj3gqae8LoFeYJow8wzVPeFzWvMDVj3mdpXmW8CvMpXS46wHi4zaxlRDxRL9I94NwPeMKM95pmwZ
x1//2Q==
</value>
</data>
<metadata name="IL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>800, 17</value>
</metadata>
<data name="IL.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
DgAAAk1TRnQBSQFMAgEBBwEAAZABBQGQAQUBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
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/yYAAXQFRgHyFQAB/wH0
CwABBxUAAUYHJQHyFAACQwEVCQABQwEVAUMCAAHwCwAB8AQAAUYJJQHyEwABQwIVCAAB8gFDARUBQwEA
AgcB7QgAAf8BkgG8Ae8CAAFGAiUB/wFMAyUCGgIlARsRAAEHAUMBFQETAUMB9AUAAQcBFQEUARUBQwEA
AfcBvAHtCQAB9wHwAZIBAAF0AiUB9gL/AUwBJQH2Av8DJREAAfQBQwEVAeoB+QIPAx8BQwEUAR8BFAEV
AUMB/wHtAfAB7AHqAW0B7wMAAe8BDgHsAe8B8AHsAQABRgIlAUYD/wH2A/8DJRIAAUMBbQHqAUQCEAMg
AQ4BbQEUAhABEQEAAewBvAH3AeoB6wESAewBBwHsARIB6wFtAgcB6wEAAUYDKwFMBf8EKxIAAUMBFQES
ASABDgEPAR8CIAIVAREBFAEQAUMBAAFtAuwB7QEUAW0BkgHsAZIBbQHqAe0B7AHtAQ4BAAFGBEwB9gP/
AXQETBIAAUMB7AEUAQ8CHwEAAQ4BDwEBAR4BRAFDARABEQIAAfcB7wHrAu8B7QGSAe0B7wH3AZEC7wIA
AUYDTAH2Bf8BdANMEgABvAEUAQ4BEAFDAUUBHgEBAUMBHgFvAQ4CEAMAAuwBvAHsAQcBvAFtArwBjQG8
ARUBvAIAAUYCTAEaA/8BTAP/A0wTAAFDARABbQEVAQEBEQEVAQ4BHgELAR8CDgMAAfIB8wHsAfIF9AHy
ARIB8gHzAgAB8wFTAUwBmgL/A0wC/wJMAU0TAAEVAhEBHgEABw4FAAG8AvAFAALwAbwBEQMAAfMBUwpN
FQAB7AEQAQ8BFQMAAUMCDwH0BQABEQcAAf8BAAETBQAB8wlTNwAB8wdTlAAg/wcAAUMBAAHyFgAB/w7x
AfAG/wH0AygG/wUAAQ4BkQGuApEB6gH/BwAL/wIAAf8B8QNrAYsBkQGLBIoBSQFKAZEB8Qb/ASgDKQEo
Bf8EAAFDAZoBegFSAZEBtQESAfEGAAH3AQcBvAIHAu8DBwHwAfIBBwEAAf8B8QIGAYsBkAG7BYsCUAFr
AfEG/wFQBCkBKAT/AwABDwEHAZECcwGRAbUBtAFDAfQEAAH/AbwB7wO8AwcBvAEHAfAB8gHxAQAB/wHx
AgYBiwGQAbsEkAFsAVABUQFrAfEH/wVQAXMD/wEAARQBUgHzArwBBwH3AZECtAEOAfQEAAH/AbwB7wPw
ArwC8AG8AfEB8gHwAQAB/wHxAosBkAGzAbsBKQGzAXEDUAGQAWsB8QL/AXMFKAVQAXMC/wIAARoB9AH3
ARIBQwERAbsBkQF6AewB/wLxAfMBAAH/Ae8B9wG8BvABvALxAbwBAAH/AfIDkAGzAbsCswNRASkBswFr
AfIB/w1QAZkB/wIAAQ4B7wETAeoBFQEPAZEBDwEOBfEBAAH/Ae0BvAnyAfABBwEAAf8B8gSzAboBiwEp
BHgBUQFrAfIB/w5QAf8EAAFtAREBQwEQARUB8QL/AfQC/wIAAf8B9wHxCPIB8QHwAbwBAAH/AfIEswG6
AbsBKAJ4AVABeAEoAWsB8gH/ASkMUAEoAf8EAAG7AbQBkQFtCQAB/wGSAfEB8gbzAfIC8QHwAQAB/wHz
BLMBuQG6AdwBtAFJAlABSQFrAfMC/wFQBXgBVwRRASkC/wMAAfMBAAGRARMLAAGSAfEB8gbzAfIB8QHy
AfMBAAH/AfMGuQG6AdsD3AHbAWsB8wf/ASgEVwFQA/8DAAHwAQ4B7AEVCwAB7QHxAfIG8wHyAfEB8gH/
AQAB/wHzDNoBiwHzBv8BmQR4AVcE/wEAAfEBAAEHAe0B7AGuAfIKAAEHAvIG8wHyAfEB8gIAAf8P8wb/
ASkEeAX/AQABbgF5AbwB9wETAfAMAALyBvMB8gHxAfQCAAH/CPMB8gH3AfIB9wHyAfcB8wb/ARwDeAb/
Ae0B6wG8Au8OAALxBvIC8QMAAf8B8w3/Ae8H/wGZAVAI/wETAfAB6hwAIP8CAAHzAfcB/xsAAUIBTQE+
BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAT/AfgBDwIAAZ8B/QL/AfABBwIAAY8B+AHf
Af0B4AEDAgABjwHwAY8B8AHAAQECAAEDAeABBwHwAYABAQUAAoABAQIAAYABAAGAAQABgAEBAgABgAEA
AYABAAGAAQECAAGAAQABgAEAAYABAQIAAYABAQGAAQABgAEBAgABwAEBAcABAQGAAQECAAHAAQEBwwHh
AcABAwIAAeABAwHnAeMB4AEHAgAE/wHwAQ8CAAb/AgAG/wYAAfwBPwL/BAAB+AEPAeABAwQAAfABDwHA
AQEEAAHAAQcBgAEBBAABgAEHAYABAQQAAYABAAGAAQEEAAHAAQABgAEBBAAB4AEBAYABAQQAAeAB/wGA
AQEEAAHgAf8BwAEBBAAB4QH/AcABAQQAAYAB/wHAAQMEAAGBAf8B4AEDBAABAwH/AeABBwQAAQcD/wQA
AccD/ws=
</value>
</data>
<metadata name="OFD.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>439, 17</value>
<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>515, 17</value>
<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>727, 17</value>
<value>421, 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>
<data name="tsDDbtProfiles.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
QmCC
</value>
</data>
<data name="tsDDbtResetMode.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="tsBtReset.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAA

@ -4,6 +4,7 @@ using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using SCJMapper_V2.Properties;
namespace SCJMapper_V2
{
@ -15,7 +16,7 @@ namespace SCJMapper_V2
// Load MappingVars.csv into the ActionList and create the Control TreeView
public void LoadTree( Boolean addDefaultBinding )
public void LoadTree( String defaultProfileName, Boolean applyDefaults )
{
TreeNode tn = null;
TreeNode[] cnl = { };
@ -33,7 +34,7 @@ namespace SCJMapper_V2
DProfileReader dpReader = new DProfileReader( ); // we may read a profile
TextReader txReader = null;
dpReader.fromXML( SCDefaultProfile.DefaultProfile( ) );
dpReader.fromXML( SCDefaultProfile.DefaultProfile( defaultProfileName + ".xml" ) );
if ( dpReader.ValidContent ) {
txReader = new StringReader( dpReader.CSVMap );
}
@ -61,7 +62,7 @@ namespace SCJMapper_V2
ac = new ActionCls( ); ac.key = cn.Name; ac.name = action; ac.device = device; ac.defBinding = defBinding;
acm.Add( ac ); // add to our map
if ( addDefaultBinding ) {
if ( applyDefaults ) {
// right now this application only works with joysticks
if ( JoystickCls.IsJoystick( ac.device ) ) {
int jNum = JoystickCls.JSNum( ac.defBinding );

@ -28,7 +28,8 @@ namespace SCJMapper_V2
{
public String name { get; set; } // the action name
public String input { get; set; } // the input method K,J,X,P
public String defBinding { get; set; } // the default binding - may be useful
private String m_defBinding = "";
public String defBinding { get { return m_defBinding;} set { m_defBinding = value.Trim();} } // need to clean this one, found spaces...
public String keyName
{ get { return input + name; } } // prep for TreView usage - create a key from input+name
}
@ -71,6 +72,45 @@ namespace SCJMapper_V2
}
/// <summary>
/// Assumes to be in an action element
/// retrieves the attributes and collects the various control=binding pairs
/// </summary>
/// <param name="xr">An XML reader @ StartElement</param>
private void CollectActions( XmlReader xr, Dictionary<string, string> attr )
{
// we collect actions for each input ie for K,J,X and P
if ( attr.ContainsKey( "joystick" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "J";
ac.defBinding = attr["joystick"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "keyboard" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "K";
ac.defBinding = attr["keyboard"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "xboxpad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "X";
ac.defBinding = attr["xboxpad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "ps3pad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "P";
ac.defBinding = attr["ps3pad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
}
/// <summary>
/// Read one 'empty' XML element
///
@ -94,40 +134,10 @@ namespace SCJMapper_V2
// processing a valid action map - collect actions
if ( eName.ToLower( ) == "action" ) {
// this is an action.. - collect it
// we collect actions for each input ie for K,J,X and P
if ( attr.ContainsKey( "joystick" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "J";
ac.defBinding = attr["joystick"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "keyboard" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "K";
ac.defBinding = attr["keyboard"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "xboxpad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "X";
ac.defBinding = attr["xboxpad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "ps3pad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "P";
ac.defBinding = attr["ps3pad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
CollectActions( xr, attr );
}
}// if inmap
//Console.Write( ">\n" );
m_nodeNameStack.Pop( );
break;
case XmlNodeType.Text:
@ -141,6 +151,55 @@ namespace SCJMapper_V2
return true;
}
/// <summary>
/// Reads an action sub element
/// </summary>
/// <param name="xr">An XML reader @ StartElement</param>
private void ReadActionSub( XmlReader xr, String actionName )
{
//<action name="v_brake" onPress="1" onHold="1" onRelease="1" keyboard="space" xboxpad="xi_shoulderl+xi_shoulderr">
// <joystick input="js2_button7" />
// <joystick input="js2_button8" />
//</action>
//or
//<action name="v_hud_confirm" onPress="1" onRelease="1" xboxpad="xi_triggerL_btn+xi_a" joystick="js1_button19">
// <keyboard>
// <inputdata input="enter"/>
// </keyboard>
//</action>
Boolean done = false;
do {
xr.Read( ); // get next element
Dictionary<String, String> attr = new Dictionary<string, string>( );
String eName = xr.Name;
while ( xr.MoveToNextAttribute( ) ) {
attr.Add( xr.Name, xr.Value ); // save the attributes
//Console.Write( " {0}='{1}'", xr.Name, xr.Value );
}
xr.MoveToElement( ); // backup
Action ac = new Action( );
ac.name = actionName;
// the element name is a control
if ( xr.NodeType == XmlNodeType.EndElement ) {
done = ( xr.Name == "action" );
}
else if ( xr.IsEmptyElement ) {
// an attribute only element
ac.input = ActionCls.DevID( eName );
ac.defBinding = attr["input"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
else {
// one with subelements again
xr.Read( );
ac.input = ActionCls.DevID( eName );
ac.defBinding = xr["input"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
} while ( !done );
m_nodeNameStack.Pop( ); // action is finished
}
/// <summary>
/// Read one XML element
///
@ -183,35 +242,8 @@ namespace SCJMapper_V2
// processing a valid action map - collect actions
if ( eName.ToLower( ) == "action" ) {
// this is an action.. - collect it
// we collect actions for each input ie for K,J,X and P
if ( attr.ContainsKey( "joystick" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "J";
ac.defBinding = attr["joystick"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "keyboard" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "K";
ac.defBinding = attr["keyboard"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "xboxpad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "X";
ac.defBinding = attr["xboxpad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
if ( attr.ContainsKey( "ps3pad" ) ) {
Action ac = new Action( );
ac.name = attr["name"];
ac.input = "P";
ac.defBinding = attr["ps3pad"];
if ( !String.IsNullOrEmpty( ac.defBinding ) ) m_currentMap.Add( ac ); // finally add it to the current map if it was bound
}
CollectActions( xr, attr );
ReadActionSub( xr, attr["name"] ); // a non empty action element may have a sub element
}
}
//Console.Write( ">\n" );
@ -236,28 +268,37 @@ namespace SCJMapper_V2
{
Boolean retVal = true;
do {
if ( xr.IsStartElement( ) ) {
m_nodeNameStack.Push( xr.Name );
if ( xr.IsEmptyElement )
retVal = retVal && ReadEmptyElement( xr );
else {
retVal = retVal && ReadElement( xr );
try {
do {
if ( xr.IsStartElement( ) ) {
m_nodeNameStack.Push( xr.Name );
if ( xr.IsEmptyElement ) {
retVal = retVal && ReadEmptyElement( xr );
m_nodeNameStack.Pop( ); // empty ones end inline
}
else {
retVal = retVal && ReadElement( xr );
}
}
}
else if ( xr.NodeType == XmlNodeType.EndElement ) {
//Console.Write( "</{0}>\n", xr.Name );
String exitElement = m_nodeNameStack.Pop( );
if ( m_state == EState.inActionMap )
if ( exitElement.ToLower( ) == "actionmap" ) m_state = EState.idle; // finished
}
else if ( xr.NodeType == XmlNodeType.EndElement ) {
//Console.Write( "</{0}>\n", xr.Name );
String exitElement = m_nodeNameStack.Pop( );
if ( m_state == EState.inActionMap )
if ( exitElement.ToLower( ) == "actionmap" ) m_state = EState.idle; // finished
}
} while ( xr.Read( ) );
} while ( xr.Read( ) );
if ( m_nodeNameStack.Count == 0 )
return retVal && true;
else
return false;
if ( m_nodeNameStack.Count == 0 )
return retVal && true;
else
}
catch {
// get any exceptions from reading
return false;
}
}
/// <summary>

@ -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( "1.4.0.10" )]
[assembly: AssemblyFileVersion( "1.4.0.10" )]
[assembly: AssemblyVersion( "1.5.0.15" )]
[assembly: AssemblyFileVersion( "1.5.0.15" )]

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34014
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -12,7 +12,7 @@ namespace SCJMapper_V2.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

@ -1,7 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Profiles />
<Settings />
</SettingsFile>
</SettingsFile>

@ -15,16 +15,45 @@ namespace SCJMapper_V2
class SCDefaultProfile
{
static public String DefaultProfile( )
/// <summary>
/// Returns a list of files found that match 'defaultProfile*.xml'
/// </summary>
/// <returns>A list of filenames - can be empty</returns>
static public List<String> DefaultProfileNames
{
get
{
List<String> retVal = new List<String>( );
if ( File.Exists( SCPath.SCGameData_pak ) ) {
using ( ZipFile zip = ZipFile.Read( SCPath.SCGameData_pak ) ) {
zip.CaseSensitiveRetrieval = false;
ICollection<ZipEntry> gdpak = zip.SelectEntries( "name = " + "'" + SCPath.DefaultProfileName + "*.xml'", SCPath.DefaultProfilePath_rel );
if ( gdpak != null ) {
foreach ( ZipEntry ze in gdpak ) {
retVal.Add( ze.FileName );
}
}
}
}
return retVal;
}
}
/// <summary>
/// Returns the sought default profile as string from GameData.pak
/// </summary>
/// <param name="defaultProfileName">The filename of the profile to be extracted</param>
/// <returns>A string containing the file contents</returns>
static public String DefaultProfile( String defaultProfileName )
{
String retVal = "";
// first try to get the SC defaultProfile from the GameData.pak
retVal = ExtractDefaultProfile( );
retVal = ExtractDefaultProfile( defaultProfileName );
if ( String.IsNullOrEmpty( retVal ) ) {
// second choice a defaultProfile.xml in the app dir distributed with the application ??? to be deleted ???
if ( File.Exists( SCPath.DefaultProfileName ) ) {
using ( StreamReader sr = new StreamReader( SCPath.DefaultProfileName ) ) {
if ( File.Exists( SCPath.DefaultProfileName + ".xml" ) ) {
using ( StreamReader sr = new StreamReader( SCPath.DefaultProfileName + ".xml" ) ) {
retVal = sr.ReadToEnd( );
}
}
@ -37,15 +66,16 @@ namespace SCJMapper_V2
}
/// <summary>
/// Extracts the file to the internal string
/// Zip Extracts the file to a string
/// </summary>
static private String ExtractDefaultProfile( )
static private String ExtractDefaultProfile( String defaultProfileName )
{
String retVal = "";
if ( File.Exists( SCPath.SCGameData_pak ) ) {
using ( ZipFile zip = ZipFile.Read( SCPath.SCGameData_pak ) ) {
zip.CaseSensitiveRetrieval = false;
ICollection<ZipEntry> gdpak = zip.SelectEntries( "name = " + SCPath.DefaultProfileName, SCPath.DefaultProfilePath_rel );
ICollection<ZipEntry> gdpak = zip.SelectEntries( "name = " + "'" + defaultProfileName+"'", SCPath.DefaultProfilePath_rel );
if ( gdpak != null ) {
try {
MemoryStream mst = new MemoryStream( );

@ -141,13 +141,13 @@ namespace SCJMapper_V2
}
/// <summary>
/// Returns the name of the DefaultProfile.xml
/// Returns the name part of the DefaultProfile w/o extension...
/// </summary>
static public String DefaultProfileName
{
get
{
return @"defaultProfile.xml";
return @"defaultProfile";
}
}

@ -15,6 +15,21 @@
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<NuGetPackageImportStamp>3422add1</NuGetPackageImportStamp>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>15</ApplicationRevision>
<ApplicationVersion>1.5.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
@ -63,6 +78,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AppSettings.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
@ -131,6 +147,28 @@
<Content Include="graphics\selected.png" />
<Content Include="graphics\XBOX.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="packages\SharpDX.2.6.2\build\SharpDX.targets" Condition="Exists('packages\SharpDX.2.6.2\build\SharpDX.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

@ -1,3 +1,6 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
<configSections>
</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Loading…
Cancel
Save