/*
File Name: DeviceInput.h
Created By: Andy Odle
Date: Jan 16, 2010

Description: 
    
*/
    
#ifndef DeviceInput_h
#define DeviceInput_h

// Xlib Headers.
#include <X11/keysym.h>

struct Pressed
{
    int xCorMouse_m; // Mouse's x-cordinate.
    int yCorMouse_m; // Mouse's y-cordinate.
    unsigned int pressedKeyOrButton_m; // Button or key that was pressed.
};

// Keyboard, Mouse, and Joystick vritual key codes win32.
struct KeysAndButtons
{
    // ---- Begin Keyboard Section ----

    static const unsigned int LEFT_KEYBOARD = XK_Left;	       // Left arrow keyboard button.
    static const unsigned int UP_KEYBOARD = XK_Up;	           // Up arrow keyboard button.
    static const unsigned int RIGHT_KEYBOARD = XK_Right;	       // Right arrow keyboard button.
    static const unsigned int DOWN_KEYBOARD = XK_Down;           // Down arrow keyboard button.

    // ASCII Maped Keys.
    static const unsigned int ZERO_KEYBOARD = '0';                  // 0 keyboard key.
    static const unsigned int ONE_KEYBOARD = '1';                  // 1 keyboard key.
    static const unsigned int TWO_KEYBOARD = '2';                  // 2 keyboard key.
    static const unsigned int THREE_KEYBOARD = '3';                  // 3 keyboard key.
    static const unsigned int FOUR_KEYBOARD = '4';                  // 4 keyboard key.
    static const unsigned int FIVE_KEYBOARD = '5';                  // 5 keyboard key.
    static const unsigned int SIX_KEYBOARD = '6';                  // 6 keyboard key.
    static const unsigned int SEVEN_KEYBOARD = '7';                  // 7 keyboard key.
    static const unsigned int EIGHT_KEYBOARD = '8';                  // 8 keyboard key.
    static const unsigned int NINE_KEYBOARD = '9';                  // 9 keyboard key.

    static const unsigned int A_KEYBOARD = 'A';                  // A keyboard key.
    static const unsigned int B_KEYBOARD = 'B';                  // B keyboard key.
    static const unsigned int C_KEYBOARD = 'C';                  // C keyboard key.
    static const unsigned int D_KEYBOARD = 'D';                  // D keyboard key.
    static const unsigned int E_KEYBOARD = 'E';                  // E keyboard key.
    static const unsigned int F_KEYBOARD = 'F';                  // F keyboard key.
    static const unsigned int G_KEYBOARD = 'G';                  // G keyboard key.
    static const unsigned int H_KEYBOARD = 'H';                  // H keyboard key.
    static const unsigned int I_KEYBOARD = 'I';                  // I keyboard key.
    static const unsigned int J_KEYBOARD = 'J';                  // J keyboard key.
    static const unsigned int K_KEYBOARD = 'K';                  // K keyboard key.
    static const unsigned int L_KEYBOARD = 'L';                  // L keyboard key.
    static const unsigned int M_KEYBOARD = 'M';                  // M keyboard key.
    static const unsigned int N_KEYBOARD = 'N';                  // N keyboard key.
    static const unsigned int O_KEYBOARD = 'O';                  // O keyboard key.
    static const unsigned int P_KEYBOARD = 'P';                  // P keyboard key.
    static const unsigned int Q_KEYBOARD = 'Q';                  // Q keyboard key.
    static const unsigned int R_KEYBOARD = 'R';                  // R keyboard key.
    static const unsigned int S_KEYBOARD = 'S';                  // S keyboard key.
    static const unsigned int T_KEYBOARD = 'T';                  // T keyboard key.
    static const unsigned int U_KEYBOARD = 'U';                  // U keyboard key.
    static const unsigned int V_KEYBOARD = 'V';                  // V keyboard key.
    static const unsigned int W_KEYBOARD = 'W';                  // W keyboard key.
    static const unsigned int X_KEYBOARD = 'X';                  // X keyboard key.
    static const unsigned int Y_KEYBOARD = 'Y';                  // Y keyboard key.
    static const unsigned int Z_KEYBOARD = 'Z';
    
