def python_sidebar(python_input): """ Create the `Layout` for the sidebar with the configurable options. """ def get_tokens(cli): tokens = [] T = Token.Sidebar def append_category(category): tokens.extend([ (T, ' '), (T.Title, ' %-36s' % category.title), (T, '\n'), ]) def append(selected, label, status): token = T.Selected if selected else T tokens.append((T, ' >' if selected else ' ')) tokens.append((token.Label, '%-24s' % label)) tokens.append((token.Status, ' ')) tokens.append((token.Status, '%s' % status)) if selected: tokens.append((Token.SetCursorPosition, '')) tokens.append((token.Status, ' ' * (14 - len(status)))) tokens.append((T, '<' if selected else '')) tokens.append((T, '\n')) i = 0 for category in python_input.options: append_category(category) for option in category.options: append(i == python_input.selected_option_index, option.title, '%s' % option.get_current_value()) i += 1 tokens.pop() # Remove last newline. return tokens class Control(TokenListControl): def move_cursor_down(self, cli): python_input.selected_option_index += 1 def move_cursor_up(self, cli): python_input.selected_option_index -= 1 return ConditionalContainer( content=Window( Control(get_tokens, Char(token=Token.Sidebar), has_focus=ShowSidebar(python_input) & ~IsDone()), width=LayoutDimension.exact(43), height=LayoutDimension(min=3), scroll_offsets=ScrollOffsets(top=1, bottom=1)), filter=ShowSidebar(python_input) & ~IsDone())
def python_sidebar_help(python_input): """ Create the `Layout` for the help text for the current item in the sidebar. """ token = Token.Sidebar.HelpText def get_current_description(): """ Return the description of the selected option. """ i = 0 for category in python_input.options: for option in category.options: if i == python_input.selected_option_index: return option.description i += 1 return '' def get_tokens(cli): return [(token, get_current_description())] return ConditionalContainer( content=Window( TokenListControl(get_tokens, Char(token=token)), height=LayoutDimension(min=3)), filter=ShowSidebar(python_input) & Condition(lambda cli: python_input.show_sidebar_help) & ~IsDone())
def python_sidebar_navigation(python_input): """ Create the `Layout` showing the navigation information for the sidebar. """ def get_tokens(cli): tokens = [] T = Token.Sidebar # Show navigation info. tokens.extend([ (T.Separator , ' ' * 43 + '\n'), (T, ' '), (T.Key, '[Arrows]'), (T, ' '), (T.Key.Description, 'Navigate'), (T, ' '), (T.Key, '[Enter]'), (T, ' '), (T.Key.Description, 'Hide menu'), ]) return tokens return ConditionalContainer( content=Window( TokenListControl(get_tokens, Char(token=Token.Sidebar)), width=LayoutDimension.exact(43), height=LayoutDimension.exact(2)), filter=ShowSidebar(python_input) & ~IsDone())
def __init__(self, settings, key_bindings_manager): super(PythonSidebar, self).__init__(PythonSidebarControl(settings, key_bindings_manager), width=LayoutDimension.exact(34), filter=ShowSidebar(settings) & ~IsDone())