136 lines
5.1 KiB
Python
Executable File
136 lines
5.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Fenrir TTY screen reader
|
|
# By Chrys, Storm Dragon, and contributers.
|
|
|
|
from fenrirscreenreader.core import debug
|
|
from fenrirscreenreader.core.i18n import _
|
|
|
|
|
|
class HelpManager():
|
|
def __init__(self):
|
|
self.helpDict = {}
|
|
self.tutorialListIndex = None
|
|
|
|
def initialize(self, environment):
|
|
self.env = environment
|
|
|
|
def shutdown(self):
|
|
pass
|
|
|
|
def toggle_tutorial_mode(self):
|
|
self.set_tutorial_mode(not self.env['general']['tutorialMode'])
|
|
|
|
def set_tutorial_mode(self, newTutorialMode):
|
|
if self.env['runtime']['VmenuManager'].get_active():
|
|
return
|
|
self.env['general']['tutorialMode'] = newTutorialMode
|
|
if newTutorialMode:
|
|
self.create_help_dict()
|
|
self.env['bindings'][str([1, ['KEY_ESC']])
|
|
] = 'TOGGLE_TUTORIAL_MODE'
|
|
self.env['bindings'][str([1, ['KEY_UP']])] = 'PREV_HELP'
|
|
self.env['bindings'][str([1, ['KEY_DOWN']])] = 'NEXT_HELP'
|
|
self.env['bindings'][str([1, ['KEY_SPACE']])] = 'CURR_HELP'
|
|
else:
|
|
try:
|
|
self.env['bindings'] = self.env['runtime']['SettingsManager'].get_binding_backup(
|
|
)
|
|
except Exception as e:
|
|
self.env['runtime']['DebugManager'].write_debug_out(
|
|
'HelpManager set_tutorial_mode: Error restoring binding backup: ' + str(e),
|
|
debug.DebugLevel.ERROR)
|
|
|
|
def is_tutorial_mode(self):
|
|
return self.env['general']['tutorialMode']
|
|
|
|
def get_formatted_shortcut_for_command(self, command):
|
|
shortcut = []
|
|
raw_shortcut = []
|
|
try:
|
|
raw_shortcut = list(self.env['bindings'].keys())[
|
|
list(self.env['bindings'].values()).index(command)]
|
|
raw_shortcut = self.env['rawBindings'][raw_shortcut]
|
|
# prefer numbers for multitap
|
|
if raw_shortcut[0] in range(2, 9):
|
|
formatted_key = str(raw_shortcut[0]) + ' times '
|
|
shortcut.append(formatted_key)
|
|
# prefer metha keys
|
|
for k in [
|
|
'KEY_FENRIR',
|
|
'KEY_SCRIPT',
|
|
'KEY_CTRL',
|
|
'KEY_SHIFT',
|
|
'KEY_ALT',
|
|
'KEY_META']:
|
|
if k in raw_shortcut[1]:
|
|
formatted_key = k
|
|
formatted_key = formatted_key.lower()
|
|
formatted_key = formatted_key.replace('key_kp', ' keypad ')
|
|
formatted_key = formatted_key.replace('key_', ' ')
|
|
shortcut.append(formatted_key)
|
|
raw_shortcut[1].remove(k)
|
|
# handle other keys
|
|
for k in raw_shortcut[1]:
|
|
formatted_key = k
|
|
formatted_key = formatted_key.lower()
|
|
formatted_key = formatted_key.replace('key_kp', ' keypad ')
|
|
formatted_key = formatted_key.replace('key_', ' ')
|
|
shortcut.append(formatted_key)
|
|
except Exception as e:
|
|
return ''
|
|
shortcut = str(shortcut)
|
|
shortcut = shortcut.replace('[', '')
|
|
shortcut = shortcut.replace(']', '')
|
|
shortcut = shortcut.replace("'", '')
|
|
return shortcut
|
|
|
|
def get_command_help_text(self, command, section='commands'):
|
|
command_name = command.lower()
|
|
command_name = command_name.split('__-__')[0]
|
|
command_name = command_name.replace('_', ' ')
|
|
command_name = command_name.replace('_', ' ')
|
|
if command == 'TOGGLE_TUTORIAL_MODE':
|
|
command_description = _('toggles the tutorial mode')
|
|
else:
|
|
command_description = self.env['runtime']['CommandManager'].get_command_description(
|
|
command, section='commands')
|
|
if command_description == '':
|
|
command_description = 'no Description available'
|
|
command_shortcut = self.get_formatted_shortcut_for_command(command)
|
|
if command_shortcut == '':
|
|
command_shortcut = 'unbound'
|
|
helptext = command_name + ', Shortcut ' + \
|
|
command_shortcut + ', Description ' + command_description
|
|
return helptext
|
|
|
|
def create_help_dict(self, section='commands'):
|
|
self.helpDict = {}
|
|
for command in sorted(self.env['commands'][section].keys()):
|
|
self.helpDict[len(self.helpDict)] = self.get_command_help_text(
|
|
command, section)
|
|
if len(self.helpDict) > 0:
|
|
self.tutorialListIndex = 0
|
|
else:
|
|
self.tutorialListIndex = None
|
|
|
|
def get_help_for_current_index(self):
|
|
if self.tutorialListIndex is None:
|
|
return ''
|
|
return self.helpDict[self.tutorialListIndex]
|
|
|
|
def next_index(self):
|
|
if self.tutorialListIndex is None:
|
|
return
|
|
self.tutorialListIndex += 1
|
|
if self.tutorialListIndex >= len(self.helpDict):
|
|
self.tutorialListIndex = 0
|
|
|
|
def prev_index(self):
|
|
if self.tutorialListIndex is None:
|
|
return
|
|
self.tutorialListIndex -= 1
|
|
if self.tutorialListIndex < 0:
|
|
self.tutorialListIndex = len(self.helpDict) - 1
|