    static const unsigned int NUMPAD0_KEYBOARD = XK_KP_0;	   // Numberpad 0 keyboard button.
    static const unsigned int NUMPAD1_KEYBOARD = XK_KP_1;	   // Numberpad 1 keyboard button.
    static const unsigned int NUMPAD2_KEYBOARD = XK_KP_2;	   // Numberpad 2 keyboard button.
    static const unsigned int NUMPAD3_KEYBOARD = XK_KP_3;	   // Numberpad 3 keyboard button.
    static const unsigned int NUMPAD4_KEYBOARD = XK_KP_4;	   // Numberpad 4 keyboard button.
    static const unsigned int NUMPAD5_KEYBOARD = XK_KP_5;	   // Numberpad 5 keyboard button.
    static const unsigned int NUMPAD6_KEYBOARD = XK_KP_6;	   // Numberpad 6 keyboard button.
    static const unsigned int NUMPAD7_KEYBOARD = XK_KP_7;	   // Numberpad 7 keyboard button.
    static const unsigned int NUMPAD8_KEYBOARD = XK_KP_8;	   // Numberpad 8 keyboard button.
    static const unsigned int NUMPAD9_KEYBOARD = XK_KP_9;	   // Numberpad 9 keyboard button.
    
    static const unsigned int NUMPADADD_KEYBOARD = XK_KP_Add;             // + aka add keyboard button.		
    static const unsigned int NUMPADSUBTRACT_KEYBOARD = XK_KP_Subtract;   // - aka minus keyboard button.
    static const unsigned int NUMPADMULTIPLY_KEYBOARD = XK_KP_Multiply;   // * aka multiply keyboard button.
    static const unsigned int NUMPADDIVIDE_KEYBOARD = XK_KP_Divide;	    // / aka devide keyboard button.
    static const unsigned int NUMPADDECIMAL_KEYBOARD = XK_KP_Decimal;	    // . aka decimal keyboard button.
    static const unsigned int SEPARATOR_KEYBOARD = XK_KP_Separator; // , keyboard button.
    
    static const unsigned int F1_KEYBOARD = XK_F1;               // F1 keyboard button.	
    static const unsigned int F2_KEYBOARD = XK_F2;	           // F2 keyboard button.
    static const unsigned int F3_KEYBOARD = XK_F3;	           // F3 keyboard button.
    static const unsigned int F4_KEYBOARD = XK_F4;	           // F4 keyboard button.
    static const unsigned int F5_KEYBOARD = XK_F5;	           // F5 keyboard button.
    static const unsigned int F6_KEYBOARD = XK_F6;	           // F6 keyboard button.
    static const unsigned int F7_KEYBOARD = XK_F7;	           // F7 keyboard button.
    static const unsigned int F8_KEYBOARD = XK_F8;	           // F8 keyboard button.
    static const unsigned int F9_KEYBOARD = XK_F9;	           // F9 keyboard button.
    static const unsigned int F10_KEYBOARD = XK_F10;	           // F10 keyboard button.
    static const unsigned int F11_KEYBOARD = XK_F11;	           // F11 keyboard button.
    static const unsigned int F12_KEYBOARD = XK_F12;	           // F12 keyboard button.
    static const unsigned int F13_KEYBOARD = XK_F13;	           // F13 keyboard button.
    static const unsigned int F14_KEYBOARD = XK_F14;	           // F14 keyboard button.
    static const unsigned int F15_KEYBOARD = XK_F15;	           // F15 keyboard button.
    static const unsigned int F16_KEYBOARD = XK_F16;	           // F16 keyboard button.
    static const unsigned int F17_KEYBOARD = XK_F17;	           // F17 keyboard button.
    static const unsigned int F18_KEYBOARD = XK_F18;	           // F18 keyboard button.
    static const unsigned int F19_KEYBOARD = XK_F19;	           // F19 keyboard button.
    static const unsigned int F20_KEYBOARD = XK_F20;	           // F20 keyboard button.
    static const unsigned int F21_KEYBOARD = XK_F21;	           // F21 keyboard button.
    static const unsigned int F22_KEYBOARD = XK_F22;	           // F22 keyboard button.
    static const unsigned int F23_KEYBOARD = XK_F23;	           // F23 keyboard button.
    static const unsigned int F24_KEYBOARD = XK_F24;	           // F24 keyboard button.
    
