class NewtGUI(join_method): priority = 40 screen = None def __init__(self, parent=None): self.screen = SnackScreen() self.screen.pushHelpLine(" ") super(NewtGUI, self).__init__() def start_gui(self): pass @staticmethod def available(): global available return available def PopupWindow(self, title, text, width=50, sleep=None): t = TextboxReflowed(width, text) g = GridForm(self.screen, title, 1, 1) g.add(t, 0, 0, padding=(0, 0, 0, 0)) g.setTimer(1) g.run() # Just show us some seconds if sleep: time.sleep(sleep) self.screen.popWindow() # Else someone else needs to call "popWindow"... def JoinWindow(self, title, text, allowCancel=0, width=50, entryWidth=37, buttons=["Join"], hlp=None): bb = ButtonBar(self.screen, buttons) t = TextboxReflowed(width, text) sg = Grid(2, 2) entryList = [] e = Entry(entryWidth) sg.setField(Label("User name"), 0, 0, padding=(0, 0, 1, 0), anchorLeft=1) sg.setField(e, 1, 0, anchorLeft=1) entryList.append(e) e = Entry(entryWidth, password=1) sg.setField(Label("Password"), 0, 1, padding=(0, 0, 1, 0), anchorLeft=1) sg.setField(e, 1, 1, anchorLeft=1) entryList.append(e) g = GridForm(self.screen, title, 1, 3) g.add(t, 0, 0, padding=(0, 0, 0, 1)) g.add(sg, 0, 1, padding=(0, 0, 0, 1)) g.add(bb, 0, 2, growx=1) result = g.runOnce() entryValues = [] for entry in entryList: entryValues.append(entry.value()) return (bb.buttonPressed(result), tuple(entryValues)) def discover(self): self.PopupWindow(_("Clacks Infrastructure") + " v%s" % VERSION, _("Searching service provider...")) self.url = ZeroconfClient.discover(["_amqps._tcp", "_amqp._tcp"], domain=self.domain)[0] self.screen.popWindow() return self.url def join_dialog(self): logging.disable(logging.ERROR) key = None while not key: jw = self.JoinWindow( _("Clacks Infrastructure") + " v%s" % VERSION, _("Please enter the credentials of an administrative user to join this client."), ) username, password = jw[1] if not username or not password: self.show_error("Please enter a user name and a password!") continue key = self.join(username, password) self.screen.finish() def show_error(self, error): self.PopupWindow(_("Error"), error, sleep=3)
class SnackInterface(): def __init__(self, margin, title, message=None, vendor_text=None, args=None): self.debug_mode = args is not None and args.debug self.screen = SnackScreen() # set usual colors for i in colorsets["ROOT"], colorsets["ROOTTEXT"], colorsets[ "HELPLINE"], colorsets["EMPTYSCALE"]: self.screen.setColor(i, "white", "blue") if not self.debug_mode else \ self.screen.setColor(i, "brightgreen", "black") # remove silly default help text self.screen.popHelpLine() # write static messages self.screen.drawRootText((self.screen.width - len(message)) // 2, 4, message) self.screen.drawRootText(-len(vendor_text) - 2, -2, vendor_text) if self.debug_mode: # write some static debug information self.screen.drawRootText(1, 1, _("DEBUG MODE")) self.screen.drawRootText( 2, 2, "screen {}×{}".format(self.screen.width, self.screen.height)) self.screen.drawRootText(2, 3, "file {}".format(args.input)) self.window_width = self.screen.width - margin * 2 # assemble our progress bar self.scale = Scale(self.window_width, 100) self.spacer = Label("") self.taskbox = Textbox(self.window_width - 2, 1, "") self.messagebox = Textbox(self.window_width - 8, 1, " . . . ") self.grid = Grid(1, 4) self.grid.setField(self.scale, 0, 0) self.grid.setField(self.spacer, 0, 1) self.grid.setField(self.taskbox, 0, 2) self.grid.setField(self.messagebox, 0, 3) self.grid.place(1, 1) self.screen.gridWrappedWindow(self.grid, title) self.form = Form() self.form.add(self.scale) self.form.add(self.taskbox) self.form.add(self.messagebox) self.form.draw() self.screen.refresh() def update_task(self, percent, task, description): self.taskbox.setText(description) self.update(percent, "") def update(self, percent, text=None): progress = int(percent) self.scale.set(progress) self.form.draw() self.screen.refresh() if text is not None: self.messagebox.setText(text) self.form.draw() self.screen.refresh() def debug(self, message): self.screen.popHelpLine() self.screen.pushHelpLine("[DEBUG] {}".format(message)) self.screen.refresh() def cleanup(self): self.screen.popWindow() self.screen.finish()