mirror of
https://github.com/python/cpython.git
synced 2025-07-21 02:05:20 +00:00

M EditorWindow.py M NEWS.txt M config-main.def M configDialog.py M configHandler.py M configHelpSourceEdit.py M configSectionNameDialog.py - Change default: IDLE now starts with Python Shell. - Removed the File Path from the Additional Help Sources scrolled list. - Add capability to access Additional Help Sources on the web if the Help File Path begins with //http or www. (Otherwise local path is validated, as before.) - Additional Help Sources were not being posted on the Help menu in the order entered. Implement sorting the list by [HelpFiles] 'option' number. - Add Browse button to New Help Source dialog. Arrange to start in Python/Doc if platform is Windows, otherwise start in current directory. - Put the Additional Help Sources directly on the Help menu instead of in an Extra Help cascade menu. Rearrange the Help menu so the Additional Help Sources come last. Update help.txt appropriately. - Fix Tk root pop-ups in configSectionNameDialog.py and configDialog.py
97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
"""
|
|
Dialog that allows user to specify a new config file section name.
|
|
Used to get new highlight theme and keybinding set names.
|
|
"""
|
|
from Tkinter import *
|
|
import tkMessageBox
|
|
|
|
class GetCfgSectionNameDialog(Toplevel):
|
|
def __init__(self,parent,title,message,usedNames):
|
|
"""
|
|
message - string, informational message to display
|
|
usedNames - list, list of names already in use for validity check
|
|
"""
|
|
Toplevel.__init__(self, parent)
|
|
self.configure(borderwidth=5)
|
|
self.resizable(height=FALSE,width=FALSE)
|
|
self.title(title)
|
|
self.transient(parent)
|
|
self.grab_set()
|
|
self.protocol("WM_DELETE_WINDOW", self.Cancel)
|
|
self.parent = parent
|
|
self.message=message
|
|
self.usedNames=usedNames
|
|
self.result=''
|
|
self.CreateWidgets()
|
|
self.withdraw() #hide while setting geometry
|
|
self.update_idletasks()
|
|
#needs to be done here so that the winfo_reqwidth is valid
|
|
self.messageInfo.config(width=self.frameMain.winfo_reqwidth())
|
|
self.geometry("+%d+%d" %
|
|
((parent.winfo_rootx()+((parent.winfo_width()/2)
|
|
-(self.winfo_reqwidth()/2)),
|
|
parent.winfo_rooty()+((parent.winfo_height()/2)
|
|
-(self.winfo_reqheight()/2)) )) ) #centre dialog over parent
|
|
self.deiconify() #geometry set, unhide
|
|
self.wait_window()
|
|
|
|
def CreateWidgets(self):
|
|
self.name=StringVar(self)
|
|
self.fontSize=StringVar(self)
|
|
self.frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
|
|
self.frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
|
|
self.messageInfo=Message(self.frameMain,anchor=W,justify=LEFT,padx=5,pady=5,
|
|
text=self.message)#,aspect=200)
|
|
entryName=Entry(self.frameMain,textvariable=self.name,width=30)
|
|
entryName.focus_set()
|
|
self.messageInfo.pack(padx=5,pady=5)#,expand=TRUE,fill=BOTH)
|
|
entryName.pack(padx=5,pady=5)
|
|
frameButtons=Frame(self)
|
|
frameButtons.pack(side=BOTTOM,fill=X)
|
|
self.buttonOk = Button(frameButtons,text='Ok',
|
|
width=8,command=self.Ok)
|
|
self.buttonOk.grid(row=0,column=0,padx=5,pady=5)
|
|
self.buttonCancel = Button(frameButtons,text='Cancel',
|
|
width=8,command=self.Cancel)
|
|
self.buttonCancel.grid(row=0,column=1,padx=5,pady=5)
|
|
|
|
def NameOk(self):
|
|
#simple validity check for a sensible
|
|
#ConfigParser file section name
|
|
nameOk=1
|
|
name=self.name.get()
|
|
name.strip()
|
|
if not name: #no name specified
|
|
tkMessageBox.showerror(title='Name Error',
|
|
message='No name specified.', parent=self)
|
|
nameOk=0
|
|
elif len(name)>30: #name too long
|
|
tkMessageBox.showerror(title='Name Error',
|
|
message='Name too long. It should be no more than '+
|
|
'30 characters.', parent=self)
|
|
nameOk=0
|
|
elif name in self.usedNames:
|
|
tkMessageBox.showerror(title='Name Error',
|
|
message='This name is already in use.', parent=self)
|
|
nameOk=0
|
|
return nameOk
|
|
|
|
def Ok(self, event=None):
|
|
if self.NameOk():
|
|
self.result=self.name.get().strip()
|
|
self.destroy()
|
|
|
|
def Cancel(self, event=None):
|
|
self.result=''
|
|
self.destroy()
|
|
|
|
if __name__ == '__main__':
|
|
#test the dialog
|
|
root=Tk()
|
|
def run():
|
|
keySeq=''
|
|
dlg=GetCfgSectionNameDialog(root,'Get Name',
|
|
'The information here should need to be word wrapped. Test.')
|
|
print dlg.result
|
|
Button(root,text='Dialog',command=run).pack()
|
|
root.mainloop()
|