Exemple #1
0
 def _make(self):
     down = QuickChangeBar(self._date, '<', -1, bar=self._bar)
     connect_signal(down.widget, 'change', self.date_change)
     up = QuickChangeBar(self._date, '>', 1, bar=self._bar)
     connect_signal(up.widget, 'change', self.date_change)
     year = YearBar(self._date, bar=self._bar)
     connect_signal(year.widget, 'change', self.date_change)
     month = MonthBar(self._date, as_text=False, bar=self._bar)
     connect_signal(month.widget, 'change', self.date_change)
     day_of_month = DayOfMonthBar(self._date, bar=self._bar)
     connect_signal(day_of_month.widget, 'change', self.date_change)
     day_of_week = DayOfWeekBar(self._date, bar=self._bar)
     connect_signal(day_of_week.widget, 'change', self.date_change)
     return Columns([
         (1, FocusAttr(down)),
         (1, Text(" ")),
         (4, Padding(FocusAttr(year), align='center', width='pack')),
         (1, Text("-")),
         (2, Padding(FocusAttr(month), align='center', width='pack')),
         (1, Text("-")),
         (2, Padding(FocusAttr(day_of_month), align='center',
                     width='pack')),
         (1, Text(" ")),
         (3, Padding(FocusAttr(day_of_week), align='center', width='pack')),
         (1, Text(" ")),
         (1, FocusAttr(up)),
     ])
Exemple #2
0
 def __init__(self):
     # self.caption = AttrMap(
     #         Text(
     #             ('caption', self.caption_text), align='center'
     #         ),
     #         'blackongrey'
     # )
     self.caption = Text(('caption', self.caption_text), align='center')
     self.inputbox_a = Padding(AttrMap(
         Edit(multiline=False, mask=self.mask), 'inputfield'),
                               align='center',
                               width=24)
     self.divider = Padding(Divider(' '), align='center')
     self.inputbox_b = Padding(AttrMap(
         Edit(multiline=False, mask=self.mask), 'inputfield'),
                               align='center',
                               width=24)
     self.innerbox = AttrMap(
         LineBox(Pile([self.inputbox_a, self.divider, self.inputbox_b])),
         'blackongrey')
     # scratchpad = Text('<enter>')
     self.button = Button('OK', on_press=self._ok_button)
     self.button_wrap = Padding(AttrMap(self.button, 'button.normal',
                                        'button.focus'),
                                align='center',
                                width=15)
Exemple #3
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
Exemple #4
0
 def __gui_menus(self, s, f):
     for aj1 in ActivityJournal.at_date(s, self._date):
         options = [(None, 'None')] + [(aj2, fmt_nearby(aj2, nb)) for aj2, nb in nearby_any_time(s, aj1)]
         menu = ArrowMenu(label('%s v ' % aj1.name), dict(options))
         connect_signal(menu, 'click', self.__show_gui, aj1)
         button = SquareButton('All Similar')
         connect_signal(button, 'click', self.__show_similar, aj1)
         yield Columns([f(menu), f(Padding(Fixed(button, 13), width='clip'))])
     button = SquareButton('Health')
     connect_signal(button, 'click', self.__show_health, self._date)
     yield f(Padding(Fixed(button, 8), width='clip'))
Exemple #5
0
 def __init__(self):
     """
       Initializes the widget
     """
     close_button = Button("close")
     connect_signal(close_button, 'click',
                    lambda button: self._emit('close'))
     help_window = Pile([
         Padding(Text(self.help_text), 'center', width=('relative', 90)),
         Padding(AttrMap(close_button, 'popbg'), 'center', 9)
     ])
     super(HelpWindow,
           self).__init__(AttrWrap(Filler(help_window), 'progress'))
Exemple #6
0
 def _w_init(self):
     self._w_prep()
     self.refresh()
     self._w = Columns([
         (1, self._w_indicator),
         Padding(Columns([
             (11,
              Padding(Pile([self._w_timestamp, self._w_statusbar]),
                      right=1)),
             (20, Padding(self._w_members, right=2)),
             Pile([self._w_subject, self._w_lastmsg]),
         ], 0),
                 left=1),
     ], 0)
