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)), ])
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)
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 __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'))
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'))
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)
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)
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'))) ])
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
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())]
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)
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
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)
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])
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)
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
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
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
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")
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])
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)
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')
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')])