using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.Text; using System.Threading; using System.Windows.Forms; using Salamax.Logging; namespace Salamax { public partial class Main : Form { private LogViewer _logWindow = null; private CodeNotifier _notifier = null; private Thread _updateThread = null; public Main() { InitializeComponent(); } private void Main_Load(object sender, EventArgs e) { var asm = System.Reflection.Assembly.GetExecutingAssembly(); var name = asm.GetName(); this.Text = name.Name + " v" + name.Version.ToString(3); _ShowHideLogWindow(); Logger.WriteLine("Main window opened.", Logger.Type.Information); _updateThread = new System.Threading.Thread(new System.Threading.ThreadStart(_UpdateConnectionStatus)); _updateThread.IsBackground = true; _updateThread.Start(); _notifier = new CodeNotifier(); ButtonStateChanges.AddNotifier(_notifier); } private void Main_FormClosing(object sender, FormClosingEventArgs e) { try { _updateThread.Abort(); _updateThread = null; } catch { //Eat... } } private void _UpdateConnectionStatus() { while (true) { _UpdateLabels(); System.Threading.Thread.Sleep(1000); } } private bool _refreshedIds = false; private void _UpdateLabels() { try { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(_UpdateLabels)); } else { if (Startup.Service != null) { if (Startup.Service.Controller != null && !_refreshedIds) { txtVendorId.Text = Startup.Service.Controller.VendorId.ToString("X4"); txtProductId.Text = Startup.Service.Controller.ProductId.ToString("X4"); _refreshedIds = true; } if (Startup.Service.IsSilverlinkConnected) lblSilverlinkStatus.ForeColor = Color.Green; else lblSilverlinkStatus.ForeColor = Color.Red; if (Startup.Service.IsControllerConnected) lblControllerStatus.ForeColor = Color.Green; else lblControllerStatus.ForeColor = Color.Red; if (Startup.Service.IsTeensyConnected) lblTeensyDevice.ForeColor = Color.Green; else lblTeensyDevice.ForeColor = Color.Red; } } } catch { //Eat it... } } private void _ShowHideLogWindow() { if (_logWindow == null) { _logWindow = new LogViewer(); _logWindow.StartPosition = FormStartPosition.Manual; _logWindow.Visible = true; int offset = 0; if (_logWindow.Width > this.Width) offset = 0 - (_logWindow.Width - this.Width) / 2; else offset = (this.Width - _logWindow.Width) / 2; _logWindow.Location = new Point(this.Location.X + offset, this.Location.Y + this.Size.Height + 10); } if (_logWindow != null) { if (_logWindow.Visible) _logWindow.Hide(); else _logWindow.Show(); } } private void mniShowHideLog_Click(object sender, EventArgs e) { _ShowHideLogWindow(); } private void mniAbout_Click(object sender, EventArgs e) { MessageBox.Show(this.Text + "\r\n\r\nBrandon Wilson\r\n\r\nFeel free to do whatever you want with this application.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } private void mniExit_Click(object sender, EventArgs e) { if (_logWindow != null) _logWindow.ForceClose(); this.Close(); } private void btnConnectWiiRemote_Click(object sender, EventArgs e) { try { Startup.Service.Wiimote.Connect(); Logger.WriteLine("Wii remote connected successfully.", Logger.Type.Information); } catch { Logger.WriteLine("Wii remote did not connect successfully.", Logger.Type.Error); }; } private void btnDisconnectWiiRemote_Click(object sender, EventArgs e) { try { Startup.Service.Wiimote.Disconnect(); Logger.WriteLine("Wii remote disconnected successfully.", Logger.Type.Information); } catch { Logger.WriteLine("Wii remote did not disconnect successfully.", Logger.Type.Error); }; } private void btnDetect_Click(object sender, EventArgs e) { int vendorId; int productId; Startup.Service.Stop(); if (int.TryParse(txtVendorId.Text, NumberStyles.HexNumber, null, out vendorId) && int.TryParse(txtProductId.Text, System.Globalization.NumberStyles.HexNumber, null, out productId)) Startup.Service.Start(vendorId, productId); else Startup.Service.Start(); } private void chkUp_CheckedChanged(object sender, EventArgs e) { _notifier.Up = chkUp.Checked; } private void chkDown_CheckedChanged(object sender, EventArgs e) { _notifier.Down = chkDown.Checked; } private void chkLeft_CheckedChanged(object sender, EventArgs e) { _notifier.Left = chkLeft.Checked; } private void chkRight_CheckedChanged(object sender, EventArgs e) { _notifier.Right = chkRight.Checked; } private void chkA_CheckedChanged(object sender, EventArgs e) { _notifier.A = chkA.Checked; } private void chkB_CheckedChanged(object sender, EventArgs e) { _notifier.B = chkB.Checked; } private void chkX_CheckedChanged(object sender, EventArgs e) { _notifier.X = chkX.Checked; } private void chkY_CheckedChanged(object sender, EventArgs e) { _notifier.Y = chkY.Checked; } private void chkGuide_CheckedChanged(object sender, EventArgs e) { _notifier.Guide = chkGuide.Checked; } private void chkLT_CheckedChanged(object sender, EventArgs e) { _notifier.LeftTrigger = (byte)(chkLT.Checked ? 0xFF : 0x00); } private void chkRT_CheckedChanged(object sender, EventArgs e) { _notifier.RightTrigger = (byte)(chkRT.Checked ? 0xFF : 0x00); } private void chkLB_CheckedChanged(object sender, EventArgs e) { _notifier.LeftButton = chkLB.Checked; } private void chkRB_CheckedChanged(object sender, EventArgs e) { _notifier.RightButton = chkRB.Checked; } private void chkBack_CheckedChanged(object sender, EventArgs e) { _notifier.Back = chkBack.Checked; } private void mniEnableKeyboardControl_Click(object sender, EventArgs e) { KeyboardInfo.KeysEnabled = true; } private void mniDisableKeyboardControl_Click(object sender, EventArgs e) { KeyboardInfo.KeysEnabled = false; } } }