зеркало из https://github.com/mozilla/pjs.git
Landing initial XBL event handling code.
This commit is contained in:
Родитель
315df8cb85
Коммит
b658d6003b
|
@ -31,6 +31,7 @@ LIBRARY_NAME = raptorxbl_s
|
|||
|
||||
CPPSRCS = \
|
||||
nsXBLBinding.cpp \
|
||||
nsXBLEventHandler.cpp \
|
||||
nsXBLService.cpp \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ CPPSRCS= \
|
|||
|
||||
CPP_OBJS= \
|
||||
.\$(OBJDIR)\nsXBLBinding.obj \
|
||||
.\$(OBJDIR)\nsXBLEventHandler.obj \
|
||||
.\$(OBJDIR)\nsXBLService.obj \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -0,0 +1,714 @@
|
|||
#include "nsCOMPtr.h"
|
||||
#include "nsXBLEventHandler.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsIDOMKeyEvent.h"
|
||||
|
||||
nsXBLEventHandler::nsXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
mBoundElement = aBoundElement;
|
||||
mHandlerElement = aHandlerElement;
|
||||
}
|
||||
|
||||
nsXBLEventHandler::~nsXBLEventHandler()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsXBLEventHandler, nsIDOMKeyListener, nsIDOMMouseListener)
|
||||
|
||||
nsresult nsXBLEventHandler::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Nothing to do.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::KeyUp(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (KeyEventMatched(keyEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::KeyDown(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (KeyEventMatched(keyEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::KeyPress(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (KeyEventMatched(keyEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseDown(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseUp(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseDblClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseOver(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseOut(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PRBool
|
||||
nsXBLEventHandler::KeyEventMatched(nsIDOMKeyEvent* aKeyEvent)
|
||||
{
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXBLEventHandler::MouseEventMatched(nsIDOMUIEvent* aMouseEvent)
|
||||
{
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXBLEventHandler::ExecuteHandler()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/// Helpers that are relegated to the end of the file /////////////////////////////
|
||||
|
||||
enum {
|
||||
VK_CANCEL = 3,
|
||||
VK_BACK = 8,
|
||||
VK_TAB = 9,
|
||||
VK_CLEAR = 12,
|
||||
VK_RETURN = 13,
|
||||
VK_ENTER = 14,
|
||||
VK_SHIFT = 16,
|
||||
VK_CONTROL = 17,
|
||||
VK_ALT = 18,
|
||||
VK_PAUSE = 19,
|
||||
VK_CAPS_LOCK = 20,
|
||||
VK_ESCAPE = 27,
|
||||
VK_SPACE = 32,
|
||||
VK_PAGE_UP = 33,
|
||||
VK_PAGE_DOWN = 34,
|
||||
VK_END = 35,
|
||||
VK_HOME = 36,
|
||||
VK_LEFT = 37,
|
||||
VK_UP = 38,
|
||||
VK_RIGHT = 39,
|
||||
VK_DOWN = 40,
|
||||
VK_PRINTSCREEN = 44,
|
||||
VK_INSERT = 45,
|
||||
VK_DELETE = 46,
|
||||
VK_0 = 48,
|
||||
VK_1 = 49,
|
||||
VK_2 = 50,
|
||||
VK_3 = 51,
|
||||
VK_4 = 52,
|
||||
VK_5 = 53,
|
||||
VK_6 = 54,
|
||||
VK_7 = 55,
|
||||
VK_8 = 56,
|
||||
VK_9 = 57,
|
||||
VK_SEMICOLON = 59,
|
||||
VK_EQUALS = 61,
|
||||
VK_A = 65,
|
||||
VK_B = 66,
|
||||
VK_C = 67,
|
||||
VK_D = 68,
|
||||
VK_E = 69,
|
||||
VK_F = 70,
|
||||
VK_G = 71,
|
||||
VK_H = 72,
|
||||
VK_I = 73,
|
||||
VK_J = 74,
|
||||
VK_K = 75,
|
||||
VK_L = 76,
|
||||
VK_M = 77,
|
||||
VK_N = 78,
|
||||
VK_O = 79,
|
||||
VK_P = 80,
|
||||
VK_Q = 81,
|
||||
VK_R = 82,
|
||||
VK_S = 83,
|
||||
VK_T = 84,
|
||||
VK_U = 85,
|
||||
VK_V = 86,
|
||||
VK_W = 87,
|
||||
VK_X = 88,
|
||||
VK_Y = 89,
|
||||
VK_Z = 90,
|
||||
VK_NUMPAD0 = 96,
|
||||
VK_NUMPAD1 = 97,
|
||||
VK_NUMPAD2 = 98,
|
||||
VK_NUMPAD3 = 99,
|
||||
VK_NUMPAD4 = 100,
|
||||
VK_NUMPAD5 = 101,
|
||||
VK_NUMPAD6 = 102,
|
||||
VK_NUMPAD7 = 103,
|
||||
VK_NUMPAD8 = 104,
|
||||
VK_NUMPAD9 = 105,
|
||||
VK_MULTIPLY = 106,
|
||||
VK_ADD = 107,
|
||||
VK_SEPARATOR = 108,
|
||||
VK_SUBTRACT = 109,
|
||||
VK_DECIMAL = 110,
|
||||
VK_DIVIDE = 111,
|
||||
VK_F1 = 112,
|
||||
VK_F2 = 113,
|
||||
VK_F3 = 114,
|
||||
VK_F4 = 115,
|
||||
VK_F5 = 116,
|
||||
VK_F6 = 117,
|
||||
VK_F7 = 118,
|
||||
VK_F8 = 119,
|
||||
VK_F9 = 120,
|
||||
VK_F10 = 121,
|
||||
VK_F11 = 122,
|
||||
VK_F12 = 123,
|
||||
VK_F13 = 124,
|
||||
VK_F14 = 125,
|
||||
VK_F15 = 126,
|
||||
VK_F16 = 127,
|
||||
VK_F17 = 128,
|
||||
VK_F18 = 129,
|
||||
VK_F19 = 130,
|
||||
VK_F20 = 131,
|
||||
VK_F21 = 132,
|
||||
VK_F22 = 133,
|
||||
VK_F23 = 134,
|
||||
VK_F24 = 135,
|
||||
VK_NUM_LOCK = 144,
|
||||
VK_SCROLL_LOCK = 145,
|
||||
VK_COMMA = 188,
|
||||
VK_PERIOD = 190,
|
||||
VK_SLASH = 191,
|
||||
VK_BACK_QUOTE = 192,
|
||||
VK_OPEN_BRACKET = 219,
|
||||
VK_BACK_SLASH = 220,
|
||||
VK_CLOSE_BRACKET = 221,
|
||||
VK_QUOTE = 222
|
||||
};
|
||||
|
||||
PRBool nsXBLEventHandler::IsMatchingKeyCode(const PRUint32 aChar, const nsString& aKeyName)
|
||||
{
|
||||
PRBool ret = PR_FALSE;
|
||||
|
||||
switch(aChar) {
|
||||
case VK_CANCEL:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CANCEL"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_BACK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_BACK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_TAB:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_TAB"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CLEAR:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CLEAR"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_RETURN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_RETURN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ENTER:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ENTER"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SHIFT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SHIFT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CONTROL:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CONTROL"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ALT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ALT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PAUSE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PAUSE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CAPS_LOCK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CAPS_LOCK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ESCAPE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ESCAPE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SPACE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SPACE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PAGE_UP:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PAGE_UP"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PAGE_DOWN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PAGE_DOWN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_END:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_END"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_HOME:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_HOME"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_LEFT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_LEFT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_UP:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_UP"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_RIGHT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_RIGHT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DOWN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DOWN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PRINTSCREEN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PRINTSCREEN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_INSERT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_INSERT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DELETE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DELETE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_0:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_0"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_1:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_1"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_2:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_2"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_3:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_3"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_4:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_4"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_5:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_5"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_6:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_6"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_7:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_7"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_8:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_8"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_9:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_9"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SEMICOLON:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SEMICOLON"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_EQUALS:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_EQUALS"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_A:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_A"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_B:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_B"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_C:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_C"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_D:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_D"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_E:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_E"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_G:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_G"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_H:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_H"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_I:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_I"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_J:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_J"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_K:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_K"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_L:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_L"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_M:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_M"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_N:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_N"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_O:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_O"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_P:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_P"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_Q:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_Q"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_R:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_R"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_S:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_S"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_T:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_T"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_U:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_U"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_V:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_V"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_W:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_W"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_X:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_X"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_Y:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_Y"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_Z:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_Z"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD0:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD0"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD1:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD1"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD2:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD2"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD3:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD3"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD4:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD4"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD5:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD5"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD6:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD6"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD7:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD7"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD8:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD8"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD9:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD9"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_MULTIPLY:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_MULTIPLY"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ADD:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ADD"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SEPARATOR:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SEPARATOR"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SUBTRACT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SUBTRACT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DECIMAL:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DECIMAL"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DIVIDE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DIVIDE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F1:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F1"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F2:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F2"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F3:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F3"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F4:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F4"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F5:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F5"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F6:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F6"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F7:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F7"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F8:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F8"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F9:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F9"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F10:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F10"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F11:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F11"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F12:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F12"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F13:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F13"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F14:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F14"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F15:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F15"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F16:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F16"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F17:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F17"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F18:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F18"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F19:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F19"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F20:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F20"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F21:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F21"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F22:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F22"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F23:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F23"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F24:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F24"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUM_LOCK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUM_LOCK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SCROLL_LOCK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SCROLL_LOCK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_COMMA:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_COMMA"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PERIOD:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PERIOD"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SLASH:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SLASH"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_BACK_QUOTE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_BACK_QUOTE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_OPEN_BRACKET:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_OPEN_BRACKET"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_BACK_SLASH:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_BACK_SLASH"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CLOSE_BRACKET:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CLOSE_BRACKET"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_QUOTE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_QUOTE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXBLEventHandler::IsMatchingCharCode(const nsString& aChar, const nsString& aKeyName)
|
||||
{
|
||||
PRBool ret = PR_FALSE;
|
||||
|
||||
if (aChar == aKeyName)
|
||||
ret = PR_TRUE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement,
|
||||
nsXBLEventHandler** aResult)
|
||||
{
|
||||
*aResult = new nsXBLEventHandler(aBoundElement, aHandlerElement);
|
||||
if (!*aResult)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ADDREF(*aResult);
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef nsXBLEventHandler_h__
|
||||
#define nsXBLEventHandler_h__
|
||||
|
||||
#include "nsIDOMMouseListener.h"
|
||||
#include "nsIDOMKeyListener.h"
|
||||
|
||||
class nsIXBLBinding;
|
||||
class nsIDOMEvent;
|
||||
class nsIContent;
|
||||
class nsIDOMUIEvent;
|
||||
class nsIDOMKeyEvent;
|
||||
|
||||
class nsXBLEventHandler : public nsIDOMKeyListener,
|
||||
public nsIDOMMouseListener
|
||||
{
|
||||
public:
|
||||
nsXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement);
|
||||
virtual ~nsXBLEventHandler();
|
||||
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
virtual nsresult KeyUp(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult KeyDown(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult KeyPress(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseClick(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseDblClick(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseOver(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseOut(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
protected:
|
||||
inline PRBool KeyEventMatched(nsIDOMKeyEvent* aKeyEvent);
|
||||
inline PRBool MouseEventMatched(nsIDOMUIEvent* aMouseEvent);
|
||||
|
||||
inline PRBool IsMatchingKeyCode(const PRUint32 aChar, const nsString& aKeyName);
|
||||
inline PRBool IsMatchingCharCode(const nsString& aChar, const nsString& aKeyName);
|
||||
|
||||
NS_IMETHOD ExecuteHandler();
|
||||
|
||||
protected:
|
||||
nsIContent* mBoundElement; // Both of these refs are weak.
|
||||
nsIContent* mHandlerElement;
|
||||
};
|
||||
|
||||
extern nsresult
|
||||
NS_NewXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement,
|
||||
nsXBLEventHandler** aResult);
|
||||
|
||||
|
||||
#endif
|
|
@ -31,6 +31,7 @@ LIBRARY_NAME = raptorxbl_s
|
|||
|
||||
CPPSRCS = \
|
||||
nsXBLBinding.cpp \
|
||||
nsXBLEventHandler.cpp \
|
||||
nsXBLService.cpp \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ CPPSRCS= \
|
|||
|
||||
CPP_OBJS= \
|
||||
.\$(OBJDIR)\nsXBLBinding.obj \
|
||||
.\$(OBJDIR)\nsXBLEventHandler.obj \
|
||||
.\$(OBJDIR)\nsXBLService.obj \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -0,0 +1,714 @@
|
|||
#include "nsCOMPtr.h"
|
||||
#include "nsXBLEventHandler.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsIDOMKeyEvent.h"
|
||||
|
||||
nsXBLEventHandler::nsXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
mBoundElement = aBoundElement;
|
||||
mHandlerElement = aHandlerElement;
|
||||
}
|
||||
|
||||
nsXBLEventHandler::~nsXBLEventHandler()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsXBLEventHandler, nsIDOMKeyListener, nsIDOMMouseListener)
|
||||
|
||||
nsresult nsXBLEventHandler::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Nothing to do.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::KeyUp(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (KeyEventMatched(keyEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::KeyDown(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (KeyEventMatched(keyEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::KeyPress(nsIDOMEvent* aKeyEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
|
||||
if (KeyEventMatched(keyEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseDown(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseUp(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseDblClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseOver(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::MouseOut(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
nsCOMPtr<nsIDOMUIEvent> mouseEvent = do_QueryInterface(aMouseEvent);
|
||||
if (MouseEventMatched(mouseEvent))
|
||||
ExecuteHandler();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PRBool
|
||||
nsXBLEventHandler::KeyEventMatched(nsIDOMKeyEvent* aKeyEvent)
|
||||
{
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXBLEventHandler::MouseEventMatched(nsIDOMUIEvent* aMouseEvent)
|
||||
{
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXBLEventHandler::ExecuteHandler()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/// Helpers that are relegated to the end of the file /////////////////////////////
|
||||
|
||||
enum {
|
||||
VK_CANCEL = 3,
|
||||
VK_BACK = 8,
|
||||
VK_TAB = 9,
|
||||
VK_CLEAR = 12,
|
||||
VK_RETURN = 13,
|
||||
VK_ENTER = 14,
|
||||
VK_SHIFT = 16,
|
||||
VK_CONTROL = 17,
|
||||
VK_ALT = 18,
|
||||
VK_PAUSE = 19,
|
||||
VK_CAPS_LOCK = 20,
|
||||
VK_ESCAPE = 27,
|
||||
VK_SPACE = 32,
|
||||
VK_PAGE_UP = 33,
|
||||
VK_PAGE_DOWN = 34,
|
||||
VK_END = 35,
|
||||
VK_HOME = 36,
|
||||
VK_LEFT = 37,
|
||||
VK_UP = 38,
|
||||
VK_RIGHT = 39,
|
||||
VK_DOWN = 40,
|
||||
VK_PRINTSCREEN = 44,
|
||||
VK_INSERT = 45,
|
||||
VK_DELETE = 46,
|
||||
VK_0 = 48,
|
||||
VK_1 = 49,
|
||||
VK_2 = 50,
|
||||
VK_3 = 51,
|
||||
VK_4 = 52,
|
||||
VK_5 = 53,
|
||||
VK_6 = 54,
|
||||
VK_7 = 55,
|
||||
VK_8 = 56,
|
||||
VK_9 = 57,
|
||||
VK_SEMICOLON = 59,
|
||||
VK_EQUALS = 61,
|
||||
VK_A = 65,
|
||||
VK_B = 66,
|
||||
VK_C = 67,
|
||||
VK_D = 68,
|
||||
VK_E = 69,
|
||||
VK_F = 70,
|
||||
VK_G = 71,
|
||||
VK_H = 72,
|
||||
VK_I = 73,
|
||||
VK_J = 74,
|
||||
VK_K = 75,
|
||||
VK_L = 76,
|
||||
VK_M = 77,
|
||||
VK_N = 78,
|
||||
VK_O = 79,
|
||||
VK_P = 80,
|
||||
VK_Q = 81,
|
||||
VK_R = 82,
|
||||
VK_S = 83,
|
||||
VK_T = 84,
|
||||
VK_U = 85,
|
||||
VK_V = 86,
|
||||
VK_W = 87,
|
||||
VK_X = 88,
|
||||
VK_Y = 89,
|
||||
VK_Z = 90,
|
||||
VK_NUMPAD0 = 96,
|
||||
VK_NUMPAD1 = 97,
|
||||
VK_NUMPAD2 = 98,
|
||||
VK_NUMPAD3 = 99,
|
||||
VK_NUMPAD4 = 100,
|
||||
VK_NUMPAD5 = 101,
|
||||
VK_NUMPAD6 = 102,
|
||||
VK_NUMPAD7 = 103,
|
||||
VK_NUMPAD8 = 104,
|
||||
VK_NUMPAD9 = 105,
|
||||
VK_MULTIPLY = 106,
|
||||
VK_ADD = 107,
|
||||
VK_SEPARATOR = 108,
|
||||
VK_SUBTRACT = 109,
|
||||
VK_DECIMAL = 110,
|
||||
VK_DIVIDE = 111,
|
||||
VK_F1 = 112,
|
||||
VK_F2 = 113,
|
||||
VK_F3 = 114,
|
||||
VK_F4 = 115,
|
||||
VK_F5 = 116,
|
||||
VK_F6 = 117,
|
||||
VK_F7 = 118,
|
||||
VK_F8 = 119,
|
||||
VK_F9 = 120,
|
||||
VK_F10 = 121,
|
||||
VK_F11 = 122,
|
||||
VK_F12 = 123,
|
||||
VK_F13 = 124,
|
||||
VK_F14 = 125,
|
||||
VK_F15 = 126,
|
||||
VK_F16 = 127,
|
||||
VK_F17 = 128,
|
||||
VK_F18 = 129,
|
||||
VK_F19 = 130,
|
||||
VK_F20 = 131,
|
||||
VK_F21 = 132,
|
||||
VK_F22 = 133,
|
||||
VK_F23 = 134,
|
||||
VK_F24 = 135,
|
||||
VK_NUM_LOCK = 144,
|
||||
VK_SCROLL_LOCK = 145,
|
||||
VK_COMMA = 188,
|
||||
VK_PERIOD = 190,
|
||||
VK_SLASH = 191,
|
||||
VK_BACK_QUOTE = 192,
|
||||
VK_OPEN_BRACKET = 219,
|
||||
VK_BACK_SLASH = 220,
|
||||
VK_CLOSE_BRACKET = 221,
|
||||
VK_QUOTE = 222
|
||||
};
|
||||
|
||||
PRBool nsXBLEventHandler::IsMatchingKeyCode(const PRUint32 aChar, const nsString& aKeyName)
|
||||
{
|
||||
PRBool ret = PR_FALSE;
|
||||
|
||||
switch(aChar) {
|
||||
case VK_CANCEL:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CANCEL"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_BACK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_BACK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_TAB:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_TAB"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CLEAR:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CLEAR"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_RETURN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_RETURN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ENTER:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ENTER"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SHIFT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SHIFT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CONTROL:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CONTROL"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ALT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ALT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PAUSE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PAUSE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CAPS_LOCK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CAPS_LOCK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ESCAPE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ESCAPE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SPACE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SPACE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PAGE_UP:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PAGE_UP"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PAGE_DOWN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PAGE_DOWN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_END:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_END"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_HOME:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_HOME"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_LEFT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_LEFT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_UP:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_UP"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_RIGHT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_RIGHT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DOWN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DOWN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PRINTSCREEN:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PRINTSCREEN"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_INSERT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_INSERT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DELETE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DELETE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_0:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_0"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_1:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_1"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_2:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_2"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_3:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_3"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_4:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_4"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_5:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_5"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_6:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_6"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_7:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_7"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_8:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_8"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_9:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_9"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SEMICOLON:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SEMICOLON"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_EQUALS:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_EQUALS"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_A:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_A"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_B:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_B"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_C:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_C"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_D:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_D"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_E:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_E"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_G:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_G"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_H:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_H"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_I:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_I"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_J:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_J"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_K:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_K"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_L:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_L"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_M:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_M"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_N:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_N"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_O:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_O"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_P:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_P"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_Q:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_Q"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_R:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_R"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_S:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_S"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_T:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_T"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_U:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_U"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_V:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_V"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_W:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_W"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_X:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_X"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_Y:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_Y"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_Z:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_Z"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD0:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD0"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD1:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD1"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD2:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD2"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD3:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD3"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD4:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD4"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD5:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD5"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD6:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD6"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD7:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD7"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD8:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD8"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUMPAD9:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUMPAD9"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_MULTIPLY:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_MULTIPLY"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_ADD:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_ADD"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SEPARATOR:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SEPARATOR"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SUBTRACT:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SUBTRACT"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DECIMAL:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DECIMAL"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_DIVIDE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_DIVIDE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F1:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F1"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F2:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F2"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F3:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F3"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F4:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F4"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F5:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F5"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F6:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F6"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F7:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F7"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F8:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F8"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F9:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F9"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F10:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F10"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F11:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F11"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F12:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F12"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F13:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F13"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F14:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F14"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F15:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F15"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F16:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F16"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F17:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F17"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F18:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F18"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F19:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F19"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F20:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F20"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F21:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F21"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F22:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F22"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F23:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F23"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_F24:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_F24"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_NUM_LOCK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_NUM_LOCK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SCROLL_LOCK:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SCROLL_LOCK"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_COMMA:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_COMMA"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_PERIOD:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_PERIOD"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_SLASH:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_SLASH"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_BACK_QUOTE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_BACK_QUOTE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_OPEN_BRACKET:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_OPEN_BRACKET"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_BACK_SLASH:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_BACK_SLASH"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_CLOSE_BRACKET:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_CLOSE_BRACKET"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
case VK_QUOTE:
|
||||
if(aKeyName.EqualsIgnoreCase("VK_QUOTE"))
|
||||
ret = PR_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXBLEventHandler::IsMatchingCharCode(const nsString& aChar, const nsString& aKeyName)
|
||||
{
|
||||
PRBool ret = PR_FALSE;
|
||||
|
||||
if (aChar == aKeyName)
|
||||
ret = PR_TRUE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult
|
||||
NS_NewXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement,
|
||||
nsXBLEventHandler** aResult)
|
||||
{
|
||||
*aResult = new nsXBLEventHandler(aBoundElement, aHandlerElement);
|
||||
if (!*aResult)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
NS_ADDREF(*aResult);
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef nsXBLEventHandler_h__
|
||||
#define nsXBLEventHandler_h__
|
||||
|
||||
#include "nsIDOMMouseListener.h"
|
||||
#include "nsIDOMKeyListener.h"
|
||||
|
||||
class nsIXBLBinding;
|
||||
class nsIDOMEvent;
|
||||
class nsIContent;
|
||||
class nsIDOMUIEvent;
|
||||
class nsIDOMKeyEvent;
|
||||
|
||||
class nsXBLEventHandler : public nsIDOMKeyListener,
|
||||
public nsIDOMMouseListener
|
||||
{
|
||||
public:
|
||||
nsXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement);
|
||||
virtual ~nsXBLEventHandler();
|
||||
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
virtual nsresult KeyUp(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult KeyDown(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult KeyPress(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseClick(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseDblClick(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseOver(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult MouseOut(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
protected:
|
||||
inline PRBool KeyEventMatched(nsIDOMKeyEvent* aKeyEvent);
|
||||
inline PRBool MouseEventMatched(nsIDOMUIEvent* aMouseEvent);
|
||||
|
||||
inline PRBool IsMatchingKeyCode(const PRUint32 aChar, const nsString& aKeyName);
|
||||
inline PRBool IsMatchingCharCode(const nsString& aChar, const nsString& aKeyName);
|
||||
|
||||
NS_IMETHOD ExecuteHandler();
|
||||
|
||||
protected:
|
||||
nsIContent* mBoundElement; // Both of these refs are weak.
|
||||
nsIContent* mHandlerElement;
|
||||
};
|
||||
|
||||
extern nsresult
|
||||
NS_NewXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement,
|
||||
nsXBLEventHandler** aResult);
|
||||
|
||||
|
||||
#endif
|
Загрузка…
Ссылка в новой задаче