Skip to content

Commit 76366c0

Browse files
committed
Added buttons to clear a currently mapped key, added context menu to quit app or open settings
1 parent f3c3f05 commit 76366c0

10 files changed

+568
-56
lines changed

images/delete_button.png

4.15 KB
Loading

images/delete_button.xcf

1.1 KB
Binary file not shown.

images/delete_button_2.png

4.15 KB
Loading

images/delete_button_smaller.png

4.15 KB
Loading

images/delete_button_smaller.xcf

1.06 KB
Binary file not shown.

neat-windows.sln

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ Global
1111
Release|Any CPU = Release|Any CPU
1212
EndGlobalSection
1313
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14-
{FD06D960-AE86-4869-9CDB-E23776F66D3F}.Debug|Any CPU.ActiveCfg = Release|Any CPU
15-
{FD06D960-AE86-4869-9CDB-E23776F66D3F}.Debug|Any CPU.Build.0 = Release|Any CPU
14+
{FD06D960-AE86-4869-9CDB-E23776F66D3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{FD06D960-AE86-4869-9CDB-E23776F66D3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
1616
{FD06D960-AE86-4869-9CDB-E23776F66D3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
1717
{FD06D960-AE86-4869-9CDB-E23776F66D3F}.Release|Any CPU.Build.0 = Release|Any CPU
1818
EndGlobalSection

neat-windows/HotkeyHandler.cs

+15-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Configuration;
34
using System.Windows.Forms;
45

@@ -21,12 +22,6 @@ public HotkeyHandler(Form form)
2122
this.RegisterHotkeys();
2223
}
2324

24-
public void MapHotkey(WindowConstants.WindowSizePosition windowSizePosition, Keys keyCode, bool shift, bool control, bool alt, bool windows)
25-
{
26-
Hotkey newHotkey = new Hotkey(keyCode, shift, control, alt, windows);
27-
this.MapHotkey(windowSizePosition, newHotkey);
28-
}
29-
3025
public void MapHotkey(WindowConstants.WindowSizePosition windowSizePosition, Hotkey hotkey)
3126
{
3227
if (this.hotkeyMap.ContainsKey(windowSizePosition))
@@ -42,6 +37,19 @@ public void MapHotkey(WindowConstants.WindowSizePosition windowSizePosition, Hot
4237
this.SaveHotkeys();
4338
}
4439

40+
public void UnmapHotkey(WindowConstants.WindowSizePosition windowSizePosition)
41+
{
42+
try
43+
{
44+
this.UnregisterHotkey(hotkeyMap[windowSizePosition]);
45+
this.hotkeyMap.Remove(windowSizePosition);
46+
}
47+
catch (Exception e)
48+
{
49+
// Already unmapped, no need to do anything
50+
}
51+
}
52+
4553
private void SaveHotkeys()
4654
{
4755
this.configurationManager.SaveHotkeys(this.hotkeyMap);

neat-windows/SettingsForm.Designer.cs

+375-29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

neat-windows/SettingsForm.cs

+62-18
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ public SettingsForm()
1313
InitializeComponent();
1414

1515
this.hotkeyHandler = new HotkeyHandler(this);
16-
this.MapTextBoxTags();
16+
this.MapTags();
1717
this.FillTextBoxes(this.hotkeyHandler.GetHotkeyMap());
18+
labelFullscreen.Focus();
1819
}
1920

2021
#region Minimizing, notifyicon
@@ -44,8 +45,8 @@ private void SettingsForm_Resize(object sender, EventArgs e)
4445
}
4546
#endregion Minimizing, notifyicon
4647

47-
#region TextBox mapping
48-
private void MapTextBoxTags()
48+
#region Tag mapping
49+
private void MapTags()
4950
{
5051
this.textBoxFullscreen.Tag = WindowConstants.WindowSizePosition.FULLSCREEN;
5152
this.textBoxCenter.Tag = WindowConstants.WindowSizePosition.CENTER;
@@ -61,31 +62,31 @@ private void MapTextBoxTags()
6162
this.textBoxTopRightQuarter.Tag = WindowConstants.WindowSizePosition.TOP_RIGHT;
6263
this.textBoxBottomLeftQuarter.Tag = WindowConstants.WindowSizePosition.BOTTOM_LEFT;
6364
this.textBoxBottomRightQuarter.Tag = WindowConstants.WindowSizePosition.BOTTOM_RIGHT;
64-
}
6565

66-
public void FillTextBoxes(Dictionary<WindowConstants.WindowSizePosition, Hotkey> hotkeyMap)
67-
{
68-
foreach (KeyValuePair<WindowConstants.WindowSizePosition, Hotkey> hotkeyMapping in hotkeyMap)
69-
{
70-
TextBox taggedTextBox = (TextBox) this.GetControlByTag(hotkeyMapping.Key);
71-
if (taggedTextBox == null)
72-
{
73-
Console.WriteLine("Null found for key: " + hotkeyMapping.Key.ToString());
74-
continue;
75-
}
66+
this.buttonFullscreen.Tag = WindowConstants.WindowSizePosition.FULLSCREEN;
67+
this.buttonCenter.Tag = WindowConstants.WindowSizePosition.CENTER;
68+
this.buttonNextDisplay.Tag = WindowConstants.WindowSizePosition.NEXT_SCREEN;
69+
this.buttonPreviousDisplay.Tag = WindowConstants.WindowSizePosition.PREVIOUS_SCREEN;
7670

77-
taggedTextBox.Text = hotkeyMapping.Value.ToString();
78-
}
71+
this.buttonLeftHalf.Tag = WindowConstants.WindowSizePosition.LEFT_HALF;
72+
this.buttonRightHalf.Tag = WindowConstants.WindowSizePosition.RIGHT_HALF;
73+
this.buttonTopHalf.Tag = WindowConstants.WindowSizePosition.TOP_HALF;
74+
this.buttonBottomHalf.Tag = WindowConstants.WindowSizePosition.BOTTOM_HALF;
75+
76+
this.buttonTopLeft.Tag = WindowConstants.WindowSizePosition.TOP_LEFT;
77+
this.buttonTopRight.Tag = WindowConstants.WindowSizePosition.TOP_RIGHT;
78+
this.buttonBottomLeft.Tag = WindowConstants.WindowSizePosition.BOTTOM_LEFT;
79+
this.buttonBottomRight.Tag = WindowConstants.WindowSizePosition.BOTTOM_RIGHT;
7980
}
8081

81-
private Control GetControlByTag(WindowConstants.WindowSizePosition windowSizePosition)
82+
private TextBox GetTextBoxByTag(WindowConstants.WindowSizePosition windowSizePosition)
8283
{
8384
foreach (Control control in this.Controls)
8485
{
8586
if (control.GetType() != typeof(TextBox))
8687
continue;
8788
if (control.Tag.Equals(windowSizePosition))
88-
return control;
89+
return (TextBox)control;
8990
}
9091
return null;
9192
}
@@ -122,5 +123,48 @@ private void HandleKeyUpEvent(object sender, KeyEventArgs keyEventArgs)
122123
}
123124
#endregion Keyhandling
124125

126+
#region Context menu
127+
private void openSettingsToolStripMenuItem_Click(object sender, EventArgs e)
128+
{
129+
if (this.WindowState == FormWindowState.Minimized)
130+
{
131+
this.WindowState = FormWindowState.Minimized;
132+
this.Show();
133+
this.WindowState = FormWindowState.Normal;
134+
}
135+
}
136+
137+
private void exitNeatWindowsToolStripMenuItem_Click(object sender, EventArgs e)
138+
{
139+
Application.Exit();
140+
}
141+
#endregion Context menu
142+
143+
#region Textbox control
144+
public void FillTextBoxes(Dictionary<WindowConstants.WindowSizePosition, Hotkey> hotkeyMap)
145+
{
146+
foreach (KeyValuePair<WindowConstants.WindowSizePosition, Hotkey> hotkeyMapping in hotkeyMap)
147+
{
148+
TextBox taggedTextBox = this.GetTextBoxByTag(hotkeyMapping.Key);
149+
if (taggedTextBox == null)
150+
{
151+
Console.WriteLine("Null found for key: " + hotkeyMapping.Key.ToString());
152+
continue;
153+
}
154+
155+
taggedTextBox.Text = hotkeyMapping.Value.ToString();
156+
}
157+
}
158+
159+
private void UnmapButton_Click(object sender, EventArgs e)
160+
{
161+
Button clickedButton = (Button)sender;
162+
WindowConstants.WindowSizePosition windowSizePosition = (WindowConstants.WindowSizePosition)clickedButton.Tag;
163+
this.hotkeyHandler.UnmapHotkey(windowSizePosition);
164+
this.GetTextBoxByTag(windowSizePosition).Text = "";
165+
}
166+
167+
#endregion Textbox control
168+
125169
}
126170
}

