jkeyevent.h 5.1 KB
/***************************************************************************
 *   Copyright (C) 2005 by Jeff Ferr                                       *
 *   root@sat                                                              *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef J_KEYEVENT_H
#define J_KEYEVENT_H

#include "jeventobject.h"

#include <iostream>
#include <cstdlib>
#include <map>

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

namespace jgui {

/**
 * \brief
 *
 */
enum jkeyevent_type_t {
	JKT_PRESSED,
	JKT_RELEASED,
	JKT_TYPED
};

/**
 * \brief
 *
 */
enum jkeyevent_modifiers_t {
	JKM_SHIFT				= 0x0001,
	JKM_CONTROL			= 0x0002,
	JKM_ALT					= 0x0004,
	JKM_ALTGR				= 0x0008,
	JKM_META				= 0x0010,
	JKM_SUPER				= 0x0020,
	JKM_HYPER				= 0x0040,
	JKM_CAPS_LOCK		= 0x0080,
	JKM_NUM_LOCK		= 0x0100,
	JKM_SCROLL_LOCK	= 0x0200
};

/**
 * \brief
 *
 */
enum jkeyevent_symbol_t {
  JKS_UNKNOWN,
	JKS_EXIT,
	JKS_BACKSPACE,
	JKS_TAB,
	JKS_ENTER,
	JKS_CANCEL,
	JKS_ESCAPE,
	JKS_SPACE,
	JKS_EXCLAMATION_MARK,
	JKS_QUOTATION,
	JKS_NUMBER_SIGN,
	JKS_DOLLAR_SIGN,
	JKS_PERCENT_SIGN,
	JKS_AMPERSAND,
	JKS_APOSTROPHE,
	JKS_PARENTHESIS_LEFT,
	JKS_PARENTHESIS_RIGHT,
	JKS_STAR,
	JKS_SHARP,
	JKS_PLUS_SIGN,
	JKS_COMMA,
	JKS_MINUS_SIGN,
	JKS_PERIOD,
	JKS_SLASH,
	JKS_0,
	JKS_1,
	JKS_2,
	JKS_3,   
	JKS_4,
	JKS_5,
	JKS_6,
	JKS_7,
	JKS_8,
	JKS_9,

	JKS_COLON,
	JKS_SEMICOLON,
	JKS_LESS_THAN_SIGN,
	JKS_EQUALS_SIGN,
	JKS_GREATER_THAN_SIGN, 
	JKS_QUESTION_MARK,
	JKS_AT,

	JKS_A,
	JKS_B,
	JKS_C,
	JKS_D,
	JKS_E,
	JKS_F,
	JKS_G,
	JKS_H,
	JKS_I,         
	JKS_J,       
	JKS_K,     
	JKS_L,   
	JKS_M, 
	JKS_N,
	JKS_O,
	JKS_P,
	JKS_Q,
	JKS_R,
	JKS_S,
	JKS_T,
	JKS_U,
	JKS_V,
	JKS_W,
	JKS_X,            
	JKS_Y,          
	JKS_Z,        

	JKS_a,      
	JKS_b,    
	JKS_c,  
	JKS_d,
	JKS_e,
	JKS_f,
	JKS_g,
	JKS_h,
	JKS_i,
	JKS_j,
	JKS_k,              
	JKS_l,            
	JKS_m,          
	JKS_n,        
	JKS_o,      
	JKS_p,    
	JKS_q,  
	JKS_r,
	JKS_s,
	JKS_t,
	JKS_u,
	JKS_v,
	JKS_w,
	JKS_x,
	JKS_y,
	JKS_z,

	JKS_SQUARE_BRACKET_LEFT,
	JKS_BACKSLASH,
	JKS_SQUARE_BRACKET_RIGHT,
	JKS_CIRCUMFLEX_ACCENT,
	JKS_UNDERSCORE,
	JKS_GRAVE_ACCENT,
	JKS_CURLY_BRACKET_LEFT,    
	JKS_VERTICAL_BAR,  
	JKS_CURLY_BRACKET_RIGHT,
	JKS_TILDE,

	JKS_DELETE,
	JKS_INSERT,
	JKS_HOME,
	JKS_END,
	JKS_PAGE_UP,
	JKS_PAGE_DOWN,
	JKS_PRINT,
	JKS_PAUSE,

	JKS_CURSOR_LEFT,
	JKS_CURSOR_RIGHT,
	JKS_CURSOR_UP,
	JKS_CURSOR_DOWN,

	JKS_CURSOR_LEFT_UP,
	JKS_CURSOR_LEFT_DOWN,  
	JKS_CURSOR_UP_RIGHT,
	JKS_CURSOR_DOWN_RIGHT,

	JKS_RED,
	JKS_GREEN,
	JKS_YELLOW,
	JKS_BLUE,

	JKS_F1, 
	JKS_F2,
	JKS_F3,
	JKS_F4,
	JKS_F5,
	JKS_F6,          
	JKS_F7,        
	JKS_F8,      
	JKS_F9,    
	JKS_F10,  
	JKS_F11,
	JKS_F12,

	JKS_SHIFT,
	JKS_CONTROL,    
	JKS_ALT,  
	JKS_ALTGR,
	JKS_META,
	JKS_SUPER,
	JKS_HYPER,

	JKS_POWER,
	JKS_MENU,
	JKS_FILE,
	JKS_INFO,
	JKS_BACK,
	JKS_GUIDE,

	JKS_CHANNEL_UP,
	JKS_CHANNEL_DOWN,

	JKS_VOLUME_UP,
	JKS_VOLUME_DOWN,

	JKS_PLAY,
	JKS_STOP,
	JKS_EJECT,
	JKS_REWIND,
	JKS_RECORD,
};

/**
 * \brief
 *
 * \author Jeff Ferr
 */
class KeyEvent : public jcommon::EventObject{

	private:
		int _code;
		jkeyevent_symbol_t _symbol;
		jkeyevent_type_t _type;
		jkeyevent_modifiers_t _mod;

	public:
		/**
		 * \brief
		 *
		 */
		KeyEvent(void *source, jkeyevent_type_t type, jkeyevent_modifiers_t mod, int code, jkeyevent_symbol_t symbol);
		
		/**
		 * \brief
		 *
		 */
		virtual ~KeyEvent();

		/**
		 * \brief
		 *
		 */
		virtual int GetKeyCode();
		
		/**
		 * \brief
		 *
		 */
		virtual jkeyevent_symbol_t GetSymbol();
		
		/**
		 * \brief
		 *
		 */
		virtual jkeyevent_type_t GetType();
		
		/**
		 * \brief
		 *
		 */
		virtual jkeyevent_modifiers_t GetModifiers();

};

}

#endif