Пример #1
0
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)
Пример #2
0
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()