Quasar/Client/Core/MouseKeyHook/Implementation/EventFacade.cs

114 lines
3.6 KiB
C#

// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Windows.Forms;
namespace xClient.Core.MouseKeyHook.Implementation
{
internal abstract class EventFacade : IKeyboardMouseEvents
{
private KeyListener m_KeyListenerCache;
private MouseListener m_MouseListenerCache;
public event KeyEventHandler KeyDown
{
add { GetKeyListener().KeyDown += value; }
remove { GetKeyListener().KeyDown -= value; }
}
public event KeyPressEventHandler KeyPress
{
add { GetKeyListener().KeyPress += value; }
remove { GetKeyListener().KeyPress -= value; }
}
public event KeyEventHandler KeyUp
{
add { GetKeyListener().KeyUp += value; }
remove { GetKeyListener().KeyUp -= value; }
}
public event MouseEventHandler MouseMove
{
add { GetMouseListener().MouseMove += value; }
remove { GetMouseListener().MouseMove -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseMoveExt
{
add { GetMouseListener().MouseMoveExt += value; }
remove { GetMouseListener().MouseMoveExt -= value; }
}
public event MouseEventHandler MouseClick
{
add { GetMouseListener().MouseClick += value; }
remove { GetMouseListener().MouseClick -= value; }
}
public event MouseEventHandler MouseDown
{
add { GetMouseListener().MouseDown += value; }
remove { GetMouseListener().MouseDown -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseDownExt
{
add { GetMouseListener().MouseDownExt += value; }
remove { GetMouseListener().MouseDownExt -= value; }
}
public event MouseEventHandler MouseUp
{
add { GetMouseListener().MouseUp += value; }
remove { GetMouseListener().MouseUp -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseUpExt
{
add { GetMouseListener().MouseUpExt += value; }
remove { GetMouseListener().MouseUpExt -= value; }
}
public event MouseEventHandler MouseWheel
{
add { GetMouseListener().MouseWheel += value; }
remove { GetMouseListener().MouseWheel -= value; }
}
public event MouseEventHandler MouseDoubleClick
{
add { GetMouseListener().MouseDoubleClick += value; }
remove { GetMouseListener().MouseDoubleClick -= value; }
}
public void Dispose()
{
if (m_MouseListenerCache != null) m_MouseListenerCache.Dispose();
if (m_KeyListenerCache != null) m_KeyListenerCache.Dispose();
}
private KeyListener GetKeyListener()
{
var target = m_KeyListenerCache;
if (target != null) return target;
target = CreateKeyListener();
m_KeyListenerCache = target;
return target;
}
private MouseListener GetMouseListener()
{
var target = m_MouseListenerCache;
if (target != null) return target;
target = CreateMouseListener();
m_MouseListenerCache = target;
return target;
}
protected abstract MouseListener CreateMouseListener();
protected abstract KeyListener CreateKeyListener();
}
}