/head: changeset 98

More work on the Tk UI.
This commit is contained in:
jgoerzen 2002-07-11 08:51:24 +01:00
parent 6605b3d659
commit 36cc6105e5

View File

@ -18,7 +18,9 @@
from Tkinter import * from Tkinter import *
from threading import * from threading import *
import thread import thread, traceback
from StringIO import StringIO
from ScrolledText import ScrolledText
from offlineimap import threadutil from offlineimap import threadutil
from Queue import Queue from Queue import Queue
from UIBase import UIBase from UIBase import UIBase
@ -44,22 +46,36 @@ class PasswordDialog:
self.password = self.entry.get() self.password = self.entry.get()
self.top.destroy() self.top.destroy()
def createwidgets(self):
self.text = Text
def getpassword(self): def getpassword(self):
return self.password return self.password
class TextOKDialog:
def __init__(self, title, message):
self.top = Tk()
self.text = ScrolledText(self.top, font = "Courier 10")
self.text.pack()
self.text.insert(END, message)
self.text['state'] = DISABLED
self.button = Button(self.top, text = "OK", command=self.ok)
self.button.pack()
self.top.wait_window(self.button)
def ok(self):
self.top.destroy()
class ThreadFrame(Frame): class ThreadFrame(Frame):
def __init__(self, master=None): def __init__(self, master=None):
self.thread = currentThread() self.thread = currentThread()
self.threadid = thread.get_ident() self.threadid = thread.get_ident()
Frame.__init__(self, master, relief = RIDGE, borderwidth = 1) Frame.__init__(self, master, relief = RIDGE, borderwidth = 1)
self.pack() self.pack()
self.threadlabel = Label(self, foreground = '#FF0000', #self.threadlabel = Label(self, foreground = '#FF0000',
text ="Thread %d (%s)" % (self.threadid, # text ="Thread %d (%s)" % (self.threadid,
self.thread.getName())) # self.thread.getName()))
self.threadlabel.pack() #self.threadlabel.pack()
self.account = "Unknown" self.account = "Unknown"
self.mailbox = "Unknown" self.mailbox = "Unknown"
@ -93,7 +109,8 @@ class ThreadFrame(Frame):
class TkUI(UIBase): class TkUI(UIBase):
def __init__(self): def __init__(self, verbose = 0):
self.verbose = verbose
self.top = Tk() self.top = Tk()
self.threadframes = {} self.threadframes = {}
@ -104,7 +121,7 @@ class TkUI(UIBase):
print "TkUI mainloop started." print "TkUI mainloop started."
def getpass(s, accountname, config): def getpass(s, accountname, config):
pd = PasswordDialog(accountname, config, Tk()) pd = PasswordDialog(accountname, config)
return pd.getpassword() return pd.getpassword()
def gettf(s): def gettf(s):
@ -119,10 +136,44 @@ class TkUI(UIBase):
s.gettf().setmessage(msg) s.gettf().setmessage(msg)
def threadExited(s, thread): def threadExited(s, thread):
threadid = s.threadid threadid = thread.threadid
print "Thread %d exited" % threadid
if threadid in s.threadframes: if threadid in s.threadframes:
print "Removing thread %d" % threadid
tf = s.threadframes[threadid] tf = s.threadframes[threadid]
tf.destroy() tf.destroy()
del tf[threadid] del s.threadframes[threadid]
def threadException(s, thread):
msg = "Thread '%s' terminated with exception:\n%s" % \
(thread.getName(), thread.getExitStackTrace())
print msg
s.top.destroy()
TextOKDialog("Thread Exception", msg)
s.terminate(100)
def mainException(s):
sbuf = StringIO()
traceback.print_exc(file = sbuf)
msg = "Main program terminated with exception:\n" + sbuf.getvalue()
print msg
s.top.destroy()
TextOKDialog("Main Program Exception", msg)
################################################## Copied from TTY
def syncingmessages(s, sr, sf, dr, df):
if s.verbose:
UIBase.syncingmessages(s, sr, sf, dr, df)
def loadmessagelist(s, repos, folder):
if s.verbose:
UIBase.syncingmessages(s, repos, folder)
def messagelistloaded(s, repos, folder, count):
if s.verbose:
UIBase.messagelistloaded(s, repos, folder, count)