Beispiel #1
0
bool KeyMappings::apply(int keycode, int keymask, bool isPress)
{
	CodeMaps* map;
	m_isMapped = false;

	if(m_keymaps.contains(keycode)){
		map = m_keymaps[keycode];
		if(map->contains(keymask)){
			m_isMapped = true;
			m_keyinfo = (*map)[keymask];
		} else {
			int mask = -1;
			for(CodeMaps::Iterator it=map->begin();
					it!=map->end(); ++it){
				if((keymask & it.key()) == it.key()
					&& it.key() > mask){
					mask = it.key();
				}
			}
			if(mask != -1){
				m_isMapped = true;
				m_keyinfo = (*map)[mask];
			}
		}
	}
	if(m_isMapped == false){
		m_keyinfo = MapInfo(keycode);
	}
#if 1
	if(isPress){
		if(m_keyinfo.keycode == Qt::Key_CapsLock){
			m_capslock = !m_capslock;
		}
	}
#endif
	return(m_isMapped);
}
Beispiel #2
0
bool KeyMappings::apply(int unicode, int keycode, int modifiers,
	int keymask, bool isPress)
{
	CodeMaps* map;
	m_isMapped = false;

	if(m_keymaps.contains(keycode)){
		map = m_keymaps[keycode];
		if(map->contains(keymask)){
			m_isMapped = true;
			m_keyinfo = (*map)[keymask];
		} else {
			int mask = -1;
			for(CodeMaps::Iterator it=map->begin();
					it!=map->end(); ++it){
				if((keymask & it.key()) == it.key()
					&& it.key() > mask){
					mask = it.key();
				}
			}
			if(mask != -1){
				m_isMapped = true;
				m_keyinfo = (*map)[mask];
			}
		}
	}

	if(m_isMapped == false){
		QWSServer::KeyMap* cache = g_mapCache[keycode];
		if(cache == NULL){
			cache = new QWSServer::KeyMap();
			g_mapCache.insert(keycode, cache);
			cache->unicode = cache->shift_unicode = cache->ctrl_unicode = 0;
		}
		if(cache->unicode == 0 || cache->shift_unicode == 0 || cache->ctrl_unicode == 0){
			QChar ch(unicode);
			if(modifiers & Qt::ControlButton){
				cache->ctrl_unicode = unicode;
			} else if(modifiers & Qt::ShiftButton){
				cache->shift_unicode = ch.upper().unicode();
			} else {
				cache->unicode = ch.lower().unicode();
			}
		}
		m_keyinfo = MapInfo(keycode, 0,
			cache->unicode, cache->shift_unicode, cache->ctrl_unicode);
		if(m_keyinfo.isDefined){
			setOriginal(unicode, modifiers);
		} else {
			setUnicode(unicode);
		}
	}

#if 1
	if(isPress){
		if(m_keyinfo.keycode == Qt::Key_CapsLock){
			m_capslock = !m_capslock;
		}
	}
#endif
	return(m_isMapped);
}
Beispiel #3
0
void main( int argc, const char *argv[] ) {
	exit( TRUE == MapInfo( argc, argv, cin, cout, cerr ) ? 0 : 1 );
}