neat-windows/SettingsForm.resx

+114
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@
120120
<metadata name="settingsIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
121121
<value>17, 17</value>
122122
</metadata>
123+
<metadata name="settingsIconContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
124+
<value>15, 39</value>
125+
</metadata>
123126
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
124127
<data name="settingsIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
125128
<value>
@@ -145,4 +148,115 @@
145148
//8AAP//AAD//w==
146149
</value>
147150
</data>
151+
<data name="buttonFullscreen.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
152+
<value>
153+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
154+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
155+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
156+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
157+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
158+
</value>
159+
</data>
160+
<data name="buttonCenter.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
161+
<value>
162+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
163+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
164+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
165+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
166+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
167+
</value>
168+
</data>
169+
<data name="buttonNextDisplay.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
170+
<value>
171+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
172+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
173+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
174+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
175+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
176+
</value>
177+
</data>
178+
<data name="buttonPreviousDisplay.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
179+
<value>
180+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
181+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
182+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
183+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
184+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
185+
</value>
186+
</data>
187+
<data name="buttonLeftHalf.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
188+
<value>
189+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
190+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
191+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
192+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
193+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
194+
</value>
195+
</data>
196+
<data name="buttonRightHalf.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
197+
<value>
198+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
199+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
200+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
201+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
202+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
203+
</value>
204+
</data>
205+
<data name="buttonTopHalf.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
206+
<value>
207+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
208+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
209+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
210+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
211+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
212+
</value>
213+
</data>
214+
<data name="buttonBottomHalf.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
215+
<value>
216+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
217+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
218+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
219+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
220+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
221+
</value>
222+
</data>
223+
<data name="buttonTopLeft.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
224+
<value>
225+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
226+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
227+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
228+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
229+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
230+
</value>
231+
</data>
232+
<data name="buttonTopRight.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
233+
<value>
234+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
235+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
236+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
237+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
238+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
239+
</value>
240+
</data>
241+
<data name="buttonBottomLeft.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
242+
<value>
243+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
244+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
245+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
246+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
247+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
248+
</value>
249+
</data>
250+
<data name="buttonBottomRight.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
251+
<value>
252+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
253+
YQUAAAAJcEhZcwAADdUAAA3VAT3WWPEAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQffBwgODx4vIfwD
254+
AAAAd0lEQVRYR+2O0QrAIAhF+//v8D9blg4fWrg1HYx7IJSbeCwAAADuQETSXeOZeYQuXgk8M1vI4tpq
255+
7YFBMv4bQRRGdB4xy0KxwnS5omJ+6XLm0wNUztX2/TOamTDtiCbgMhWZI0bwNrp4JfDMbOFZHCYHAICf
256+
UsoBPW90uV2eql8AAAAASUVORK5CYII=
257+
</value>
258+
</data>
259+
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
260+
<value>340</value>
261+
</metadata>
148262
</root>

0 commit comments

Comments
 (0)