some new dialogs and support files for new about and configuration implementations

This commit is contained in:
Steven M. Gava 2001-07-31 06:59:02 +00:00
parent 0fbca4aaf0
commit 44d3d1a394
4 changed files with 365 additions and 0 deletions

17
Lib/idlelib/CREDITS.txt Normal file
View File

@ -0,0 +1,17 @@
IDLEfork Credits
==================
Guido van Rossum, as well as being the creator of the Python language, was
the original creator of IDLE. His great work continues as both a contributor
to, and 'benevolent dictator for life' of Python and IDLE/IDLEfork.
The main developers who have been so far active on IDLEfork version 0.8.1
and greater are, Guido van Rossum, Stephen M. Gava and Kurt B. Kaiser.
The IDLE fork project was initiated and brought up to version 0.7.1 by
David Scherer, Peter Schneider-Kamp and Nicholas Riley.
There are doubtless others who should be included here, especially those
who may have contributed to IDLE versions prior ot 0.8. Please contact
the IDLEfork coordinator to have yourself included here if you are one of
those I have missed! (contact details at http://idlefork.sourceforge.net)

133
Lib/idlelib/aboutDialog.py Normal file
View File

@ -0,0 +1,133 @@
##---------------------------------------------------------------------------##
##
## idle - about box
## elguavas
##
##---------------------------------------------------------------------------##
"""
about box for idle
"""
from Tkinter import *
import string
import textView
import idlever
class AboutDialog(Toplevel):
"""
modal about dialog for idle
"""
def __init__(self,parent,title):
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
parent.winfo_rooty()+30))
#elguavas - config placeholders til config stuff completed
self.bg="#555555"
self.fg="#ffffff"
#no ugly bold default text font on *nix
self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',)
self.CreateWidgets()
self.resizable(height=FALSE,width=FALSE)
self.title(title)
self.transient(parent)
self.grab_set()
self.protocol("WM_DELETE_WINDOW", self.Ok)
self.parent = parent
self.buttonOk.focus_set()
#key bindings for this dialog
self.bind('<Alt-c>',self.CreditsButtonBinding) #credits button
#self.bind('<Alt-l>',self.LicenseButtonBinding) #license button
self.bind('<Alt-r>',self.LicenseButtonBinding) #readme button
self.bind('<Return>',self.Ok) #dismiss dialog
self.bind('<Escape>',self.Ok) #dismiss dialog
self.wait_window()
def CreateWidgets(self):
frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
frameButtons = Frame(self)
frameButtons.pack(side=BOTTOM,fill=X)
frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
self.buttonOk = Button(frameButtons,text='Ok',
command=self.Ok)#,default=ACTIVE
self.buttonOk.pack(padx=5,pady=5)
#self.picture = Image('photo',data=self.pictureData)
frameBg = Frame(frameMain,bg=self.bg)
frameBg.pack(expand=TRUE,fill=BOTH)
labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg,
font=('courier', 24, 'bold'))
labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10)
#labelPicture = Label(frameBg,text='[picture]')
#image=self.picture,bg=self.bg)
#labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3)
labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION,
fg=self.fg,bg=self.bg,font=self.textFont)
labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5)
labelCopyright = Label(frameBg,
text="A development version of Python's lightweight\n"+
'Integrated DeveLopment Environment, IDLE.',
justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
labelCopyright.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
labelLicense = Label(frameBg,
text='Licenced under the Python 2.1.1 PSF Licence\n'+
'(a GPL compatible licence with extra freedoms)',
justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
labelLicense.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=4,column=0)
labelEmail = Label(frameBg,text='email: idle-dev@python.org',
justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
labelEmail.grid(row=5,column=0,columnspan=2,sticky=W,padx=10,pady=0)
labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net',
justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
labelWWW.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN,
height=2,bg=self.bg).grid(row=7,column=0,sticky=(E,W),columnspan=3,
padx=5,pady=5)
labelPythonVer = Label(frameBg,text='Python version: '+
sys.version.split()[0],fg=self.fg,bg=self.bg,font=self.textFont)
labelPythonVer.grid(row=8,column=0,sticky=W,padx=10,pady=0)
#handle weird tk version num in windoze python >= 1.6 (?!?)
tkVer = `TkVersion`.split('.')
tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:]
if tkVer[len(tkVer)-1] == '':
tkVer[len(tkVer)-1] = '0'
tkVer = string.join(tkVer,'.')
labelTkVer = Label(frameBg,text='Tk version: '+tkVer,fg=self.fg,bg=self.bg,
font=self.textFont)
labelTkVer.grid(row=8,column=1,sticky=W,padx=2,pady=0)
#labelOs = Label(frameBg,text='python os name: '+pyching.os,
# font=self.fontText,fg=self.fg,bg=self.bg)
#labelOs.grid(row=6,column=0,sticky=W,padx=10,pady=0)
#labelOsType = Label(frameBg,text='python os type: '+pyching.osType,
# font=self.fontText,fg=self.fg,bg=self.bg)
#labelOsType.grid(row=6,column=1,sticky=W,padx=5,pady=0)
#framePad = Frame(frameBg,bg=self.bg,height=5).grid(row=7,column=0)
self.buttonLicense = Button(frameBg,text='View Readme',underline=5,
width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE
self.buttonLicense.grid(row=9,column=0,sticky=W,padx=10,pady=10)
self.buttonCredits = Button(frameBg,text='View Credits',underline=5,
width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE
self.buttonCredits.grid(row=9,column=1,columnspan=2,sticky=E,padx=10,pady=10)
def CreditsButtonBinding(self,event):
self.buttonCredits.invoke()
def LicenseButtonBinding(self,event):
self.buttonLicense.invoke()
def ShowLicense(self):
textView.TextViewer(self,title='About - Readme',
fileName='./README.txt')
def ShowCredits(self):
textView.TextViewer(self,title='About - Credits',
fileName='./CREDITS.txt')
def Ok(self, event=None):
self.destroy()
if __name__ == '__main__':
#test the dialog
root=Tk()
Button(root,text='About',command=lambda:AboutDialog(root,'About')).pack()
root.mainloop()

138
Lib/idlelib/configDialog.py Normal file
View File

@ -0,0 +1,138 @@
##---------------------------------------------------------------------------##
##
## idle - configuration dialog
## elguavas
##
##---------------------------------------------------------------------------##
"""
configuration dialog
"""
from Tkinter import *
import tkMessageBox
class ConfigDialog(Toplevel):
"""
configuration dialog for idle
"""
def __init__(self,parent,title,configDict):
"""
configDict - dictionary of configuration items
"""
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
self.geometry("+%d+%d" % (parent.winfo_rootx()+20,
parent.winfo_rooty()+30))
self.config=configDict
#elguavas - config placeholders til config stuff completed
self.bg=self.cget('bg')
self.fg=None
#no ugly bold default text font on *nix
self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',)
self.CreateWidgets()
self.resizable(height=FALSE,width=FALSE)
self.ChangePage()
self.transient(parent)
self.grab_set()
self.protocol("WM_DELETE_WINDOW", self.Cancel)
self.parent = parent
self.framePages.focus_set()
#key bindings for this dialog
# self.bind('<Return>',self.Ok) #dismiss dialog
self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save
self.bind('<Alt-s>',self.SaveBinding) #dismiss dialog, save
self.bind('<Alt-r>',self.RevertBinding) #revert to defaults
self.bind('<Alt-f>',self.ChangePageBinding)
self.bind('<Alt-c>',self.ChangePageBinding)
self.bind('<Alt-k>',self.ChangePageBinding)
self.bind('<Alt-g>',self.ChangePageBinding)
self.wait_window()
def Cancel(self):
self.destroy()
def Save(self):
pass
def Revert(self):
pass
def ChangePage(self):
self.pages[self.pageNum.get()].lift()
self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text'))
def CancelBinding(self,event):
self.Cancel()
def SaveBinding(self,event):
self.Save()
def RevertBinding(self,event):
self.Revert()
def ChangePageBinding(self,event):
pageKeys=('f','c','k','g')
pos=0
for key in pageKeys:
if event.char == key:
self.pageNum.set(pos)
self.ChangePage()
return
pos=pos+1
def CreateWidgets(self):
self.framePages = Frame(self,borderwidth=2,relief=SUNKEN)
frameActionButtons = Frame(self)
framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN)
#action buttons
self.buttonRevert = Button(frameActionButtons,text='Revert',
command=self.Revert,underline=0,takefocus=FALSE)
self.buttonSave = Button(frameActionButtons,text='Save',
command=self.Save,underline=0,takefocus=FALSE)
self.buttonCancel = Button(frameActionButtons,text='Cancel',
command=self.Cancel,takefocus=FALSE)
#page buttons
self.pageNum=IntVar()
self.pageNum.set(0)
buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts')
buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours')
buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys')
buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General')
self.pageButtons=(buttonPageFonts,buttonPageColours,
buttonPageKeys,buttonPageGeneral)
for button in self.pageButtons:
button.config(command=self.ChangePage,underline=0,takefocus=FALSE,
indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
selectcolor=self.bg,borderwidth=1)
button.pack(side=LEFT)
#pages
framePageFonts=Frame(self.framePages)
framePageColours=Frame(self.framePages)
framePageKeys=Frame(self.framePages)
framePageGeneral=Frame(self.framePages)
self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral)
#pageFonts
Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30)
#pageColours
Button(framePageColours,text='colours page test').pack(padx=60,pady=60)
#pageKeys
Button(framePageKeys,text='keys page test').pack(padx=90,pady=90)
#pageGeneral
Button(framePageGeneral,text='general page test').pack(padx=110,pady=110)
#grid in framePages so we can overlap pages
framePageButtons.grid(row=0,column=0,sticky=W)
for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
self.buttonRevert.pack(side=LEFT,padx=5,pady=5)
self.buttonSave.pack(side=LEFT,padx=5,pady=5)
self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
frameActionButtons.pack(side=BOTTOM)
self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
if __name__ == '__main__':
#test the dialog
root=Tk()
Button(root,text='Dialog',
command=lambda:ConfigDialog(root,'Settings',None)).pack()
root.mainloop()

