Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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'))
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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))
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
    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()
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
 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)
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
 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)
Ejemplo n.º 18
0
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')])))
Ejemplo n.º 19
0
    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()
Ejemplo n.º 20
0
 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
Ejemplo n.º 21
0
 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))
Ejemplo n.º 22
0
 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')
Ejemplo n.º 23
0
    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))
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
    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))
Ejemplo n.º 26
0
    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)
Ejemplo n.º 27
0
 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,
     ))
Ejemplo n.º 28
0
    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)
Ejemplo n.º 29
0
    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)
Ejemplo n.º 30
0
 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