Exemple #7
0
    def get_machines_header(self, machines_column):
        b = PlainButton("Open in Browser", on_press=self.browse_maas)
        self.open_maas_button = AttrMap(b, 'button_secondary',
                                        'button_secondary focus')
        self.maastitle = Text("Connected to MAAS")
        maastitle_widgets = Padding(Columns(
            [self.maastitle, (22, self.open_maas_button)]),
                                    align='center',
                                    width='pack',
                                    left=2,
                                    right=2)

        f = machines_column.machines_list.handle_filter_change
        self.filter_edit_box = FilterBox(f)
        pl = [
            Divider(),
            Text(('body', "Ready Machines {}".format(
                MetaScroll().get_text()[0])),
                 align='center'),
            Divider(), maastitle_widgets,
            Divider(), self.filter_edit_box
        ]

        self.machines_header_pile = Pile(pl)
        return self.machines_header_pile
    def build_widgets(self):
        dn = self.charm_class.display_name
        self.title_markup = ["\N{GEAR} {}".format(dn), ""]

        self.charm_info_widget = Text(self.title_markup)
        self.placements_widget = Text("")

        if self.charm_class.subordinate:
            c_str = [('label', "  (subordinate charm)")]
        elif len(self.charm_class.constraints) == 0:
            c_str = [('label', "  no constraints set")]
        else:
            cpairs = [
                format_constraint(k, v)
                for k, v in self.charm_class.constraints.items()
            ]
            c_str = [('label', "  constraints: "), ', '.join(cpairs)]
        self.constraints_widget = Text(c_str)

        self.buttons = []

        self.button_grid = GridFlow(self.buttons, 22, 1, 1, 'right')

        pl = [self.charm_info_widget]

        if self.show_placements:
            pl.append(self.placements_widget)
        if self.show_constraints:
            pl.append(self.constraints_widget)
        pl.append(self.button_grid)

        p = Pile(pl)
        return Padding(p, left=2, right=2)
Exemple #9
0
 def _display_gui(self, s, f):
     button = SquareButton('All Activities')
     connect_signal(button, 'click', self.__show_all)
     yield Pile([
         Text('Jupyter'),
         Indent(f(Padding(Fixed(button, 16), width='clip')))
     ])
Exemple #10
0
    def _build_widget(self, header_text, text, favorite=False):
        """Return the wrapped widget."""
        box_around_status = configuration.styles.get('box_around_status', True)
        divider = configuration.styles.get('status_divider', False)

        header = AttrMap(Text(header_text), 'header')
        sanitized_text = ([sanitize(t) for t in text]
                          if isinstance(text, list) else sanitize(text))
        body = Padding(AttrMap(Text(sanitized_text), 'body'), left=1, right=1)

        border_attr = 'line'
        if favorite:
            border_attr = 'favorited'

        if box_around_status:
            # draw a box around the status
            # focusing the first item both dividers are highlighted
            # on focus
            widget = AttrMap(BoxDecoration(body, title=header_text),
                             border_attr, 'focus')
        elif divider:
            # use a divider
            # we focus the divider to change colors when this
            # widget is focused
            styles = configuration.styles
            status_divider = styles.get('status_divider_char', '·')

            divider = AttrMap(Divider(status_divider),
                              border_attr,
                              'focus')
            widget = Pile([header, body, divider], focus_item=2)
        else:
            widget = Pile([header, body], focus_item=1)
        return widget
Exemple #11
0
def menu():
    hello = Text(
        "Приветствую! Для продолжения настройте параметры лабиринта.\n" +
        "Если карта лабиринта будет некорректно отображаться, " +
        "попробуйте уменьшить значение ширины или развернуть окно.")
    height_enter = IntEdit("Высота лабиринта: ", 30)
    width_enter = IntEdit("Ширина лабиринта: ", 45)
    done = Button("Готово")
    done_pad = Padding(done, align="center", width=10)

    back = AttrMap(SolidFill("\u25E6"), "blueprint")
    pile = Pile(
        [hello, Divider("\u2500"), height_enter, width_enter, done_pad])
    menu = Filler(LineBox(pile))
    main_widget = Overlay(menu,
                          back,
                          align="center",
                          width=35,
                          height=12,
                          valign="middle")
    loop = MainLoop(main_widget, palette)
    connect_signal(done, 'click', start_game)
    loop.run()

    return MazeGame(height_enter.value(), width_enter.value())
 def update_choosing(self):
     title_markup, _ = self.get_markup()
     msg = Padding(Text(title_markup), left=2, right=2, align='center')
     self.pile.contents = [(msg, self.pile.options()),
                           (self.action_button_cols,
                            self.pile.options()),
                           (Divider(), self.pile.options())]
