diff --git a/LogiLockLED/App.config b/LogiLockLED/App.config index 497b367..a0b92cc 100644 --- a/LogiLockLED/App.config +++ b/LogiLockLED/App.config @@ -40,6 +40,33 @@ True + + Arial, 48pt, style=Bold, Italic + + + Centre + + + 8 + + + 8 + + + True + + + True + + + White + + + 3, 3, 3 + + + 75 + \ No newline at end of file diff --git a/LogiLockLED/ConfigurationForm.Designer.cs b/LogiLockLED/ConfigurationForm.Designer.cs index 369b691..268d03b 100644 --- a/LogiLockLED/ConfigurationForm.Designer.cs +++ b/LogiLockLED/ConfigurationForm.Designer.cs @@ -28,6 +28,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationForm)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.cbEnableCaps = new System.Windows.Forms.CheckBox(); this.btnCapsOffColour = new System.Windows.Forms.Button(); @@ -53,10 +54,32 @@ private void InitializeComponent() this.cbAutoStartApp = new System.Windows.Forms.CheckBox(); this.btnCancel = new System.Windows.Forms.Button(); this.btnApply = new System.Windows.Forms.Button(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.cbOsdEnabled = new System.Windows.Forms.CheckBox(); + this.label7 = new System.Windows.Forms.Label(); + this.cbOSDPosition = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.fontDialog = new System.Windows.Forms.FontDialog(); + this.btnOsdFont = new System.Windows.Forms.Button(); + this.cbOsdPadding = new System.Windows.Forms.NumericUpDown(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.cbOsdMargin = new System.Windows.Forms.NumericUpDown(); + this.cbOsdRoundedCorners = new System.Windows.Forms.CheckBox(); + this.btnOsdTxtColour = new System.Windows.Forms.Button(); + this.label11 = new System.Windows.Forms.Label(); + this.btnOsdBkColour = new System.Windows.Forms.Button(); + this.label12 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.cbOsdOpacity = new System.Windows.Forms.NumericUpDown(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); this.groupBox4.SuspendLayout(); + this.groupBox5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cbOsdPadding)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbOsdMargin)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbOsdOpacity)).BeginInit(); this.SuspendLayout(); // // groupBox1 @@ -68,7 +91,7 @@ private void InitializeComponent() this.groupBox1.Controls.Add(this.label1); this.groupBox1.Location = new System.Drawing.Point(14, 178); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(290, 81); + this.groupBox1.Size = new System.Drawing.Size(271, 81); this.groupBox1.TabIndex = 2; this.groupBox1.TabStop = false; this.groupBox1.Text = "Caps Lock"; @@ -123,7 +146,7 @@ private void InitializeComponent() // btnClose // this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnClose.Location = new System.Drawing.Point(201, 385); + this.btnClose.Location = new System.Drawing.Point(403, 385); this.btnClose.Name = "btnClose"; this.btnClose.Size = new System.Drawing.Size(103, 23); this.btnClose.TabIndex = 3; @@ -140,7 +163,7 @@ private void InitializeComponent() this.groupBox2.Controls.Add(this.label4); this.groupBox2.Location = new System.Drawing.Point(14, 91); this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(290, 81); + this.groupBox2.Size = new System.Drawing.Size(271, 81); this.groupBox2.TabIndex = 5; this.groupBox2.TabStop = false; this.groupBox2.Text = "Num Lock"; @@ -201,7 +224,7 @@ private void InitializeComponent() this.groupBox3.Controls.Add(this.label6); this.groupBox3.Location = new System.Drawing.Point(13, 265); this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(290, 79); + this.groupBox3.Size = new System.Drawing.Size(272, 79); this.groupBox3.TabIndex = 6; this.groupBox3.TabStop = false; this.groupBox3.Text = "Scroll Lock"; @@ -259,7 +282,7 @@ private void InitializeComponent() this.groupBox4.Controls.Add(this.cbAutoStartApp); this.groupBox4.Location = new System.Drawing.Point(13, 13); this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(289, 72); + this.groupBox4.Size = new System.Drawing.Size(272, 72); this.groupBox4.TabIndex = 7; this.groupBox4.TabStop = false; this.groupBox4.Text = "General Settings"; @@ -299,7 +322,7 @@ private void InitializeComponent() // btnApply // this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnApply.Location = new System.Drawing.Point(102, 385); + this.btnApply.Location = new System.Drawing.Point(304, 385); this.btnApply.Name = "btnApply"; this.btnApply.Size = new System.Drawing.Size(93, 23); this.btnApply.TabIndex = 9; @@ -307,11 +330,204 @@ private void InitializeComponent() this.btnApply.UseVisualStyleBackColor = true; this.btnApply.Click += new System.EventHandler(this.btnApply_Click); // + // groupBox5 + // + this.groupBox5.Controls.Add(this.label13); + this.groupBox5.Controls.Add(this.cbOsdOpacity); + this.groupBox5.Controls.Add(this.btnOsdBkColour); + this.groupBox5.Controls.Add(this.label12); + this.groupBox5.Controls.Add(this.btnOsdTxtColour); + this.groupBox5.Controls.Add(this.label11); + this.groupBox5.Controls.Add(this.cbOsdRoundedCorners); + this.groupBox5.Controls.Add(this.label10); + this.groupBox5.Controls.Add(this.cbOsdMargin); + this.groupBox5.Controls.Add(this.label9); + this.groupBox5.Controls.Add(this.cbOsdPadding); + this.groupBox5.Controls.Add(this.btnOsdFont); + this.groupBox5.Controls.Add(this.label8); + this.groupBox5.Controls.Add(this.cbOSDPosition); + this.groupBox5.Controls.Add(this.label7); + this.groupBox5.Controls.Add(this.cbOsdEnabled); + this.groupBox5.Location = new System.Drawing.Point(301, 13); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(200, 266); + this.groupBox5.TabIndex = 10; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "On-Screen Display"; + // + // cbOsdEnabled + // + this.cbOsdEnabled.AutoSize = true; + this.cbOsdEnabled.Location = new System.Drawing.Point(7, 20); + this.cbOsdEnabled.Name = "cbOsdEnabled"; + this.cbOsdEnabled.Size = new System.Drawing.Size(85, 17); + this.cbOsdEnabled.TabIndex = 0; + this.cbOsdEnabled.Text = "Enable OSD"; + this.cbOsdEnabled.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(4, 43); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(47, 13); + this.label7.TabIndex = 1; + this.label7.Text = "Position:"; + // + // cbOSDPosition + // + this.cbOSDPosition.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbOSDPosition.FormattingEnabled = true; + this.cbOSDPosition.Items.AddRange(new object[] { + "Center", + "Top Left", + "Top Right", + "Bottom Left", + "Bottom Right"}); + this.cbOSDPosition.Location = new System.Drawing.Point(60, 40); + this.cbOSDPosition.Name = "cbOSDPosition"; + this.cbOSDPosition.Size = new System.Drawing.Size(121, 21); + this.cbOSDPosition.TabIndex = 2; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(4, 150); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(31, 13); + this.label8.TabIndex = 3; + this.label8.Text = "Font:"; + // + // btnOsdFont + // + this.btnOsdFont.Location = new System.Drawing.Point(60, 145); + this.btnOsdFont.Name = "btnOsdFont"; + this.btnOsdFont.Size = new System.Drawing.Size(121, 23); + this.btnOsdFont.TabIndex = 4; + this.btnOsdFont.Text = "Font"; + this.btnOsdFont.UseVisualStyleBackColor = true; + this.btnOsdFont.Click += new System.EventHandler(this.btnFont_Click); + // + // cbOsdPadding + // + this.cbOsdPadding.Location = new System.Drawing.Point(60, 67); + this.cbOsdPadding.Maximum = new decimal(new int[] { + -727379969, + 232, + 0, + 0}); + this.cbOsdPadding.Minimum = new decimal(new int[] { + -727379969, + 232, + 0, + -2147483648}); + this.cbOsdPadding.Name = "cbOsdPadding"; + this.cbOsdPadding.Size = new System.Drawing.Size(120, 20); + this.cbOsdPadding.TabIndex = 5; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(3, 69); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(49, 13); + this.label9.TabIndex = 6; + this.label9.Text = "Padding:"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(3, 95); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(42, 13); + this.label10.TabIndex = 8; + this.label10.Text = "Margin:"; + // + // cbOsdMargin + // + this.cbOsdMargin.Location = new System.Drawing.Point(60, 93); + this.cbOsdMargin.Maximum = new decimal(new int[] { + -727379969, + 232, + 0, + 0}); + this.cbOsdMargin.Minimum = new decimal(new int[] { + -727379969, + 232, + 0, + -2147483648}); + this.cbOsdMargin.Name = "cbOsdMargin"; + this.cbOsdMargin.Size = new System.Drawing.Size(120, 20); + this.cbOsdMargin.TabIndex = 7; + // + // cbOsdRoundedCorners + // + this.cbOsdRoundedCorners.AutoSize = true; + this.cbOsdRoundedCorners.Location = new System.Drawing.Point(7, 122); + this.cbOsdRoundedCorners.Name = "cbOsdRoundedCorners"; + this.cbOsdRoundedCorners.Size = new System.Drawing.Size(109, 17); + this.cbOsdRoundedCorners.TabIndex = 9; + this.cbOsdRoundedCorners.Text = "Rounded Corners"; + this.cbOsdRoundedCorners.UseVisualStyleBackColor = true; + // + // btnOsdTxtColour + // + this.btnOsdTxtColour.Location = new System.Drawing.Point(96, 174); + this.btnOsdTxtColour.Name = "btnOsdTxtColour"; + this.btnOsdTxtColour.Size = new System.Drawing.Size(44, 23); + this.btnOsdTxtColour.TabIndex = 11; + this.btnOsdTxtColour.UseVisualStyleBackColor = true; + this.btnOsdTxtColour.Click += new System.EventHandler(this.btnColour_Click); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(4, 179); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(64, 13); + this.label11.TabIndex = 10; + this.label11.Text = "Text Colour:"; + // + // btnOsdBkColour + // + this.btnOsdBkColour.Location = new System.Drawing.Point(96, 203); + this.btnOsdBkColour.Name = "btnOsdBkColour"; + this.btnOsdBkColour.Size = new System.Drawing.Size(44, 23); + this.btnOsdBkColour.TabIndex = 13; + this.btnOsdBkColour.UseVisualStyleBackColor = true; + this.btnOsdBkColour.Click += new System.EventHandler(this.btnColour_Click); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(4, 208); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(68, 13); + this.label12.TabIndex = 12; + this.label12.Text = "Back Colour:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(3, 234); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(46, 13); + this.label13.TabIndex = 15; + this.label13.Text = "Opacity:"; + // + // cbOsdOpacity + // + this.cbOsdOpacity.Location = new System.Drawing.Point(61, 232); + this.cbOsdOpacity.Name = "cbOsdOpacity"; + this.cbOsdOpacity.Size = new System.Drawing.Size(119, 20); + this.cbOsdOpacity.TabIndex = 14; + // // ConfigurationForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(311, 414); + this.ClientSize = new System.Drawing.Size(513, 414); + this.Controls.Add(this.groupBox5); this.Controls.Add(this.btnApply); this.Controls.Add(this.btnCancel); this.Controls.Add(this.groupBox4); @@ -320,6 +536,7 @@ private void InitializeComponent() this.Controls.Add(this.groupBox1); this.Controls.Add(this.btnClose); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "ConfigurationForm"; this.Text = "LogiLockLED Configuration"; this.groupBox1.ResumeLayout(false); @@ -330,6 +547,11 @@ private void InitializeComponent() this.groupBox3.PerformLayout(); this.groupBox4.ResumeLayout(false); this.groupBox4.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cbOsdPadding)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbOsdMargin)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbOsdOpacity)).EndInit(); this.ResumeLayout(false); } @@ -361,6 +583,24 @@ private void InitializeComponent() private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.CheckBox cbEnable; private System.Windows.Forms.Button btnApply; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.CheckBox cbOsdEnabled; + private System.Windows.Forms.ComboBox cbOSDPosition; + private System.Windows.Forms.Button btnOsdFont; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.FontDialog fontDialog; + private System.Windows.Forms.CheckBox cbOsdRoundedCorners; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.NumericUpDown cbOsdMargin; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown cbOsdPadding; + private System.Windows.Forms.Button btnOsdBkColour; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Button btnOsdTxtColour; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.NumericUpDown cbOsdOpacity; } } diff --git a/LogiLockLED/ConfigurationForm.cs b/LogiLockLED/ConfigurationForm.cs index f2867d6..df97ea7 100644 --- a/LogiLockLED/ConfigurationForm.cs +++ b/LogiLockLED/ConfigurationForm.cs @@ -1,19 +1,26 @@ using Microsoft.Win32; using System; +using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace LogiLockLED { + public enum OSDPosition { Centre = 1, Top_Left, Top_Right, Bottom_Left, Bottom_Right } public partial class ConfigurationForm : Form { private readonly LedSettings ledSettings; public event EventHandler SettingsUpdated; + + public ConfigurationForm(ref LedSettings settings) { InitializeComponent(); ledSettings = settings; + cbOSDPosition.DataSource = Enum.GetValues(typeof(OSDPosition)); + cbOSDPosition.SelectedIndex = 0; + PopulateSettingsToUI(); } @@ -44,6 +51,12 @@ private void SetSettingValue(object sender, Color color) ledSettings.ScrollOffColour = color; if (sender == btnScrollOnColour) ledSettings.ScrollOnColour = color; + + if (sender == btnOsdTxtColour) + ledSettings.OsdTextColour = color == Color.Black ? Color.FromArgb(3, 3, 3) : color; + if (sender == btnOsdBkColour) + ledSettings.OsdBackColour = color == Color.Black ? Color.FromArgb(3, 3, 3) : color; + } private void PopulateSettingsToUI() @@ -63,11 +76,28 @@ private void PopulateSettingsToUI() btnScrollOnColour.BackColor = ledSettings.ScrollOnColour; cbAutoStartApp.Checked = ledSettings.AutoStartApp; - + + cbOsdEnabled.Checked = ledSettings.OsdEnabled; + cbOSDPosition.SelectedItem = ledSettings.OsdPosition; + btnOsdFont.Text = ledSettings.OsdFont.SizeInPoints.ToString() + ", " + ledSettings.OsdFont.FontFamily.Name; + fontDialog.Font = ledSettings.OsdFont; + cbOsdPadding.Value = ledSettings.OsdPadding; + cbOsdMargin.Value = ledSettings.OsdMargin; + cbOsdRoundedCorners.Checked = ledSettings.OsdRoundedCorners; + btnOsdTxtColour.BackColor = ledSettings.OsdTextColour; + btnOsdBkColour.BackColor = ledSettings.OsdBackColour; + cbOsdOpacity.Value = ledSettings.OsdOpacity; } private void ApplySettings() { + ledSettings.OsdEnabled = cbOsdEnabled.Checked; + ledSettings.OsdPosition = (OSDPosition)cbOSDPosition.SelectedItem; + ledSettings.OsdPadding = (int)cbOsdPadding.Value; + ledSettings.OsdMargin = (int)cbOsdMargin.Value; + ledSettings.OsdRoundedCorners = cbOsdRoundedCorners.Checked; + ledSettings.OsdOpacity = (int)cbOsdOpacity.Value; + ledSettings.SaveSettings(); SettingsUpdated?.Invoke(this, new EventArgs()); } @@ -114,5 +144,14 @@ private void cbAutoStartApp_CheckedChanged(object sender, EventArgs e) { ledSettings.AutoStartApp = cbAutoStartApp.Checked; } + + private void btnFont_Click(object sender, EventArgs e) + { + if( fontDialog.ShowDialog(this) == DialogResult.OK) + { + ledSettings.OsdFont = fontDialog.Font; + btnOsdFont.Text = ledSettings.OsdFont.SizeInPoints.ToString() + ", " + ledSettings.OsdFont.FontFamily.Name; + } + } } } diff --git a/LogiLockLED/ConfigurationForm.resx b/LogiLockLED/ConfigurationForm.resx index d2071e0..d8fc87a 100644 --- a/LogiLockLED/ConfigurationForm.resx +++ b/LogiLockLED/ConfigurationForm.resx @@ -120,4 +120,763 @@ 17, 17 + + 131, 17 + + + + + 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 + + \ No newline at end of file diff --git a/LogiLockLED/IndicatorPopup.Designer.cs b/LogiLockLED/IndicatorPopup.Designer.cs new file mode 100644 index 0000000..f78c4b1 --- /dev/null +++ b/LogiLockLED/IndicatorPopup.Designer.cs @@ -0,0 +1,157 @@ +namespace LogiLockLED +{ + partial class IndicatorPopup + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(IndicatorPopup)); + this.lblLockText = new System.Windows.Forms.Label(); + this.hideTimer = new System.Windows.Forms.Timer(this.components); + this.cornerTL = new System.Windows.Forms.PictureBox(); + this.cornerBR = new System.Windows.Forms.PictureBox(); + this.cornerTR = new System.Windows.Forms.PictureBox(); + this.cornerBL = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.cornerTL)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cornerBR)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cornerTR)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cornerBL)).BeginInit(); + this.SuspendLayout(); + // + // lblLockText + // + this.lblLockText.AutoSize = true; + this.lblLockText.BackColor = System.Drawing.Color.Transparent; + this.lblLockText.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblLockText.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.lblLockText.Font = new System.Drawing.Font("Arial", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblLockText.ForeColor = System.Drawing.Color.White; + this.lblLockText.Location = new System.Drawing.Point(8, 8); + this.lblLockText.Margin = new System.Windows.Forms.Padding(3); + this.lblLockText.Name = "lblLockText"; + this.lblLockText.Size = new System.Drawing.Size(289, 72); + this.lblLockText.TabIndex = 0; + this.lblLockText.Text = "Num: On"; + this.lblLockText.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // hideTimer + // + this.hideTimer.Enabled = true; + this.hideTimer.Interval = 1000; + this.hideTimer.Tick += new System.EventHandler(this.hideTimer_Tick); + // + // cornerTL + // + this.cornerTL.BackColor = System.Drawing.Color.Transparent; + this.cornerTL.Image = ((System.Drawing.Image)(resources.GetObject("cornerTL.Image"))); + this.cornerTL.Location = new System.Drawing.Point(8, 8); + this.cornerTL.Name = "cornerTL"; + this.cornerTL.Size = new System.Drawing.Size(17, 17); + this.cornerTL.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.cornerTL.TabIndex = 1; + this.cornerTL.TabStop = false; + // + // cornerBR + // + this.cornerBR.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cornerBR.BackColor = System.Drawing.Color.Transparent; + this.cornerBR.Image = ((System.Drawing.Image)(resources.GetObject("cornerBR.Image"))); + this.cornerBR.Location = new System.Drawing.Point(221, 108); + this.cornerBR.Name = "cornerBR"; + this.cornerBR.Size = new System.Drawing.Size(17, 17); + this.cornerBR.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.cornerBR.TabIndex = 2; + this.cornerBR.TabStop = false; + // + // cornerTR + // + this.cornerTR.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cornerTR.BackColor = System.Drawing.Color.Transparent; + this.cornerTR.Image = ((System.Drawing.Image)(resources.GetObject("cornerTR.Image"))); + this.cornerTR.Location = new System.Drawing.Point(221, 8); + this.cornerTR.Name = "cornerTR"; + this.cornerTR.Size = new System.Drawing.Size(17, 17); + this.cornerTR.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.cornerTR.TabIndex = 3; + this.cornerTR.TabStop = false; + // + // cornerBL + // + this.cornerBL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.cornerBL.BackColor = System.Drawing.Color.Transparent; + this.cornerBL.Image = ((System.Drawing.Image)(resources.GetObject("cornerBL.Image"))); + this.cornerBL.Location = new System.Drawing.Point(8, 108); + this.cornerBL.Name = "cornerBL"; + this.cornerBL.Size = new System.Drawing.Size(17, 17); + this.cornerBL.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.cornerBL.TabIndex = 4; + this.cornerBL.TabStop = false; + // + // IndicatorPopup + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.AutoValidate = System.Windows.Forms.AutoValidate.Disable; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(4)))), ((int)(((byte)(4)))), ((int)(((byte)(4))))); + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.CausesValidation = false; + this.ClientSize = new System.Drawing.Size(249, 127); + this.Controls.Add(this.cornerBL); + this.Controls.Add(this.cornerTR); + this.Controls.Add(this.cornerBR); + this.Controls.Add(this.cornerTL); + this.Controls.Add(this.lblLockText); + this.DoubleBuffered = true; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "IndicatorPopup"; + this.Opacity = 0.75D; + this.Padding = new System.Windows.Forms.Padding(8); + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "IndicatorPopup"; + this.TransparencyKey = System.Drawing.Color.Black; + ((System.ComponentModel.ISupportInitialize)(this.cornerTL)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cornerBR)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cornerTR)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cornerBL)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lblLockText; + private System.Windows.Forms.Timer hideTimer; + private System.Windows.Forms.PictureBox cornerTL; + private System.Windows.Forms.PictureBox cornerBR; + private System.Windows.Forms.PictureBox cornerTR; + private System.Windows.Forms.PictureBox cornerBL; + } +} \ No newline at end of file diff --git a/LogiLockLED/IndicatorPopup.cs b/LogiLockLED/IndicatorPopup.cs new file mode 100644 index 0000000..02798bd --- /dev/null +++ b/LogiLockLED/IndicatorPopup.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LogiLockLED +{ + public partial class IndicatorPopup : Form + { + public OSDPosition Position { get; private set; } + public int OuterMargin { get; private set; } + + protected override bool ShowWithoutActivation + { + get { return true; } + } + + + public IndicatorPopup() + { + InitializeComponent(); + IntPtr dummy = this.Handle; //Force form to load without showing + } + + private void hideTimer_Tick(object sender, EventArgs e) + { + if (this.Visible) + { + lblLockText.Text = " "; + this.Hide(); + hideTimer.Stop(); + } + } + + public void ShowLockState(LockKey lockKey, bool state) + { + //cornerTR.Location = new Point(0, 0); + //cornerBR.Location = new Point(0, 0); + + lblLockText.Text = lockKey.ToString() + ": " + (state ? "On" : "Off"); + //lblLockText.AutoSize = false; + //lblLockText.Width = 50; + //this.Width = 50; + //lblLockText.AutoSize = true; + + + cornerTL.Location = new Point(0, 0); + cornerBL.Location = new Point(0, this.Height-cornerBL.Height); + cornerTR.Location = new Point(this.Width - cornerTR.Width, 0); + cornerBR.Location = new Point(this.Width - cornerBR.Width, this.Height - cornerBR.Height); + + + MoveIntoPosition(); + + ShowInactiveTopmost(this); + hideTimer.Stop(); + hideTimer.Start(); + } + + private void MoveIntoPosition() + { + var area = Screen.PrimaryScreen.WorkingArea; + + if (Position == OSDPosition.Centre) + { + this.Left = (area.X + area.Width - this.Width) / 2; + this.Top = (area.Y + area.Height - this.Height) / 2; + } + else + { + if (Position == OSDPosition.Bottom_Right || Position == OSDPosition.Bottom_Left) + this.Top = area.Y + area.Height - this.Height - OuterMargin; + else + this.Top = OuterMargin; + + if(Position == OSDPosition.Bottom_Right || Position == OSDPosition.Top_Right) + this.Left = area.X + area.Width - this.Width - OuterMargin; + else + this.Left = OuterMargin; + + } + } + + public void Configure(LedSettings settings) + { + lblLockText.Font = settings.OsdFont; + + cornerTL.Visible = settings.OsdRoundedCorners; + cornerTR.Visible = settings.OsdRoundedCorners; + cornerBL.Visible = settings.OsdRoundedCorners; + cornerBR.Visible = settings.OsdRoundedCorners; + + Position = settings.OsdPosition; + this.Padding = new Padding(settings.OsdPadding, settings.OsdPadding, settings.OsdPadding, (int)(settings.OsdPadding)+4); + this.OuterMargin = settings.OsdMargin; + + lblLockText.ForeColor = settings.OsdTextColour; + this.BackColor = settings.OsdBackColour; + this.Opacity = settings.OsdOpacity / 100d; + } + + /// + /// Hide Show method. Consumer should use ShowLockState. + /// + new protected void Show() + { + base.Show(); + } + + #region DLLImports + private const int SW_SHOWNOACTIVATE = 4; + private const int HWND_TOPMOST = -1; + private const uint SWP_NOACTIVATE = 0x0010; + + [DllImport("user32.dll", EntryPoint = "SetWindowPos")] + static extern bool SetWindowPos( + int hWnd, // Window handle + int hWndInsertAfter, // Placement-order handle + int X, // Horizontal position + int Y, // Vertical position + int cx, // Width + int cy, // Height + uint uFlags); // Window positioning flags + + [DllImport("user32.dll")] + static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + static void ShowInactiveTopmost(Form frm) + { + ShowWindow(frm.Handle, SW_SHOWNOACTIVATE); + SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST, + frm.Left, frm.Top, frm.Width, frm.Height, + SWP_NOACTIVATE); + } + #endregion + } +} diff --git a/LogiLockLED/IndicatorPopup.resx b/LogiLockLED/IndicatorPopup.resx new file mode 100644 index 0000000..bd6ea23 --- /dev/null +++ b/LogiLockLED/IndicatorPopup.resx @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKM+VkTlI + A0EYhb9ExRsLU6hYbBGtFERFLCWKIihIEiEehbsbEwPZNexGbCwFW8HCo/EqbKy1tbAVBMEDxMrSStFG + ZP1nIyQIERwY5uPNvMfMGwgeZE3LrewBy8470bGIlpiZ1aqfqaWVeroJ6aabm4yNxik7Pm4JqPWmW2Xx + v9GYXHRNCGjCQ2bOyQsvCA+s5nOKd4RD5pKeFD4V7nLkgsL3SjcK/KI47XNQZYaceHRYOCSspUvYKGFz + ybGE+4XDScuW/GCiwEnFa4qt7Ir5c0/1woZFezqmdJntjDHOJFNoGKyQIUte+spgi+ISlf1IGX+b758S + lyGuDKY4RljGQvf9qD/43a2b6ustJDVEoOrJ8946oHoLvjY97/PQ876OoOIRLuyif/kABt9F3yxq4X1o + Woezy6JmbMP5BrQ85HRH96UKmcFUCl5P5JtmoPka6uYKvf3sc3wHcelq4gp296AzLdnzZd5dU9rbn2f8 + /oh8A51KcrgVxRv9AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AkZDToMRceIUQAAABl0RVh0 + Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAACQSURBVDhPYwCC/0Tiz0C8HIjTgdgMiEWAmBmK + sWpAxleBOB+IhYEYJ8CmEYR/AnEzEAsCMUGAzYALQBwMxEQDdAMOAbETEJMEkA24BsTOQEwyQDYkGiRA + DoAZMAHMIxOADHgGxApgHpkAZEgThEk+ABmiBmGSD3ZDaYpAFZSmCLhBaYoARbECA5xQeiABAwMAbe04 + h5tuLHkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKM+VkTlI + A0EYhb9ExRsLU6hYbBGtFERFLCWKIihIEiEehbsbEwPZNexGbCwFW8HCo/EqbKy1tbAVBMEDxMrSStFG + ZP1nIyQIERwY5uPNvMfMGwgeZE3LrewBy8470bGIlpiZ1aqfqaWVeroJ6aabm4yNxik7Pm4JqPWmW2Xx + v9GYXHRNCGjCQ2bOyQsvCA+s5nOKd4RD5pKeFD4V7nLkgsL3SjcK/KI47XNQZYaceHRYOCSspUvYKGFz + ybGE+4XDScuW/GCiwEnFa4qt7Ir5c0/1woZFezqmdJntjDHOJFNoGKyQIUte+spgi+ISlf1IGX+b758S + lyGuDKY4RljGQvf9qD/43a2b6ustJDVEoOrJ8946oHoLvjY97/PQ876OoOIRLuyif/kABt9F3yxq4X1o + Woezy6JmbMP5BrQ85HRH96UKmcFUCl5P5JtmoPka6uYKvf3sc3wHcelq4gp296AzLdnzZd5dU9rbn2f8 + /oh8A51KcrgVxRv9AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AkZDgcLsw3rFQAAABl0RVh0 + Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAACOSURBVDhPYxgsgBNKUwQUoDRFwA1KUwSqoDRF + YDeUJhuoAfF/CJN80ATEFBkCipVnQEyRIROAGGQA2YZEAzHMALIMcQbia0BMtiFOQHwIiJENIMmQYCC+ + AMToBhBliCAQNwPxTyDGZgAI4wTCQJwPxFeBGJtGZMzADMUiQGwGxOlAvByIPwMxNg1omOE/AP64OIdb + XwznAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKM+VkTlI + A0EYhb9ExRsLU6hYbBGtFERFLCWKIihIEiEehbsbEwPZNexGbCwFW8HCo/EqbKy1tbAVBMEDxMrSStFG + ZP1nIyQIERwY5uPNvMfMGwgeZE3LrewBy8470bGIlpiZ1aqfqaWVeroJ6aabm4yNxik7Pm4JqPWmW2Xx + v9GYXHRNCGjCQ2bOyQsvCA+s5nOKd4RD5pKeFD4V7nLkgsL3SjcK/KI47XNQZYaceHRYOCSspUvYKGFz + ybGE+4XDScuW/GCiwEnFa4qt7Ir5c0/1woZFezqmdJntjDHOJFNoGKyQIUte+spgi+ISlf1IGX+b758S + lyGuDKY4RljGQvf9qD/43a2b6ustJDVEoOrJ8946oHoLvjY97/PQ876OoOIRLuyif/kABt9F3yxq4X1o + Woezy6JmbMP5BrQ85HRH96UKmcFUCl5P5JtmoPka6uYKvf3sc3wHcelq4gp296AzLdnzZd5dU9rbn2f8 + /oh8A51KcrgVxRv9AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AkZDgY28n6WRQAAABl0RVh0 + Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAACJSURBVDhPpdGxDYJQFIXhl1hZGh3AihEcQBIW + oHQASnpKXYAtGMKOCWxkBBagopL/JLewwEhy/uTLrd5pXqJdOOGCCh0mfDb62RE13lh7+O1vBzwwY21A + NlfiBWtEXdHDGlE5Blgj6gZ7RLWwR84YYY2oO+yRDPaIesa1auJaFXGt9Et2+7hOKS3HBjiHIXCtMQAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKM+VkTlI + A0EYhb9ExRsLU6hYbBGtFERFLCWKIihIEiEehbsbEwPZNexGbCwFW8HCo/EqbKy1tbAVBMEDxMrSStFG + ZP1nIyQIERwY5uPNvMfMGwgeZE3LrewBy8470bGIlpiZ1aqfqaWVeroJ6aabm4yNxik7Pm4JqPWmW2Xx + v9GYXHRNCGjCQ2bOyQsvCA+s5nOKd4RD5pKeFD4V7nLkgsL3SjcK/KI47XNQZYaceHRYOCSspUvYKGFz + ybGE+4XDScuW/GCiwEnFa4qt7Ir5c0/1woZFezqmdJntjDHOJFNoGKyQIUte+spgi+ISlf1IGX+b758S + lyGuDKY4RljGQvf9qD/43a2b6ustJDVEoOrJ8946oHoLvjY97/PQ876OoOIRLuyif/kABt9F3yxq4X1o + Woezy6JmbMP5BrQ85HRH96UKmcFUCl5P5JtmoPka6uYKvf3sc3wHcelq4gp296AzLdnzZd5dU9rbn2f8 + /oh8A51KcrgVxRv9AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5AkZDgcYN7OqywAAABl0RVh0 + Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAACXSURBVDhPY6AW4ITSFAEFKE0RcIPSFIEqKE0R + 2A2lKQL/gVgNwiQfgAxpgjDJByBDngExRbEEMgSEJ4B5ZAKYISAcDRIgByAbcg2InYGYZIBsCAgfAmIn + ICYJoBsCwheAOBiIiQbYDAHhn0DcDMSCQEwQYDMAGV8F4nwgFgZinACbRmz4MxAvB+J0IDYDYhEgZmZg + YGAGAKWfOIcmn3/pAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/LogiLockLED/LedSettings.cs b/LogiLockLED/LedSettings.cs index c5e8ad5..ef4b798 100644 --- a/LogiLockLED/LedSettings.cs +++ b/LogiLockLED/LedSettings.cs @@ -1,6 +1,7 @@ using System.Windows.Forms; using System.Drawing; using Microsoft.Win32; +using System; namespace LogiLockLED { @@ -19,10 +20,21 @@ public class LedSettings public Color ScrollOnColour { get; set; } public Color ScrollOffColour { get; set; } + public bool OsdEnabled { get; set; } + public Font OsdFont { get; set; } + public OSDPosition OsdPosition { get; set; } + public int OsdPadding { get; set; } + public int OsdMargin { get; set; } + public bool OsdRoundedCorners { get; set; } + public Color OsdTextColour { get; set; } + public Color OsdBackColour { get; set; } + public int OsdOpacity { get; set; } + private const string appRegKeyName = "LogiLockLED"; public void LoadSettings() { + EnableKeyLockLEDs = Properties.Settings.Default.EnableKeyLockLEDs; EnableCaps = Properties.Settings.Default.EnableCaps; EnableNum =Properties.Settings.Default.EnableNum; @@ -36,7 +48,17 @@ public void LoadSettings() ScrollOffColour = Properties.Settings.Default.ScrollOffColour; AutoStartApp = GetAutoStartSetting(); - + OsdEnabled = Properties.Settings.Default.OsdEnabled; + OsdFont = Properties.Settings.Default.OsdFont; + OSDPosition tmpOsdPosition; + if (Enum.TryParse(Properties.Settings.Default.OsdPosition, out tmpOsdPosition)) + OsdPosition = tmpOsdPosition; + OsdPadding = Properties.Settings.Default.OsdPadding; + OsdMargin = Properties.Settings.Default.OsdMargin; + OsdRoundedCorners = Properties.Settings.Default.OsdRoundedCorners; + OsdTextColour = Properties.Settings.Default.OsdTextColour; + OsdBackColour = Properties.Settings.Default.OsdBackColour; + OsdOpacity = Properties.Settings.Default.OsdOpacity; } public void SaveSettings() @@ -52,6 +74,17 @@ public void SaveSettings() Properties.Settings.Default.NumOffColour = NumOffColour; Properties.Settings.Default.ScrollOnColour = ScrollOnColour; Properties.Settings.Default.ScrollOffColour = ScrollOffColour; + + Properties.Settings.Default.OsdEnabled = OsdEnabled; + Properties.Settings.Default.OsdFont = OsdFont; + Properties.Settings.Default.OsdPosition = OsdPosition.ToString(); + Properties.Settings.Default.OsdPadding = OsdPadding; + Properties.Settings.Default.OsdMargin = OsdMargin; + Properties.Settings.Default.OsdRoundedCorners = OsdRoundedCorners; + Properties.Settings.Default.OsdTextColour = OsdTextColour; + Properties.Settings.Default.OsdBackColour = OsdBackColour; + Properties.Settings.Default.OsdOpacity = OsdOpacity; + Properties.Settings.Default.Save(); SaveAutoStartSetting(); diff --git a/LogiLockLED/LedThread.cs b/LogiLockLED/LedThread.cs index 9b5144c..0bc15ee 100644 --- a/LogiLockLED/LedThread.cs +++ b/LogiLockLED/LedThread.cs @@ -15,6 +15,7 @@ public class LedThread private Thread thread; private bool stopThread; private bool refreshRequired = false; + public event EventHandler KeylockUpdated; [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] public static extern short GetKeyState(int keyCode); @@ -22,6 +23,7 @@ public class LedThread public LedThread(ref LedSettings settings) { ledSettings = settings; + } public void RestartThread() @@ -77,6 +79,7 @@ private void ThreadMain() bool prevCapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) == 0; bool prevNumLock = (((ushort)GetKeyState(0x90)) & 0xffff) == 0; bool prevScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) == 0; + bool firstLoop = true; while (!stopThread) { @@ -85,37 +88,59 @@ private void ThreadMain() bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0; bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0; - if ((refreshRequired || prevNumLock != NumLock) && ledSettings.EnableNum) - { + if ((refreshRequired || prevNumLock != NumLock)) + { prevNumLock = NumLock; - if (NumLock) - LogiLedSetLightingForKeyWithKeyName(keyboardNames.NUM_LOCK, ledSettings.NumOnColour); - else - LogiLedSetLightingForKeyWithKeyName(keyboardNames.NUM_LOCK, ledSettings.NumOffColour); + + if(!firstLoop) + KeylockUpdated?.Invoke(this, new KeylockChangeArgs(LockKey.Num, NumLock)); + + if (ledSettings.EnableNum) + { + if (NumLock) + LogiLedSetLightingForKeyWithKeyName(keyboardNames.NUM_LOCK, ledSettings.NumOnColour); + else + LogiLedSetLightingForKeyWithKeyName(keyboardNames.NUM_LOCK, ledSettings.NumOffColour); + } } - if ((refreshRequired || prevCapsLock != CapsLock) && ledSettings.EnableCaps) + if ((refreshRequired || prevCapsLock != CapsLock)) { prevCapsLock = CapsLock; - if (CapsLock) - LogiLedSetLightingForKeyWithKeyName(keyboardNames.CAPS_LOCK, ledSettings.CapsOnColour); - else - LogiLedSetLightingForKeyWithKeyName(keyboardNames.CAPS_LOCK, ledSettings.CapsOffColour); + + if (!firstLoop) + KeylockUpdated?.Invoke(this, new KeylockChangeArgs(LockKey.Caps, CapsLock)); + + if (ledSettings.EnableCaps) + { + if (CapsLock) + LogiLedSetLightingForKeyWithKeyName(keyboardNames.CAPS_LOCK, ledSettings.CapsOnColour); + else + LogiLedSetLightingForKeyWithKeyName(keyboardNames.CAPS_LOCK, ledSettings.CapsOffColour); + } } - if ((refreshRequired || prevScrollLock != ScrollLock) && ledSettings.EnableScroll) + if ((refreshRequired || prevScrollLock != ScrollLock)) { prevScrollLock = ScrollLock; - if (ScrollLock) - LogiLedSetLightingForKeyWithKeyName(keyboardNames.SCROLL_LOCK, ledSettings.ScrollOnColour); - else - LogiLedSetLightingForKeyWithKeyName(keyboardNames.SCROLL_LOCK, ledSettings.ScrollOffColour); + + if (!firstLoop) + KeylockUpdated?.Invoke(this, new KeylockChangeArgs(LockKey.Scroll, ScrollLock)); + + if (ledSettings.EnableScroll) + { + if (ScrollLock) + LogiLedSetLightingForKeyWithKeyName(keyboardNames.SCROLL_LOCK, ledSettings.ScrollOnColour); + else + LogiLedSetLightingForKeyWithKeyName(keyboardNames.SCROLL_LOCK, ledSettings.ScrollOffColour); + } } refreshRequired = false; - Thread.Sleep(100); + firstLoop = false; + Thread.Sleep(75); } - LogitechGSDK.LogiLedShutdown(); + //LogitechGSDK.LogiLedShutdown(); } private static bool LogiLedSetLightingForKeyWithKeyName(keyboardNames keyCode, System.Drawing.Color color) @@ -123,4 +148,20 @@ private static bool LogiLedSetLightingForKeyWithKeyName(keyboardNames keyCode, S return LogitechGSDK.LogiLedSetLightingForKeyWithKeyName(keyCode, color.R * 100 / 255, color.G * 100 / 255, color.B * 100 / 255); } } + + public enum LockKey { Caps, Num, Scroll}; + + public class KeylockChangeArgs : EventArgs + { + public LockKey LockKey { get; set; } + public bool IsOn { get; set; } + + public KeylockChangeArgs(LockKey lockKey, bool isOn) + { + this.LockKey = lockKey; + this.IsOn = isOn; + } + + } + } diff --git a/LogiLockLED/LogiLockLED.csproj b/LogiLockLED/LogiLockLED.csproj index 2c39e86..0f428eb 100644 --- a/LogiLockLED/LogiLockLED.csproj +++ b/LogiLockLED/LogiLockLED.csproj @@ -53,8 +53,7 @@ false - - + LogiLockLED.ico DB700B4E29B3FC7EB40F17534E91D085E9467935 @@ -88,6 +87,12 @@ + + Form + + + IndicatorPopup.cs + Form @@ -103,6 +108,9 @@ ConfigurationForm.cs + + IndicatorPopup.cs + ResXFileCodeGenerator Designer @@ -144,6 +152,7 @@ + Always diff --git a/LogiLockLED/LogiLockLED.ico b/LogiLockLED/LogiLockLED.ico new file mode 100644 index 0000000..bc11646 Binary files /dev/null and b/LogiLockLED/LogiLockLED.ico differ diff --git a/LogiLockLED/LogiLockLED.xcf b/LogiLockLED/LogiLockLED.xcf new file mode 100644 index 0000000..b6d7cd9 Binary files /dev/null and b/LogiLockLED/LogiLockLED.xcf differ diff --git a/LogiLockLED/LogiLockLEDApp.cs b/LogiLockLED/LogiLockLEDApp.cs index b659df6..d71b84a 100644 --- a/LogiLockLED/LogiLockLEDApp.cs +++ b/LogiLockLED/LogiLockLEDApp.cs @@ -9,8 +9,8 @@ class LogiLockLEDApp : ApplicationContext private readonly LedThread ledThread; private readonly NotifyIcon notifyIcon; private readonly ConfigurationForm configWindow; - private readonly LedSettings ledSettings; - + private readonly IndicatorPopup popupWindow; + private readonly LedSettings ledSettings; private readonly MenuItem configEnableItem; public LogiLockLEDApp() @@ -18,32 +18,49 @@ public LogiLockLEDApp() ledSettings = new LedSettings(); ledSettings.LoadSettings(); - ledThread = new LedThread(ref ledSettings); - ledThread.StartThread(); - configWindow = new ConfigurationForm(ref ledSettings); configWindow.SettingsUpdated += ConfigWindow_OnSettingsUpdated; + popupWindow = new IndicatorPopup(); + popupWindow.Configure(ledSettings); + //popupWindow.LoadForm(); - configEnableItem = new MenuItem("Enabled", new EventHandler(ToggleEnabled)); - configEnableItem.Checked = ledSettings.EnableKeyLockLEDs; - MenuItem configMenuItem = new MenuItem("Configuration", new EventHandler(ShowConfig)); - MenuItem exitMenuItem = new MenuItem("Exit", new EventHandler(Exit)); + ledThread = new LedThread(ref ledSettings); + ledThread.KeylockUpdated += ledThread_OnKeylockUpdated; + ledThread.StartThread(); + configEnableItem = new MenuItem("Enabled", new EventHandler(ToggleEnabled)) { + Checked = ledSettings.EnableKeyLockLEDs }; + notifyIcon = new NotifyIcon(); notifyIcon.Icon = Properties.Resources.appicon; - notifyIcon.ContextMenu = new ContextMenu(new MenuItem[] - { configEnableItem, configMenuItem, exitMenuItem }); + notifyIcon.ContextMenu = new ContextMenu(new MenuItem[]{ + new MenuItem("LogiLockLED") { Enabled = false}, + new MenuItem("-"), + configEnableItem, + new MenuItem("Configuration", new EventHandler(ShowConfig)), + new MenuItem("Exit", new EventHandler(Exit)) + }); notifyIcon.DoubleClick += ShowConfig; notifyIcon.Visible = true; - SystemEvents.PowerModeChanged += OnPowerModeChange; - } - + SystemEvents.PowerModeChanged += OnPowerModeChange; + } + + private void ledThread_OnKeylockUpdated(object sender, EventArgs e) + { + var args = (e as KeylockChangeArgs); + if (ledSettings.OsdEnabled) + { + popupWindow.Invoke(new Action(popupWindow.ShowLockState), args.LockKey, args.IsOn); + } + } private void ConfigWindow_OnSettingsUpdated(object sender, EventArgs e) { + popupWindow.Configure(ledSettings); ledThread.UpdateSettings(ledSettings); - } + + } private void ShowConfig(object sender, EventArgs e) { @@ -76,7 +93,7 @@ private void Exit(object sender, EventArgs e) this.ExitThread(); Application.Exit(); - } + } private void OnPowerModeChange(object s, PowerModeChangedEventArgs e) { diff --git a/LogiLockLED/Properties/Settings.Designer.cs b/LogiLockLED/Properties/Settings.Designer.cs index c313c0c..169226b 100644 --- a/LogiLockLED/Properties/Settings.Designer.cs +++ b/LogiLockLED/Properties/Settings.Designer.cs @@ -142,5 +142,113 @@ public bool EnableKeyLockLEDs { this["EnableKeyLockLEDs"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Arial, 48pt, style=Bold, Italic")] + public global::System.Drawing.Font OsdFont { + get { + return ((global::System.Drawing.Font)(this["OsdFont"])); + } + set { + this["OsdFont"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Centre")] + public string OsdPosition { + get { + return ((string)(this["OsdPosition"])); + } + set { + this["OsdPosition"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("8")] + public int OsdPadding { + get { + return ((int)(this["OsdPadding"])); + } + set { + this["OsdPadding"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("8")] + public int OsdMargin { + get { + return ((int)(this["OsdMargin"])); + } + set { + this["OsdMargin"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool OsdRoundedCorners { + get { + return ((bool)(this["OsdRoundedCorners"])); + } + set { + this["OsdRoundedCorners"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool OsdEnabled { + get { + return ((bool)(this["OsdEnabled"])); + } + set { + this["OsdEnabled"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("White")] + public global::System.Drawing.Color OsdTextColour { + get { + return ((global::System.Drawing.Color)(this["OsdTextColour"])); + } + set { + this["OsdTextColour"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("3, 3, 3")] + public global::System.Drawing.Color OsdBackColour { + get { + return ((global::System.Drawing.Color)(this["OsdBackColour"])); + } + set { + this["OsdBackColour"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("75")] + public int OsdOpacity { + get { + return ((int)(this["OsdOpacity"])); + } + set { + this["OsdOpacity"] = value; + } + } } } diff --git a/LogiLockLED/Properties/Settings.settings b/LogiLockLED/Properties/Settings.settings index 2225389..6f4b5cd 100644 --- a/LogiLockLED/Properties/Settings.settings +++ b/LogiLockLED/Properties/Settings.settings @@ -32,5 +32,32 @@ True + + Arial, 48pt, style=Bold, Italic + + + Centre + + + 8 + + + 8 + + + True + + + True + + + White + + + 3, 3, 3 + + + 75 + \ No newline at end of file diff --git a/LogiLockLED/Resources/appicon.ico b/LogiLockLED/Resources/appicon.ico index 8aa98e5..fc28d0f 100644 Binary files a/LogiLockLED/Resources/appicon.ico and b/LogiLockLED/Resources/appicon.ico differ diff --git a/Setup LogiLockLED/Setup LogiLockLED.vdproj b/Setup LogiLockLED/Setup LogiLockLED.vdproj index 97dadf4..e1d2a5b 100644 --- a/Setup LogiLockLED/Setup LogiLockLED.vdproj +++ b/Setup LogiLockLED/Setup LogiLockLED.vdproj @@ -220,7 +220,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:LogiLockLED" "ProductCode" = "8:{9D536C35-D614-42F1-8D8B-B6CD604EBF6A}" - "PackageCode" = "8:{01E03ACB-62FF-4EE2-9BA2-0C2940FC1895}" + "PackageCode" = "8:{EB25EC29-C4A5-4B5F-89ED-568735D0C0F8}" "UpgradeCode" = "8:{78AFA0F5-6764-47BF-AB9E-B70F753BFF36}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" @@ -819,7 +819,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_07E4DEC6E9E3405884DB88A2424013E6" { - "SourcePath" = "8:..\\LogiLockLED\\obj\\Release\\LogiLockLED.exe" + "SourcePath" = "8:..\\LogiLockLED\\obj\\Debug\\LogiLockLED.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_36D160D8655A4CDC84075D1F1CDB81FE"