| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | Dialog that allows user to specify a new config file section name. | 
					
						
							|  |  |  | Used to get new highlight theme and keybinding set names. | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  | The 'return value' for the dialog, used two placed in configDialog.py, | 
					
						
							|  |  |  | is the .result attribute set in the Ok and Cancel methods. | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  | """
 | 
					
						
							| 
									
										
										
										
											2008-05-17 18:39:55 +00:00
										 |  |  | from tkinter import * | 
					
						
							|  |  |  | import tkinter.messagebox as tkMessageBox | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class GetCfgSectionNameDialog(Toplevel): | 
					
						
							| 
									
										
										
										
											2014-05-11 23:32:32 -04:00
										 |  |  |     def __init__(self, parent, title, message, used_names, _htest=False): | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         message - string, informational message to display | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         used_names - string collection, names already in use for validity check | 
					
						
							| 
									
										
										
										
											2014-05-11 23:32:32 -04:00
										 |  |  |         _htest - bool, change box location when running htest | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         Toplevel.__init__(self, parent) | 
					
						
							|  |  |  |         self.configure(borderwidth=5) | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         self.resizable(height=FALSE, width=FALSE) | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         self.title(title) | 
					
						
							|  |  |  |         self.transient(parent) | 
					
						
							|  |  |  |         self.grab_set() | 
					
						
							|  |  |  |         self.protocol("WM_DELETE_WINDOW", self.Cancel) | 
					
						
							|  |  |  |         self.parent = parent | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         self.message = message | 
					
						
							|  |  |  |         self.used_names = used_names | 
					
						
							|  |  |  |         self.create_widgets() | 
					
						
							|  |  |  |         self.withdraw()  #hide while setting geometry | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         self.update_idletasks() | 
					
						
							|  |  |  |         #needs to be done here so that the winfo_reqwidth is valid | 
					
						
							|  |  |  |         self.messageInfo.config(width=self.frameMain.winfo_reqwidth()) | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         self.geometry( | 
					
						
							|  |  |  |                 "+%d+%d" % ( | 
					
						
							| 
									
										
										
										
											2014-05-11 23:32:32 -04:00
										 |  |  |                     parent.winfo_rootx() + | 
					
						
							|  |  |  |                     (parent.winfo_width()/2 - self.winfo_reqwidth()/2), | 
					
						
							|  |  |  |                     parent.winfo_rooty() + | 
					
						
							|  |  |  |                     ((parent.winfo_height()/2 - self.winfo_reqheight()/2) | 
					
						
							|  |  |  |                     if not _htest else 100) | 
					
						
							|  |  |  |                 ) )  #centre dialog over parent (or below htest box) | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         self.deiconify()  #geometry set, unhide | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         self.wait_window() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |     def create_widgets(self): | 
					
						
							|  |  |  |         self.name = StringVar(self.parent) | 
					
						
							|  |  |  |         self.fontSize = StringVar(self.parent) | 
					
						
							|  |  |  |         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) | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         entryName.focus_set() | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         self.messageInfo.pack(padx=5, pady=5) #, expand=TRUE, fill=BOTH) | 
					
						
							|  |  |  |         entryName.pack(padx=5, pady=5) | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         frameButtons = Frame(self, pady=2) | 
					
						
							|  |  |  |         frameButtons.pack(side=BOTTOM) | 
					
						
							|  |  |  |         self.buttonOk = Button(frameButtons, text='Ok', | 
					
						
							|  |  |  |                 width=8, command=self.Ok) | 
					
						
							|  |  |  |         self.buttonOk.pack(side=LEFT, padx=5) | 
					
						
							|  |  |  |         self.buttonCancel = Button(frameButtons, text='Cancel', | 
					
						
							|  |  |  |                 width=8, command=self.Cancel) | 
					
						
							|  |  |  |         self.buttonCancel.pack(side=RIGHT, padx=5) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def name_ok(self): | 
					
						
							|  |  |  |         ''' After stripping entered name, check that it is a  sensible
 | 
					
						
							|  |  |  |         ConfigParser file section name. Return it if it is, '' if not. | 
					
						
							|  |  |  |         '''
 | 
					
						
							|  |  |  |         name = self.name.get().strip() | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         if not name: #no name specified | 
					
						
							|  |  |  |             tkMessageBox.showerror(title='Name Error', | 
					
						
							| 
									
										
										
										
											2003-01-14 22:03:31 +00:00
										 |  |  |                     message='No name specified.', parent=self) | 
					
						
							| 
									
										
										
										
											2002-02-05 04:52:32 +00:00
										 |  |  |         elif len(name)>30: #name too long | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |             tkMessageBox.showerror(title='Name Error', | 
					
						
							| 
									
										
										
										
											2002-02-05 04:52:32 +00:00
										 |  |  |                     message='Name too long. It should be no more than '+ | 
					
						
							| 
									
										
										
										
											2003-01-14 22:03:31 +00:00
										 |  |  |                     '30 characters.', parent=self) | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |             name = '' | 
					
						
							|  |  |  |         elif name in self.used_names: | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |             tkMessageBox.showerror(title='Name Error', | 
					
						
							| 
									
										
										
										
											2003-01-14 22:03:31 +00:00
										 |  |  |                     message='This name is already in use.', parent=self) | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |             name = '' | 
					
						
							|  |  |  |         return name | 
					
						
							| 
									
										
										
										
											2002-12-31 16:03:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |     def Ok(self, event=None): | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         name = self.name_ok() | 
					
						
							|  |  |  |         if name: | 
					
						
							|  |  |  |             self.result = name | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |             self.destroy() | 
					
						
							| 
									
										
										
										
											2002-12-31 16:03:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |     def Cancel(self, event=None): | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |         self.result = '' | 
					
						
							| 
									
										
										
										
											2002-01-24 05:59:05 +00:00
										 |  |  |         self.destroy() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2013-06-05 14:22:26 -04:00
										 |  |  |     import unittest | 
					
						
							|  |  |  |     unittest.main('idlelib.idle_test.test_config_name', verbosity=2, exit=False) | 
					
						
							| 
									
										
										
										
											2013-06-05 14:36:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-11 23:32:32 -04:00
										 |  |  |     from idlelib.idle_test.htest import run | 
					
						
							|  |  |  |     run(GetCfgSectionNameDialog) |