Exemple #13
0
    def __init__(self, app, report, interrupting=True):
        self.app = app
        self.report = report
        self.interrupting = interrupting

        self.btns = {
            'cancel': other_btn(
                _("Cancel upload"), on_press=self.cancel_upload),
            'close': close_btn(self, _("Close report")),
            'continue': close_btn(self, _("Continue")),
            'debug_shell': other_btn(
                _("Switch to a shell"), on_press=self.debug_shell),
            'restart': other_btn(
                _("Restart the installer"), on_press=self.restart),
            'submit': other_btn(
                _("Send to Canonical"), on_press=self.submit),
            'submitted': disabled(other_btn(_("Sent to Canonical"))),
            'view': other_btn(
                _("View full report"), on_press=self.view_report),
            }
        w = 0
        for n, b in self.btns.items():
            w = max(w, widget_width(b))
        for n, b in self.btns.items():
            self.btns[n] = Padding(b, width=w, align='center')

        self.spinner = Spinner(app.aio_loop, style='dots')
        self.pile = Pile([])
        self._report_changed()
        super().__init__("", [self.pile], 0, 0)
        connect_signal(self, 'closed', self.spinner.stop)
Exemple #14
0
def make_text(t, width):
    result = Padding(Text(t, align='left'), ('relative', 100),
                     width,
                     left=2,
                     right=2)
    if DEBUG and 0:
        return urwid.LineBox(result)
    return result
Exemple #15
0
    def build_widgets(self):
        self.editbox = Edit(caption=('text', "Search Charm Store: "))

        connect_signal(self.editbox, 'change', self.handle_edit_changed)

        return Padding(AttrMap(self.editbox, 'filter', 'filter_focus'),
                       left=2,
                       right=2)
Exemple #16
0
 def get_options_header(self, options_column):
     simple_widgets = self._simple_header_widgets("Options Editor")
     fb = FilterBox(options_column.handle_filter_change,
                    info_text="Filter by option name")
     padded_fb = Padding(AttrMap(fb, 'filter', 'filter_focus'),
                         left=2,
                         right=2)
     return Pile(simple_widgets + [padded_fb])
Exemple #17
0
 def __init__(self, message):
     text = ''
     if message['media']:
         text = t.media_file
     else:
         text = str(message['text'])
     date = formatter.formate_date(message['date'])
     if message[t.from_user][t.id] == status_line.get_user_id():
         widget_list = [
             (9, Padding(DarkGreyTertiary(Text(date)), left=1)),
             Green(Padding(Text(text), right=1))
         ]
     else:
         widget_list = [
             (9, Padding(DarkGreyTertiary(Text(date)), left=1)),
             Padding(Text(text), right=1)
         ]
     super(Message, self).__init__(widget_list, dividechars=1)
Exemple #18
0
 def _showhide_other(self, show):
     if show and not self._other_showing:
         self._w.contents.append((Padding(Columns([(1, Text("/")),
                                                   self._other]),
                                          left=4), self._w.options('pack')))
         self._other_showing = True
     elif not show and self._other_showing:
         del self._w.contents[-1]
         self._other_showing = False
