def __init__(self, app, error=None, cb=None): self.app = app self.error = error self.cb = cb self.config = self.app.config self.field_labels = self._build_field_labels() self.fields = self._build_fields() self.buttons = self._build_buttons() self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) self.tab_order = [ 'email', 'password', 'twofa', 'login', 'quit', ] self.focus_by_fields = { 'email': ('body', 0), 'password': ('body', 2), 'twofa': ('body', 4), 'login': ('footer', 3), 'quit': ('footer', 1), } super().__init__(self.frame)
def __init__(self, parser, encoding): self.loop = None self.parser = parser self.panel_focus = 1 self.show_ladder = False self.search = { 'phone': '', 'chan': '', 'call_id': '', } self.sidebar = Sidebar(sorted(self.parser.get_phone_set())) connect_signal(self.sidebar, 'select', self.on_result_selected) connect_signal(self.sidebar, 'search', self.on_search) self.log_display = LogDisplay(parser, encoding) self.cols = Columns([ ('fixed', 20, self.sidebar), ('fixed', 1, Filler(Divider(), 'top')), ('weight', 1, self.log_display), ]) self.footer = Text('') self.set_footer_text() self.frame = Frame(self.cols, footer=AttrWrap(self.footer, 'bar'))
def __init__(self, schema, cb): self.input_items = schema self.cb = cb self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) self.buttons_selected = False super().__init__(self.frame)
def create_interface(self): self.screen = Screen() self.screen.start() self.screen.register_palette([ ("title", "white", "dark blue", "standout"), ("line", "light gray", "black"), ("help", "white", "dark blue")] ) self.body = ListBox(SimpleListWalker([])) self.lines = self.body.body self.title = Text(MAIN_TITLE) self.header = AttrWrap(self.title, "title") self.help = AttrWrap( Text(HELP_STRINGS["main"]), "help" ) self.input = Edit(caption="%s> " % self.ircchannel) self.footer = Pile([self.help, self.input]) self.top = Frame(self.body, self.header, self.footer)
def __init__(self, application, controller): """ application: a Service instance representing a juju application controller: a DeployGUIController instance """ self.controller = controller self.application = application self.header = "Architecture" # Shadow means temporary to the view, they are committed to # the controller if the user chooses OK # {machine_id : [(app, assignmenttype) ...] self.shadow_assignments = defaultdict(list) for machine_id, al in self.controller.assignments.items(): for (a, at) in al: if a == self.application: self.shadow_assignments[machine_id].append((a, at)) # {juju_machine_id : maas machine id} self.shadow_pins = copy.copy(controller.maas_machine_map) self.machine_pin_view = None self._machines = copy.deepcopy(app.metadata_controller.bundle.machines) self.alarm = None self.widgets = self.build_widgets() self.description_w = Text("") self.buttons_selected = False self.frame = Frame(body=self.build_widgets(), footer=self.build_footer()) super().__init__(self.frame) self.update()
def __init__(self, list_data=None): self.is_editing = False self.tasks = [] self.name = None self.group = None self.id = None if list_data: # Parse the data. self.parse_data(list_data) else: # Must be a new list self.name = 'untitled' self.group = 'none' self.id = uuid.uuid4().hex # AttrSpecs self.attr_spec = AttrSpec('', '') self.focus_nav = AttrSpec('h12', '') self.focus_ins = AttrSpec('h160', '') # Build widget stack self.title = TitleBar(self.name) self.group_foot = GroupFoot(self.group) self.body = urwid.SimpleFocusListWalker(self.tasks) self.list_box = ListBox(self.body) self.list_frame = Frame(self.list_box, header=self.title, footer=self.group_foot) self.line_box = LineBox(self.list_frame) self.line_attr = AttrMap(self.line_box, self.attr_spec, self.focus_nav) super().__init__(self.line_attr)
def __init__(self): self.header = Header("") self.body = Body() self.footer = Footer("", 0, 1) self.frame = Frame(self.body, header=self.header, footer=self.footer) self.progress_current = 0 self.progress_completion = 0 super().__init__(Color.body(self.frame))
def __init__(self, choice_callback=None, command_callback=None, help_callback=None): self.palette = [ ('brick', 'light red', 'black'), ('rubble', 'yellow', 'black'), ('wood', 'light green', 'black'), ('concrete', 'white', 'black'), ('stone', 'light cyan', 'black'), ('marble', 'light magenta', 'black'), ('jack', 'dark gray', 'white'), ('msg_info', 'white', 'black'), ('msg_err', 'light red', 'black'), ('msg_debug', 'light green', 'black'), ] self.choice_callback = choice_callback self.command_callback = command_callback self.help_callback = help_callback self.screen = None self.loop = None self.called_loop_stop = False self.reactor_stop_fired = False self.quit_flag = False self.edit_msg = "Make selection ('q' to quit): " self.roll_list = SimpleListWalker([]) self.game_log_list = SimpleListWalker([]) self.choices_list = SimpleListWalker([]) self.state_text = SimpleListWalker([Text('Connecting...')]) self.edit_widget = Edit(self.edit_msg) self.roll = ListBox(self.roll_list) self.game_log = ListBox(self.game_log_list) self.choices = ListBox(self.choices_list) self.state = ListBox(self.state_text) self.left_frame = Pile([ LineBox(self.state), (13, LineBox(self.choices)), ]) self.right_frame = Pile([LineBox(self.game_log), LineBox(self.roll)]) self.state.set_focus(len(self.state_text) - 1) self.columns = Columns([('weight', 0.75, self.left_frame), ('weight', 0.25, self.right_frame)]) self.frame_widget = Frame(footer=self.edit_widget, body=self.columns, focus_part='footer') self.exc_info = None
def __init__(self): _check_encoding() # Make sure terminal supports utf8 header = Header() body = Banner() footer = StatusBar('') self.frame = Frame(body, header=header, footer=footer) super().__init__(self.frame)
def __init__(self, app, clouds, cb): self.app = app self.cb = cb self.clouds = clouds self.config = self.app.config self.buttons_pile_selected = False self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) super().__init__(self.frame)
def start(config): """Start the application and handle user input. Blocks until the application exits.""" def item_chosen(button, server): global choice choice = server response = Text( [u'Connecting to: ', server.connection_string(), u'\n']) done = Button(u'Ok') urwid.connect_signal(done, 'click', exit_program) main.original_widget = Filler( Pile([response, AttrMap(done, None, focus_map='reversed')])) def exit_program(button): raise urwid.ExitMainLoop() def unhandled(key): vim_map = {'h': 'left', 'j': 'down', 'k': 'up', 'l': 'right'} if key in vim_map.keys(): list_box.keypress((0, 1), vim_map[key]) elif key in ['left', 'right']: pass elif key in ['esc', 'q']: raise ExitMainLoop() body = [urwid.Text(u'\nServers'), Divider(u'-')] for server in config.get_servers(): button = Button(server.name) urwid.connect_signal(button, 'click', item_chosen, server) body.append(AttrMap(button, None, focus_map='reversed')) list_box = ListBox(urwid.SimpleFocusListWalker(body)) main = Padding(list_box, left=2, right=2) overlay = Overlay(main, SolidFill(u'\N{MEDIUM SHADE}'), align='center', width=('relative', 60), valign='middle', height=('relative', 60), min_width=20, min_height=9) header = AttrMap(Text(u' ssh-menu'), 'header') footer = AttrMap(Text(u'this is the footer'), 'footer') frame = Frame(overlay, header=header, footer=footer) urwid.MainLoop(urwid.AttrMap(frame, 'body'), palette=palette, unhandled_input=unhandled).run() return choice
def __init__(self, body): TUI.root = Frame(body.root, Text(("header", ""), "center"), Text(TUI.main_helper_text, "center")) TUI.loop = MainLoop(TUI.root, TUI.palette, unhandled_input=TUI.unhandled_input) TUI.install_signals_handler()
def __init__(self, app, models, cb): self.app = app self.cb = cb self.controllers = models.keys() self.models = models self.config = self.app.config self.buttons_pile_selected = False self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) super().__init__(self.frame)
def build_widgets(self): self.services_column = ServicesColumn(self.display_controller, self.placement_controller, self) self.machines_column = MachinesColumn(self.display_controller, self.placement_controller, self) self.relations_column = RelationsColumn(self.display_controller, self.placement_controller, self, self.metadata_controller) self.charmstore_column = CharmstoreColumn(self.display_controller, self.placement_controller, self, self.metadata_controller) self.options_column = OptionsColumn(self.display_controller, self.placement_controller, self, self.metadata_controller) self.machines_header = self.get_machines_header(self.machines_column) self.relations_header = self.get_relations_header() self.services_header = self.get_services_header() self.charmstore_header = self.get_charmstore_header( self.charmstore_column) self.options_header = self.get_options_header(self.options_column) cs = [self.services_header, self.charmstore_header] self.header_columns = Columns(cs, dividechars=2) self.columns = Columns([self.services_column, self.machines_column], dividechars=2) self.deploy_button = MenuSelectButton("\nCommit\n", on_press=self.do_deploy) self.deploy_button_label = Text("Some charms use default") self.placement_edit_body_pile = Pile([self.columns]) self.placement_edit_body = Filler(Padding( self.placement_edit_body_pile, align='center', width=('relative', 95)), valign='top') self.bundle_graph_text = Text("No graph to display yet.") self.bundle_graph_widget = Padding(self.bundle_graph_text, 'center', 'pack') b = AttrMap(self.deploy_button, 'frame_header', 'button_primary focus') self.footer_grid = GridFlow( [self.deploy_button_label, Padding(b, width=28, align='center')], 28, 1, 1, 'right') f = AttrMap(self.footer_grid, 'frame_footer', 'frame_footer') self.frame = Frame(header=Pile([self.header_columns, HR()]), body=self.placement_edit_body, footer=f) return self.frame
def __init__(self, app, clouds, cb=None): self.app = app self.cb = cb self.clouds = clouds self.blacklist = parse_blacklist() self.whitelist = parse_whitelist() self.config = self.app.config self.buttons_pile_selected = False self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) super().__init__(self.frame)
def __init__(self, back=None): """Create a new instance of this view. :param back: Callback to invoke when the BACK button is selected. If None, the BACK button will be hidden. """ self.back = back self.frame = Frame(body=self._build_body(), footer=self._build_footer()) self.buttons_selected = False super().__init__(self.frame)
def __init__(self, nickname): self.nickname = nickname self.output = ChatMessages(self) self.message = ChatInput(self) self.window = Frame( body=self.output, footer=self.message, focus_part='footer' ) self.main_loop = None self.connection = Connection(self)
def build(model, f, layout): footer = ['meta-', em('q'), 'uit/e', em('x'), 'it/', em('s'), 'ave'] footer += [' [shift]meta-'] for sep, c in enumerate('dwmya'): if sep: footer += ['/'] footer += [em(c)] footer += ['ctivity/', em('t'), 'oday'] active = defaultdict(list) branch = layout(model, f, active) return active, Border( Frame(Filler(branch, valign='top'), footer=Pile([Divider(), Text(footer, align='center')])))
def __init__(self, app, spells, cb): self.app = app self.cb = cb self.spells = spells self.config = self.app.config self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) self.buttons_pile_selected = False super().__init__(self.frame) self.handle_focus_changed()
def __init__(self, body=SolidFill(), header=None, footer=None, focus_part=None, unhandled_input=None, palette=None): self.document = Frame(body, header, footer, focus_part) self.loop = MainLoop( self.document, palette, event_loop=AsyncioEventLoop(loop=asyncio.get_event_loop()), unhandled_input=unhandled_input ) self.loop.screen.set_terminal_properties(colors=256) self.body = body self.footer = footer self.header = header
def __init__(self): self.header = Header("") self.footer = Footer("", 0, 1) self.frame = Frame(ListBox([Text("")]), header=self.header, footer=self.footer) self.progress_current = 0 self.progress_completion = 0 # After the install starts, we want to stop setting the footer # from the body view. self.auto_footer = True super().__init__(Color.body(self.frame))
def __init__(self, tui): self.tui = tui self.header_str = "Q:quit q:previous L:log" self.header = Text(self.header_str) self.body = Pile([]) self.footer = Text("No messages") self.footerpile = Pile([self.footer]) self.frame = Frame(self.body, AttrMap(self.header, 'status'), AttrMap(self.footerpile, 'status'), 'body') urwid.WidgetWrap.__init__(self, self.frame) self.hotkeys = {} ## key:func self.add_hotkey(':', self.start_prompt, 'cmd') self.add_hotkey('u', self.sync, 'sync')
def __init__(self, track=None, clip=None): self.editing = clip or track self.header = Text( 'Editing clip {}'.format(clip.name) if clip else 'Adding new clip to {}'.format(track.name) if track else 'Editor') self.widgets = [EditorWidget(name, label, default) for name, label, default in self.editing.get_fields()] \ if self.editing else [] self.body = ListBox(SimpleFocusListWalker(self.widgets)) WidgetWrap.__init__(self, Frame(self.body, self.header))
def _layout(self): self._wallpaper_count = Text(str(len(self._wpctrl.wallpapers))) self._info = Text("", wrap='clip') self._head = Columns([('pack', self._wallpaper_count), (10, Text("Wallpapers")), self._info], dividechars=1) header = Pile([self._head, AttrMap(Divider("─"), 'divider')]) self._screens = [ScreenWidget(screen, self._scrctrl) for screen in self._scrctrl.screens] body = ListBoxWithTabSupport(self._screens) self._root = Frame(header=header, body=body)
def __init__(self, ui=None, track=None, number=None): self.ui = ui or self.ui self.track = track or self.track self.number = number or self.number self.header = TrackHeader(self.track.name, number) self.clips = SimpleFocusListWalker( [ClipButton(self.ui, c) for c in self.track.clips] + [AddClipButton(self.on_add_button)]) Clip.ON_ADD.append(self.on_clip_added) WidgetWrap.__init__(self, Frame(ListBox(self.clips), header=self.header))
def __init__(self, app, public_clouds, custom_clouds, cb=None): self.app = app self.cb = cb self.public_clouds = public_clouds self.custom_clouds = custom_clouds self.config = self.app.config self.buttons_pile_selected = False self.pile = None self.pile_localhost_idx = None self.frame = Frame(body=Padding.center_80( Filler(self._build_widget(), valign='top')), footer=self._build_footer()) super().__init__(self.frame)
def __init__(self, repository, debug=False): """ :param debug: If True, insert a pane where internal debugging messages will printed. """ self._repository = repository self._header = Header(self._repository) self._body = Filler(Text(''), 'top') self._footer = Footer(self._repository, debug=debug) super(Console, self).__init__(Frame( header=self._header, body=self._body, footer=self._footer, ))
def __init__(self, header=None, body=None, footer=None): self.header = header if header else Header() self.body = body if body else Banner() self.footer = footer if footer else StatusBarWidget() self.frame = Frame(self.body, header=self.header, footer=self.footer) self.services_view = None self.placement_view = None self.controller = None self.machine_wait_view = None self.node_install_wait_view = None self.add_services_dialog = None super().__init__(self.frame)
def __init__(self, app, controller, model, cb): self.app = app self.cb = cb self.controller = controller self.model = model self.config = self.app.config self.buttons_pile_selected = False self.frame = Frame(body=self._build_widget(), footer=self._build_footer()) self.frame.focus_position = 'footer' self.buttons.focus_position = 1 super().__init__(self.frame)
def _build(self, s): self._log.debug('Building diary at %s' % self._date) body, f = [], Factory(TabList()) root_topics = list(self._topics(s)) for topic in root_topics: body.append(self.__display_topic(s, f, topic)) for extra in self._display_pipeline(s, f): body.append(extra) for extra in self._display_gui(s, f): body.append(extra) self._check_body(body) body = Border(Frame(Filler(DividedPile(body), valign='top'), header=Pile([self._header(), Divider()]), footer=Pile([Divider(), Text(self.__footer(), align='center')]))) return body, f.tabs