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