summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/configHelpSourceEdit.py
blob: 6ad7d514c12c4c0e84602a0a2c4978f6a8a9425f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
"""
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()
        self.menu.set(menuItem)
        self.path.set(filePath)
        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()