| 
									
										
										
										
											2002-02-05 04:52:32 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | Dialog that allows user to specify or edit the parameters for a user configured | 
					
						
							|  |  |  | help source. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | from Tkinter import * | 
					
						
							|  |  |  | import tkMessageBox | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GetHelpSourceDialog(Toplevel): | 
					
						
							|  |  |  |     def __init__(self,parent,title,menuItem='',filePath=''): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         menuItem - string, the menu item to edit, if any | 
					
						
							|  |  |  |         filePath - string, the help file path to edit, if any | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         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.result=None | 
					
						
							|  |  |  |         self.CreateWidgets() | 
					
						
							| 
									
										
										
										
											2002-03-27 02:25:44 +00:00
										 |  |  |         self.menu.set(menuItem) | 
					
						
							|  |  |  |         self.path.set(filePath) | 
					
						
							| 
									
										
										
										
											2002-02-05 04:52:32 +00:00
										 |  |  |         self.withdraw() #hide while setting geometry | 
					
						
							|  |  |  |         self.update_idletasks() | 
					
						
							|  |  |  |         #needs to be done here so that the winfo_reqwidth is valid | 
					
						
							|  |  |  |         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.menu=StringVar(self) | 
					
						
							|  |  |  |         self.path=StringVar(self) | 
					
						
							|  |  |  |         self.fontSize=StringVar(self) | 
					
						
							|  |  |  |         self.frameMain = Frame(self,borderwidth=2,relief=SUNKEN) | 
					
						
							|  |  |  |         self.frameMain.pack(side=TOP,expand=TRUE,fill=BOTH) | 
					
						
							|  |  |  |         labelMenu=Label(self.frameMain,anchor=W,justify=LEFT, | 
					
						
							|  |  |  |                 text='Menu Item:') | 
					
						
							|  |  |  |         self.entryMenu=Entry(self.frameMain,textvariable=self.menu,width=30) | 
					
						
							|  |  |  |         self.entryMenu.focus_set() | 
					
						
							|  |  |  |         labelPath=Label(self.frameMain,anchor=W,justify=LEFT, | 
					
						
							|  |  |  |                 text='Help File Path:') | 
					
						
							|  |  |  |         self.entryPath=Entry(self.frameMain,textvariable=self.path,width=40) | 
					
						
							|  |  |  |         self.entryMenu.focus_set() | 
					
						
							|  |  |  |         labelMenu.pack(anchor=W,padx=5,pady=3) | 
					
						
							|  |  |  |         self.entryMenu.pack(anchor=W,padx=5,pady=3) | 
					
						
							|  |  |  |         labelPath.pack(anchor=W,padx=5,pady=3) | 
					
						
							|  |  |  |         self.entryPath.pack(anchor=W,padx=5,pady=3) | 
					
						
							|  |  |  |         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 MenuOk(self): | 
					
						
							|  |  |  |         #simple validity check for a sensible  | 
					
						
							|  |  |  |         #menu item name | 
					
						
							|  |  |  |         menuOk=1 | 
					
						
							|  |  |  |         menu=self.menu.get() | 
					
						
							|  |  |  |         menu.strip() | 
					
						
							|  |  |  |         if not menu: #no menu item specified | 
					
						
							|  |  |  |             tkMessageBox.showerror(title='Menu Item Error', | 
					
						
							|  |  |  |                     message='No menu item specified.') | 
					
						
							|  |  |  |             self.entryMenu.focus_set() | 
					
						
							|  |  |  |             menuOk=0 | 
					
						
							|  |  |  |         elif len(menu)>30: #menu item name too long | 
					
						
							|  |  |  |             tkMessageBox.showerror(title='Menu Item Error', | 
					
						
							|  |  |  |                     message='Menu item too long. It should be no more '+ | 
					
						
							|  |  |  |                     'than 30 characters.') | 
					
						
							|  |  |  |             self.entryMenu.focus_set() | 
					
						
							|  |  |  |             menuOk=0 | 
					
						
							|  |  |  |         return menuOk | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     def PathOk(self): | 
					
						
							|  |  |  |         #simple validity check for menu file path  | 
					
						
							|  |  |  |         pathOk=1 | 
					
						
							|  |  |  |         path=self.path.get() | 
					
						
							|  |  |  |         path.strip() | 
					
						
							|  |  |  |         if not path: #no path specified | 
					
						
							|  |  |  |             tkMessageBox.showerror(title='File Path Error', | 
					
						
							|  |  |  |                     message='No help file path specified.') | 
					
						
							|  |  |  |             self.entryPath.focus_set() | 
					
						
							|  |  |  |             pathOk=0 | 
					
						
							|  |  |  |         elif not os.path.exists(path): | 
					
						
							|  |  |  |             tkMessageBox.showerror(title='File Path Error', | 
					
						
							|  |  |  |                     message='Help file path does not exist.') | 
					
						
							|  |  |  |             self.entryPath.focus_set() | 
					
						
							|  |  |  |             pathOk=0 | 
					
						
							|  |  |  |         return pathOk | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |     def Ok(self, event=None): | 
					
						
							|  |  |  |         if self.MenuOk(): | 
					
						
							|  |  |  |             if self.PathOk(): | 
					
						
							|  |  |  |                 self.result=( self.menu.get().strip(),self.path.get().strip() )  | 
					
						
							|  |  |  |                 self.destroy() | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |     def Cancel(self, event=None): | 
					
						
							|  |  |  |         self.result=None | 
					
						
							|  |  |  |         self.destroy() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     #test the dialog | 
					
						
							|  |  |  |     root=Tk() | 
					
						
							|  |  |  |     def run(): | 
					
						
							|  |  |  |         keySeq='' | 
					
						
							|  |  |  |         dlg=GetHelpSourceDialog(root,'Get Help Source') | 
					
						
							|  |  |  |         print dlg.result | 
					
						
							|  |  |  |     Button(root,text='Dialog',command=run).pack() | 
					
						
							|  |  |  |     root.mainloop() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |   |