Coverage for skcvideo/table.py: 0%
62 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-02 14:10 +0200
« prev ^ index » next coverage.py v7.6.1, created at 2024-10-02 14:10 +0200
1import cv2
3from skcvideo.colors import WHITE
4from skcvideo.core import Button
5from skcvideo.utils import put_text
8class Table:
9 def __init__(self, box=None, data=None):
10 if data is None:
11 data = []
12 if box is None:
13 box = [0, 0, 1920, 1080]
14 self.row_height = 20
16 self.box = box
17 self.data = data
18 self.selected_item = None
19 self.item_offset = 0
21 x1, y1, x2, y2 = self.box
22 self.number_of_rows = int((y2 - y1) / self.row_height)
24 def build(self, image):
25 self.parent.keydict["8"] = self.up
26 self.parent.keydict["2"] = self.down
27 self.parent.keydict["\r"] = self.activate
29 x1, y1, x2, y2 = self.box
30 image[y1:y2, x1:x2] = 0
31 if self.selected_item is not None:
32 image[
33 y1 + self.selected_item * self.row_height : y1 + (self.selected_item + 1) * self.row_height, x1:x2
34 ] = 128
36 cv2.rectangle(image, (x1, y1), (x2, y2), color=WHITE, thickness=2)
38 self.buttons = []
39 for i, y in enumerate(range(y1, y2, self.row_height)):
40 cv2.line(image, (x1, y), (x2, y), color=WHITE, thickness=1)
42 button = Button((x1, y, x2, y + self.row_height), self.select, data=i)
43 self.buttons.append(button)
45 for i in range(self.number_of_rows):
46 if i + self.item_offset >= len(self.data):
47 continue
48 d = self.data[i + self.item_offset]
49 y = int(round(y1 + (i + 0.5) * self.row_height))
50 put_text(
51 image,
52 self.format_text(d),
53 (x1 + 5, y),
54 fontScale=0.5,
55 align_x="left",
56 align_y="center",
57 )
59 def format_text(self, d):
60 return d["text"]
62 def select(self, i, *args, **kwargs):
63 self.selected_item = i
64 self.build(self.parent.background)
66 def up(self):
67 if self.selected_item is not None:
68 if self.selected_item > 0:
69 self.select(self.selected_item - 1)
70 elif self.selected_item == 0 and self.item_offset > 0:
71 self.item_offset -= 1
72 self.build(self.parent.background)
73 self.parent._refresh()
75 def down(self):
76 if self.selected_item is not None:
77 if self.selected_item < self.number_of_rows - 1:
78 self.select(self.selected_item + 1)
79 elif (
80 self.selected_item == self.number_of_rows - 1
81 and self.item_offset < len(self.data) - self.number_of_rows
82 ):
83 self.item_offset += 1
84 self.build(self.parent.background)
85 self.parent._refresh()
87 def activate(self):
88 """
89 Example of usage :
91 if self.selected_item is not None:
92 self.parent.jump(self.data[self.selected_item]['frame'])
93 self.parent._refresh()
94 """
95 pass
97 def refresh(self, image, frame):
98 pass