-
Notifications
You must be signed in to change notification settings - Fork 0
/
hyperlink_manager.py
68 lines (52 loc) · 2.43 KB
/
hyperlink_manager.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
from tkinter import CURRENT
class HyperlinkManager:
def __init__(self, text):
self.text = text
self.text.tag_config("hyper", foreground="blue", underline=1, font="Helvetica 12")
self.text.tag_config("remove", foreground="red", font="Helvetica 12")
self.text.tag_config("folder", foreground="darkorange", font="Helvetica 12")
self.text.tag_bind("hyper", "<Enter>", self._enter)
self.text.tag_bind("hyper", "<Leave>", self._leave)
self.text.tag_bind("hyper", "<Button-1>", self._click)
self.text.tag_bind("remove", "<Enter>", self._enter)
self.text.tag_bind("remove", "<Leave>", self._leave)
self.text.tag_bind("remove", "<Button-1>", self._click)
self.text.tag_bind("folder", "<Enter>", self._enter)
self.text.tag_bind("folder", "<Leave>", self._leave)
self.text.tag_bind("folder", "<Button-1>", self._click)
self.links = {}
def reset(self):
self.links.clear()
def add(self, action, index, folder):
# add an action to the manager. returns tags to use in
# associated text widget
tag = "hyper-%d" % len(self.links)
self.links[tag] = [action, index, folder]
return "hyper", tag
def addRemove(self, action, folder, index):
# add an action to the manager. returns tags to use in
# associated text widget
tag = "remove-%d" % len(self.links)
self.links[tag] = [action, folder, index]
return "remove", tag
def addFolder(self, action, folder, index):
# add an action to the manager. returns tags to use in
# associated text widget
tag = "folder-%d" % len(self.links)
self.links[tag] = [action, folder, index]
return "folder", tag
def _enter(self, event):
self.text.config(cursor="hand2")
def _leave(self, event):
self.text.config(cursor="")
def _click(self, event):
for tag in self.text.tag_names(CURRENT):
if tag[:6] == "hyper-":
self.links[tag][0](self.links[tag][1], self.links[tag][2])
return
elif tag[:7] == "remove-":
self.links[tag][0](self.links[tag][1], self.links[tag][2])
return
elif tag[:7] == "folder-":
self.links[tag][0](self.links[tag][1], self.links[tag][2])
return