From f4d0d6a18359ae24b9ed116d54c4410601afb29c Mon Sep 17 00:00:00 2001 From: Manuel Date: Sat, 16 Nov 2024 16:00:35 +0100 Subject: [PATCH] working initial release --- PicoKeys/ActionMethods.cs | 43 +++++ PicoKeys/ActionObject.cs | 20 ++ PicoKeys/ActionType.cs | 25 +++ PicoKeys/Actions.Designer.cs | 155 +++++++++++++++ PicoKeys/Actions.cs | 57 ++++++ PicoKeys/Actions.resx | 232 +++++++++++++++++++++++ PicoKeys/App.config | 12 ++ PicoKeys/JsonHelper.cs | 34 ++++ PicoKeys/Main.Designer.cs | 71 ++++--- PicoKeys/Main.cs | 182 ++++++++++++++---- PicoKeys/PicoKeys.csproj | 16 ++ PicoKeys/Properties/Settings.Designer.cs | 42 ++-- PicoKeys/Properties/Settings.settings | 14 +- PicoKeys/packages.config | 1 + 14 files changed, 812 insertions(+), 92 deletions(-) create mode 100644 PicoKeys/ActionMethods.cs create mode 100644 PicoKeys/ActionObject.cs create mode 100644 PicoKeys/ActionType.cs create mode 100644 PicoKeys/Actions.Designer.cs create mode 100644 PicoKeys/Actions.cs create mode 100644 PicoKeys/Actions.resx create mode 100644 PicoKeys/JsonHelper.cs diff --git a/PicoKeys/ActionMethods.cs b/PicoKeys/ActionMethods.cs new file mode 100644 index 0000000..4169ac9 --- /dev/null +++ b/PicoKeys/ActionMethods.cs @@ -0,0 +1,43 @@ +using AudioSwitcher.AudioApi.CoreAudio; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; + +namespace PicoKeys +{ + public class ActionMethods + { + public void DoNothing() + { + //DO NOTHING METHOD FOR NO ACTION + } + + public void ToggleMicrophone() + { + using (var audio = new CoreAudioController()) + { + audio.DefaultCaptureDevice.ToggleMute(); + } + } + + public void ToggleSpeaker() + { + using (var audio = new CoreAudioController()) + { + audio.DefaultPlaybackDevice.ToggleMute(); + } + } + + public void LaunchProgram(string path) + { + if (File.Exists(path)) + { + Process.Start(path); + } + else + { + MessageBox.Show("The program specified for this button was not found!\n\n" + path, "Launcher Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/PicoKeys/ActionObject.cs b/PicoKeys/ActionObject.cs new file mode 100644 index 0000000..08e8879 --- /dev/null +++ b/PicoKeys/ActionObject.cs @@ -0,0 +1,20 @@ +namespace PicoKeys +{ + public class ActionObject + { + public string ButtonName { get; set; } + public string ButtonText { get; set; } + public bool ShowStatusOverlay { get; set; } + public string Actiontype { get; set; } + public string Parameter { get; set; } + + public ActionObject(string ButtonName, string ButtonText) + { + this.ButtonName = ButtonName; + this.ButtonText = ButtonText; + ShowStatusOverlay = true; + Actiontype = "None"; + Parameter = ""; + } + } +} \ No newline at end of file diff --git a/PicoKeys/ActionType.cs b/PicoKeys/ActionType.cs new file mode 100644 index 0000000..008257b --- /dev/null +++ b/PicoKeys/ActionType.cs @@ -0,0 +1,25 @@ +namespace PicoKeys +{ + public class ActionType + { + public string Name { get; set; } + public string Method { get; set; } + public bool Dummy { get; set; } + public bool HasParameter { get; set; } + + public ActionType(string Name) + { + this.Name = Name; + Method = "DoNothing"; + Dummy = true; + } + + public ActionType(string Name, string Method, bool HasParameter = false) + { + this.Name = Name; + this.Method = Method; + Dummy = false; + this.HasParameter = HasParameter; + } + } +} \ No newline at end of file diff --git a/PicoKeys/Actions.Designer.cs b/PicoKeys/Actions.Designer.cs new file mode 100644 index 0000000..495ff66 --- /dev/null +++ b/PicoKeys/Actions.Designer.cs @@ -0,0 +1,155 @@ +namespace PicoKeys +{ + partial class Actions + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Actions)); + this.label1 = new System.Windows.Forms.Label(); + this.buttonSave = new System.Windows.Forms.Button(); + this.textBoxButtonName = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.comboBoxActionType = new System.Windows.Forms.ComboBox(); + this.checkBoxStatusOverlay = new System.Windows.Forms.CheckBox(); + this.labelParameter = new System.Windows.Forms.Label(); + this.textBoxParameter = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(72, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Button Name:"; + // + // buttonSave + // + this.buttonSave.Location = new System.Drawing.Point(157, 183); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(75, 23); + this.buttonSave.TabIndex = 1; + this.buttonSave.Text = "save"; + this.buttonSave.UseVisualStyleBackColor = true; + this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click); + // + // textBoxButtonName + // + this.textBoxButtonName.Location = new System.Drawing.Point(15, 25); + this.textBoxButtonName.MaxLength = 20; + this.textBoxButtonName.Name = "textBoxButtonName"; + this.textBoxButtonName.Size = new System.Drawing.Size(217, 20); + this.textBoxButtonName.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 58); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(74, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Button Action:"; + // + // comboBoxActionType + // + this.comboBoxActionType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxActionType.FormattingEnabled = true; + this.comboBoxActionType.Location = new System.Drawing.Point(15, 74); + this.comboBoxActionType.Name = "comboBoxActionType"; + this.comboBoxActionType.Size = new System.Drawing.Size(217, 21); + this.comboBoxActionType.TabIndex = 4; + this.comboBoxActionType.SelectedIndexChanged += new System.EventHandler(this.ComboBoxActionType_SelectedIndexChanged); + // + // checkBoxStatusOverlay + // + this.checkBoxStatusOverlay.AutoSize = true; + this.checkBoxStatusOverlay.Checked = true; + this.checkBoxStatusOverlay.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxStatusOverlay.Location = new System.Drawing.Point(15, 160); + this.checkBoxStatusOverlay.Name = "checkBoxStatusOverlay"; + this.checkBoxStatusOverlay.Size = new System.Drawing.Size(198, 17); + this.checkBoxStatusOverlay.TabIndex = 5; + this.checkBoxStatusOverlay.Text = "Show Status Overlay when triggered"; + this.checkBoxStatusOverlay.UseVisualStyleBackColor = true; + // + // labelParameter + // + this.labelParameter.AutoSize = true; + this.labelParameter.Location = new System.Drawing.Point(12, 108); + this.labelParameter.Name = "labelParameter"; + this.labelParameter.Size = new System.Drawing.Size(58, 13); + this.labelParameter.TabIndex = 6; + this.labelParameter.Text = "Parameter:"; + this.labelParameter.Visible = false; + // + // textBoxParameter + // + this.textBoxParameter.Location = new System.Drawing.Point(15, 124); + this.textBoxParameter.MaxLength = 230; + this.textBoxParameter.Name = "textBoxParameter"; + this.textBoxParameter.Size = new System.Drawing.Size(217, 20); + this.textBoxParameter.TabIndex = 7; + this.textBoxParameter.Visible = false; + // + // Actions + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(244, 222); + this.Controls.Add(this.textBoxParameter); + this.Controls.Add(this.labelParameter); + this.Controls.Add(this.checkBoxStatusOverlay); + this.Controls.Add(this.comboBoxActionType); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxButtonName); + this.Controls.Add(this.buttonSave); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Actions"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Actions - PicoKeys"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button buttonSave; + private System.Windows.Forms.TextBox textBoxButtonName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox comboBoxActionType; + private System.Windows.Forms.CheckBox checkBoxStatusOverlay; + private System.Windows.Forms.Label labelParameter; + private System.Windows.Forms.TextBox textBoxParameter; + } +} \ No newline at end of file diff --git a/PicoKeys/Actions.cs b/PicoKeys/Actions.cs new file mode 100644 index 0000000..bf50c5b --- /dev/null +++ b/PicoKeys/Actions.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace PicoKeys +{ + public partial class Actions : Form + { + public ActionObject a; + private List actionTypes = new List(); + + public Actions(List actionTypes, ActionObject a) + { + InitializeComponent(); + this.a = a; + this.actionTypes = actionTypes; + textBoxButtonName.Text = a.ButtonText; + checkBoxStatusOverlay.Checked = a.ShowStatusOverlay; + var bs = new BindingSource + { + DataSource = actionTypes + }; + comboBoxActionType.DataSource = bs.DataSource; + comboBoxActionType.DisplayMember = "Name"; + comboBoxActionType.ValueMember = "Name"; + comboBoxActionType.SelectedIndex = comboBoxActionType.FindStringExact(a.Actiontype); + textBoxParameter.Text = a.Parameter; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + a.ButtonText = textBoxButtonName.Text; + a.ShowStatusOverlay = checkBoxStatusOverlay.Checked; + a.Actiontype = comboBoxActionType.Text; + a.Parameter = textBoxParameter.Text; + DialogResult = DialogResult.OK; + Close(); + } + + private void ComboBoxActionType_SelectedIndexChanged(object sender, EventArgs e) + { + //if actiontype HasParameter, show textbox for parameter, otherwise hide it + ActionType at = actionTypes.Single(s => s.Name == (comboBoxActionType.SelectedItem as dynamic).Name); + if (at.HasParameter) + { + labelParameter.Visible = true; + textBoxParameter.Visible = true; + } + else + { + labelParameter.Visible = false; + textBoxParameter.Visible = false; + } + } + } +} diff --git a/PicoKeys/Actions.resx b/PicoKeys/Actions.resx new file mode 100644 index 0000000..3954d79 --- /dev/null +++ b/PicoKeys/Actions.resx @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/PicoKeys/App.config b/PicoKeys/App.config index 193aecc..b5213e4 100644 --- a/PicoKeys/App.config +++ b/PicoKeys/App.config @@ -1,6 +1,18 @@  + + +
+ + + + + + False + + + \ No newline at end of file diff --git a/PicoKeys/JsonHelper.cs b/PicoKeys/JsonHelper.cs new file mode 100644 index 0000000..9836e7f --- /dev/null +++ b/PicoKeys/JsonHelper.cs @@ -0,0 +1,34 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; + +namespace PicoKeys +{ + internal class JsonHelper + { + public static List InvalidJsonElements; + + public static IList DeserializeToList(string jsonString) + { + InvalidJsonElements = null; + var array = JArray.Parse(jsonString); + IList objectsList = new List(); + + foreach (var item in array) + { + try + { + // CorrectElements + objectsList.Add(item.ToObject()); + } + catch (Exception ex) + { + InvalidJsonElements = InvalidJsonElements ?? new List(); + InvalidJsonElements.Add(item.ToString()); + } + } + + return objectsList; + } + } +} diff --git a/PicoKeys/Main.Designer.cs b/PicoKeys/Main.Designer.cs index 9f2eca3..1a5239a 100644 --- a/PicoKeys/Main.Designer.cs +++ b/PicoKeys/Main.Designer.cs @@ -47,9 +47,10 @@ this.button10 = new System.Windows.Forms.Button(); this.button11 = new System.Windows.Forms.Button(); this.button12 = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBoxActions = new System.Windows.Forms.GroupBox(); + this.checkBoxMinimized = new System.Windows.Forms.CheckBox(); this.contextMenuStripTrayIcon.SuspendLayout(); - this.groupBox1.SuspendLayout(); + this.groupBoxActions.SuspendLayout(); this.SuspendLayout(); // // contextMenuStripTrayIcon @@ -79,9 +80,9 @@ this.checkBoxAutostart.AutoSize = true; this.checkBoxAutostart.Location = new System.Drawing.Point(12, 12); this.checkBoxAutostart.Name = "checkBoxAutostart"; - this.checkBoxAutostart.Size = new System.Drawing.Size(145, 17); + this.checkBoxAutostart.Size = new System.Drawing.Size(142, 17); this.checkBoxAutostart.TabIndex = 1; - this.checkBoxAutostart.Text = "Autostart on System Boot"; + this.checkBoxAutostart.Text = "Autostart on system boot"; this.checkBoxAutostart.UseVisualStyleBackColor = true; this.checkBoxAutostart.CheckedChanged += new System.EventHandler(this.CheckBoxAutostart_CheckedChanged); // @@ -213,34 +214,46 @@ this.button12.UseVisualStyleBackColor = true; this.button12.Click += new System.EventHandler(this.ButtonAction_Click); // - // groupBox1 + // groupBoxActions // - this.groupBox1.Controls.Add(this.button1); - this.groupBox1.Controls.Add(this.button12); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Controls.Add(this.button11); - this.groupBox1.Controls.Add(this.button2); - this.groupBox1.Controls.Add(this.button10); - this.groupBox1.Controls.Add(this.button3); - this.groupBox1.Controls.Add(this.button9); - this.groupBox1.Controls.Add(this.button4); - this.groupBox1.Controls.Add(this.button8); - this.groupBox1.Controls.Add(this.button5); - this.groupBox1.Controls.Add(this.button7); - this.groupBox1.Controls.Add(this.button6); - this.groupBox1.Location = new System.Drawing.Point(12, 35); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(331, 246); - this.groupBox1.TabIndex = 15; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Button Actions"; + this.groupBoxActions.Controls.Add(this.button1); + this.groupBoxActions.Controls.Add(this.button12); + this.groupBoxActions.Controls.Add(this.label1); + this.groupBoxActions.Controls.Add(this.button11); + this.groupBoxActions.Controls.Add(this.button2); + this.groupBoxActions.Controls.Add(this.button10); + this.groupBoxActions.Controls.Add(this.button3); + this.groupBoxActions.Controls.Add(this.button9); + this.groupBoxActions.Controls.Add(this.button4); + this.groupBoxActions.Controls.Add(this.button8); + this.groupBoxActions.Controls.Add(this.button5); + this.groupBoxActions.Controls.Add(this.button7); + this.groupBoxActions.Controls.Add(this.button6); + this.groupBoxActions.Location = new System.Drawing.Point(12, 35); + this.groupBoxActions.Name = "groupBoxActions"; + this.groupBoxActions.Size = new System.Drawing.Size(331, 246); + this.groupBoxActions.TabIndex = 15; + this.groupBoxActions.TabStop = false; + this.groupBoxActions.Text = "Button Actions"; + // + // checkBoxMinimized + // + this.checkBoxMinimized.AutoSize = true; + this.checkBoxMinimized.Location = new System.Drawing.Point(175, 12); + this.checkBoxMinimized.Name = "checkBoxMinimized"; + this.checkBoxMinimized.Size = new System.Drawing.Size(168, 17); + this.checkBoxMinimized.TabIndex = 16; + this.checkBoxMinimized.Text = "Start minimized (in system tray)"; + this.checkBoxMinimized.UseVisualStyleBackColor = true; + this.checkBoxMinimized.CheckedChanged += new System.EventHandler(this.CheckBoxMinimized_CheckedChanged); // // Main // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(356, 295); - this.Controls.Add(this.groupBox1); + this.Controls.Add(this.checkBoxMinimized); + this.Controls.Add(this.groupBoxActions); this.Controls.Add(this.checkBoxAutostart); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -250,10 +263,11 @@ this.Text = "PicoKeys v1.0 | © 2024 kmpr.at"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); this.Load += new System.EventHandler(this.Main_Load); + this.Shown += new System.EventHandler(this.Main_Shown); this.Resize += new System.EventHandler(this.Main_Resize); this.contextMenuStripTrayIcon.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); + this.groupBoxActions.ResumeLayout(false); + this.groupBoxActions.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -278,7 +292,8 @@ private System.Windows.Forms.Button button10; private System.Windows.Forms.Button button11; private System.Windows.Forms.Button button12; - private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBoxActions; + private System.Windows.Forms.CheckBox checkBoxMinimized; } } diff --git a/PicoKeys/Main.cs b/PicoKeys/Main.cs index d84312d..b36f705 100644 --- a/PicoKeys/Main.cs +++ b/PicoKeys/Main.cs @@ -1,15 +1,12 @@ -using AudioSwitcher.AudioApi.CoreAudio; -using Microsoft.Win32; +using Microsoft.Win32; +using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; using System.Diagnostics; -using System.Drawing; +using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace PicoKeys @@ -38,7 +35,10 @@ namespace PicoKeys private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); - private NotifyIcon trayIcon; + private NotifyIcon TrayIcon; + + private List actionObjects; + private List actionTypes; private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { @@ -50,46 +50,40 @@ namespace PicoKeys switch (vkCode) { case 0x7C: // F13 - using (var audio = new CoreAudioController()) - { - audio.DefaultPlaybackDevice.ToggleMute(); - } + Trigger(button1); break; case 0x7D: // F14 - using (var audio = new CoreAudioController()) - { - audio.DefaultCaptureDevice.ToggleMute(); - } + Trigger(button2); break; case 0x7E: // F15 - + Trigger(button3); break; case 0x7F: // F16 - + Trigger(button4); break; case 0x80: // F17 - + Trigger(button5); break; case 0x81: // F18 - + Trigger(button6); break; case 0x82: // F19 - + Trigger(button7); break; case 0x83: // F20 - + Trigger(button8); break; case 0x84: // F21 - + Trigger(button9); break; case 0x85: // F22 - + Trigger(button10); break; case 0x86: // F23 - + Trigger(button11); break; case 0x87: // F24 - + Trigger(button12); break; } } @@ -97,21 +91,84 @@ namespace PicoKeys return CallNextHookEx(_hookID, nCode, wParam, lParam); } + private bool overrideAutostartChecked = false; + public Main() { InitializeComponent(); - trayIcon = new NotifyIcon(); - trayIcon.Icon = Properties.Resources.icons8_keyboard_96; - trayIcon.Text = "MagicKeys"; - trayIcon.Visible = false; - trayIcon.DoubleClick += new EventHandler(TrayIcon_DoubleClick); - trayIcon.ContextMenuStrip = contextMenuStripTrayIcon; + checkBoxMinimized.Checked = Properties.Settings.Default.startMinimized; + RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", false); + if (rk.GetValue("PicoKeys") != null) + { + overrideAutostartChecked = true; + checkBoxAutostart.Checked = true; + } + TrayIcon = new NotifyIcon + { + Icon = Properties.Resources.icons8_keyboard_96, + Text = "PicoKeys", + Visible = false + }; + TrayIcon.DoubleClick += new EventHandler(TrayIcon_DoubleClick); + TrayIcon.ContextMenuStrip = contextMenuStripTrayIcon; + actionObjects = new List(); + actionTypes = new List(); } private void Main_Load(object sender, EventArgs e) { _proc = HookCallback; _hookID = SetHook(_proc); + + //load default actiontypes + actionTypes.Add(new ActionType("None")); + actionTypes.Add(new ActionType("Mute Mic", "ToggleMicrophone")); + actionTypes.Add(new ActionType("Mute Sound", "ToggleSpeaker")); + actionTypes.Add(new ActionType("Launch Program", "LaunchProgram", true)); + + //load stored actions + if (!File.Exists("actions.mk0")) + { + //no stored actions (initial start), so lets generate them for each button + foreach (Control b in groupBoxActions.Controls) + { + if (b is Button) + { + ActionObject a = new ActionObject(b.Name, b.Text); + actionObjects.Add(a); + } + } + //save into file + using (StreamWriter file = File.CreateText("actions.mk0")) + { + JsonSerializer serializer = new JsonSerializer(); + serializer.Serialize(file, actionObjects); + } + //clear list + actionObjects.Clear(); + } + //load actions from file into list + using (StreamReader file = File.OpenText("actions.mk0")) + { + actionObjects = (List)JsonHelper.DeserializeToList(file.ReadToEnd()); + } + //load button texts from actionobjects + foreach (Control b in groupBoxActions.Controls) + { + if (b is Button) + { + ActionObject a = actionObjects.Single(s => s.ButtonName == b.Name); + b.Text = a.ButtonText; + } + } + } + + private void Main_Shown(object sender, EventArgs e) + { + if (checkBoxMinimized.Checked) + { + WindowState = FormWindowState.Minimized; + } } private void Main_FormClosing(object sender, FormClosingEventArgs e) @@ -131,11 +188,10 @@ namespace PicoKeys private void Main_Resize(object sender, EventArgs e) { - if (this.WindowState == FormWindowState.Minimized) + if (WindowState == FormWindowState.Minimized) { - this.Hide(); - trayIcon.Visible = true; - trayIcon.ShowBalloonTip(1000, "MagicKeys", "Minimized to tray", ToolTipIcon.Info); + Hide(); + TrayIcon.Visible = true; } } @@ -143,7 +199,7 @@ namespace PicoKeys { this.Show(); this.WindowState = FormWindowState.Normal; - trayIcon.Visible = false; + TrayIcon.Visible = false; } private void ExitToolStripMenuItem_Click(object sender, EventArgs e) @@ -155,17 +211,61 @@ namespace PicoKeys { RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); - if (checkBoxAutostart.Checked) - rk.SetValue("PicoKeys", Application.ExecutablePath); + if (overrideAutostartChecked) + overrideAutostartChecked = false; else - rk.DeleteValue("PicoKeys", false); + { + if (checkBoxAutostart.Checked) + rk.SetValue("PicoKeys", Application.ExecutablePath); + else + rk.DeleteValue("PicoKeys", false); + } } private void ButtonAction_Click(object sender, EventArgs e) { Button b = sender as Button; - MessageBox.Show(b.Name); + ActionObject a = actionObjects.Single(s => s.ButtonName == b.Name); + Actions actions = new Actions(actionTypes, a); + DialogResult dr = actions.ShowDialog(); + if (dr == DialogResult.OK) + { + b.Text = a.ButtonText; + //also overwrite the actions settings file + using (StreamWriter file = File.CreateText("actions.mk0")) + { + JsonSerializer serializer = new JsonSerializer(); + serializer.Serialize(file, actionObjects); + } + } + } + private void Trigger(Button button) + { + ActionObject a = actionObjects.Single(s => s.ButtonName == button.Name); + ActionType at = actionTypes.Single(s => s.Name == a.Actiontype); + Type t = typeof(ActionMethods); + MethodInfo mi = t.GetMethod(at.Method); + ActionMethods am = new ActionMethods(); + if (at.HasParameter) + { + mi.Invoke(am, new[] { a.Parameter }); + } + else + { + mi.Invoke(am, null); + } + //if a.ShowStatusOverlay, then display balloontip too + if (a.ShowStatusOverlay) + { + TrayIcon.ShowBalloonTip(2000, "PicoKeys", "Triggered: " + a.ButtonText, ToolTipIcon.None); + } + } + + private void CheckBoxMinimized_CheckedChanged(object sender, EventArgs e) + { + Properties.Settings.Default.startMinimized = checkBoxMinimized.Checked; + Properties.Settings.Default.Save(); } } } diff --git a/PicoKeys/PicoKeys.csproj b/PicoKeys/PicoKeys.csproj index abc4d78..0b21102 100644 --- a/PicoKeys/PicoKeys.csproj +++ b/PicoKeys/PicoKeys.csproj @@ -42,6 +42,9 @@ ..\packages\AudioSwitcher.AudioApi.CoreAudio.3.0.3\lib\net48\AudioSwitcher.AudioApi.CoreAudio.dll + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + @@ -55,6 +58,16 @@ + + + + Form + + + Actions.cs + + + Form @@ -63,6 +76,9 @@ + + Actions.cs + Main.cs diff --git a/PicoKeys/Properties/Settings.Designer.cs b/PicoKeys/Properties/Settings.Designer.cs index f5285ae..b40164e 100644 --- a/PicoKeys/Properties/Settings.Designer.cs +++ b/PicoKeys/Properties/Settings.Designer.cs @@ -1,30 +1,38 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. // //------------------------------------------------------------------------------ -namespace PicoKeys.Properties -{ - - +namespace PicoKeys.Properties { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { + + public static Settings Default { + get { return defaultInstance; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool startMinimized { + get { + return ((bool)(this["startMinimized"])); + } + set { + this["startMinimized"] = value; + } + } } } diff --git a/PicoKeys/Properties/Settings.settings b/PicoKeys/Properties/Settings.settings index 3964565..dc36d9d 100644 --- a/PicoKeys/Properties/Settings.settings +++ b/PicoKeys/Properties/Settings.settings @@ -1,7 +1,9 @@  - - - - - - + + + + + False + + + \ No newline at end of file diff --git a/PicoKeys/packages.config b/PicoKeys/packages.config index 8bea25d..dc3f4d0 100644 --- a/PicoKeys/packages.config +++ b/PicoKeys/packages.config @@ -2,4 +2,5 @@ + \ No newline at end of file