def populate_list(self): try: p = re.compile(self.regexp, re.IGNORECASE) except re.error: filtered_files = self.all_files else: filtered_files = filter(p.search, self.all_files) def button_cb(locator, filename, button): self.filename = filename self.tui.controller.set_filename(locator, filename) self.tui.pop_window() self.walker.clear() for line in filtered_files: filename = line.strip() button = Button(filename) urwid.connect_signal(button, 'click', button_cb, user_args=[self.locator, filename]) self.walker.append(AttrMap(button, None, focus_map='selected'))
def update_buttons(self): buttons = [] for at in self.actions: if len(at) == 2: def predicate(x): return True label, func = at else: predicate, label, func = at if not predicate(self.machine): b = AttrMap(SelectableIcon(" (" + label + ")"), 'disabled_button', 'disabled_button_focus') else: b = AttrMap( Button(label, on_press=func, user_data=self.machine), 'button_secondary', 'button_secondary focus') buttons.append((b, self.button_grid.options())) self.button_grid.contents = buttons
def __init__(self, message, close_func): self.close_func = close_func button = Button("Close", self.do_close) box = LineBox(Pile([Text(message), button]), title="Info") super().__init__(box)
@method open Alias to PopUpLauncher.open_pop_up """ self.open_pop_up() def create_pop_up (self): p = PopUpDialog(self.item) connect_signal(p, 'close', lambda button: self.close_pop_up()) return p def get_pop_up_parameters (self): return {'left':0, 'top':1, 'overlay_width':25, 'overlay_height':20} """ Testing """ if __name__ == '__main__': b = Button('click me') p1 = Process.Process(1, lambda x: x, lambda: x) popup = ProcessItemDialog(b, p1) connect_signal(b, 'click', lambda x: popup.open()) proc = AttrMap(popup, None) lb = ListBox(SimpleFocusListWalker([proc])) def exit (p): if p is 'q': raise ExitMainLoop m = MainLoop( lb, palette=palette, pop_ups=True, unhandled_input=exit
def get_button(label, id): button = Button(label, None, id) connect_signal(button, 'click', self.chosen_item, id) return button
def __init__(self, label, on_press=None, user_data=None): Button.__init__(self, label, on_press, user_data) self._w = self._label
def __init__(self, transport, click=False): self.transport = transport self.click = click label = 'Click ON' if self.click else 'Click OFF' Button.__init__(self, label, self.on_click) self._w = self._label
def parse_tag_from_node(node): label = node.attr.label or u'click' return Button(label=label)
def _insert_buttons(self): bs = [Button("Ok", self.yes), Button("Cancel", self.no)] wrapped_buttons = self._wrap_focus(bs) return Columns(wrapped_buttons)
def update(self): self.update_status() self.walker.clear() locator = self.locator def cmd_cb(json_msg): self.display_errors(json_msg) self.update_status() fn = self.tui.controller.get_filename(locator) self.filename_txt.set_text("Selected file \"{}\"".format(fn)) button = Button("[c] Connect") def button_cb(button, locator): self.tui.controller.connect(cmd_cb, locator) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('c', partial(button_cb, button, locator), "connect", omit_header=True) button = Button("[D] Disconnect") def button_cb(button, locator): self.tui.controller.disconnect(cmd_cb, locator) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('D', partial(button_cb, button, locator), "disconnect", omit_header=True) button = Button("[s] Start") def button_cb(button, locator): fn = self.tui.controller.get_filename(locator) if not fn: self.footer.set_text("Please Select a file first") return self.tui.controller.start( cmd_cb, locator, self.tui.controller.get_filename(locator)) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('s', partial(button_cb, button, locator), "start", omit_header=True) button = Button("[S] Stop (ask nicely to stop)") def button_cb(button, locator): self.tui.controller.stop(cmd_cb, locator) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('S', partial(button_cb, button, locator), "stop", omit_header=True) button = Button("[!] Abort (Interrupt then disconnect)") def button_cb(button, locator): self.tui.controller.abort(cmd_cb, locator) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('!', partial(button_cb, button, locator), "abort", omit_header=True) button = Button("[p] Pause") def button_cb(button, locator): self.tui.controller.pause(cmd_cb, locator) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('p', partial(button_cb, button, locator), "pause", omit_header=True) button = Button("[r] Resume") def button_cb(button, locator): self.tui.controller.resume(cmd_cb, locator) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('r', partial(button_cb, button, locator), "resume", omit_header=True) button = Button("[l] Load File") def button_cb(button, locator): window = FileListWindow(self.tui, locator, self.device) self.tui.push_window(window) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('l', partial(button_cb, button, locator), "load", omit_header=True) button = Button("[m] Manual Control") def button_cb(button, locator): window = ManualControlWindow(self.tui, locator, self.device) self.tui.push_window(window) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('m', partial(button_cb, button, locator), "manual", omit_header=True)
def update(self): self.walker.clear() locator = self.locator def cmd_cb(json_msg): self.display_errors(json_msg) button = Button("[h] Home (G28 W)") def button_cb(button, locator): self.tui.controller.action("gcode {} 'G28 W'".format(locator), cmd_cb) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('h', partial(button_cb, button, locator), "home", omit_header=True) def edit_cb(txt): self.tui.controller.action("gcode {} 'G90'".format(locator), cmd_cb) self.tui.controller.action( "gcode {} 'G1 X{}'".format(locator, txt), cmd_cb) edit = CB_Edit("Move to ABS X (mm): ", "0", None, edit_cb, NUMERICALS) self.walker.append(AttrMap(edit, None, focus_map='selected')) def edit_cb(txt): self.tui.controller.action("gcode {} 'G90'".format(locator), cmd_cb) self.tui.controller.action( "gcode {} 'G1 Y{}'".format(locator, txt), cmd_cb) edit = CB_Edit("Move to ABS Y (mm): ", "0", None, edit_cb, NUMERICALS) self.walker.append(AttrMap(edit, None, focus_map='selected')) def edit_cb(txt): self.tui.controller.action("gcode {} 'G90'".format(locator), cmd_cb) self.tui.controller.action( "gcode {} 'G1 Z{}'".format(locator, txt), cmd_cb) edit = CB_Edit("Move to ABS Z (mm): ", "0", None, edit_cb, NUMERICALS) self.walker.append(AttrMap(edit, None, focus_map='selected')) def edit_cb(txt): self.tui.controller.action( "gcode {} 'G1 F{}'".format(locator, txt), cmd_cb) edit = CB_Edit("Set Feedrate mm/min: ", "", None, edit_cb, NUMERICALS) self.walker.append(AttrMap(edit, None, focus_map='selected')) def edit_cb(txt): self.tui.controller.action( "gcode {} 'M104 S{}'".format(locator, txt), cmd_cb) edit = CB_Edit("Set Extruder Temperature °C: ", "0", None, edit_cb, NUMERICALS) self.walker.append(AttrMap(edit, None, focus_map='selected')) def edit_cb(txt): self.tui.controller.action( "gcode {} 'M140 S{}'".format(locator, txt), cmd_cb) edit = CB_Edit("Set Bed Temperature °C: ", "0", None, edit_cb, NUMERICALS) self.walker.append(AttrMap(edit, None, focus_map='selected')) button = Button("[L] Load filament (G1 E100 F300)") def button_cb(button, locator): self.tui.controller.action("gcode {} 'M83'".format(locator), cmd_cb) self.tui.controller.action( "gcode {} 'G1 E100 F300'".format(locator), cmd_cb) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('L', partial(button_cb, button, locator), "load", omit_header=True) button = Button("[U] Unload filament (G1 E-100 F2000)") def button_cb(button, locator): self.tui.controller.action("gcode {} 'M83'".format(locator), cmd_cb) self.tui.controller.action( "gcode {} 'G1 E-100 F2000'".format(locator), cmd_cb) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('U', partial(button_cb, button, locator), "unload", omit_header=True) button = Button("[r] Release steppers (M18)") def button_cb(button, locator): self.tui.controller.action("gcode {} 'M18'".format(locator), cmd_cb) urwid.connect_signal(button, 'click', button_cb, locator) self.walker.append(AttrMap(button, None, focus_map='selected')) self.add_hotkey('r', partial(button_cb, button, locator), "release", omit_header=True) self.walker.append(Divider()) def enter_cb(edit, txt): if edit.hjkl_active: edit.hjkl_active = False edit.set_edit_text("[enter] to activate / deactivate") else: edit.hjkl_active = True edit.set_edit_text("") self.footer.set_text("Use keys 'hjklaz' to move printer.") def edit_cb(edit, txt): if not edit.hjkl_active: return key = txt[-1] m = {'h': "X-", 'l': "X", 'j': "Y-", 'k': "Y", 'a': "Z", 'z': "Z-"} if key not in m: self.footer.set_text( "key '{}' not handled. Please use keys 'hjklaz' to move printer." .format(key)) return edit.set_edit_text("{}".format(m[key])) increment = 10 c = "gcode {} 'G1 ".format(locator) + m[key] + "{}'".format( increment) self.tui.controller.action("gcode {} 'G91'".format(locator), cmd_cb) self.tui.controller.action(c, cmd_cb) #self.tui.controller.action("gcode {} 'G1 F{}'".format(locator, txt), cmd_cb) edit = CB_Edit("VI Move: ", "[enter] to activate", edit_cb, enter_cb, [i for i in "hjklaz"]) edit.type_cb = partial(edit_cb, edit) ##hack to solve cyclic dependency edit.enter_cb = partial(enter_cb, edit) ##hack to solve cyclic dependency edit.hjkl_active = False self.walker.append(AttrMap(edit, None, focus_map='selected'))
def build_widgets(self): self.deploy_view = DeployView(self.display_controller, self.placement_controller, self.placement_view) def not_conflicted_p(cc): state, _, _ = self.placement_controller.get_charm_state(cc) return state != CharmState.CONFLICTED actions = [(not_conflicted_p, "Choose Machine", self.placement_view.do_show_machine_chooser)] subordinate_actions = [(not_conflicted_p, "Add", self.do_place_subordinate)] self.required_services_list = ServicesList(self.placement_controller, actions, subordinate_actions, ignore_assigned=True, ignore_deployed=True, show_type='required', show_constraints=True, title="Required Services") self.additional_services_list = ServicesList(self.placement_controller, actions, subordinate_actions, ignore_assigned=True, show_type='non-required', show_constraints=True, title="Additional " "Services") autoplace_func = self.placement_view.do_autoplace self.autoplace_button = AttrMap( Button("Auto-place Remaining Services", on_press=autoplace_func), 'button_secondary', 'button_secondary focus') clear_all_func = self.placement_view.do_clear_all self.clear_all_button = AttrMap( Button("Clear all Placements", on_press=clear_all_func), 'button_secondary', 'button_secondary focus') self.required_services_pile = Pile( [self.required_services_list, Divider()]) self.additional_services_pile = Pile( [self.additional_services_list, Divider()]) self.top_buttons = [] self.top_button_grid = GridFlow(self.top_buttons, 36, 1, 0, 'center') pl = [ Text(('subheading', "Services"), align='center'), Divider(), self.top_button_grid, Divider(), self.deploy_view, Divider(), self.required_services_pile, Divider(), self.additional_services_pile ] self.main_pile = Pile(pl) return self.main_pile
def __init__(self, transport): self.transport = transport label = 'Tempo {0}BPM'.format(self.transport.tempo) Button.__init__(self, label) self._w = self._label
def __init__(self, label, on_press=None, user_data=None): self.widget = Text(label) self.widget = AttrMap(self.widget, 'footer') self._hidden_btn = Button(label, on_press, user_data) super().__init__(self.widget)