Exemple #19
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
    def __init__(self, content, default, tooltip, left_margin, source=None):
        """
        General Edit Field

        Args:
            content: text of the editbox
            default: default value of the editbox
            tooltip: tooltip of the editbox
            left_margin: left_margin of the editbox
            source: there this item is from for value reference
        """
        text = u" *  " + content + u": "
        self.core = Edit(('editcp', ""), default)
        self.source = source
        self.widget = Pile([
            Text(text),
            Padding(AttrWrap(self.core, 'editbx', 'editfc'), left=4),
            Padding(Text(tooltip), left=4)
        ])
        super().__init__(self.widget, left=2 + left_margin - 4, right=2)
    def add_machine_widget(self, machine):
        mw = MachineWidget(machine, self.controller, self.actions,
                           self.show_hardware, self.show_assignments)
        self.machine_widgets.append(mw)
        options = self.machine_pile.options()
        self.machine_pile.contents.append((mw, options))

        self.machine_pile.contents.append(
            (AttrMap(Padding(Divider('\u23bc'), left=2, right=2),
                     'label'), options))
        return mw
Exemple #22
0
 def __init__(self):
     """
         Initializes the widget
     """
     self.footer_btn = HelpButton()
     self.footer = Columns([
         ('fixed', 10, Text(self.footer_text, align='left')),
         ('fixed', 10,
          Padding(AttrMap(self.footer_btn, 'popbg'), 'center', 8)),
     ])
     super(Footer, self).__init__(self.footer, 'header')
    def update(self):
        msg = ("Before continuing, ensure that at least one machine is "
               "enlisted into MAAS:")
        self.message = Text(self.spinner.next_frame() + ['\n', msg, '\n'],
                            align='center')
        contents = [(self.message,
                     self.main_pile.options())]

        global_ok, statuses = self.get_status()
        status_map = {True: ('success_icon', "\u2713 "),
                      False: ('error_icon', "<!> ")}
        contents += [(Text([status_map[status], condition],
                           align='center'),
                      self.main_pile.options())
                     for status, condition
                     in statuses]
        contents += [(Divider(), self.main_pile.options()),
                     (self.button_pile, self.main_pile.options())]
        self.main_pile.contents = contents

        if not global_ok:
            b = AttrMap(SelectableIcon(" ( Can't Continue ) "),
                        'disabled_button', 'disabled_button_focus')
        else:
            b = AttrMap(Button("Continue",
                               on_press=self.do_continue),
                        'button_primary', 'button_primary focus')

        cancel_b = AttrMap(Button("Cancel",
                                  on_press=self.do_cancel),
                           'button_secondary',
                           'button_secondary focus')
        self.button_pile.contents = [(Padding(cancel_b, width=24,
                                              align='center'),
                                      self.button_pile.options()),
                                     (Padding(b, width=24, align='center'),
                                      self.button_pile.options())]

        # ensure that the button is always focused:
        self.main_pile.focus_position = len(self.main_pile.contents) - 1
Exemple #24
0
def create_interface():
    m_map = Padding(LineBox(minimap,
                            tlcorner='',
                            tline='',
                            lline='',
                            trcorner='',
                            blcorner='',
                            rline='│',
                            bline='',
                            brcorner=''),
                    align="center",
                    width=35)
    _help = Text(("help", "Карта - m, тетрадь - c,\nНачать зарисовку - q\n" +
                  "сделать отметку - CTRL+arrow_key"),
                 align="center")
    #column = Columns([description, Pile([m_map, _help]), BoxAdapter(
    column = Columns([
        description, m_map,
        BoxAdapter(Filler(location_text, valign=("relative", 20)), 20)
    ])

    return Filler(Padding(column, align="center", width=120), valign="middle")
Exemple #25
0
    def __init__(self, dialog, maximized=True):
        self.__maximized_messages = maximized
        chat = dialog[tg.chat]
        self.__type = chat[tg.type]
        self.__title = Text(str(f.get_name(chat)), wrap='clip')
        self.__id = chat[tg.id]
        message = dialog[tg.top_message]
        self.__message = Text(str(self.__generate_message(message)),
                              wrap='clip')
        self.__date = Text(str(f.formate_date(message[tg.date])),
                           align='right',
                           wrap='clip')
        self.__d_message = self.__decorate_message(self.__message)
        self.__d_date = self.__decorate_date(self.__date)

        widgets = [(35,
                    Black(
                        Buffer([(24, Padding(self.__title, left=1)),
                                (10, Padding(self.__d_date, right=0))]))),
                   (self.__d_message)]

        super().__init__(widgets if maximized else widgets[:1])
