Esempio n. 1
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()