    static const unsigned int NUMLOCK_KEYBOARD = XK_Num_Lock;     // Numlock keyboard button.	
    static const unsigned int SCROLL_KEYBOARD = XK_Scroll_Lock;	   // Scroll Lock keyboard button.
    static const unsigned int LEFTSHIFT_KEYBOARD = XK_Shift_L;	   // Left Shift keyboard button.
    static const unsigned int RIGHTSHIFT_KEYBOARD = XK_Shift_R;	   // Right Shift keyboard button.
    static const unsigned int LEFTCONTROL_KEYBOARD = XK_Control_L;   // Left Ctrl keyboard button.
    static const unsigned int RIGHTCONTROL_KEYBOARD = XK_Control_R;   // Right Ctrl keyboard button.
    static const unsigned int LEFTALT_KEYBOARD = XK_Alt_L;          // Left Alt keyboard key.
    static const unsigned int RIGHTALT_KEYBOARD = XK_Alt_R;          // Right Alt keyboard key.
    static const unsigned int SNAPSHOT_KEYBOARD = XK_Print;   // Print Screen keyboard button.
    static const unsigned int INSERT_KEYBOARD = XK_Insert;       // Insert keyboard button.
    static const unsigned int DELETE_KEYBOARD = XK_Delete;       // Delete keyboard button.	
    static const unsigned int BACK_KEYBOARD = XK_BackSpace;           // Backspace keyboard button.
    static const unsigned int TAB_KEYBOARD = XK_Tab;	           // Tab keyboard button.
    static const unsigned int ENTER_KEYBOARD = XK_Return;	   // Enter keyboard button.
    static const unsigned int PAUSE_KEYBOARD = XK_Pause;         // Puase keyboard button.	
    static const unsigned int CAPITAL_KEYBOARD = XK_Caps_Lock;	   // Capslock keyboard button.
    static const unsigned int ESCAPE_KEYBOARD = XK_Escape;	   // Esc keyboard button.
    static const unsigned int SPACE_KEYBOARD = XK_space;	       // Spacebar keyboard button.
    static const unsigned int END_KEYBOARD = XK_End;	           // End keyboard button.
    static const unsigned int HOME_KEYBOARD = XK_Home;	       // Home keyboard button.
    static const unsigned int PAGEUP_KEYBOARD = XK_Page_Up;     // Page Up keyboard button.
    static const unsigned int PAGEDOWN_KEYBOARD = XK_Page_Down; // Page Down keyboard button.

    // ---- End Keyboard Section ------

    // ---- Begin Mouse Section -------

    static const unsigned int LEFTBUTTON_MOUSE = 0x0001;      // Left mouse button.
    static const unsigned int RIGHTBUTTON_MOUSE = 0x0003;      // Right mouse button.
    static const unsigned int MIDDLEBUTTON_MOUSE = 0x0002;      // Middle mouse button.
    static const unsigned int FORWARDBUTTON_MOUSE = 0x0009;    // Forward mouse button.
    static const unsigned int BACKBUTTON_MOUSE = 0x0005;     // Back mouse button.

    // ---- End Mouse Section ---------
};

#endif