77
Lib/idlelib/textView.py Normal file
View File

@ -0,0 +1,77 @@
##---------------------------------------------------------------------------##
##
## idle - simple text view dialog
## elguavas
##
##---------------------------------------------------------------------------##
"""
simple text browser for idle
"""
from Tkinter import *
import tkMessageBox
class TextViewer(Toplevel):
"""
simple text viewer dialog for idle
"""
def __init__(self,parent,title,fileName):
"""
fileName - string,should be an absoulute filename
"""
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
self.geometry("+%d+%d" % (parent.winfo_rootx()+10,
parent.winfo_rooty()+10))
#elguavas - config placeholders til config stuff completed
self.bg=None
self.fg=None
self.CreateWidgets()
self.title(title)
self.transient(parent)
self.grab_set()
self.protocol("WM_DELETE_WINDOW", self.Ok)
self.parent = parent
self.textView.focus_set()
#key bindings for this dialog
self.bind('<Return>',self.Ok) #dismiss dialog
self.bind('<Escape>',self.Ok) #dismiss dialog
self.LoadTextFile(fileName)
self.textView.config(state=DISABLED)
self.wait_window()
def LoadTextFile(self, fileName):
textFile = None
try:
textFile = open(fileName, 'r')
except IOError:
tkMessageBox.showerror(title='File Load Error',
message='Unable to load file '+`fileName`+' .')
else:
self.textView.insert(0.0,textFile.read())
def CreateWidgets(self):
frameText = Frame(self)
frameButtons = Frame(self)
self.buttonOk = Button(frameButtons,text='Ok',
command=self.Ok,takefocus=FALSE,default=ACTIVE)
self.scrollbarView = Scrollbar(frameText,orient=VERTICAL,
takefocus=FALSE,highlightthickness=0)
self.textView = Text(frameText,wrap=WORD,highlightthickness=0)
self.scrollbarView.config(command=self.textView.yview)
self.textView.config(yscrollcommand=self.scrollbarView.set)
self.buttonOk.pack(padx=5,pady=5)
self.scrollbarView.pack(side=RIGHT,fill=Y)
self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
frameButtons.pack(side=BOTTOM,fill=X)
frameText.pack(side=TOP,expand=TRUE,fill=BOTH)
def Ok(self, event=None):
self.destroy()
if __name__ == '__main__':
#test the dialog
root=Tk()
Button(root,text='View',
command=lambda:TextViewer(root,'Text','./textView.py')).pack()
root.mainloop()