fenrir/src/fenrir-package/core/inputManager.py

151 lines
6.3 KiB
Python
Raw Normal View History

#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
2016-08-11 14:37:46 +02:00
import time
from core import debug
2016-09-17 23:38:40 +02:00
from core import inputEvent
2016-07-07 21:40:10 +02:00
class inputManager():
def __init__(self):
pass
def initialize(self, environment):
self.env = environment
self.env['runtime']['settingsManager'].loadDriver(\
self.env['runtime']['settingsManager'].getSetting('keyboard', 'driver'), 'inputDriver')
2016-09-18 13:13:58 +02:00
# init LEDs with current state
self.env['input']['newNumLock'] = self.env['runtime']['inputDriver'].getNumlock()
self.env['input']['oldNumLock'] = self.env['input']['newNumLock']
self.env['input']['newCapsLock'] = self.env['runtime']['inputDriver'].getCapslock()
self.env['input']['oldCapsLock'] = self.env['input']['newCapsLock']
self.env['input']['newScrollLock'] = self.env['runtime']['inputDriver'].getScrollLock()
self.env['input']['oldScrollLock'] = self.env['input']['newScrollLock']
self.grabDevices()
def shutdown(self):
self.env['runtime']['inputManager'].releaseDevices()
self.env['runtime']['settingsManager'].shutdownDriver('inputDriver')
2016-09-21 18:07:28 +02:00
def getInputEvent(self):
2016-09-21 18:07:28 +02:00
eventReceived = False
mEvent = self.env['runtime']['inputDriver'].getInputEvent()
2016-09-18 15:13:24 +02:00
if mEvent:
mEvent['EventName'] = self.convertEventName(mEvent['EventName'])
2016-09-21 10:00:45 +02:00
eventReceived = True
2016-09-17 23:38:40 +02:00
if mEvent['EventState'] == 0:
if mEvent['EventName'] in self.env['input']['currInput']:
self.env['input']['currInput'].remove(mEvent['EventName'])
2016-09-27 16:29:12 +02:00
if len(self.env['input']['currInput']) > 1:
self.env['input']['currInput'] = sorted(self.env['input']['currInput'])
if len(self.env['input']['currInput']) == 0:
self.env['input']['prevDeepestInput'] = []
2016-09-17 23:38:40 +02:00
elif mEvent['EventState'] == 1:
if not mEvent['EventName'] in self.env['input']['currInput']:
self.env['input']['currInput'].append(mEvent['EventName'])
2016-09-27 16:29:12 +02:00
if len(self.env['input']['currInput']) > 1:
self.env['input']['currInput'] = sorted(self.env['input']['currInput'])
if len(self.env['input']['prevDeepestInput']) < len(self.env['input']['currInput']):
self.env['input']['prevDeepestInput'] = self.env['input']['currInput'].copy()
2016-09-17 23:38:40 +02:00
elif mEvent['EventState'] == 2:
pass
else:
pass
self.env['input']['oldNumLock'] = self.env['input']['newNumLock']
self.env['input']['newNumLock'] = self.env['runtime']['inputDriver'].getNumlock()
self.env['input']['oldCapsLock'] = self.env['input']['newCapsLock']
self.env['input']['newCapsLock'] = self.env['runtime']['inputDriver'].getCapslock()
self.env['input']['oldScrollLock'] = self.env['input']['newScrollLock']
self.env['input']['newScrollLock'] = self.env['runtime']['inputDriver'].getScrollLock()
self.env['input']['lastInputTime'] = time.time()
self.env['input']['shortcutRepeat'] = 1
2016-09-21 10:00:45 +02:00
return eventReceived
2016-09-12 23:29:16 +02:00
def grabDevices(self):
if self.env['runtime']['settingsManager'].getSettingAsBool('keyboard', 'grabDevices'):
self.env['runtime']['inputDriver'].grabDevices()
def releaseDevices(self):
self.env['runtime']['inputDriver'].releaseDevices()
2016-09-21 09:56:59 +02:00
def convertEventName(self, eventName):
2016-09-21 18:07:28 +02:00
if not eventName:
return ''
2016-09-27 16:15:26 +02:00
if eventName == '':
return ''
eventName = eventName.upper()
2016-09-21 09:56:59 +02:00
if eventName == 'KEY_LEFTCTRL':
2016-09-25 16:09:17 +02:00
eventName = 'KEY_CTRL'
2016-09-21 09:56:59 +02:00
elif eventName == 'KEY_RIGHTCTRL':
eventName = 'KEY_CTRL'
elif eventName == 'KEY_LEFTSHIFT':
eventName = 'KEY_SHIFT'
elif eventName == 'KEY_RIGHTSHIFT':
eventName = 'KEY_SHIFT'
elif eventName == 'KEY_LEFTALT':
eventName = 'KEY_ALT'
elif eventName == 'KEY_RIGHTALT':
eventName = 'KEY_ALT'
2016-09-25 16:09:17 +02:00
elif eventName == 'KEY_LEFTMETA':
eventName = 'KEY_META'
elif eventName == 'KEY_RIGHTMETA':
eventName = 'KEY_META'
if self.isFenrirKey(eventName):
2016-09-21 18:07:28 +02:00
eventName = 'KEY_FENRIR'
return eventName
def isConsumeInput(self):
return self.env['runtime']['commandManager'].isCommandQueued() and \
not self.env['input']['keyForeward']
2016-09-21 18:07:28 +02:00
#and
# not (self.env['input']['keyForeward'] or \
# self.env['runtime']['settingsManager'].getSettingAsBool(, 'keyboard', 'grabDevices'))
2016-09-18 15:13:24 +02:00
def clearEventBuffer(self):
self.env['runtime']['inputDriver'].clearEventBuffer()
def writeEventBuffer(self):
2016-08-31 13:27:04 +02:00
try:
self.env['runtime']['inputDriver'].writeEventBuffer()
2016-09-25 22:14:35 +02:00
time.sleep(0.0005)
2016-09-25 16:09:17 +02:00
self.clearEventBuffer()
2016-09-02 18:08:44 +02:00
except Exception as e:
2016-09-18 15:13:24 +02:00
print(e)
self.env['runtime']['debug'].writeDebugOut("Error while writeUInput",debug.debugLevel.ERROR)
self.env['runtime']['debug'].writeDebugOut(str(e),debug.debugLevel.ERROR)
2016-09-21 18:07:28 +02:00
def isFenrirKeyPressed(self):
return 'KEY_FENRIR' in self.env['input']['currInput']
2016-09-12 23:29:16 +02:00
def noKeyPressed(self):
return self.env['input']['currInput'] == []
def getPrevDeepestInput(self):
2016-09-17 01:59:38 +02:00
shortcut = []
shortcut.append(self.env['input']['shortcutRepeat'])
2016-09-25 22:36:16 +02:00
shortcut.append(self.env['input']['prevDeepestInput'])
2016-09-17 01:59:38 +02:00
def getPrevShortcut(self):
2016-09-17 01:59:38 +02:00
shortcut = []
shortcut.append(self.env['input']['shortcutRepeat'])
2016-09-25 22:36:16 +02:00
shortcut.append(self.env['input']['prevInput'])
2016-09-17 23:38:40 +02:00
return str(shortcut)
2016-09-17 01:59:38 +02:00
def getCurrShortcut(self):
2016-09-17 01:59:38 +02:00
shortcut = []
shortcut.append(self.env['input']['shortcutRepeat'])
2016-09-25 22:36:16 +02:00
shortcut.append(self.env['input']['currInput'])
2016-09-17 23:38:40 +02:00
return str(shortcut)
def isFenrirKey(self, eventName):
return eventName in self.env['input']['fenrirKey']
def getCommandForShortcut(self, shortcut):
if not self.shortcutExists(shortcut):
return ''
2016-09-27 16:13:32 +02:00
return self.env['bindings'][shortcut]
def shortcutExists(self, shortcut):
2016-09-27 16:13:32 +02:00
return(shortcut in self.env['bindings'])