Coverage for skcvideo/table.py: 0%

62 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-10-02 14:10 +0200

1import cv2 

2 

3from skcvideo.colors import WHITE 

4from skcvideo.core import Button 

5from skcvideo.utils import put_text 

6 

7 

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 

15 

16 self.box = box 

17 self.data = data 

18 self.selected_item = None 

19 self.item_offset = 0 

20 

21 x1, y1, x2, y2 = self.box 

22 self.number_of_rows = int((y2 - y1) / self.row_height) 

23 

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 

28 

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 

35 

36 cv2.rectangle(image, (x1, y1), (x2, y2), color=WHITE, thickness=2) 

37 

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) 

41 

42 button = Button((x1, y, x2, y + self.row_height), self.select, data=i) 

43 self.buttons.append(button) 

44 

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 ) 

58 

59 def format_text(self, d): 

60 return d["text"] 

61 

62 def select(self, i, *args, **kwargs): 

63 self.selected_item = i 

64 self.build(self.parent.background) 

65 

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() 

74 

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() 

86 

87 def activate(self): 

88 """ 

89 Example of usage : 

90 

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 

96 

97 def refresh(self, image, frame): 

98 pass