#!/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