diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj
index c03ed96..4cbd220 100644
--- a/Eve-O-Preview/Eve-O-Preview.csproj
+++ b/Eve-O-Preview/Eve-O-Preview.csproj
@@ -8,8 +8,8 @@
{6CA62DF3-8589-484C-8BC8-F763CA66BBB1}
WinExe
Properties
- PreviewToy
- eve-o preview
+ EveOPreview
+ Eve-O Preview
v4.5
@@ -42,6 +42,7 @@
prompt
4
false
+ false
pdbonly
@@ -57,7 +58,7 @@
icon.ico
- PreviewToy.Program
+ EveOPreview.Program
4B29FD125BFAD24FF900FC81CCE0B0AD37464FDB
@@ -95,7 +96,8 @@
-
+
+
Form
diff --git a/Eve-O-Preview/Hotkey.cs b/Eve-O-Preview/Hotkey.cs
deleted file mode 100644
index 96d3853..0000000
--- a/Eve-O-Preview/Hotkey.cs
+++ /dev/null
@@ -1,302 +0,0 @@
-using System;
-using System.Windows.Forms;
-using System.ComponentModel;
-using System.Xml.Serialization;
-using System.Runtime.InteropServices;
-
-namespace MovablePython
-{
- public class Hotkey : IMessageFilter
- {
- #region Interop
-
- [DllImport("user32.dll", SetLastError = true)]
- private static extern int RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);
-
- [DllImport("user32.dll", SetLastError=true)]
- private static extern int UnregisterHotKey(IntPtr hWnd, int id);
-
- private const uint WM_HOTKEY = 0x312;
-
- private const uint MOD_ALT = 0x1;
- private const uint MOD_CONTROL = 0x2;
- private const uint MOD_SHIFT = 0x4;
- private const uint MOD_WIN = 0x8;
-
- private const uint ERROR_HOTKEY_ALREADY_REGISTERED = 1409;
-
- #endregion
-
- private static int currentID;
- private const int maximumID = 0xBFFF;
-
- private Keys keyCode;
- private bool shift;
- private bool control;
- private bool alt;
- private bool windows;
-
- [XmlIgnore]
- private int id;
- [XmlIgnore]
- private bool registered;
- [XmlIgnore]
- private Control windowControl;
-
- public event HandledEventHandler Pressed;
-
- public Hotkey() : this(Keys.None, false, false, false, false)
- {
- // No work done here!
- }
-
- public Hotkey(Keys keyCode, bool shift, bool control, bool alt, bool windows)
- {
- // Assign properties
- this.KeyCode = keyCode;
- this.Shift = shift;
- this.Control = control;
- this.Alt = alt;
- this.Windows = windows;
-
- // Register us as a message filter
- Application.AddMessageFilter(this);
- }
-
- ~Hotkey()
- {
- // Unregister the hotkey if necessary
- if (this.Registered)
- { this.Unregister(); }
- }
-
- public Hotkey Clone()
- {
- // Clone the whole object
- return new Hotkey(this.keyCode, this.shift, this.control, this.alt, this.windows);
- }
-
- public bool GetCanRegister(Control windowControl)
- {
- // Handle any exceptions: they mean "no, you can't register" :)
- try
- {
- // Attempt to register
- if (!this.Register(windowControl))
- { return false; }
-
- // Unregister and say we managed it
- this.Unregister();
- return true;
- }
- catch (Win32Exception)
- { return false; }
- catch (NotSupportedException)
- { return false; }
- }
-
- public bool Register(Control windowControl)
- {
- // Check that we have not registered
- if (this.registered)
- { throw new NotSupportedException("You cannot register a hotkey that is already registered"); }
-
- // We can't register an empty hotkey
- if (this.Empty)
- { throw new NotSupportedException("You cannot register an empty hotkey"); }
-
- // Get an ID for the hotkey and increase current ID
- this.id = Hotkey.currentID;
- Hotkey.currentID = Hotkey.currentID + 1 % Hotkey.maximumID;
-
- // Translate modifier keys into unmanaged version
- uint modifiers = (this.Alt ? Hotkey.MOD_ALT : 0) | (this.Control ? Hotkey.MOD_CONTROL : 0) |
- (this.Shift ? Hotkey.MOD_SHIFT : 0) | (this.Windows ? Hotkey.MOD_WIN : 0);
-
- // Register the hotkey
- if (Hotkey.RegisterHotKey(windowControl.Handle, this.id, modifiers, keyCode) == 0)
- {
- // Is the error that the hotkey is registered?
- if (Marshal.GetLastWin32Error() == ERROR_HOTKEY_ALREADY_REGISTERED)
- { return false; }
- else
- { throw new Win32Exception(); }
- }
-
- // Save the control reference and register state
- this.registered = true;
- this.windowControl = windowControl;
-
- // We successfully registered
- return true;
- }
-
- public void Unregister()
- {
- // Check that we have registered
- if (!this.registered)
- { throw new NotSupportedException("You cannot unregister a hotkey that is not registered"); }
-
- // It's possible that the control itself has died: in that case, no need to unregister!
- if (!this.windowControl.IsDisposed)
- {
- // Clean up after ourselves
- if (Hotkey.UnregisterHotKey(this.windowControl.Handle, this.id) == 0)
- { throw new Win32Exception(); }
- }
-
- // Clear the control reference and register state
- this.registered = false;
- this.windowControl = null;
- }
-
- private void Reregister()
- {
- // Only do something if the key is already registered
- if (!this.registered)
- { return; }
-
- // Save control reference
- Control windowControl = this.windowControl;
-
- // Unregister and then reregister again
- this.Unregister();
- this.Register(windowControl);
- }
-
- public bool PreFilterMessage(ref Message message)
- {
- // Only process WM_HOTKEY messages
- if (message.Msg != Hotkey.WM_HOTKEY)
- { return false; }
-
- // Check that the ID is our key and we are registerd
- if (this.registered && (message.WParam.ToInt32() == this.id))
- {
- // Fire the event and pass on the event if our handlers didn't handle it
- return this.OnPressed();
- }
- else
- { return false; }
- }
-
- private bool OnPressed()
- {
- // Fire the event if we can
- HandledEventArgs handledEventArgs = new HandledEventArgs(false);
- if (this.Pressed != null)
- { this.Pressed(this, handledEventArgs); }
-
- // Return whether we handled the event or not
- return handledEventArgs.Handled;
- }
-
- public override string ToString()
- {
- // We can be empty
- if (this.Empty)
- { return "(none)"; }
-
- // Build key name
- string keyName = Enum.GetName(typeof(Keys), this.keyCode);;
- switch (this.keyCode)
- {
- case Keys.D0:
- case Keys.D1:
- case Keys.D2:
- case Keys.D3:
- case Keys.D4:
- case Keys.D5:
- case Keys.D6:
- case Keys.D7:
- case Keys.D8:
- case Keys.D9:
- // Strip the first character
- keyName = keyName.Substring(1);
- break;
- default:
- // Leave everything alone
- break;
- }
-
- // Build modifiers
- string modifiers = "";
- if (this.shift)
- { modifiers += "Shift+"; }
- if (this.control)
- { modifiers += "Control+"; }
- if (this.alt)
- { modifiers += "Alt+"; }
- if (this.windows)
- { modifiers += "Windows+"; }
-
- // Return result
- return modifiers + keyName;
- }
-
- public bool Empty
- {
- get { return this.keyCode == Keys.None; }
- }
-
- public bool Registered
- {
- get { return this.registered; }
- }
-
- public Keys KeyCode
- {
- get { return this.keyCode; }
- set
- {
- // Save and reregister
- this.keyCode = value;
- this.Reregister();
- }
- }
-
- public bool Shift
- {
- get { return this.shift; }
- set
- {
- // Save and reregister
- this.shift = value;
- this.Reregister();
- }
- }
-
- public bool Control
- {
- get { return this.control; }
- set
- {
- // Save and reregister
- this.control = value;
- this.Reregister();
- }
- }
-
- public bool Alt
- {
- get { return this.alt; }
- set
- {
- // Save and reregister
- this.alt = value;
- this.Reregister();
- }
- }
-
- public bool Windows
- {
- get { return this.windows; }
- set
- {
- // Save and reregister
- this.windows = value;
- this.Reregister();
- }
- }
- }
-}
diff --git a/Eve-O-Preview/Hotkeys/Hotkey.cs b/Eve-O-Preview/Hotkeys/Hotkey.cs
new file mode 100644
index 0000000..5fc8132
--- /dev/null
+++ b/Eve-O-Preview/Hotkeys/Hotkey.cs
@@ -0,0 +1,332 @@
+using System;
+using System.Windows.Forms;
+using System.ComponentModel;
+using System.Xml.Serialization;
+using System.Runtime.InteropServices;
+
+namespace EveOPreview
+{
+ public class Hotkey : IMessageFilter
+ {
+ private static int _currentId;
+ private const int MaxId = 0xBFFF;
+
+ [XmlElement("keyCode")]
+ private Keys _keyCode;
+ [XmlElement("shift")]
+ private bool _shift;
+ [XmlElement("control")]
+ private bool _control;
+ [XmlElement("alt")]
+ private bool _alt;
+ [XmlElement("windows")]
+ private bool _windows;
+
+ [XmlIgnore]
+ private int _id;
+ [XmlIgnore]
+ private bool _isRegistered;
+ [XmlIgnore]
+ private Control _windowControl;
+
+ public event HandledEventHandler Pressed;
+
+ public Hotkey()
+ : this(Keys.None, false, false, false, false)
+ {
+ }
+
+ public Hotkey(Keys keyCode, bool shift, bool control, bool alt, bool windows)
+ {
+ // Assign properties
+ this.KeyCode = keyCode;
+ this.Shift = shift;
+ this.Control = control;
+ this.Alt = alt;
+ this.Windows = windows;
+
+ // Register us as a message filter
+ Application.AddMessageFilter(this);
+ }
+
+ ~Hotkey()
+ {
+ // Unregister the hotkey if necessary
+ if (this.IsRegistered)
+ {
+ this.Unregister();
+ }
+ }
+
+ public Hotkey Clone()
+ {
+ // Clone the whole object
+ return new Hotkey(this._keyCode, this._shift, this._control, this._alt, this._windows);
+ }
+
+ public bool GetCanRegister(Control windowControl)
+ {
+ // Handle any exceptions: they mean "no, you can't register" :)
+ try
+ {
+ // Attempt to register
+ if (this.Register(windowControl))
+ {
+ // Unregister and say we managed it
+ this.Unregister();
+ return true;
+ }
+ }
+ catch (Win32Exception)
+ {
+ }
+ catch (NotSupportedException)
+ {
+ }
+
+ return false;
+ }
+
+ public bool Register(Control windowControl)
+ {
+ // Check that we have not registered
+ if (this._isRegistered)
+ {
+ throw new NotSupportedException("You cannot register a hotkey that is already registered");
+ }
+
+ // We can't register an empty hotkey
+ if (this.IsEmpty)
+ {
+ throw new NotSupportedException("You cannot register an empty hotkey");
+ }
+
+ // Get an ID for the hotkey and increase current ID
+ this._id = Hotkey._currentId;
+ Hotkey._currentId = Hotkey._currentId + 1 % Hotkey.MaxId;
+
+ // Translate modifier keys into unmanaged version
+ uint modifiers = (this.Alt ? HotkeyNativeMethods.MOD_ALT : 0) | (this.Control ? HotkeyNativeMethods.MOD_CONTROL : 0) |
+ (this.Shift ? HotkeyNativeMethods.MOD_SHIFT : 0) | (this.Windows ? HotkeyNativeMethods.MOD_WIN : 0);
+
+ // Register the hotkey
+ if (HotkeyNativeMethods.RegisterHotKey(windowControl.Handle, this._id, modifiers, _keyCode) == 0)
+ {
+ // Is the error that the hotkey is registered?
+ if (Marshal.GetLastWin32Error() != HotkeyNativeMethods.ERROR_HOTKEY_ALREADY_REGISTERED)
+ {
+ throw new Win32Exception();
+ }
+
+ return false;
+ }
+
+ // Save the control reference and register state
+ this._isRegistered = true;
+ this._windowControl = windowControl;
+
+ // We successfully registered
+ return true;
+ }
+
+ public void Unregister()
+ {
+ // Check that we have registered
+ if (!this._isRegistered)
+ {
+ throw new NotSupportedException("You cannot unregister a hotkey that is not registered");
+ }
+
+ // It's possible that the control itself has died: in that case, no need to unregister!
+ if (!this._windowControl.IsDisposed)
+ {
+ // Clean up after ourselves
+ if (HotkeyNativeMethods.UnregisterHotKey(this._windowControl.Handle, this._id) == 0)
+ {
+ throw new Win32Exception();
+ }
+ }
+
+ // Clear the control reference and register state
+ this._isRegistered = false;
+ this._windowControl = null;
+ }
+
+ private void Reregister()
+ {
+ // Only do something if the key is already registered
+ if (!this._isRegistered)
+ {
+ return;
+ }
+
+ // Save control reference
+ Control windowControl = this._windowControl;
+
+ // Unregister and then reregister again
+ this.Unregister();
+ this.Register(windowControl);
+ }
+
+ public bool PreFilterMessage(ref Message message)
+ {
+ // Only process WM_HOTKEY messages
+ if (message.Msg != HotkeyNativeMethods.WM_HOTKEY)
+ {
+ return false;
+ }
+
+ // Check that the ID is our key and we are registerd
+ return this._isRegistered && (message.WParam.ToInt32() == this._id) && this.OnPressed();
+ }
+
+ private bool OnPressed()
+ {
+ // Fire the event if we can
+ HandledEventArgs handledEventArgs = new HandledEventArgs(false);
+ this.Pressed?.Invoke(this, handledEventArgs);
+
+ // Return whether we handled the event or not
+ return handledEventArgs.Handled;
+ }
+
+ public override string ToString()
+ {
+ // We can be empty
+ if (this.IsEmpty)
+ {
+ return "(none)";
+ }
+
+ // Build key name
+ string keyName = Enum.GetName(typeof(Keys), this._keyCode) ?? " ";
+ switch (this._keyCode)
+ {
+ case Keys.D0:
+ case Keys.D1:
+ case Keys.D2:
+ case Keys.D3:
+ case Keys.D4:
+ case Keys.D5:
+ case Keys.D6:
+ case Keys.D7:
+ case Keys.D8:
+ case Keys.D9:
+ // Strip the first character
+ keyName = keyName.Substring(1);
+ break;
+ }
+
+ // Build modifiers
+ string modifiers = "";
+ if (this._shift)
+ {
+ modifiers += "Shift+";
+ }
+
+ if (this._control)
+ {
+ modifiers += "Control+";
+ }
+
+ if (this._alt)
+ {
+ modifiers += "Alt+";
+ }
+
+ if (this._windows)
+ {
+ modifiers += "Windows+";
+ }
+
+ // Return result
+ return modifiers + keyName;
+ }
+
+ public bool IsEmpty
+ {
+ get
+ {
+ return this._keyCode == Keys.None;
+ }
+ }
+
+ public bool IsRegistered
+ {
+ get
+ {
+ return this._isRegistered;
+ }
+ }
+
+ public Keys KeyCode
+ {
+ get
+ {
+ return this._keyCode;
+ }
+ set
+ {
+ // Save and reregister
+ this._keyCode = value;
+ this.Reregister();
+ }
+ }
+
+ public bool Shift
+ {
+ get
+ {
+ return this._shift;
+ }
+ set
+ {
+ // Save and reregister
+ this._shift = value;
+ this.Reregister();
+ }
+ }
+
+ public bool Control
+ {
+ get
+ {
+ return this._control;
+ }
+ set
+ {
+ // Save and reregister
+ this._control = value;
+ this.Reregister();
+ }
+ }
+
+ public bool Alt
+ {
+ get
+ {
+ return this._alt;
+ }
+ set
+ {
+ // Save and reregister
+ this._alt = value;
+ this.Reregister();
+ }
+ }
+
+ public bool Windows
+ {
+ get
+ {
+ return this._windows;
+ }
+ set
+ {
+ // Save and reregister
+ this._windows = value;
+ this.Reregister();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Eve-O-Preview/Hotkeys/HotkeyNativeMethods.cs b/Eve-O-Preview/Hotkeys/HotkeyNativeMethods.cs
new file mode 100644
index 0000000..8823fee
--- /dev/null
+++ b/Eve-O-Preview/Hotkeys/HotkeyNativeMethods.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Windows.Forms;
+
+namespace EveOPreview
+{
+ static class HotkeyNativeMethods
+ {
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern int RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern int UnregisterHotKey(IntPtr hWnd, int id);
+
+ public const uint WM_HOTKEY = 0x312;
+
+ public const uint MOD_ALT = 0x1;
+ public const uint MOD_CONTROL = 0x2;
+ public const uint MOD_SHIFT = 0x4;
+ public const uint MOD_WIN = 0x8;
+
+ public const uint ERROR_HOTKEY_ALREADY_REGISTERED = 1409;
+ }
+}
\ No newline at end of file