rev 317 - offlineimap/head/offlineimap/ui
[email protected] Mon, 6 Jan 2003 11:04:41 -0600 (CST)
| Newsgroups | gmane.mail.imap.offlineimap.subversion |
|---|---|
| Message-ID | <[email protected]> |
Author: jgoerzen
Date: 2003-01-06 11:04:40 -0600 (Mon, 06 Jan 2003)
New Revision: 317
Modified:
offlineimap/head/offlineimap/ui/Blinkenlights.py
offlineimap/head/offlineimap/ui/Tk.py
Log:
Basic Tk.Blinkenlights structure completed. Need to fine-tune the display.
Sleeping API added to Blinkenlights base class.
Modified: offlineimap/head/offlineimap/ui/Blinkenlights.py
==============================================================================
--- offlineimap/head/offlineimap/ui/Blinkenlights.py (original)
+++ offlineimap/head/offlineimap/ui/Blinkenlights.py Mon Jan 6 11:04:41 2003
@@ -119,4 +119,16 @@
finally:
s.tflock.release()
+ def sleep(s, sleepsecs):
+ s.gettf().setcolor('red')
+ s.getaccountframe().startsleep(sleepsecs)
+ UIBase.sleep(s, sleepsecs)
+ def sleeping(s, sleepsecs, remainingsecs):
+ if remainingsecs and s.gettf().getcolor() == 'black':
+ s.gettf().setcolor('red')
+ else:
+ s.gettf().setcolor('black')
+ return s.getaccountframe().sleeping(sleepsecs, remainingsecs)
+
+
Modified: offlineimap/head/offlineimap/ui/Tk.py
==============================================================================
--- offlineimap/head/offlineimap/ui/Tk.py (original)
+++ offlineimap/head/offlineimap/ui/Tk.py Mon Jan 6 11:04:41 2003
@@ -155,12 +155,12 @@
return 0
def _createTopWindow(self, doidlevac = 1):
- self.threadframes = {}
- self.availablethreadframes = []
- self.tflock = Lock()
self.notdeleted = 1
self.created = threading.Event()
+ self.af = {}
+ self.aflock = Lock()
+
t = threadutil.ExitNotifyThread(target = self._runmainloop,
name = "Tk Mainloop")
t.setDaemon(1)
@@ -181,6 +181,19 @@
s.top.after_idle(s.created.set)
s.top.mainloop()
s.notdeleted = 0
+
+ def getaccountframe(s):
+ accountname = s.getthreadaccount()
+ s.aflock.acquire()
+ try:
+ if accountname in s.af:
+ return s.af[accountname]
+
+ s.af[accountname] = LEDAccountFrame(s.top, accountname,
+ s.fontfamily, s.fontsize)
+ finally:
+ s.aflock.release()
+ return s.af[accountname]
def getpass(s, accountname, config, errmsg = None):
pd = PasswordDialog(accountname, config, errmsg = errmsg)
@@ -310,7 +323,53 @@
################################################## Blinkenlights
+class LEDAccountFrame:
+ def __init__(self, top, accountname, fontfamily, fontsize):
+ self.top = top
+ self.accountname = accountname
+ self.fontfamily = fontfamily
+ self.fontsize = fontsize
+ self.frame = Frame(self.top)
+ self.frame.pack(side = BOTTOM, expand = 0, fill = X)
+ self._createcanvas(self.frame)
+
+ self.label = Label(self.frame, text = accountname)
+ self.label.pack()
+
+ def getnewthreadframe(s):
+ return LEDThreadFrame(s.canvas)
+
+ def _createcanvas(self, parent):
+ c = LEDCanvas(parent, background = 'black', height = 20, bd = 0,
+ highlightthickness = 0)
+ c.setLEDCount(0)
+ c.createLEDLock()
+ self.canvas = c
+ c.pack(side = BOTTOM, expand = 0, fill = X)
+
+ def startsleep(s, sleepsecs):
+ print 351
+ s.sleeping_abort = 0
+ s.button = Button(s.frame, text = "Sync now", command = s.syncnow)
+ s.button.pack()
+
+ def syncnow(s):
+ print 357
+ s.sleeping_abort = 1
+
+ def sleeping(s, sleepsecs, remainingsecs):
+ print 360
+ if remainingsecs:
+ s.button.config(text = 'Sync now (%d:%02d remain)' % \
+ (remainingsecs / 60, remainingsecs % 60))
+ time.sleep(sleepsecs)
+ else:
+ s.button.destroy()
+ del s.button
+ return s.sleeping_abort
+
class LEDCanvas(Canvas):
+ """This holds the different lights."""
def createLEDLock(self):
self.ledlock = Lock()
def acquireLEDLock(self):
@@ -325,6 +384,7 @@
self.ledcount += 1
class LEDThreadFrame:
+ """There is one of these for each little light."""
def __init__(self, master):
self.canvas = master
self.color = ''
@@ -352,23 +412,6 @@
else:
self.setcolor('black')
- def destroythreadextraframe(self):
- pass
-
- def getthreadextraframe(self):
- raise NotImplementedError
-
- def setaccount(self, account):
- pass
- def setmailbox(self, mailbox):
- pass
- def updateloclabel(self):
- pass
- def appendmessage(self, newtext):
- pass
- def setmessage(self, newtext):
- pass
-
class Blinkenlights(BlinkenBase, VerboseUI):
def __init__(s, config, verbose = 0):
@@ -384,12 +427,7 @@
VerboseUI._createTopWindow(self, 0)
#self.top.resizable(width = 0, height = 0)
self.top.configure(background = 'black', bd = 0)
- c = LEDCanvas(self.top, background = 'black', height = 20, bd = 0,
- highlightthickness = 0)
- c.setLEDCount(0)
- c.createLEDLock()
- self.canvas = c
- c.pack(side = BOTTOM, expand = 0, fill = X)
+
widthmetric = tkFont.Font(family = self.fontfamily, size = self.fontsize).measure("0")
self.loglines = 5
if self.config.has_option("ui.Tk.Blinkenlights", "loglines"):
@@ -414,10 +452,8 @@
self.tags = []
self.textlock = Lock()
- def gettf(s, newtype=LEDThreadFrame):
- return VerboseUI.gettf(s, newtype, s.canvas)
-
def init_banner(s):
+ BlinkenBase.init_banner(s)
s._createTopWindow()
menubar = Menu(s.top, activebackground = "black",
activeforeground = "white",
@@ -436,14 +472,6 @@
if s.config.has_option("ui.Tk.Blinkenlights", "showlog") and \
s.config.getboolean("ui.Tk.Blinkenlights", "showlog"):
s._togglelog()
- #s.tflock.acquire()
- #try:
- # for i in range(s.top.winfo_reqwidth() / 10 - 1):
- # newframe = LEDThreadFrame(s.canvas)
- # newframe.setthread(None)
- # s.availablethreadframes.append(newframe)
- #finally:
- # s.tflock.release()
def _togglelog(s):
if s.textenabled:
@@ -466,25 +494,14 @@
s._rescroll()
s.top.resizable(width = 1, height = 1)
-
- def threadExited(s, thread):
- threadid = thread.threadid
- s.tflock.acquire()
- try:
- if threadid in s.threadframes:
- tf = s.threadframes[threadid]
- del s.threadframes[threadid]
- s.availablethreadframes.append(tf)
- tf.setthread(None)
- finally:
- s.tflock.release()
-
def sleep(s, sleepsecs):
- s.sleeping_abort = 0
- s.menubar.add_command(label = "Sync now", command = s._sleep_cancel)
s.gettf().setcolor('red')
s._msg("Next sync in %d:%02d" % (sleepsecs / 60, sleepsecs % 60))
- UIBase.sleep(s, sleepsecs)
+ BlinkenBase.sleep(s, sleepsecs)
+
+ def sleeping(s, sleepsecs, remainingsecs):
+ print 503
+ return BlinkenBase.sleeping(s, sleepsecs, remainingsecs)
def _rescroll(s):
s.text.see(END)
@@ -496,7 +513,7 @@
for thisline in msg.split("\n"):
s._msg(thisline)
return
- VerboseUI._msg(s, msg)
+ #VerboseUI._msg(s, msg)
color = s.gettf().getcolor()
rescroll = 1
s.textlock.acquire()
@@ -520,17 +537,4 @@
s.text.config(state = DISABLED)
s.textlock.release()
- def sleeping(s, sleepsecs, remainingsecs):
- if remainingsecs:
- s.menubar.entryconfig('end', label = "Sync now (%d:%02d remain)" % \
- (remainingsecs / 60, remainingsecs % 60))
- if s.gettf().getcolor() == 'red':
- s.gettf().setcolor('black')
- else:
- s.gettf().setcolor('red')
- time.sleep(sleepsecs)
- else:
- s.menubar.delete('end')
- s.gettf().setcolor('black')
- return s.sleeping_abort