-
Notifications
You must be signed in to change notification settings - Fork 0
/
configure.py
123 lines (106 loc) · 3.39 KB
/
configure.py
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
122
123
from Tkinter import *
import Image, ImageTk
buttonNo = None
key1 = None
key2 = None
profFileName = 'profiles.txt'
cfgFileName = 'mouse.cfg'
keysFileName = 'keys'
# Used for taking user input
class TextDialog:
def __init__(self, parent):
self.top = Toplevel(parent)
Label(self.top, text='Enter the profile name.').pack(side=TOP)
self.e = Entry(self.top)
self.e.pack(side=TOP)
b = Button(self.top, text='OK', command=self.onClick)
b.pack(side=BOTTOM)
def onClick(self):
self.value=self.e.get()
self.top.destroy()
# When user presses a key if a configuration button is already clicked, profile and current configuration is updated
def onKeyPress(event):
global buttonNo, key1, key2, profileNames, profiles, codesToKeys
print 'Got key press:', event.keycode
if buttonNo == 1:
profiles[profile.get()][0] = event.keycode
buttonNo = None
button1['text'] = codesToKeys[event.keycode]
selectProfile()
exportProfiles()
elif buttonNo == 2:
profiles[profile.get()][1] = event.keycode
buttonNo = None
button2['text'] = codesToKeys[event.keycode]
selectProfile()
exportProfiles()
# Updates profiles file
def exportProfiles():
profFile = open(profFileName,'w')
for i in profiles:
profFile.write(i + ' ')
profFile.write(str(profiles[i][0]-8) + ' ')
profFile.write(str(profiles[i][1]-8) + '\n')
profFile.close()
# Switches button states
def button1OnClick():
global buttonNo
if buttonNo is None:
buttonNo = 1
button1['text'] = 'press a button'
def button2OnClick():
global buttonNo
if buttonNo is None:
buttonNo = 2
button2['text'] = 'press a button'
def newProfile():
d = TextDialog(tkroot)
tkroot.wait_window(d.top)
n = d.value
profileNames.append(n)
profiles[n] = [113,114]
profileSelect['menu'].add_command(label=n, command=lambda value=n: profile.set(value))
def onProfileChange(*args):
button1['text'] = codesToKeys[profiles[profile.get()][0]]
button2['text'] = codesToKeys[profiles[profile.get()][1]]
selectProfile()
def selectProfile():
print profile.get()
f = open(cfgFileName, 'w')
f.write(str(profiles[profile.get()][0]-8) + '\n')
f.write(str(profiles[profile.get()][1]-8) + '\n')
f.close()
tkroot = Tk()
profileNames = []
profiles = {}
profile = StringVar()
profile.trace('w', onProfileChange)
codesToKeys = {}
keysFile = open(keysFileName, 'r')
for line in keysFile:
key, code = line.split()
codesToKeys[int(code)+8] = key
keysFile.close()
profFile = open(profFileName, 'r')
for line in profFile:
print line
n,k1,k2= line.split()
profileNames.append(n)
profiles[n] = [int(k1)+8,int(k2)+8]
profFile.close()
profileSelect = OptionMenu(tkroot, profile, *profileNames)
profileSelect.pack(side=TOP)
addButton = Button(tkroot, text='New Profile', command=newProfile)
addButton.pack(side=TOP)
button1 = Button(tkroot, text='Custom 1', command=button1OnClick)
img = Image.open('mouse.jpg')
img = ImageTk.PhotoImage(img.resize((250, 250)))
widget = Label(tkroot, image=img)
widget.pack(side=TOP)
button1.pack(side=LEFT, fill=BOTH)
button2 = Button(tkroot, text='Custom 2', command=button2OnClick)
button2.pack(side=RIGHT, fill=BOTH)
tkroot.bind('<KeyPress>', onKeyPress)
tkroot.focus()
tkroot.title('Profile Manager')
tkroot.mainloop()