blob: 1e1fa9248d65a4229ffcce0e4f0f445016782e0d [file] [log] [blame]
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00001"""
2about box for idle
3"""
4from Tkinter import *
Steven M. Gavac01e30f2001-08-11 15:48:13 +00005import tkFont
Steven M. Gava885c0bb2001-07-31 10:44:35 +00006import string, os
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00007import textView
8import idlever
9class AboutDialog(Toplevel):
Steven M. Gava885c0bb2001-07-31 10:44:35 +000010 """
11 modal about dialog for idle
12 """
13 def __init__(self,parent,title):
14 Toplevel.__init__(self, parent)
15 self.configure(borderwidth=5)
16 self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
17 parent.winfo_rooty()+30))
Steven M. Gava767a7ee2002-01-03 12:04:01 +000018 self.bg="#707070"
Steven M. Gava885c0bb2001-07-31 10:44:35 +000019 self.fg="#ffffff"
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000020
Steven M. Gava885c0bb2001-07-31 10:44:35 +000021 self.CreateWidgets()
22 self.resizable(height=FALSE,width=FALSE)
23 self.title(title)
24 self.transient(parent)
25 self.grab_set()
26 self.protocol("WM_DELETE_WINDOW", self.Ok)
27 self.parent = parent
28 self.buttonOk.focus_set()
29 #key bindings for this dialog
30 self.bind('<Alt-c>',self.CreditsButtonBinding) #credits button
Steven M. Gava8c1ab142001-11-21 05:58:24 +000031 self.bind('<Alt-l>',self.LicenseButtonBinding) #license button
Steven M. Gava885c0bb2001-07-31 10:44:35 +000032 self.bind('<Return>',self.Ok) #dismiss dialog
33 self.bind('<Escape>',self.Ok) #dismiss dialog
34 self.wait_window()
35
36 def CreateWidgets(self):
37 frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
38 frameButtons = Frame(self)
39 frameButtons.pack(side=BOTTOM,fill=X)
40 frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
41 self.buttonOk = Button(frameButtons,text='Ok',
42 command=self.Ok)#,default=ACTIVE
43 self.buttonOk.pack(padx=5,pady=5)
44 #self.picture = Image('photo',data=self.pictureData)
45 frameBg = Frame(frameMain,bg=self.bg)
46 frameBg.pack(expand=TRUE,fill=BOTH)
47 labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg,
48 font=('courier', 24, 'bold'))
49 labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10)
50 #labelPicture = Label(frameBg,text='[picture]')
51 #image=self.picture,bg=self.bg)
52 #labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3)
53 labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION,
Steven M. Gava767a7ee2002-01-03 12:04:01 +000054 fg=self.fg,bg=self.bg)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000055 labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000056 labelDesc = Label(frameBg,
Steven M. Gava885c0bb2001-07-31 10:44:35 +000057 text="A development version of Python's lightweight\n"+
58 'Integrated DeveLopment Environment, IDLE.',
Steven M. Gava767a7ee2002-01-03 12:04:01 +000059 justify=LEFT,fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000060 labelDesc.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
61 labelCopyright = Label(frameBg,
62 text="Copyright (c) 2001 Python Software Foundation;\nAll Rights Reserved",
Steven M. Gava767a7ee2002-01-03 12:04:01 +000063 justify=LEFT,fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000064 labelCopyright.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
65 labelLicense = Label(frameBg,
66 text='Released under the Python 2.1.1 PSF Licence',
Steven M. Gava767a7ee2002-01-03 12:04:01 +000067 justify=LEFT,fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000068 labelLicense.grid(row=4,column=0,sticky=W,columnspan=3,padx=10,pady=5)
69 framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=5,column=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000070 labelEmail = Label(frameBg,text='email: idle-dev@python.org',
Steven M. Gava767a7ee2002-01-03 12:04:01 +000071 justify=LEFT,fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000072 labelEmail.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000073 labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net',
Steven M. Gava767a7ee2002-01-03 12:04:01 +000074 justify=LEFT,fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000075 labelWWW.grid(row=7,column=0,columnspan=2,sticky=W,padx=10,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000076 frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN,
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000077 height=2,bg=self.bg).grid(row=8,column=0,sticky=(E,W),columnspan=3,
Steven M. Gava885c0bb2001-07-31 10:44:35 +000078 padx=5,pady=5)
79 labelPythonVer = Label(frameBg,text='Python version: '+
Steven M. Gava767a7ee2002-01-03 12:04:01 +000080 sys.version.split()[0],fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000081 labelPythonVer.grid(row=9,column=0,sticky=W,padx=10,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000082 #handle weird tk version num in windoze python >= 1.6 (?!?)
83 tkVer = `TkVersion`.split('.')
84 tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:]
85 if tkVer[len(tkVer)-1] == '':
86 tkVer[len(tkVer)-1] = '0'
87 tkVer = string.join(tkVer,'.')
Steven M. Gava767a7ee2002-01-03 12:04:01 +000088 labelTkVer = Label(frameBg,text='Tk version: '+
89 tkVer,fg=self.fg,bg=self.bg)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000090 labelTkVer.grid(row=9,column=1,sticky=W,padx=2,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000091
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000092 self.buttonLicense = Button(frameBg,text='View License',underline=5,
Steven M. Gava885c0bb2001-07-31 10:44:35 +000093 width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000094 self.buttonLicense.grid(row=10,column=0,sticky=W,padx=10,pady=10)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000095 self.buttonCredits = Button(frameBg,text='View Credits',underline=5,
96 width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000097 self.buttonCredits.grid(row=10,column=1,columnspan=2,sticky=E,padx=10,pady=10)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000098
99 def CreditsButtonBinding(self,event):
100 self.buttonCredits.invoke()
101
102 def LicenseButtonBinding(self,event):
103 self.buttonLicense.invoke()
104
105 def ShowLicense(self):
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +0000106 self.ViewFile('About - License','LICENSE.txt')
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000107
108 def ShowCredits(self):
109 self.ViewFile('About - Credits','CREDITS.txt')
110
111 def ViewFile(self,viewTitle,viewFile):
112 fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),viewFile)
113 textView.TextViewer(self,viewTitle,fn)
114
115 def Ok(self, event=None):
116 self.destroy()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000117
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000118if __name__ == '__main__':
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000119 #test the dialog
120 root=Tk()
121 def run():
122 import aboutDialog
123 aboutDialog.AboutDialog(root,'About')
124 Button(root,text='Dialog',command=run).pack()
125 root.mainloop()