Qt to CEGUI Key and Mouse Mapping

From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
Revision as of 11:22, 28 February 2011 by Capek (Talk | contribs) (Lets use <source> instead of <syntaxhighlight>, it is much less typo-prone)

Jump to: navigation, search
uint GLWidget::convertQtToCEGUIKey (int key, Qt::KeyboardModifiers modifiers)
{
	if (modifiers & Qt::KeypadModifier)
	{
		switch (key)
		{
			case Qt::Key_Minus:	return CEGUI::Key::Subtract;
			case Qt::Key_Period:	return CEGUI::Key::Decimal;
			case Qt::Key_Slash:	return CEGUI::Key::Divide;
			case Qt::Key_Enter:	return CEGUI::Key::NumpadEnter;		
			case Qt::Key_0:		return CEGUI::Key::Numpad0;
			case Qt::Key_1:		return CEGUI::Key::Numpad1;
			case Qt::Key_2:		return CEGUI::Key::Numpad2;
			case Qt::Key_3:		return CEGUI::Key::Numpad3;
			case Qt::Key_4:		return CEGUI::Key::Numpad4;
			case Qt::Key_5:		return CEGUI::Key::Numpad5;
			case Qt::Key_6:		return CEGUI::Key::Numpad6;
			case Qt::Key_7:		return CEGUI::Key::Numpad7;
			case Qt::Key_8:		return CEGUI::Key::Numpad8;
			case Qt::Key_9:		return CEGUI::Key::Numpad9;
			case Qt::Key_Asterisk:	return CEGUI::Key::Multiply;
			case Qt::Key_Plus:	return CEGUI::Key::Add;
			case Qt::Key_Equal:	return CEGUI::Key::NumpadEquals;
		}
	}
	else
	{
		switch (key)
		{
			case Qt::Key_At:		return CEGUI::Key::At;
			case Qt::Key_Backspace: 	return CEGUI::Key::Backspace;
			case Qt::Key_Tab:		return CEGUI::Key::Tab;
			case Qt::Key_Pause:		return CEGUI::Key::Pause;
			case Qt::Key_Escape:		return CEGUI::Key::Escape;
			case Qt::Key_Space:		return CEGUI::Key::Space;
			case Qt::Key_Comma:		return CEGUI::Key::Comma;
			case Qt::Key_QuoteLeft:		return CEGUI::Key::Apostrophe;
			case Qt::Key_Minus:		return CEGUI::Key::Minus;
			case Qt::Key_Period:		return CEGUI::Key::Period;
			case Qt::Key_Slash:		return CEGUI::Key::Slash;
			case Qt::Key_Return:		return CEGUI::Key::Return;
			case Qt::Key_0:			return CEGUI::Key::Zero;
			case Qt::Key_1:			return CEGUI::Key::One;
			case Qt::Key_2:			return CEGUI::Key::Two;
			case Qt::Key_3:			return CEGUI::Key::Three;
			case Qt::Key_4:			return CEGUI::Key::Four;
			case Qt::Key_5:			return CEGUI::Key::Five;
			case Qt::Key_6:			return CEGUI::Key::Six;
			case Qt::Key_7:			return CEGUI::Key::Seven;
			case Qt::Key_8:			return CEGUI::Key::Eight;
			case Qt::Key_9:			return CEGUI::Key::Nine;
			case Qt::Key_Colon:		return CEGUI::Key::Colon;
			case Qt::Key_Semicolon:		return CEGUI::Key::Semicolon;
			case Qt::Key_Equal:		return CEGUI::Key::Equals;
			case Qt::Key_BracketLeft:	return CEGUI::Key::LeftBracket;
			case Qt::Key_Backslash:		return CEGUI::Key::Backslash;
			case Qt::Key_BracketRight:	return CEGUI::Key::RightBracket;
			case Qt::Key_A:			return CEGUI::Key::A;
			case Qt::Key_B:			return CEGUI::Key::B;
			case Qt::Key_C:			return CEGUI::Key::C;
			case Qt::Key_D:			return CEGUI::Key::D;
			case Qt::Key_E:			return CEGUI::Key::E;
			case Qt::Key_F:			return CEGUI::Key::F;
			case Qt::Key_G:			return CEGUI::Key::G;
			case Qt::Key_H:			return CEGUI::Key::H;
			case Qt::Key_I:			return CEGUI::Key::I;
			case Qt::Key_J:			return CEGUI::Key::J;
			case Qt::Key_K:			return CEGUI::Key::K;
			case Qt::Key_L:			return CEGUI::Key::L;
			case Qt::Key_M:			return CEGUI::Key::M;
			case Qt::Key_N:			return CEGUI::Key::N;
			case Qt::Key_O:			return CEGUI::Key::O;
			case Qt::Key_P:			return CEGUI::Key::P;
			case Qt::Key_Q:			return CEGUI::Key::Q;
			case Qt::Key_R:			return CEGUI::Key::R;
			case Qt::Key_S:			return CEGUI::Key::S;
			case Qt::Key_T:			return CEGUI::Key::T;
			case Qt::Key_U:			return CEGUI::Key::U;
			case Qt::Key_V:			return CEGUI::Key::V;
			case Qt::Key_W:			return CEGUI::Key::W;
			case Qt::Key_X:			return CEGUI::Key::X;
			case Qt::Key_Y:			return CEGUI::Key::Y;
			case Qt::Key_Z:			return CEGUI::Key::Z;
			case Qt::Key_Delete:		return CEGUI::Key::Delete;
			case Qt::Key_Up:		return CEGUI::Key::ArrowUp;
			case Qt::Key_Down:		return CEGUI::Key::ArrowDown;
			case Qt::Key_Right:		return CEGUI::Key::ArrowRight;
			case Qt::Key_Left:		return CEGUI::Key::ArrowLeft;
			case Qt::Key_Insert:		return CEGUI::Key::Insert;
			case Qt::Key_Home:		return CEGUI::Key::Home;
			case Qt::Key_End:		return CEGUI::Key::End;
			case Qt::Key_PageUp:		return CEGUI::Key::PageUp;
			case Qt::Key_PageDown:		return CEGUI::Key::PageDown;
			case Qt::Key_F1:		return CEGUI::Key::F1;
			case Qt::Key_F2:		return CEGUI::Key::F2;
			case Qt::Key_F3:		return CEGUI::Key::F3;
			case Qt::Key_F4:		return CEGUI::Key::F4;
			case Qt::Key_F5:		return CEGUI::Key::F5;
			case Qt::Key_F6:		return CEGUI::Key::F6;
			case Qt::Key_F7:		return CEGUI::Key::F7;
			case Qt::Key_F8:		return CEGUI::Key::F8;
			case Qt::Key_F9:		return CEGUI::Key::F9;
			case Qt::Key_F10:		return CEGUI::Key::F10;
			case Qt::Key_F11:		return CEGUI::Key::F11;
			case Qt::Key_F12:		return CEGUI::Key::F12;
			case Qt::Key_F13:		return CEGUI::Key::F13;
			case Qt::Key_F14:		return CEGUI::Key::F14;
			case Qt::Key_F15:		return CEGUI::Key::F15;
			case Qt::Key_NumLock:		return CEGUI::Key::NumLock;
			case Qt::Key_ScrollLock:	return CEGUI::Key::ScrollLock;
			case Qt::Key_Shift:		return CEGUI::Key::RightShift;
			case Qt::Key_Control:		return CEGUI::Key::RightControl;
			case Qt::Key_Alt:		return CEGUI::Key::RightAlt;
			case Qt::Key_Meta:		return CEGUI::Key::LeftWindows;
			case Qt::Key_SysReq:		return CEGUI::Key::SysRq;
			case Qt::Key_Menu:		return CEGUI::Key::AppMenu;
		}
	}
	return 0;
}
 
CEGUI::MouseButton GLWidget::convertQtToCEGUIMouseButton (Qt::MouseButton button)
{
	switch (button)
	{
		case Qt::LeftButton:	return CEGUI::LeftButton;
		case Qt::RightButton:	return CEGUI::RightButton;
		case Qt::MidButton:	return CEGUI::MiddleButton;
		case Qt::XButton1:	return CEGUI::X1Button;
		case Qt::XButton2:	return CEGUI::X2Button;
		default:		return CEGUI::NoButton;
	}
}

These functions can be used in key and mouse event handlers to inject events to CEGUI::System:

void GLWidget::keyPressEvent (QKeyEvent* event)
{
	bool processed = (event->text ().size () == 1) && CEGUI::System::getSingleton ().injectChar (event->text ().at (0).unicode ());
	if (!processed)
		processed = processed || CEGUI::System::getSingleton ().injectKeyDown (convertQtToCEGUIKey (event->key (), event->modifiers ()));
}
 
void GLWidget::mousePressEvent (QMouseEvent* event)
{
	CEGUI::System::getSingleton ().injectMouseButtonDown (convertQtToCEGUIMouseButton (event->button ()));
}