/head: changeset 108
More work on the UIs
This commit is contained in:
		@@ -49,6 +49,19 @@ accounts = Test
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
maxsyncaccounts = 1
 | 
					maxsyncaccounts = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can specify one or more user interface modules for OfflineIMAP
 | 
				
			||||||
 | 
					# to use.  OfflineIMAP will try the first in the list, and if it
 | 
				
			||||||
 | 
					# fails, the second, and so forth.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The pre-defined options are:
 | 
				
			||||||
 | 
					# Tk.TKUI -- A graphical interface
 | 
				
			||||||
 | 
					# TTY.TTYUI -- a text-based (terminal) interface
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You can override this with a command-line option -u.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ui = Tk.TKUI, TTY.TTYUI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##################################################
 | 
					##################################################
 | 
				
			||||||
# Mailbox name recorder
 | 
					# Mailbox name recorder
 | 
				
			||||||
##################################################
 | 
					##################################################
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,6 +142,15 @@ class ThreadFrame(Frame):
 | 
				
			|||||||
class TkUI(UIBase):
 | 
					class TkUI(UIBase):
 | 
				
			||||||
    def __init__(self, verbose = 0):
 | 
					    def __init__(self, verbose = 0):
 | 
				
			||||||
        self.verbose = verbose
 | 
					        self.verbose = verbose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def isusable(s):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            Tk().destroy()
 | 
				
			||||||
 | 
					            return 1
 | 
				
			||||||
 | 
					        except TclError:
 | 
				
			||||||
 | 
					            return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _createTopWindow(self):
 | 
				
			||||||
        self.top = Tk()
 | 
					        self.top = Tk()
 | 
				
			||||||
        self.top.title(version.productname + " " + version.versionstr)
 | 
					        self.top.title(version.productname + " " + version.versionstr)
 | 
				
			||||||
        self.threadframes = {}
 | 
					        self.threadframes = {}
 | 
				
			||||||
@@ -149,7 +158,7 @@ class TkUI(UIBase):
 | 
				
			|||||||
        self.tflock = Lock()
 | 
					        self.tflock = Lock()
 | 
				
			||||||
        self.notdeleted = 1
 | 
					        self.notdeleted = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        t = threadutil.ExitNotifyThread(target = self.runmainloop,
 | 
					        t = threadutil.ExitNotifyThread(target = self._runmainloop,
 | 
				
			||||||
                                        name = "Tk Mainloop")
 | 
					                                        name = "Tk Mainloop")
 | 
				
			||||||
        t.setDaemon(1)
 | 
					        t.setDaemon(1)
 | 
				
			||||||
        t.start()
 | 
					        t.start()
 | 
				
			||||||
@@ -159,7 +168,7 @@ class TkUI(UIBase):
 | 
				
			|||||||
        t.setDaemon(1)
 | 
					        t.setDaemon(1)
 | 
				
			||||||
        t.start()
 | 
					        t.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def runmainloop(s):
 | 
					    def _runmainloop(s):
 | 
				
			||||||
        s.top.mainloop()
 | 
					        s.top.mainloop()
 | 
				
			||||||
        s.notdeleted = 0
 | 
					        s.notdeleted = 0
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -228,6 +237,7 @@ class TkUI(UIBase):
 | 
				
			|||||||
        TextOKDialog("Main Program Exception", msg)
 | 
					        TextOKDialog("Main Program Exception", msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def init_banner(s):
 | 
					    def init_banner(s):
 | 
				
			||||||
 | 
					        s._createTopWindow()
 | 
				
			||||||
        s._msg(version.productname + " " + version.versionstr + ", " +\
 | 
					        s._msg(version.productname + " " + version.versionstr + ", " +\
 | 
				
			||||||
               version.copyright)
 | 
					               version.copyright)
 | 
				
			||||||
        tf = s.gettf().getthreadextraframe()
 | 
					        tf = s.gettf().getthreadextraframe()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1,29 @@
 | 
				
			|||||||
import TTY, UIBase, Tk
 | 
					# UI module directory
 | 
				
			||||||
 | 
					# Copyright (C) 2002 John Goerzen
 | 
				
			||||||
 | 
					# <jgoerzen@complete.org>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					#    it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					#    the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					#    (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					#    GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					#    along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import TTY, UIBase, detector
 | 
				
			||||||
 | 
					availableUIs = {'TTY': TTY, 'UIBase': UIBase}
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    import Tkinter
 | 
				
			||||||
 | 
					except ImportError:
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    import Tk
 | 
				
			||||||
 | 
					    availableUIs['Tk'] = Tk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								head/offlineimap/ui/detector.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								head/offlineimap/ui/detector.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					# UI base class
 | 
				
			||||||
 | 
					# Copyright (C) 2002 John Goerzen
 | 
				
			||||||
 | 
					# <jgoerzen@complete.org>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					#    it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					#    the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					#    (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					#    GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#    You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					#    along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from offlineimap.ui import *
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def findUI(config):
 | 
				
			||||||
 | 
					    uistrlist = ['Tk.TKUI', 'TTY.TTYUI']
 | 
				
			||||||
 | 
					    if config.has_option("general", "ui"):
 | 
				
			||||||
 | 
					        uistrlist = config.get("general", "ui").replace(" ", "").split(",")
 | 
				
			||||||
 | 
					    for uistr in uistrlist:
 | 
				
			||||||
 | 
					        uimod = getUImod(uistr)
 | 
				
			||||||
 | 
					        if uimod and uimod.isusable():
 | 
				
			||||||
 | 
					            return uimod
 | 
				
			||||||
 | 
					    sys.stderr.write("ERROR: No UIs were found usable!\n")
 | 
				
			||||||
 | 
					    sys.exit(200)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					def getUImod(uistr):
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        uimod = eval(uistr)
 | 
				
			||||||
 | 
					    except AttributeError, NameError:
 | 
				
			||||||
 | 
					        return None
 | 
				
			||||||
 | 
					    return uimod
 | 
				
			||||||
		Reference in New Issue
	
	Block a user