Ejemplo n.º 1
0
class MyFrame(wx.Frame):
    """ We simply derive a new class of Frame. """
    def __init__(self, parent, title, opts, sources):
        wx.Frame.__init__(self, parent, title=title, size=((800 if opts.verbosity < 2 else 1100), 400))
        self.lock = Lock()
        self.opts = opts
        self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        self.control.SetEditable(False)
        self.Show(True)
        self.twiddle_mode = 2
        self.twiddle_next = 0
        self.twiddle_me = '|/-\\'
        self.twiddle_size = len(self.twiddle_me)
        self.importer = Importer(self, sources, self.opts)
        self.Bind(wx.EVT_CLOSE, self.onClose)

    def onClose(self, event):
        self.importer.interrupt.set()
        while self.importer.isAlive():
            self.importer.join(1)
            wx.Yield()
        self.Destroy()

    def __append_text(self, s):
        with self.lock:
            self.control.AppendText(s)

    def logger(self, s):
        # print s
        if self.twiddle_mode != 2:
            re_twiddle = True
            self.twiddle(2)
        else:
            re_twiddle = False
        self.__append_text("%s\n" % (s,))
        if re_twiddle:
            self.twiddle(0)

    def twiddle(self, mode):
        # Mode (0, 1, 2) == (start (add first twiddle), advance, erase)
        self.twiddle_mode = mode
        if mode == 0:
            # append
            self.twiddle_next = 0
            self.__append_text(self.twiddle_me[self.twiddle_next])
        elif mode == 1:
            # replace
            lastPos = self.control.GetLastPosition()
            self.control.Replace(lastPos-1, lastPos, self.twiddle_me[self.twiddle_next])
        elif mode == 2:
            # erase
            lastPos = self.control.GetLastPosition()
            self.control.Remove(lastPos-1, lastPos)
        # Advance
        self.twiddle_next = (self.twiddle_next + 1) % self.twiddle_size