blob: bd799dac4e4587e11e86db24d7b8961b1b616695 [file] [log] [blame]
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +00001"Dialog to specify or edit the parameters for a user configured help source."
2
Steven M. Gava085eb1b2002-02-05 04:52:32 +00003from Tkinter import *
4import tkMessageBox
5import os
6
7class GetHelpSourceDialog(Toplevel):
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +00008 def __init__(self, parent, title, menuItem='', filePath=''):
Steven M. Gava085eb1b2002-02-05 04:52:32 +00009 """
10 menuItem - string, the menu item to edit, if any
11 filePath - string, the help file path to edit, if any
12 """
13 Toplevel.__init__(self, parent)
14 self.configure(borderwidth=5)
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000015 self.resizable(height=FALSE, width=FALSE)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000016 self.title(title)
17 self.transient(parent)
18 self.grab_set()
19 self.protocol("WM_DELETE_WINDOW", self.Cancel)
20 self.parent = parent
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000021 self.result = None
Steven M. Gava085eb1b2002-02-05 04:52:32 +000022 self.CreateWidgets()
Steven M. Gava0c5bc8c2002-03-27 02:25:44 +000023 self.menu.set(menuItem)
24 self.path.set(filePath)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000025 self.withdraw() #hide while setting geometry
Steven M. Gava085eb1b2002-02-05 04:52:32 +000026 #needs to be done here so that the winfo_reqwidth is valid
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000027 self.update_idletasks()
28 #centre dialog over parent:
Kurt B. Kaiser6655e4b2002-12-31 16:03:23 +000029 self.geometry("+%d+%d" %
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000030 ((parent.winfo_rootx() + ((parent.winfo_width()/2)
31 -(self.winfo_reqwidth()/2)),
32 parent.winfo_rooty() + ((parent.winfo_height()/2)
33 -(self.winfo_reqheight()/2)))))
Steven M. Gava085eb1b2002-02-05 04:52:32 +000034 self.deiconify() #geometry set, unhide
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000035 self.bind('<Return>', self.Ok)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000036 self.wait_window()
37
38 def CreateWidgets(self):
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000039 self.menu = StringVar(self)
40 self.path = StringVar(self)
41 self.fontSize = StringVar(self)
42 self.frameMain = Frame(self, borderwidth=2, relief=SUNKEN)
43 self.frameMain.pack(side=TOP, expand=TRUE, fill=BOTH)
44 labelMenu = Label(self.frameMain, anchor=W, justify=LEFT,
45 text='Menu Item:')
46 self.entryMenu = Entry(self.frameMain, textvariable=self.menu,
47 width=30)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000048 self.entryMenu.focus_set()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000049 labelPath = Label(self.frameMain, anchor=W, justify=LEFT,
50 text='Help File Path:')
51 self.entryPath = Entry(self.frameMain, textvariable=self.path,
52 width=40)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000053 self.entryMenu.focus_set()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000054 labelMenu.pack(anchor=W, padx=5, pady=3)
55 self.entryMenu.pack(anchor=W, padx=5, pady=3)
56 labelPath.pack(anchor=W, padx=5, pady=3)
57 self.entryPath.pack(anchor=W, padx=5, pady=3)
58 frameButtons = Frame(self)
59 frameButtons.pack(side=BOTTOM, fill=X)
60 self.buttonOk = Button(frameButtons, text='OK',
61 width=8, default=ACTIVE, command=self.Ok)
62 self.buttonOk.grid(row=0, column=0, padx=5,pady=5)
63 self.buttonOk.bind('<Return>', self.Ok)
64 #self.buttonOk.focus()
65 self.buttonCancel = Button(frameButtons, text='Cancel',
66 width=8, command=self.Cancel)
67 self.buttonCancel.grid(row=0, column=1, padx=5, pady=5)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000068
69 def MenuOk(self):
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000070 "Simple validity check for a sensible menu item name"
71 menuOk = True
72 menu = self.menu.get()
Steven M. Gava085eb1b2002-02-05 04:52:32 +000073 menu.strip()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000074 if not menu:
Steven M. Gava085eb1b2002-02-05 04:52:32 +000075 tkMessageBox.showerror(title='Menu Item Error',
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000076 message='No menu item specified',
77 parent=self)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000078 self.entryMenu.focus_set()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000079 menuOk = False
80 elif len(menu) > 30:
Steven M. Gava085eb1b2002-02-05 04:52:32 +000081 tkMessageBox.showerror(title='Menu Item Error',
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000082 message='Menu item too long:'
83 '\nLimit 30 characters.',
84 parent=self)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000085 self.entryMenu.focus_set()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000086 menuOk = False
Steven M. Gava085eb1b2002-02-05 04:52:32 +000087 return menuOk
Kurt B. Kaiser6655e4b2002-12-31 16:03:23 +000088
Steven M. Gava085eb1b2002-02-05 04:52:32 +000089 def PathOk(self):
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000090 "Simple validity check for menu file path"
91 pathOk = True
92 path = self.path.get()
Steven M. Gava085eb1b2002-02-05 04:52:32 +000093 path.strip()
94 if not path: #no path specified
95 tkMessageBox.showerror(title='File Path Error',
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000096 message='No help file path specified.',
97 parent=self)
Steven M. Gava085eb1b2002-02-05 04:52:32 +000098 self.entryPath.focus_set()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +000099 pathOk = False
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000100 elif not os.path.exists(path):
101 tkMessageBox.showerror(title='File Path Error',
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000102 message='Help file path does not exist.',
103 parent=self)
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000104 self.entryPath.focus_set()
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000105 pathOk = False
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000106 return pathOk
Kurt B. Kaiser6655e4b2002-12-31 16:03:23 +0000107
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000108 def Ok(self, event=None):
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000109 if self.MenuOk() and self.PathOk():
110 self.result = (self.menu.get().strip(),
111 self.path.get().strip())
112 self.destroy()
Kurt B. Kaiser6655e4b2002-12-31 16:03:23 +0000113
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000114 def Cancel(self, event=None):
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000115 self.result = None
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000116 self.destroy()
117
118if __name__ == '__main__':
119 #test the dialog
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000120 root = Tk()
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000121 def run():
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000122 keySeq = ''
123 dlg = GetHelpSourceDialog(root, 'Get Help Source')
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000124 print dlg.result
Kurt B. Kaisere7a161e2003-01-10 20:13:57 +0000125 Button(root,text='Dialog', command=run).pack()
Steven M. Gava085eb1b2002-02-05 04:52:32 +0000126 root.mainloop()