Exemple #26
0
    def __init__(self, status, configuration):
        self.status = status
        self.configuration = configuration

        text = status.text
        status_content = Padding(AttrMap(Text(text), 'body'), left=1, right=1)
        header = self._create_header(status)
        box = BoxDecoration(status_content, title=header)

        if not is_DM(status) and status.is_favorite:
            widget = AttrMap(box, 'favorited', 'focus')
        else:
            widget = AttrMap(box, 'line', 'focus')
        self.__super.__init__(widget)
Exemple #27
0
 def __init__(self, val, data):
     self.value = val
     self.data = data
     self._w_indicator_faw = AttrWrapEx(
         TextFocusable('', align='left', wrap='any'), 'style5',
         'style5-focus')
     self._w_indicator_inc = AttrWrapEx(
         TextFocusable('', align='left', wrap='any'), '')
     self._w_subject = AttrWrapEx(Text('', align='left', wrap='space'),
                                  'style3bold', 'style3bold-focus')
     self._w_timestamp = AttrWrapEx(Text('', align='right', wrap='clip'),
                                    'style4', 'style4-focus')
     self._w_membersMain = AttrWrapEx(Text('', align='left', wrap='space'),
                                      'style3', 'style3-focus')
     self._w_membersMore = AttrWrapEx(Text('', align='left', wrap='space'),
                                      'style3', 'style3-focus')
     self._w_label_membersMain = AttrWrapEx(
         Text('', align='left', wrap='space'), 'style4', 'style4-focus')
     self._w_label_membersMore = AttrWrapEx(
         Text('', align='left', wrap='space'), 'style4', 'style4-focus')
     self._w_msg = AttrWrapEx(Text('', align='left', wrap='space'),
                              'style3', 'style3-focus')
     self.refresh()
     w = Columns([
         (2, self._w_indicator_inc),
         AttrWrapEx(
             Padding(Pile([
                 Columns([
                     ('weight', 7,
                      Columns([(2, self._w_indicator_faw), self._w_subject],
                              0)),
                     ('weight', 3, self._w_timestamp),
                 ], 2),
                 Columns([
                     ('weight', 1,
                      Columns([(6, self._w_label_membersMain),
                               self._w_membersMain], 0)),
                     ('weight', 1,
                      Columns([(8, self._w_label_membersMore),
                               self._w_membersMore], 0)),
                 ], 3),
                 Pile([Divider(), self._w_msg]),
                 AttrWrapEx(Divider(LINE_H), 'style3', 'style3-focus'),
             ]),
                     left=1), 'style3', 'style3-focus'),
     ], 0)
     s = 'incoming' if self.data['isIncoming'] else 'outgoing'
     w = AttrWrapEx(w, s)
     super().__init__(w)
    def __init__(self, content, default, tooltip, left_margin, source=None):
        """
        General Checkbox Field

        Args:
            content: text of the checkbox
            default: default value of the checkbox
            tooltip: the tooltip of the checkbox
            left_margin: The left margin of the Checkbox
            source: there this item is from for value reference
        """
        self.core = CheckBox(content, state=default)
        self.source = source
        self.widget = Pile([self.core, Padding(Text(tooltip), left=4)])
        super().__init__(self.widget, left=2 + left_margin - 4, right=2)
    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.columns = Columns([self.services_column, self.machines_column])
        self.main_pile = Pile([
            Divider(),
            Text(('subheading', "Machine Placement"), align='center'),
            Divider(),
            Padding(self.columns, align='center', width=('relative', 95))
        ])
        return Filler(self.main_pile, valign='top')
Exemple #30
0
 def build_widgets(self):
     self.charm_name = self.md['Name']
     summary = self.md['Summary']
     top = []
     pad = 0
     if self.header:
         top = [Text("\n{}\n".format(self.header))]
     if self.recommended:
         pad = 2
     s = "{} ({})\n  {}\n".format(self.charm_name, self.charm_source,
                                  summary)
     b = MenuSelectButton(s, on_press=self.handle_press)
     return Pile(
         top +
         [AttrMap(Padding(b, left=pad), 'text', 'button_secondary focus')])