blob: b6720caaa42a1a9f34124c60e0c6452f7a57cc21 [file] [log] [blame]
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00001##---------------------------------------------------------------------------##
2##
3## idle - about box
4## elguavas
5##
6##---------------------------------------------------------------------------##
7"""
8about box for idle
9"""
10from Tkinter import *
Steven M. Gava885c0bb2001-07-31 10:44:35 +000011import string, os
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000012import textView
13import idlever
14class AboutDialog(Toplevel):
Steven M. Gava885c0bb2001-07-31 10:44:35 +000015 """
16 modal about dialog for idle
17 """
18 def __init__(self,parent,title):
19 Toplevel.__init__(self, parent)
20 self.configure(borderwidth=5)
21 self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
22 parent.winfo_rooty()+30))
23 #elguavas - config placeholders til config stuff completed
24 self.bg="#555555"
25 self.fg="#ffffff"
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000026 #no ugly bold default font on *nix
27 font=Label().cget('font')
28 if os.name=='posix':
29 lFont=font.split()
30 if len(lFont) == 2: lFont=lFont+['normal']
31 else: lFont[2]='normal'
32 font=tuple(lFont)
33 self.textFont=font
34
Steven M. Gava885c0bb2001-07-31 10:44:35 +000035 self.CreateWidgets()
36 self.resizable(height=FALSE,width=FALSE)
37 self.title(title)
38 self.transient(parent)
39 self.grab_set()
40 self.protocol("WM_DELETE_WINDOW", self.Ok)
41 self.parent = parent
42 self.buttonOk.focus_set()
43 #key bindings for this dialog
44 self.bind('<Alt-c>',self.CreditsButtonBinding) #credits button
45 #self.bind('<Alt-l>',self.LicenseButtonBinding) #license button
46 self.bind('<Alt-r>',self.LicenseButtonBinding) #readme button
47 self.bind('<Return>',self.Ok) #dismiss dialog
48 self.bind('<Escape>',self.Ok) #dismiss dialog
49 self.wait_window()
50
51 def CreateWidgets(self):
52 frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
53 frameButtons = Frame(self)
54 frameButtons.pack(side=BOTTOM,fill=X)
55 frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
56 self.buttonOk = Button(frameButtons,text='Ok',
57 command=self.Ok)#,default=ACTIVE
58 self.buttonOk.pack(padx=5,pady=5)
59 #self.picture = Image('photo',data=self.pictureData)
60 frameBg = Frame(frameMain,bg=self.bg)
61 frameBg.pack(expand=TRUE,fill=BOTH)
62 labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg,
63 font=('courier', 24, 'bold'))
64 labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10)
65 #labelPicture = Label(frameBg,text='[picture]')
66 #image=self.picture,bg=self.bg)
67 #labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3)
68 labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION,
69 fg=self.fg,bg=self.bg,font=self.textFont)
70 labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000071 labelDesc = Label(frameBg,
Steven M. Gava885c0bb2001-07-31 10:44:35 +000072 text="A development version of Python's lightweight\n"+
73 'Integrated DeveLopment Environment, IDLE.',
74 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000075 labelDesc.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
76 labelCopyright = Label(frameBg,
77 text="Copyright (c) 2001 Python Software Foundation;\nAll Rights Reserved",
Steven M. Gava885c0bb2001-07-31 10:44:35 +000078 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000079 labelCopyright.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
80 labelLicense = Label(frameBg,
81 text='Released under the Python 2.1.1 PSF Licence',
82 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
83 labelLicense.grid(row=4,column=0,sticky=W,columnspan=3,padx=10,pady=5)
84 framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=5,column=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000085 labelEmail = Label(frameBg,text='email: idle-dev@python.org',
86 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000087 labelEmail.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000088 labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net',
89 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000090 labelWWW.grid(row=7,column=0,columnspan=2,sticky=W,padx=10,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000091 frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN,
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000092 height=2,bg=self.bg).grid(row=8,column=0,sticky=(E,W),columnspan=3,
Steven M. Gava885c0bb2001-07-31 10:44:35 +000093 padx=5,pady=5)
94 labelPythonVer = Label(frameBg,text='Python version: '+
95 sys.version.split()[0],fg=self.fg,bg=self.bg,font=self.textFont)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +000096 labelPythonVer.grid(row=9,column=0,sticky=W,padx=10,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +000097 #handle weird tk version num in windoze python >= 1.6 (?!?)
98 tkVer = `TkVersion`.split('.')
99 tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:]
100 if tkVer[len(tkVer)-1] == '':
101 tkVer[len(tkVer)-1] = '0'
102 tkVer = string.join(tkVer,'.')
103 labelTkVer = Label(frameBg,text='Tk version: '+tkVer,fg=self.fg,bg=self.bg,
104 font=self.textFont)
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +0000105 labelTkVer.grid(row=9,column=1,sticky=W,padx=2,pady=0)
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000106 #labelOs = Label(frameBg,text='python os name: '+pyching.os,
107 # font=self.fontText,fg=self.fg,bg=self.bg)
108 #labelOs.grid(row=6,column=0,sticky=W,padx=10,pady=0)
109 #labelOsType = Label(frameBg,text='python os type: '+pyching.osType,
110 # font=self.fontText,fg=self.fg,bg=self.bg)
111 #labelOsType.grid(row=6,column=1,sticky=W,padx=5,pady=0)
112 #framePad = Frame(frameBg,bg=self.bg,height=5).grid(row=7,column=0)
113
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +0000114 self.buttonLicense = Button(frameBg,text='View License',underline=5,
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000115 width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +0000116 self.buttonLicense.grid(row=10,column=0,sticky=W,padx=10,pady=10)
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000117 self.buttonCredits = Button(frameBg,text='View Credits',underline=5,
118 width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +0000119 self.buttonCredits.grid(row=10,column=1,columnspan=2,sticky=E,padx=10,pady=10)
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000120
121 def CreditsButtonBinding(self,event):
122 self.buttonCredits.invoke()
123
124 def LicenseButtonBinding(self,event):
125 self.buttonLicense.invoke()
126
127 def ShowLicense(self):
Steven M. Gava5b3ac8f2001-08-11 07:45:28 +0000128 self.ViewFile('About - License','LICENSE.txt')
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000129
130 def ShowCredits(self):
131 self.ViewFile('About - Credits','CREDITS.txt')
132
133 def ViewFile(self,viewTitle,viewFile):
134 fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),viewFile)
135 textView.TextViewer(self,viewTitle,fn)
136
137 def Ok(self, event=None):
138 self.destroy()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000139
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000140if __name__ == '__main__':
Steven M. Gava885c0bb2001-07-31 10:44:35 +0000141 #test the dialog
142 root=Tk()
143 def run():
144 import aboutDialog
145 aboutDialog.AboutDialog(root,'About')
146 Button(root,text='Dialog',command=run).pack()
147 root.mainloop()