subtitld 0.0.0.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. subtitld/__init__.py +19 -0
  2. subtitld/__main__.py +240 -0
  3. subtitld/ftfy/char_classes.dat +0 -0
  4. subtitld/graphics/Montserrat-Black.ttf +0 -0
  5. subtitld/graphics/Montserrat-BlackItalic.ttf +0 -0
  6. subtitld/graphics/Montserrat-Bold.ttf +0 -0
  7. subtitld/graphics/Montserrat-BoldItalic.ttf +0 -0
  8. subtitld/graphics/Montserrat-ExtraBold.ttf +0 -0
  9. subtitld/graphics/Montserrat-ExtraBoldItalic.ttf +0 -0
  10. subtitld/graphics/Montserrat-ExtraLight.ttf +0 -0
  11. subtitld/graphics/Montserrat-ExtraLightItalic.ttf +0 -0
  12. subtitld/graphics/Montserrat-Italic.ttf +0 -0
  13. subtitld/graphics/Montserrat-Light.ttf +0 -0
  14. subtitld/graphics/Montserrat-LightItalic.ttf +0 -0
  15. subtitld/graphics/Montserrat-Medium.ttf +0 -0
  16. subtitld/graphics/Montserrat-MediumItalic.ttf +0 -0
  17. subtitld/graphics/Montserrat-Regular.ttf +0 -0
  18. subtitld/graphics/Montserrat-SemiBold.ttf +0 -0
  19. subtitld/graphics/Montserrat-SemiBoldItalic.ttf +0 -0
  20. subtitld/graphics/Montserrat-Thin.ttf +0 -0
  21. subtitld/graphics/Montserrat-ThinItalic.ttf +0 -0
  22. subtitld/graphics/Ubuntu-B.ttf +0 -0
  23. subtitld/graphics/Ubuntu-BI.ttf +0 -0
  24. subtitld/graphics/Ubuntu-C.ttf +0 -0
  25. subtitld/graphics/Ubuntu-L.ttf +0 -0
  26. subtitld/graphics/Ubuntu-LI.ttf +0 -0
  27. subtitld/graphics/Ubuntu-M.ttf +0 -0
  28. subtitld/graphics/Ubuntu-MI.ttf +0 -0
  29. subtitld/graphics/Ubuntu-R.ttf +0 -0
  30. subtitld/graphics/Ubuntu-RI.ttf +0 -0
  31. subtitld/graphics/Ubuntu-Th.ttf +0 -0
  32. subtitld/graphics/UbuntuMono-B.ttf +0 -0
  33. subtitld/graphics/UbuntuMono-BI.ttf +0 -0
  34. subtitld/graphics/UbuntuMono-R.ttf +0 -0
  35. subtitld/graphics/UbuntuMono-RI.ttf +0 -0
  36. subtitld/graphics/add_and_play.svg +4 -0
  37. subtitld/graphics/add_from_last.svg +4 -0
  38. subtitld/graphics/add_from_last_checked.svg +4 -0
  39. subtitld/graphics/add_subtitle_icon.svg +4 -0
  40. subtitld/graphics/add_subtitle_to_next_start.svg +4 -0
  41. subtitld/graphics/add_subtitle_to_next_start_checked.svg +4 -0
  42. subtitld/graphics/background_watermark.svg +9 -0
  43. subtitld/graphics/character_count_icon.svg +1 -0
  44. subtitld/graphics/checkbox_checked.svg +8 -0
  45. subtitld/graphics/checkbox_checked_hover.svg +8 -0
  46. subtitld/graphics/checkbox_disabled.svg +4 -0
  47. subtitld/graphics/checkbox_unchecked.svg +5 -0
  48. subtitld/graphics/checkbox_unchecked_hover.svg +5 -0
  49. subtitld/graphics/combobox_down_arrow.svg +4 -0
  50. subtitld/graphics/cps_icon.svg +1 -0
  51. subtitld/graphics/dialog_close_icon.svg +4 -0
  52. subtitld/graphics/dialog_close_icon_hover.svg +4 -0
  53. subtitld/graphics/dubbing_container_collapse_icon.svg +8 -0
  54. subtitld/graphics/dubbing_container_expand_icon.svg +4 -0
  55. subtitld/graphics/file.svg +4 -0
  56. subtitld/graphics/gap_add_icon.svg +4 -0
  57. subtitld/graphics/gap_remove_icon.svg +4 -0
  58. subtitld/graphics/grid_frames_icon.svg +4 -0
  59. subtitld/graphics/grid_frames_icon_checked.svg +4 -0
  60. subtitld/graphics/grid_frames_icon_disabled.svg +4 -0
  61. subtitld/graphics/grid_scenes_icon.svg +4 -0
  62. subtitld/graphics/grid_scenes_icon_checked.svg +4 -0
  63. subtitld/graphics/grid_scenes_icon_disabled.svg +4 -0
  64. subtitld/graphics/grid_seconds_icon.svg +4 -0
  65. subtitld/graphics/grid_seconds_icon_checked.svg +4 -0
  66. subtitld/graphics/grid_seconds_icon_disabled.svg +4 -0
  67. subtitld/graphics/last_end_to_current_position_icon.svg +4 -0
  68. subtitld/graphics/last_start_last_end_to_current_position_button.svg +9 -0
  69. subtitld/graphics/last_start_to_current_position_icon.svg +4 -0
  70. subtitld/graphics/left_panel_autosave.svg +4 -0
  71. subtitld/graphics/left_panel_dubbing.svg +4 -0
  72. subtitld/graphics/left_panel_export.svg +4 -0
  73. subtitld/graphics/left_panel_global.svg +4 -0
  74. subtitld/graphics/left_panel_import.svg +4 -0
  75. subtitld/graphics/left_panel_interface.svg +4 -0
  76. subtitld/graphics/left_panel_keyboard.svg +4 -0
  77. subtitld/graphics/left_panel_metadata.svg +4 -0
  78. subtitld/graphics/left_panel_navigation_background.svg +11 -0
  79. subtitld/graphics/left_panel_qualitycheck.svg +4 -0
  80. subtitld/graphics/left_panel_speakers.svg +4 -0
  81. subtitld/graphics/left_panel_subtitles.svg +1 -0
  82. subtitld/graphics/left_panel_transcription.svg +4 -0
  83. subtitld/graphics/left_panel_translation.svg +4 -0
  84. subtitld/graphics/merge_back_selected_subtitle_icon.svg +4 -0
  85. subtitld/graphics/merge_next_selected_subtitle_icon.svg +4 -0
  86. subtitld/graphics/move_backward_subtitle.svg +4 -0
  87. subtitld/graphics/move_end_back_subtitle.svg +4 -0
  88. subtitld/graphics/move_end_forward_subtitle.svg +4 -0
  89. subtitld/graphics/move_forward_subtitle.svg +4 -0
  90. subtitld/graphics/move_start_back_subtitle.svg +4 -0
  91. subtitld/graphics/move_start_forward_subtitle.svg +4 -0
  92. subtitld/graphics/music_voice_separation_music_icon.svg +4 -0
  93. subtitld/graphics/music_voice_separation_music_icon_disabled.svg +4 -0
  94. subtitld/graphics/music_voice_separation_voice_icon.svg +4 -0
  95. subtitld/graphics/music_voice_separation_voice_icon_disabled.svg +4 -0
  96. subtitld/graphics/new_line_icon.svg +1 -0
  97. subtitld/graphics/next_end_to_current_position_icon.svg +4 -0
  98. subtitld/graphics/next_start_next_end_to_current_position_button.svg +4 -0
  99. subtitld/graphics/next_start_to_current_position_icon.svg +4 -0
  100. subtitld/graphics/pause_icon.svg +12 -0
  101. subtitld/graphics/play_from_last_start_icon.svg +5 -0
  102. subtitld/graphics/play_from_next_start_icon.svg +7 -0
  103. subtitld/graphics/play_icon.svg +12 -0
  104. subtitld/graphics/play_icon_hover.svg +12 -0
  105. subtitld/graphics/play_icon_pressed.svg +12 -0
  106. subtitld/graphics/playback_repeat.svg +4 -0
  107. subtitld/graphics/playback_speed.svg +6 -0
  108. subtitld/graphics/playbackspeed_border.svg +5 -0
  109. subtitld/graphics/playbackspeed_border_checked.svg +5 -0
  110. subtitld/graphics/playbackspeed_border_hover.svg +5 -0
  111. subtitld/graphics/playercontrols_button_first.svg +5 -0
  112. subtitld/graphics/playercontrols_button_first_hover.svg +6 -0
  113. subtitld/graphics/playercontrols_button_first_pressed.svg +6 -0
  114. subtitld/graphics/playercontrols_button_last.svg +6 -0
  115. subtitld/graphics/playercontrols_button_last_hover.svg +6 -0
  116. subtitld/graphics/playercontrols_button_last_pressed.svg +6 -0
  117. subtitld/graphics/playercontrols_widget_center_bottom_line.svg +13 -0
  118. subtitld/graphics/playercontrols_widget_center_top_line.svg +17 -0
  119. subtitld/graphics/plus_icon.svg +4 -0
  120. subtitld/graphics/record_icon.svg +8 -0
  121. subtitld/graphics/record_icon_pressed.svg +5 -0
  122. subtitld/graphics/remove_selected_subtitle_icon.svg +6 -0
  123. subtitld/graphics/repeat_playback_border.svg +5 -0
  124. subtitld/graphics/repeat_playback_border_checked.svg +5 -0
  125. subtitld/graphics/repeat_playback_border_hover.svg +5 -0
  126. subtitld/graphics/save.svg +4 -0
  127. subtitld/graphics/send_text_to_last_subtitle_and_slice_button.svg +8 -0
  128. subtitld/graphics/send_text_to_last_subtitle_icon.svg +8 -0
  129. subtitld/graphics/send_text_to_next_subtitle_and_slice_button.svg +8 -0
  130. subtitld/graphics/send_text_to_next_subtitle_icon.svg +8 -0
  131. subtitld/graphics/slice_selected_subtitle_icon.svg +4 -0
  132. subtitld/graphics/snap_grid_icon.svg +4 -0
  133. subtitld/graphics/snap_grid_icon_checked.svg +4 -0
  134. subtitld/graphics/snap_grid_icon_disabled.svg +4 -0
  135. subtitld/graphics/snap_limits_icon.svg +4 -0
  136. subtitld/graphics/snap_limits_icon_checked.svg +4 -0
  137. subtitld/graphics/snap_limits_icon_disabled.svg +4 -0
  138. subtitld/graphics/snap_move_next.svg +4 -0
  139. subtitld/graphics/snap_move_next_checked.svg +4 -0
  140. subtitld/graphics/snap_move_next_disabled.svg +4 -0
  141. subtitld/graphics/snap_moving_icon.svg +4 -0
  142. subtitld/graphics/snap_moving_icon_checked.svg +4 -0
  143. subtitld/graphics/snap_moving_icon_disabled.svg +4 -0
  144. subtitld/graphics/speaker_list_item_change_color_icon.svg +4 -0
  145. subtitld/graphics/speaker_list_item_change_color_icon_hover.svg +4 -0
  146. subtitld/graphics/speaker_list_item_change_image_icon.svg +4 -0
  147. subtitld/graphics/speaker_list_item_change_image_icon_hover.svg +4 -0
  148. subtitld/graphics/speaker_list_item_export_icon.svg +4 -0
  149. subtitld/graphics/speaker_list_item_export_icon_hover.svg +4 -0
  150. subtitld/graphics/speaker_list_item_remove_icon.svg +4 -0
  151. subtitld/graphics/speaker_list_item_remove_icon_hover.svg +4 -0
  152. subtitld/graphics/speaker_list_item_rename_icon.svg +4 -0
  153. subtitld/graphics/speaker_list_item_rename_icon_hover.svg +4 -0
  154. subtitld/graphics/spinbox_arrow_down.svg +4 -0
  155. subtitld/graphics/spinbox_arrow_up.svg +4 -0
  156. subtitld/graphics/start_screen_top_shadow.svg +23 -0
  157. subtitld/graphics/stop_icon.svg +6 -0
  158. subtitld/graphics/stop_icon_hover.svg +6 -0
  159. subtitld/graphics/stop_icon_pressed.svg +6 -0
  160. subtitld/graphics/stylesheet.qss +1838 -0
  161. subtitld/graphics/subtitld.ico +0 -0
  162. subtitld/graphics/subtitld.png +0 -0
  163. subtitld/graphics/subtitles_panel_simplelist_properties_duration_timing_lock_closed_icon.svg +4 -0
  164. subtitld/graphics/subtitles_panel_simplelist_properties_duration_timing_lock_open_icon.svg +4 -0
  165. subtitld/graphics/subtitles_panel_simplelist_properties_duration_timing_lock_open_icon_hover.svg +4 -0
  166. subtitld/graphics/timeline_bottom_controls_background.svg +25 -0
  167. subtitld/graphics/timeline_cursor_back_frame.svg +4 -0
  168. subtitld/graphics/timeline_cursor_back_frame_hover.svg +4 -0
  169. subtitld/graphics/timeline_cursor_next_frame.svg +4 -0
  170. subtitld/graphics/timeline_cursor_next_frame_hover.svg +4 -0
  171. subtitld/graphics/timeline_show_speaker_color.svg +5 -0
  172. subtitld/graphics/timeline_show_speaker_color_checked.svg +5 -0
  173. subtitld/graphics/timeline_show_speaker_in_tracks.svg +4 -0
  174. subtitld/graphics/timeline_show_speaker_in_tracks_checked.svg +4 -0
  175. subtitld/graphics/timelinescrolling_follow_icon.svg +4 -0
  176. subtitld/graphics/timelinescrolling_follow_icon_checked.svg +4 -0
  177. subtitld/graphics/timelinescrolling_none_icon.svg +6 -0
  178. subtitld/graphics/timelinescrolling_none_icon_checked.svg +6 -0
  179. subtitld/graphics/timelinescrolling_page_icon.svg +4 -0
  180. subtitld/graphics/timelinescrolling_page_icon_checked.svg +4 -0
  181. subtitld/graphics/titleBar_left_container_border.svg +113 -0
  182. subtitld/graphics/unknown_speaker.svg +5 -0
  183. subtitld/graphics/vosk_transcription_download_model_icon.svg +4 -0
  184. subtitld/graphics/vosk_transcription_update_model_icon.svg +4 -0
  185. subtitld/graphics/word_count_icon.svg +1 -0
  186. subtitld/graphics/wpm_icon.svg +1 -0
  187. subtitld/graphics/zoom_in_icon.svg +4 -0
  188. subtitld/graphics/zoom_in_icon_disabled.svg +4 -0
  189. subtitld/graphics/zoom_out_icon.svg +4 -0
  190. subtitld/graphics/zoom_out_icon_disabled.svg +4 -0
  191. subtitld/interface/__init__.py +0 -0
  192. subtitld/interface/actionmanager.py +18 -0
  193. subtitld/interface/bottom_panel.py +43 -0
  194. subtitld/interface/left_panel.py +144 -0
  195. subtitld/interface/left_panel_autosave.py +149 -0
  196. subtitld/interface/left_panel_dubbing.py +469 -0
  197. subtitld/interface/left_panel_export.py +755 -0
  198. subtitld/interface/left_panel_global.py +358 -0
  199. subtitld/interface/left_panel_import.py +82 -0
  200. subtitld/interface/left_panel_interface.py +616 -0
  201. subtitld/interface/left_panel_keyboard.py +261 -0
  202. subtitld/interface/left_panel_metadata.py +74 -0
  203. subtitld/interface/left_panel_qualitycheck.py +262 -0
  204. subtitld/interface/left_panel_speakers.py +737 -0
  205. subtitld/interface/left_panel_subtitleslist.py +791 -0
  206. subtitld/interface/left_panel_transcription.py +763 -0
  207. subtitld/interface/left_panel_translation.py +294 -0
  208. subtitld/interface/playercontrols.py +2348 -0
  209. subtitld/interface/preview_panel.py +407 -0
  210. subtitld/interface/productionscreen.py +65 -0
  211. subtitld/interface/startscreen.py +273 -0
  212. subtitld/interface/timeline.py +1308 -0
  213. subtitld/interface/top_bar.py +329 -0
  214. subtitld/interface/translation.py +68 -0
  215. subtitld/interface/utils.py +286 -0
  216. subtitld/locale/en_US.json +301 -0
  217. subtitld/locale/pt_BR.json +269 -0
  218. subtitld/modules/__init__.py +0 -0
  219. subtitld/modules/audioengine.py +606 -0
  220. subtitld/modules/bounce.py +229 -0
  221. subtitld/modules/config.py +84 -0
  222. subtitld/modules/file_io.py +870 -0
  223. subtitld/modules/history.py +31 -0
  224. subtitld/modules/quality_check.py +53 -0
  225. subtitld/modules/session.py +270 -0
  226. subtitld/modules/shortcuts.py +84 -0
  227. subtitld/modules/subtitles.py +413 -0
  228. subtitld/modules/timecode.py +496 -0
  229. subtitld/modules/usf.py +366 -0
  230. subtitld/modules/utils.py +79 -0
  231. subtitld/modules/waveform.py +53 -0
  232. subtitld-0.0.0.dev0.dist-info/METADATA +97 -0
  233. subtitld-0.0.0.dev0.dist-info/RECORD +237 -0
  234. subtitld-0.0.0.dev0.dist-info/WHEEL +5 -0
  235. subtitld-0.0.0.dev0.dist-info/entry_points.txt +2 -0
  236. subtitld-0.0.0.dev0.dist-info/licenses/LICENSE +674 -0
  237. subtitld-0.0.0.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,2348 @@
1
+ import os
2
+ from bisect import bisect
3
+ import subprocess
4
+
5
+ from PySide6.QtWidgets import QPushButton, QLabel, QDoubleSpinBox, QSlider, QSpinBox, QComboBox, QWidget, QStylePainter, QStyleOptionTab, QStyle, QTabBar, QColorDialog, QHBoxLayout, QSizePolicy, QVBoxLayout, QLayout, QDial
6
+ from PySide6.QtCore import QPropertyAnimation, QEasingCurve, Qt, QRect, QPoint, QThread, QSize, Signal, QEvent
7
+
8
+
9
+ class EnterAbsorbingDoubleSpinBox(QDoubleSpinBox):
10
+ """QDoubleSpinBox that fully consumes Return/Enter so neither global
11
+ shortcuts nor the parent widget (e.g. a QPushButton container) reacts."""
12
+ def event(self, ev):
13
+ if ev.type() == QEvent.ShortcutOverride and ev.key() in (Qt.Key_Return, Qt.Key_Enter):
14
+ ev.accept()
15
+ return True
16
+ return super().event(ev)
17
+
18
+ def keyPressEvent(self, ev):
19
+ if ev.key() in (Qt.Key_Return, Qt.Key_Enter):
20
+ self.interpretText()
21
+ self.editingFinished.emit()
22
+ ev.accept()
23
+ return
24
+ super().keyPressEvent(ev)
25
+
26
+ import subtitld.modules.timecode as timecode
27
+ from subtitld.interface import timeline, left_panel
28
+ from subtitld.interface.translation import _
29
+
30
+ from subtitld.modules import subtitles
31
+ from subtitld.modules import session
32
+ from subtitld.modules import utils
33
+ from subtitld.modules.shortcuts import shortcut
34
+
35
+ STEPS_LIST = ['Frames', 'Seconds']
36
+
37
+
38
+
39
+ class MusicAudioExtractorThread(QThread):
40
+ response = Signal(dict)
41
+ original = Signal(str)
42
+ error = Signal(str)
43
+
44
+ def __init__(self, parent=None):
45
+ super().__init__(parent)
46
+ self.filename = None
47
+
48
+ def run(self):
49
+ if not self.filename:
50
+ return
51
+
52
+ filename_hash = utils.get_cache_key(self.filename)
53
+
54
+ original_filepath = os.path.join(
55
+ session.PATH_SUBTITLD_DATA_AUDIOSEPARATION,
56
+ filename_hash + "_original.flac"
57
+ )
58
+
59
+ if not os.path.exists(original_filepath):
60
+ cmd = [
61
+ session.FFMPEG_EXECUTABLE,
62
+ "-hide_banner", "-loglevel", "error",
63
+ "-i", self.filename,
64
+ "-vn",
65
+ "-ar", '48000', '-y',
66
+ original_filepath
67
+ ]
68
+
69
+ subprocess.run(
70
+ cmd,
71
+ stdout=subprocess.DEVNULL,
72
+ stderr=subprocess.DEVNULL,
73
+ startupinfo=session.STARTUPINFO
74
+ )
75
+
76
+ self.original.emit(original_filepath)
77
+
78
+ vocals_filepath = os.path.join(
79
+ session.PATH_SUBTITLD_DATA_AUDIOSEPARATION,
80
+ filename_hash + "_vocals.flac"
81
+ )
82
+
83
+ background_filepath = os.path.join(
84
+ session.PATH_SUBTITLD_DATA_AUDIOSEPARATION,
85
+ filename_hash + "_background.flac"
86
+ )
87
+
88
+ if not (os.path.exists(vocals_filepath) and os.path.exists(background_filepath)):
89
+ cmd = [
90
+ session.FFMPEG_EXECUTABLE,
91
+ "-hide_banner", "-loglevel", "error",
92
+ "-i", self.filename, '-y',
93
+ "-vn",
94
+ "-filter_complex",
95
+ (
96
+ "[0:a]asplit=2[a1][a2];"
97
+ "[a1]pan=mono|c0=0.5*c0+0.5*c1[vocals];"
98
+ "[a2]pan=mono|c0=c0-c1[background]"
99
+ ),
100
+
101
+ # vocals (center)
102
+ "-map", "[vocals]",
103
+ "-ac", "1",
104
+ "-ar", '48000',
105
+ vocals_filepath,
106
+
107
+ # background (sides)
108
+ "-map", "[background]",
109
+ "-ac", "1",
110
+ "-ar", '48000',
111
+ background_filepath,
112
+ ]
113
+
114
+ subprocess.run(
115
+ cmd,
116
+ stdout=subprocess.DEVNULL,
117
+ stderr=subprocess.DEVNULL,
118
+ startupinfo=session.STARTUPINFO
119
+ )
120
+
121
+ self.response.emit({
122
+ 'vocals': vocals_filepath,
123
+ 'background': background_filepath,
124
+ 'volume': .5
125
+ })
126
+
127
+
128
+ class QLeftTabBar(QTabBar):
129
+ def tabSizeHint(self, index):
130
+ s = QTabBar.tabSizeHint(self, index)
131
+ s.transpose()
132
+ return s
133
+
134
+ def paintEvent(self, event):
135
+ painter = QStylePainter(self)
136
+ opt = QStyleOptionTab()
137
+
138
+ for i in range(self.count()):
139
+ self.initStyleOption(opt, i)
140
+ painter.drawControl(QStyle.CE_TabBarTabShape, opt)
141
+ painter.save()
142
+
143
+ s = opt.rect.size()
144
+ s.transpose()
145
+ r = QRect(QPoint(), s)
146
+ r.moveCenter(opt.rect.center())
147
+ opt.rect = r
148
+
149
+ c = self.tabRect(i).center()
150
+ painter.translate(c)
151
+ painter.rotate(90)
152
+ painter.translate(-c)
153
+ painter.drawControl(QStyle.CE_TabBarTabLabel, opt)
154
+ painter.restore()
155
+ event.accept()
156
+
157
+ def load(self):
158
+ """Function to load player control widgets"""
159
+ self.playercontrols_widget = QWidget()
160
+ self.playercontrols_widget.setObjectName('playercontrols_widget')
161
+ self.playercontrols_widget.setLayout(QVBoxLayout())
162
+ self.playercontrols_widget.layout().setContentsMargins(0, 0, 0, 0)
163
+ self.playercontrols_widget.layout().setSpacing(0)
164
+ self.playercontrols_widget.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum))
165
+ self.playercontrols_widget_animation = QPropertyAnimation(self.playercontrols_widget, b'minimumHeight')
166
+ self.playercontrols_widget_animation.setEasingCurve(QEasingCurve.OutQuint)
167
+ # self.playercontrols_widget_animation.finished.connect(lambda: self.playercontrols_widget.setMinimumHeight(0))
168
+
169
+ self.playercontrols_widget_top_line = QWidget()
170
+ self.playercontrols_widget_top_line.setObjectName('playercontrols_widget_top_line')
171
+ self.playercontrols_widget_top_line.setLayout(QHBoxLayout())
172
+ self.playercontrols_widget_top_line.layout().setContentsMargins(0, 0, 0, 0)
173
+ self.playercontrols_widget_top_line.layout().setSpacing(0)
174
+ # self.playercontrols_widget_top_line.setAttribute(Qt.WA_LayoutOnEntireRect)
175
+ self.playercontrols_widget_top_line.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
176
+
177
+ self.playercontrols_widget_left_top_line = QWidget()
178
+ self.playercontrols_widget_left_top_line.setObjectName('playercontrols_widget_left_top_line')
179
+ # self.playercontrols_widget_left_top_line.setAttribute(Qt.WA_TranslucentBackground)
180
+ self.playercontrols_widget_left_top_line.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum))
181
+ self.playercontrols_widget_left_top_line.setLayout(QHBoxLayout())
182
+ self.playercontrols_widget_left_top_line.layout().setContentsMargins(0, 2, 0, 0)
183
+ self.playercontrols_widget_left_top_line.layout().setSpacing(8)
184
+ self.playercontrols_widget_left_top_line.setAttribute(Qt.WA_LayoutOnEntireRect)
185
+
186
+ self.playercontrols_widget_left_top_line.layout().addStretch()
187
+
188
+ self.send_text_buttons_container = QWidget()
189
+ self.send_text_buttons_container.setLayout(QHBoxLayout())
190
+ self.send_text_buttons_container.setObjectName('send_text_buttons_container')
191
+ self.send_text_buttons_container.setFixedHeight(42)
192
+ self.send_text_buttons_container.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
193
+ self.send_text_buttons_container.layout().setContentsMargins(0, 0, 0, 0)
194
+ self.send_text_buttons_container.layout().setSpacing(0)
195
+
196
+ self.send_text_to_last_subtitle_button = QPushButton()
197
+ self.send_text_to_last_subtitle_button.setObjectName('send_text_to_last_subtitle_button')
198
+ self.send_text_to_last_subtitle_button.setLayout(QHBoxLayout())
199
+ self.send_text_to_last_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
200
+ self.send_text_to_last_subtitle_button.layout().setContentsMargins(8, 0, 24, 3)
201
+ self.send_text_to_last_subtitle_button.setIconSize(QSize(24, 20))
202
+ self.send_text_to_last_subtitle_button.setFixedWidth(56)
203
+ self.send_text_to_last_subtitle_button.clicked.connect(lambda: send_text_to_last_subtitle_button_clicked(self))
204
+ self.send_text_buttons_container.layout().addWidget(self.send_text_to_last_subtitle_button)
205
+
206
+ self.send_text_to_last_subtitle_and_slice_button = QPushButton()
207
+ self.send_text_to_last_subtitle_and_slice_button.setObjectName('send_text_to_last_subtitle_and_slice_button')
208
+ self.send_text_to_last_subtitle_and_slice_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
209
+ self.send_text_to_last_subtitle_and_slice_button.setIconSize(QSize(24, 20))
210
+ self.send_text_to_last_subtitle_and_slice_button.setFixedWidth(24)
211
+ self.send_text_to_last_subtitle_and_slice_button.clicked.connect(lambda: send_text_to_last_subtitle_and_slice_button_clicked(self))
212
+ self.send_text_to_last_subtitle_button.layout().addWidget(self.send_text_to_last_subtitle_and_slice_button, 0, Qt.AlignLeft)
213
+
214
+ self.send_text_to_next_subtitle_button = QPushButton()
215
+ self.send_text_to_next_subtitle_button.setObjectName('send_text_to_next_subtitle_button')
216
+ self.send_text_to_next_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
217
+ self.send_text_to_next_subtitle_button.setLayout(QHBoxLayout())
218
+ self.send_text_to_next_subtitle_button.setIconSize(QSize(24, 20))
219
+ self.send_text_to_next_subtitle_button.setFixedWidth(56)
220
+ self.send_text_to_next_subtitle_button.layout().setContentsMargins(24, 0, 8, 3)
221
+ self.send_text_to_next_subtitle_button.clicked.connect(lambda: send_text_to_next_subtitle_button_clicked(self))
222
+ self.send_text_buttons_container.layout().addWidget(self.send_text_to_next_subtitle_button)
223
+
224
+ self.send_text_to_next_subtitle_and_slice_button = QPushButton()
225
+ self.send_text_to_next_subtitle_and_slice_button.setObjectName('send_text_to_next_subtitle_and_slice_button')
226
+ self.send_text_to_next_subtitle_and_slice_button.setIconSize(QSize(24, 20))
227
+ self.send_text_to_next_subtitle_and_slice_button.setFixedWidth(24)
228
+ self.send_text_to_next_subtitle_and_slice_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
229
+ self.send_text_to_next_subtitle_and_slice_button.clicked.connect(lambda: send_text_to_next_subtitle_and_slice_button_clicked(self))
230
+ self.send_text_to_next_subtitle_button.layout().addWidget(self.send_text_to_next_subtitle_and_slice_button, 0, Qt.AlignRight)
231
+
232
+ self.playercontrols_widget_left_top_line.layout().addWidget(self.send_text_buttons_container, 1, Qt.AlignTop)
233
+
234
+ self.merge_slice_frame = QWidget()
235
+ self.merge_slice_frame.setObjectName('merge_slice_frame')
236
+ self.merge_slice_frame.setLayout(QHBoxLayout())
237
+ self.merge_slice_frame.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
238
+ self.merge_slice_frame.setFixedHeight(42)
239
+ # self.merge_slice_frame.layout().setSizeConstraint(QLayout.SetMinimumSize)
240
+ self.merge_slice_frame.layout().setContentsMargins(0, 0, 0, 0)
241
+ self.merge_slice_frame.layout().setSpacing(0)
242
+
243
+ self.merge_back_selected_subtitle_button = QPushButton()
244
+ self.merge_back_selected_subtitle_button.setObjectName('merge_back_selected_subtitle_button')
245
+ self.merge_back_selected_subtitle_button.setIconSize(QSize(20, 20))
246
+ self.merge_back_selected_subtitle_button.setFixedWidth(28)
247
+ self.merge_back_selected_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
248
+ self.merge_back_selected_subtitle_button.clicked.connect(lambda: merge_back_selected_subtitle_button_clicked(self))
249
+ self.merge_slice_frame.layout().addWidget(self.merge_back_selected_subtitle_button)
250
+
251
+ self.merge_slice_frame.layout().addSpacing(-1)
252
+
253
+ self.slice_selected_subtitle_button = QPushButton()
254
+ self.slice_selected_subtitle_button.setObjectName('slice_selected_subtitle_button')
255
+ self.slice_selected_subtitle_button.setIconSize(QSize(32, 20))
256
+ self.slice_selected_subtitle_button.setFixedWidth(30)
257
+ self.slice_selected_subtitle_button.setCheckable(True)
258
+ self.slice_selected_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
259
+ self.slice_selected_subtitle_button.clicked.connect(lambda: slice_selected_subtitle_button_clicked(self))
260
+ self.merge_slice_frame.layout().addWidget(self.slice_selected_subtitle_button)
261
+
262
+ self.merge_slice_frame.layout().addSpacing(-1)
263
+
264
+ self.merge_next_selected_subtitle_button = QPushButton()
265
+ self.merge_next_selected_subtitle_button.setObjectName('merge_next_selected_subtitle_button')
266
+ self.merge_next_selected_subtitle_button.setIconSize(QSize(20, 20))
267
+ self.merge_next_selected_subtitle_button.setFixedWidth(28)
268
+ self.merge_next_selected_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
269
+ self.merge_next_selected_subtitle_button.clicked.connect(lambda: merge_next_selected_subtitle_button_clicked(self))
270
+ self.merge_slice_frame.layout().addWidget(self.merge_next_selected_subtitle_button)
271
+
272
+ self.playercontrols_widget_left_top_line.layout().addWidget(self.merge_slice_frame, 1, Qt.AlignTop)
273
+
274
+ self.start_end_moving_frame = QWidget()
275
+ self.start_end_moving_frame.setObjectName('start_end_moving_frame')
276
+ self.start_end_moving_frame.setLayout(QHBoxLayout())
277
+ self.start_end_moving_frame.setFixedHeight(42)
278
+ self.start_end_moving_frame.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum))
279
+ self.start_end_moving_frame.layout().setContentsMargins(0, 0, 0, 0)
280
+ self.start_end_moving_frame.layout().setSpacing(0)
281
+
282
+ self.last_end_to_current_position_button = QPushButton()
283
+ self.last_end_to_current_position_button.setObjectName('last_end_to_current_position_button')
284
+ self.last_end_to_current_position_button.setIconSize(QSize(20, 20))
285
+ self.last_end_to_current_position_button.setFixedWidth(32)
286
+ self.last_end_to_current_position_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
287
+ self.last_end_to_current_position_button.clicked.connect(lambda: last_end_to_current_position_button_clicked(self))
288
+ self.start_end_moving_frame.layout().addWidget(self.last_end_to_current_position_button, 1)
289
+
290
+ self.last_start_to_current_position_button = QPushButton()
291
+ self.last_start_to_current_position_button.setObjectName('last_start_to_current_position_button')
292
+ self.last_start_to_current_position_button.setIconSize(QSize(28, 20))
293
+ self.last_start_to_current_position_button.setFixedWidth(28)
294
+ self.last_start_to_current_position_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
295
+ self.last_start_to_current_position_button.clicked.connect(lambda: last_start_to_current_position_button_clicked(self))
296
+ self.start_end_moving_frame.layout().addWidget(self.last_start_to_current_position_button, 1)
297
+
298
+ self.last_start_last_end_to_current_position_button = QPushButton()
299
+ self.last_start_last_end_to_current_position_button.setObjectName('last_start_last_end_to_current_position_button')
300
+ self.last_start_last_end_to_current_position_button.setIconSize(QSize(28, 20))
301
+ self.last_start_last_end_to_current_position_button.setFixedWidth(28)
302
+ self.last_start_last_end_to_current_position_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
303
+ self.last_start_last_end_to_current_position_button.clicked.connect(lambda: last_start_last_end_to_current_position_button_clicked(self))
304
+ self.start_end_moving_frame.layout().addWidget(self.last_start_last_end_to_current_position_button, 1)
305
+
306
+ self.next_start_next_end_to_current_position_button = QPushButton()
307
+ self.next_start_next_end_to_current_position_button.setObjectName('next_start_next_end_to_current_position_button')
308
+ self.next_start_next_end_to_current_position_button.setIconSize(QSize(28, 20))
309
+ self.next_start_next_end_to_current_position_button.setFixedWidth(28)
310
+ self.next_start_next_end_to_current_position_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
311
+ self.next_start_next_end_to_current_position_button.clicked.connect(lambda: next_start_next_end_to_current_position_button_clicked(self))
312
+ self.start_end_moving_frame.layout().addWidget(self.next_start_next_end_to_current_position_button, 1)
313
+
314
+ self.next_end_to_current_position_button = QPushButton()
315
+ self.next_end_to_current_position_button.setObjectName('next_end_to_current_position_button')
316
+ self.next_end_to_current_position_button.setIconSize(QSize(28, 20))
317
+ self.next_end_to_current_position_button.setFixedWidth(28)
318
+ self.next_end_to_current_position_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
319
+ self.next_end_to_current_position_button.clicked.connect(lambda: next_end_to_current_position_button_clicked(self))
320
+ self.start_end_moving_frame.layout().addWidget(self.next_end_to_current_position_button, 1)
321
+
322
+ self.next_start_to_current_position_button = QPushButton()
323
+ self.next_start_to_current_position_button.setObjectName('next_start_to_current_position_button')
324
+ self.next_start_to_current_position_button.setIconSize(QSize(20, 20))
325
+ self.next_start_to_current_position_button.setFixedWidth(32)
326
+ self.next_start_to_current_position_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
327
+ self.next_start_to_current_position_button.clicked.connect(lambda: next_start_to_current_position_button_clicked(self))
328
+ self.start_end_moving_frame.layout().addWidget(self.next_start_to_current_position_button, 1)
329
+
330
+ self.playercontrols_widget_left_top_line.layout().addWidget(self.start_end_moving_frame, 1, Qt.AlignTop)
331
+
332
+ self.change_playback_speed = QPushButton()
333
+ self.change_playback_speed.setObjectName('change_playback_speed')
334
+ self.change_playback_speed.setCheckable(True)
335
+ self.change_playback_speed.setLayout(QHBoxLayout())
336
+ self.change_playback_speed.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed))
337
+ self.change_playback_speed.setFixedHeight(48) # TODO remove
338
+ self.change_playback_speed.setIconSize(QSize(22, 22))
339
+ self.change_playback_speed.layout().setContentsMargins(16, 15, 40, 16)
340
+ self.change_playback_speed.layout().setSpacing(0)
341
+ self.change_playback_speed.clicked.connect(lambda: change_playback_speed_clicked(self))
342
+
343
+ self.change_playback_speed_decrease = QPushButton('-')
344
+ self.change_playback_speed_decrease.setObjectName('change_playback_speed_decrease')
345
+ self.change_playback_speed_decrease.setFixedWidth(20)
346
+ self.change_playback_speed_decrease.setStyleSheet('QPushButton {padding:0;}')
347
+ self.change_playback_speed_decrease.clicked.connect(lambda: change_playback_speed_decrease_clicked(self))
348
+ self.change_playback_speed_decrease.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
349
+ self.change_playback_speed.layout().addWidget(self.change_playback_speed_decrease)
350
+
351
+ self.change_playback_speed_slider = QSlider(Qt.Horizontal)
352
+ self.change_playback_speed_slider.setMinimum(5)
353
+ self.change_playback_speed_slider.setMaximum(300)
354
+ self.change_playback_speed_slider.setPageStep(10)
355
+ # self.change_playback_speed_slider.setFixedWidth(60)
356
+ self.change_playback_speed_slider.setValue(int(session.CONFIG.get('playback_speed', 1) * 100))
357
+ self.change_playback_speed_slider.sliderReleased.connect(lambda: change_playback_speed_slider(self))
358
+ self.change_playback_speed_slider.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
359
+ self.change_playback_speed.layout().addWidget(self.change_playback_speed_slider)
360
+
361
+ self.change_playback_speed_increase = QPushButton('+')
362
+ self.change_playback_speed_increase.setObjectName('change_playback_speed_increase')
363
+ self.change_playback_speed_increase.setFixedWidth(20)
364
+ self.change_playback_speed_increase.setStyleSheet('QPushButton {padding:0;}')
365
+ self.change_playback_speed_increase.clicked.connect(lambda: change_playback_speed_increase_clicked(self))
366
+ self.change_playback_speed_increase.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
367
+ self.change_playback_speed.layout().addWidget(self.change_playback_speed_increase)
368
+
369
+ self.change_playback_speed_label = QLabel()
370
+ self.change_playback_speed_label.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
371
+ self.change_playback_speed_label.setObjectName('change_playback_speed_label')
372
+ self.change_playback_speed_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
373
+ self.change_playback_speed_label.setFixedWidth(50)
374
+ self.change_playback_speed.layout().addWidget(self.change_playback_speed_label)
375
+
376
+ self.playercontrols_widget_left_top_line.layout().addWidget(self.change_playback_speed, 1, Qt.AlignTop)
377
+
378
+ self.playercontrols_widget_top_line.layout().addWidget(self.playercontrols_widget_left_top_line, 1)
379
+
380
+ self.playercontrols_widget_center_top_line = QWidget()
381
+ self.playercontrols_widget_center_top_line.setObjectName('playercontrols_widget_center_top_line')
382
+ self.playercontrols_widget_center_top_line.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed))
383
+ self.playercontrols_widget_center_top_line.setFixedHeight(51)
384
+ self.playercontrols_widget_center_top_line.setLayout(QHBoxLayout())
385
+ self.playercontrols_widget_center_top_line.layout().setContentsMargins(16, 6, 16, 1)
386
+ self.playercontrols_widget_center_top_line.layout().setSpacing(0)
387
+ self.playercontrols_widget_center_top_line.setAttribute(Qt.WA_LayoutOnEntireRect)
388
+
389
+ self.playercontrols_stop_button = QPushButton()
390
+ self.playercontrols_stop_button.setObjectName('playercontrols_stop_button')
391
+ self.playercontrols_stop_button.setProperty('position', 'first')
392
+ self.playercontrols_stop_button.setIconSize(QSize(20, 20))
393
+ self.playercontrols_stop_button.clicked.connect(lambda: playercontrols_stop_button_clicked(self))
394
+ self.playercontrols_stop_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
395
+ self.playercontrols_widget_center_top_line.layout().addWidget(self.playercontrols_stop_button)
396
+
397
+ self.playercontrols_playpause_button = QPushButton()
398
+ self.playercontrols_playpause_button.setObjectName('playercontrols_playpause_button')
399
+ self.playercontrols_playpause_button.setCheckable(True)
400
+ self.playercontrols_playpause_button.setIconSize(QSize(22, 24))
401
+ self.playercontrols_playpause_button.setLayout(QHBoxLayout())
402
+ self.playercontrols_playpause_button.layout().setContentsMargins(40, 0, 0, 5)
403
+ self.playercontrols_playpause_button.layout().setSpacing(0)
404
+ self.playercontrols_playpause_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
405
+ self.playercontrols_playpause_button.clicked.connect(lambda: playercontrols_playpause_button_clicked(self))
406
+
407
+ self.playercontrols_play_from_last_start_button = QPushButton()
408
+ self.playercontrols_play_from_last_start_button.setIconSize(QSize(24, 24))
409
+ self.playercontrols_play_from_last_start_button.setObjectName('playercontrols_play_from_last_start_button')
410
+ self.playercontrols_play_from_last_start_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
411
+ self.playercontrols_play_from_last_start_button.setFixedWidth(36)
412
+ self.playercontrols_play_from_last_start_button.clicked.connect(lambda: playercontrols_play_from_last_start_button_clicked(self))
413
+ self.playercontrols_playpause_button.layout().addWidget(self.playercontrols_play_from_last_start_button, 0, Qt.AlignRight)
414
+
415
+ self.playercontrols_playpause_button.layout().addSpacing(-1)
416
+
417
+ self.playercontrols_play_from_next_start_button = QPushButton()
418
+ self.playercontrols_play_from_next_start_button.setIconSize(QSize(24, 24))
419
+ self.playercontrols_play_from_next_start_button.setObjectName('playercontrols_play_from_next_start_button')
420
+ self.playercontrols_play_from_next_start_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
421
+ self.playercontrols_play_from_next_start_button.setFixedWidth(36)
422
+ self.playercontrols_play_from_next_start_button.clicked.connect(lambda: playercontrols_play_from_next_start_button_clicked(self))
423
+ self.playercontrols_playpause_button.layout().addWidget(self.playercontrols_play_from_next_start_button, 0, Qt.AlignLeft)
424
+
425
+ self.playercontrols_widget_center_top_line.layout().addWidget(self.playercontrols_playpause_button)
426
+
427
+ self.playercontrols_record_button = QPushButton()
428
+ self.playercontrols_record_button.setObjectName('playercontrols_record_button')
429
+ self.playercontrols_record_button.setIconSize(QSize(24, 24))
430
+ self.playercontrols_record_button.setCheckable(True)
431
+ self.playercontrols_record_button.setProperty('position', 'last')
432
+ self.playercontrols_record_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
433
+ self.playercontrols_record_button.clicked.connect(lambda: playercontrols_record_button_clicked(self))
434
+ self.playercontrols_record_button.setLayout(QHBoxLayout())
435
+ self.playercontrols_record_button.layout().setContentsMargins(40, 0, 0, 5)
436
+ self.playercontrols_record_button.layout().setSpacing(0)
437
+
438
+ self.playercontrols_record_transcript_button = QPushButton()
439
+ self.playercontrols_record_transcript_button.setIconSize(QSize(24, 24))
440
+ self.playercontrols_record_transcript_button.setObjectName('playercontrols_record_transcript_button')
441
+ self.playercontrols_record_transcript_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
442
+ self.playercontrols_record_transcript_button.setFixedWidth(36)
443
+ self.playercontrols_record_transcript_button.clicked.connect(lambda: playercontrols_record_transcript_button_clicked(self))
444
+ self.playercontrols_record_button.layout().addWidget(self.playercontrols_record_transcript_button, 0, Qt.AlignRight)
445
+
446
+ self.playercontrols_record_button.layout().addSpacing(-1)
447
+
448
+ self.playercontrols_record_audio_button = QPushButton()
449
+ self.playercontrols_record_audio_button.setIconSize(QSize(24, 24))
450
+ self.playercontrols_record_audio_button.setObjectName('playercontrols_record_audio_button')
451
+ self.playercontrols_record_audio_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
452
+ self.playercontrols_record_audio_button.setFixedWidth(36)
453
+ self.playercontrols_record_audio_button.clicked.connect(lambda: playercontrols_record_audio_button_clicked(self))
454
+ self.playercontrols_record_button.layout().addWidget(self.playercontrols_record_audio_button, 0, Qt.AlignLeft)
455
+
456
+ self.playercontrols_widget_center_top_line.layout().addWidget(self.playercontrols_record_button)
457
+
458
+ self.playercontrols_widget_top_line.layout().addSpacing(-30)
459
+
460
+ self.playercontrols_widget_top_line.layout().addWidget(self.playercontrols_widget_center_top_line, 0)
461
+
462
+ self.playercontrols_widget_top_line.layout().addSpacing(-30)
463
+
464
+ self.playercontrols_widget_right_top_line = QWidget()
465
+ self.playercontrols_widget_right_top_line.setObjectName('playercontrols_widget_right_top_line')
466
+ # self.playercontrols_widget_right_top_line.setAttribute(Qt.WA_TranslucentBackground)
467
+ self.playercontrols_widget_right_top_line.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum))
468
+ self.playercontrols_widget_right_top_line.setLayout(QHBoxLayout())
469
+ self.playercontrols_widget_right_top_line.layout().setContentsMargins(0, 2, 0, 0)
470
+ self.playercontrols_widget_right_top_line.layout().setSpacing(8)
471
+ self.playercontrols_widget_right_top_line.setAttribute(Qt.WA_LayoutOnEntireRect)
472
+
473
+ self.repeat_playback = QPushButton()
474
+ self.repeat_playback.setObjectName('repeat_playback')
475
+ self.repeat_playback.setCheckable(True)
476
+ self.repeat_playback.setLayout(QHBoxLayout())
477
+ self.repeat_playback.setFixedHeight(48)
478
+ self.repeat_playback.setIconSize(QSize(22, 22))
479
+ self.repeat_playback.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
480
+ self.repeat_playback.layout().setSizeConstraint(QLayout.SetMinimumSize)
481
+ self.repeat_playback.layout().setContentsMargins(56, 12, 16, 12)
482
+ self.repeat_playback.layout().setSpacing(0)
483
+ self.repeat_playback.clicked.connect(lambda: repeat_playback_clicked(self))
484
+
485
+ self.repeat_playback_duration = EnterAbsorbingDoubleSpinBox()
486
+ self.repeat_playback_duration.setProperty('class', 'spin_playercontrols')
487
+ self.repeat_playback_duration.setMinimum(.1)
488
+ self.repeat_playback_duration.setMaximum(60.)
489
+ self.repeat_playback_duration.setFixedWidth(50)
490
+ self.repeat_playback_duration.valueChanged.connect(lambda: repeat_playback_duration_changed(self))
491
+ self.repeat_playback_duration.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
492
+ self.repeat_playback.layout().addWidget(self.repeat_playback_duration)
493
+
494
+ self.repeat_playback_x_label = QLabel('x')
495
+ self.repeat_playback_x_label.setAlignment(Qt.AlignCenter)
496
+ self.repeat_playback_x_label.setFixedWidth(16)
497
+ self.repeat_playback_x_label.setObjectName('repeat_playback_x_label')
498
+ self.repeat_playback_x_label.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
499
+ self.repeat_playback.layout().addWidget(self.repeat_playback_x_label)
500
+
501
+ self.repeat_playback_times = QSpinBox()
502
+ self.repeat_playback_times.setProperty('class', 'spin_playercontrols')
503
+ self.repeat_playback_times.setMinimum(1)
504
+ self.repeat_playback_times.setMaximum(20)
505
+ self.repeat_playback_times.setFixedWidth(30)
506
+ self.repeat_playback_times.valueChanged.connect(lambda: repeat_playback_times_changed(self))
507
+ self.repeat_playback_times.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
508
+ self.repeat_playback.layout().addWidget(self.repeat_playback_times)
509
+
510
+ self.playercontrols_widget_right_top_line.layout().addWidget(self.repeat_playback)
511
+
512
+ self.music_voice_separation_box = QWidget()
513
+ self.music_voice_separation_box.setObjectName('music_voice_separation_box')
514
+ self.music_voice_separation_box.setFixedHeight(42)
515
+ self.music_voice_separation_box.setLayout(QHBoxLayout())
516
+ self.music_voice_separation_box.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
517
+ self.music_voice_separation_box.layout().setContentsMargins(0, 0, 0, 0)
518
+ self.music_voice_separation_box.layout().setSpacing(0)
519
+
520
+ self.music_voice_separation_music_icon = QPushButton()
521
+ self.music_voice_separation_music_icon.setObjectName('music_voice_separation_music_icon')
522
+ self.music_voice_separation_music_icon.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
523
+ self.music_voice_separation_music_icon.setIconSize(QSize(24, 24))
524
+ self.music_voice_separation_music_icon.clicked.connect(lambda: music_voice_separation_music_icon_clicked(self))
525
+ self.music_voice_separation_box.layout().addWidget(self.music_voice_separation_music_icon)
526
+
527
+ self.music_voice_separation_box.layout().addSpacing(-21)
528
+
529
+ class CenterSnapDial(QDial):
530
+ def __init__(self, center=None, threshold=3, parent=None):
531
+ super().__init__(parent)
532
+ self._center = center
533
+ self._threshold = threshold
534
+ self._middle_value = 50
535
+
536
+ self.valueChanged.connect(self.handle_value_change)
537
+
538
+ def handle_value_change(self, value):
539
+ # Check if value is close to middle
540
+ if abs(value - self._middle_value) <= self._threshold:
541
+ # Snap to middle
542
+ self.blockSignals(True) # Prevent recursive signal
543
+ self.setValue(self._middle_value)
544
+ self.blockSignals(False)
545
+
546
+ self.music_voice_separation_slider = CenterSnapDial(center=50, threshold=3)
547
+ self.music_voice_separation_slider.setObjectName('music_voice_separation_slider')
548
+ self.music_voice_separation_slider.setFixedSize(QSize(42, 42))
549
+ self.music_voice_separation_slider.setRange(0, 100)
550
+ self.music_voice_separation_slider.setValue(50)
551
+ self.music_voice_separation_slider.valueChanged.connect(lambda: music_voice_separation_slider_changed(self))
552
+ self.music_voice_separation_box.layout().addWidget(self.music_voice_separation_slider, 1)
553
+
554
+ self.music_voice_separation_box.layout().addSpacing(-21)
555
+
556
+ self.music_voice_separation_voice_icon = QPushButton()
557
+ self.music_voice_separation_voice_icon.setObjectName('music_voice_separation_voice_icon')
558
+ self.music_voice_separation_voice_icon.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
559
+ self.music_voice_separation_voice_icon.setIconSize(QSize(24, 24))
560
+ self.music_voice_separation_voice_icon.clicked.connect(lambda: music_voice_separation_voice_icon_clicked(self))
561
+ self.music_voice_separation_box.layout().addWidget(self.music_voice_separation_voice_icon)
562
+
563
+ self.music_voice_separation_slider.raise_()
564
+
565
+ def music_voice_separation_thread_finished(response):
566
+ session.VIDEO['music_voice_separation'] = response
567
+ self.preview_panel_player._audio_device.original_track.enabled = False
568
+
569
+ background_source = self.preview_panel_player._audio_device.load_audio(session.VIDEO['music_voice_separation']['background'])
570
+ background_clip = self.preview_panel_player._audio_device.load_clip(background_source)
571
+ self.preview_panel_player._audio_device.background_sound = self.preview_panel_player._audio_device.generate_track()
572
+ self.preview_panel_player._audio_device.background_sound.add_clip(background_clip)
573
+ self.preview_panel_player._audio_device.add_track(self.preview_panel_player._audio_device.background_sound)
574
+
575
+ vocals_source = self.preview_panel_player._audio_device.load_audio(session.VIDEO['music_voice_separation']['vocals'])
576
+ vocals_clip = self.preview_panel_player._audio_device.load_clip(vocals_source)
577
+ self.preview_panel_player._audio_device.vocals_sound = self.preview_panel_player._audio_device.generate_track()
578
+ self.preview_panel_player._audio_device.vocals_sound.add_clip(vocals_clip)
579
+ self.preview_panel_player._audio_device.add_track(self.preview_panel_player._audio_device.vocals_sound)
580
+
581
+ music_voice_separation_box_update(self)
582
+
583
+ def music_voice_separation_thread_original_extracted(response):
584
+ audio_source = self.preview_panel_player._audio_device.load_audio(response)
585
+ clip = self.preview_panel_player._audio_device.load_clip(audio_source)
586
+ self.preview_panel_player._audio_device.original_track = self.preview_panel_player._audio_device.generate_track()
587
+ self.preview_panel_player._audio_device.original_track.add_clip(clip)
588
+ self.preview_panel_player._audio_device.add_track(self.preview_panel_player._audio_device.original_track)
589
+ self.preview_panel_player._audio_output = None
590
+ # widget._media_player.setAudioOutput(widget._audio_output)
591
+
592
+ self.music_voice_separation_thread = MusicAudioExtractorThread(parent=self)
593
+ self.music_voice_separation_thread.response.connect(lambda response: music_voice_separation_thread_finished(response))
594
+ self.music_voice_separation_thread.original.connect(lambda response: music_voice_separation_thread_original_extracted(response))
595
+
596
+ self.playercontrols_widget_right_top_line.layout().addWidget(self.music_voice_separation_box, 0, Qt.AlignTop)
597
+
598
+ self.gap_hbox = QWidget()
599
+ self.gap_hbox.setObjectName('gap_hbox')
600
+ self.gap_hbox.setFixedHeight(42)
601
+ self.gap_hbox.setLayout(QHBoxLayout())
602
+ self.gap_hbox.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
603
+ self.gap_hbox.layout().setContentsMargins(0, 0, 0, 0)
604
+ self.gap_hbox.layout().setSpacing(0)
605
+
606
+ self.gap_add_subtitle_button = QPushButton()
607
+ self.gap_add_subtitle_button.setObjectName('gap_add_subtitle_button')
608
+ self.gap_add_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
609
+ self.gap_add_subtitle_button.setIconSize(QSize(24, 24))
610
+ self.gap_add_subtitle_button.clicked.connect(lambda: gap_add_subtitle_button_clicked(self))
611
+ self.gap_hbox.layout().addWidget(self.gap_add_subtitle_button)
612
+
613
+ self.gap_hbox.layout().addSpacing(-23)
614
+
615
+ self.gap_subtitle_duration = QDoubleSpinBox()
616
+ self.gap_subtitle_duration.setObjectName('gap_subtitle_duration')
617
+ self.gap_subtitle_duration.setMinimum(.1)
618
+ self.gap_subtitle_duration.setMaximum(60.)
619
+ self.gap_subtitle_duration.setFixedSize(QSize(46, 26))
620
+ self.gap_hbox.layout().addWidget(self.gap_subtitle_duration)
621
+
622
+ self.gap_hbox.layout().addSpacing(-23)
623
+
624
+ self.gap_remove_subtitle_button = QPushButton()
625
+ self.gap_remove_subtitle_button.setObjectName('gap_remove_subtitle_button')
626
+ self.gap_remove_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
627
+ self.gap_remove_subtitle_button.setIconSize(QSize(24, 24))
628
+ self.gap_remove_subtitle_button.clicked.connect(lambda: gap_remove_subtitle_button_clicked(self))
629
+ self.gap_hbox.layout().addWidget(self.gap_remove_subtitle_button)
630
+
631
+ self.gap_subtitle_duration.raise_()
632
+
633
+ self.playercontrols_widget_right_top_line.layout().addWidget(self.gap_hbox, 0, Qt.AlignTop)
634
+
635
+ self.add_remove_subtitle_frame = QWidget()
636
+ self.add_remove_subtitle_frame.setLayout(QHBoxLayout())
637
+ self.add_remove_subtitle_frame.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
638
+ self.add_remove_subtitle_frame.layout().setSizeConstraint(QLayout.SetMinimumSize)
639
+ self.add_remove_subtitle_frame.layout().setContentsMargins(0, 0, 0, 0)
640
+ self.add_remove_subtitle_frame.layout().setSpacing(0)
641
+
642
+ self.add_subtitle_button = QPushButton()
643
+ self.add_subtitle_button.setObjectName('add_subtitle_button')
644
+ self.add_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
645
+ self.add_subtitle_button.setIconSize(QSize(20, 20))
646
+ self.add_subtitle_button.setFixedHeight(42)
647
+ self.add_subtitle_button.setLayout(QHBoxLayout())
648
+ self.add_subtitle_button.layout().setSizeConstraint(QLayout.SetMinimumSize)
649
+ self.add_subtitle_button.layout().setContentsMargins(0, 0, 5, 5)
650
+ self.add_subtitle_button.layout().setSpacing(0)
651
+ self.add_subtitle_button.clicked.connect(lambda: add_subtitle_button_clicked(self))
652
+
653
+ self.add_subtitle_button.layout().addStretch()
654
+
655
+ self.add_subtitle_starting_from_last = QPushButton()
656
+ self.add_subtitle_starting_from_last.setObjectName('add_subtitle_starting_from_last')
657
+ self.add_subtitle_starting_from_last.setCheckable(True)
658
+ self.add_subtitle_starting_from_last.setIconSize(QSize(20, 20))
659
+ self.add_subtitle_starting_from_last.setFixedWidth(28)
660
+ self.add_subtitle_starting_from_last.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
661
+ self.add_subtitle_starting_from_last.clicked.connect(lambda: add_subtitle_starting_from_last_clicked(self))
662
+ self.add_subtitle_button.layout().addWidget(self.add_subtitle_starting_from_last, 1)
663
+
664
+ self.add_subtitle_button.layout().addSpacing(-1)
665
+
666
+ self.add_subtitle_and_play = QPushButton()
667
+ self.add_subtitle_and_play.setObjectName('add_subtitle_and_play')
668
+ self.add_subtitle_and_play.setCheckable(True)
669
+ self.add_subtitle_and_play.setIconSize(QSize(20, 20))
670
+ self.add_subtitle_and_play.setFixedWidth(20)
671
+ self.add_subtitle_and_play.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
672
+ self.add_subtitle_and_play.clicked.connect(lambda: add_subtitle_and_play_clicked(self))
673
+ self.add_subtitle_button.layout().addWidget(self.add_subtitle_and_play, 1)
674
+
675
+ self.add_subtitle_button.layout().addSpacing(-1)
676
+
677
+ self.add_subtitle_to_next_start = QPushButton()
678
+ self.add_subtitle_to_next_start.setObjectName('add_subtitle_to_next_start')
679
+ self.add_subtitle_to_next_start.setCheckable(True)
680
+ self.add_subtitle_to_next_start.setIconSize(QSize(20, 20))
681
+ self.add_subtitle_to_next_start.setFixedWidth(28)
682
+ self.add_subtitle_to_next_start.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
683
+ self.add_subtitle_to_next_start.clicked.connect(lambda: add_subtitle_to_next_start_clicked(self))
684
+ self.add_subtitle_button.layout().addWidget(self.add_subtitle_to_next_start, 1)
685
+
686
+ self.add_subtitle_button.layout().addSpacing(6)
687
+
688
+ self.add_subtitle_duration = QDoubleSpinBox()
689
+ self.add_subtitle_duration.setObjectName('add_subtitle_duration')
690
+ self.add_subtitle_duration.setMinimum(.1)
691
+ self.add_subtitle_duration.setMaximum(60.)
692
+ self.add_subtitle_duration.setValue(10.0)
693
+ self.add_subtitle_duration.setFixedWidth(46)
694
+ self.add_subtitle_duration.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
695
+ self.add_subtitle_duration.valueChanged.connect(lambda: add_subtitle_duration_changed(self))
696
+ self.add_subtitle_button.layout().addWidget(self.add_subtitle_duration, 1)
697
+
698
+ self.add_remove_subtitle_frame.layout().addWidget(self.add_subtitle_button)
699
+
700
+ self.remove_selected_subtitle_button = QPushButton()
701
+ self.remove_selected_subtitle_button.setObjectName('remove_selected_subtitle_button')
702
+ self.remove_selected_subtitle_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
703
+ self.remove_selected_subtitle_button.setIconSize(QSize(20, 20))
704
+ self.remove_selected_subtitle_button.setFixedHeight(42)
705
+ self.remove_selected_subtitle_button.clicked.connect(lambda: remove_selected_subtitle_button_clicked(self))
706
+ self.add_remove_subtitle_frame.layout().addWidget(self.remove_selected_subtitle_button)
707
+
708
+ self.playercontrols_widget_right_top_line.layout().addWidget(self.add_remove_subtitle_frame, 0, Qt.AlignTop)
709
+
710
+ self.playercontrols_widget_right_top_line.layout().addStretch()
711
+
712
+ self.playercontrols_widget_top_line.layout().addWidget(self.playercontrols_widget_right_top_line, 1)
713
+
714
+ self.playercontrols_widget_left_top_line.raise_()
715
+ self.playercontrols_widget_right_top_line.raise_()
716
+
717
+ self.playercontrols_widget.layout().addWidget(self.playercontrols_widget_top_line, 0)
718
+
719
+ self.playercontrols_widget_bottom_line = QWidget()
720
+ self.playercontrols_widget_bottom_line.setObjectName('playercontrols_widget_bottom_line')
721
+ # self.playercontrols_widget_bottom_line.setFixedHeight(26)
722
+ self.playercontrols_widget_bottom_line.setLayout(QHBoxLayout())
723
+ self.playercontrols_widget_bottom_line.layout().setContentsMargins(0, 0, 0, 0)
724
+ self.playercontrols_widget_bottom_line.layout().setSpacing(0)
725
+ # self.playercontrols_widget_bottom_line.setAttribute(Qt.WA_LayoutOnEntireRect)
726
+ self.playercontrols_widget_bottom_line.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum))
727
+
728
+ self.playercontrols_widget_left_bottom_line = QWidget()
729
+ self.playercontrols_widget_left_bottom_line.setObjectName('playercontrols_widget_left_bottom_line')
730
+ # self.playercontrols_widget_left_bottom_line.setAttribute(Qt.WA_TranslucentBackground)
731
+ # self.playercontrols_widget_left_bottom_line.setAttribute(Qt.WA_LayoutOnEntireRect)
732
+ self.playercontrols_widget_left_bottom_line.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum))
733
+ self.playercontrols_widget_left_bottom_line.setLayout(QHBoxLayout())
734
+ self.playercontrols_widget_left_bottom_line.layout().setContentsMargins(0, 2, 0, 1)#0, 3, 0, 1)
735
+ self.playercontrols_widget_left_bottom_line.layout().setSpacing(6)
736
+
737
+ self.playercontrols_widget_left_bottom_line.layout().addStretch()
738
+
739
+ self.timeline_speaker_container = QWidget()
740
+ self.timeline_speaker_container.setObjectName('timeline_speaker_container')
741
+ self.timeline_speaker_container.setLayout(QHBoxLayout())
742
+ self.timeline_speaker_container.layout().setContentsMargins(0, 0, 0, 0)
743
+ self.timeline_speaker_container.layout().setSpacing(0)
744
+
745
+ self.timeline_show_speaker_color_button = QPushButton()
746
+ self.timeline_show_speaker_color_button.setObjectName('timeline_show_speaker_color_button')
747
+ self.timeline_show_speaker_color_button.setCheckable(True)
748
+ self.timeline_show_speaker_color_button.setIconSize(QSize(16, 16))
749
+ self.timeline_show_speaker_color_button.setFixedWidth(24)
750
+ self.timeline_show_speaker_color_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
751
+ self.timeline_show_speaker_color_button.clicked.connect(lambda: timeline_show_speaker_color_button_clicked(self))
752
+ self.timeline_speaker_container.layout().addWidget(self.timeline_show_speaker_color_button)
753
+
754
+ self.timeline_show_speaker_tracks_button = QPushButton()
755
+ self.timeline_show_speaker_tracks_button.setObjectName('timeline_show_speaker_tracks_button')
756
+ self.timeline_show_speaker_tracks_button.setCheckable(True)
757
+ self.timeline_show_speaker_tracks_button.setIconSize(QSize(16, 16))
758
+ self.timeline_show_speaker_tracks_button.setFixedWidth(24)
759
+ self.timeline_show_speaker_tracks_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
760
+ self.timeline_show_speaker_tracks_button.clicked.connect(lambda: timeline_show_speaker_tracks_button_clicked(self))
761
+ self.timeline_speaker_container.layout().addWidget(self.timeline_show_speaker_tracks_button)
762
+
763
+ self.playercontrols_widget_left_bottom_line.layout().addWidget(self.timeline_speaker_container)
764
+
765
+ self.timelinescrolling_container = QWidget()
766
+ self.timelinescrolling_container.setObjectName('timelinescrolling_container')
767
+ self.timelinescrolling_container.setLayout(QHBoxLayout())
768
+ self.timelinescrolling_container.layout().setContentsMargins(0, 0, 0, 0)
769
+ self.timelinescrolling_container.layout().setSpacing(0)
770
+
771
+ self.timelinescrolling_none_button = QPushButton()
772
+ self.timelinescrolling_none_button.setObjectName('timelinescrolling_none_button')
773
+ self.timelinescrolling_none_button.setCheckable(True)
774
+ self.timelinescrolling_none_button.setIconSize(QSize(16, 16))
775
+ self.timelinescrolling_none_button.setFixedWidth(24)
776
+ self.timelinescrolling_none_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
777
+ self.timelinescrolling_none_button.clicked.connect(lambda: timelinescrolling_type_changed(self, 'none'))
778
+ self.timelinescrolling_container.layout().addWidget(self.timelinescrolling_none_button)
779
+
780
+ self.timelinescrolling_page_button = QPushButton()
781
+ self.timelinescrolling_page_button.setObjectName('timelinescrolling_page_button')
782
+ self.timelinescrolling_page_button.setCheckable(True)
783
+ self.timelinescrolling_page_button.setIconSize(QSize(16, 16))
784
+ self.timelinescrolling_page_button.setFixedWidth(24)
785
+ self.timelinescrolling_page_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
786
+ self.timelinescrolling_page_button.clicked.connect(lambda: timelinescrolling_type_changed(self, 'page'))
787
+ self.timelinescrolling_container.layout().addWidget(self.timelinescrolling_page_button)
788
+
789
+ self.timelinescrolling_follow_button = QPushButton()
790
+ self.timelinescrolling_follow_button.setObjectName('timelinescrolling_follow_button')
791
+ self.timelinescrolling_follow_button.setCheckable(True)
792
+ self.timelinescrolling_follow_button.setIconSize(QSize(16, 16))
793
+ self.timelinescrolling_follow_button.setFixedWidth(24)
794
+ self.timelinescrolling_follow_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
795
+ self.timelinescrolling_follow_button.clicked.connect(lambda: timelinescrolling_type_changed(self, 'follow'))
796
+ self.timelinescrolling_container.layout().addWidget(self.timelinescrolling_follow_button)
797
+
798
+ self.playercontrols_widget_left_bottom_line.layout().addWidget(self.timelinescrolling_container)
799
+
800
+ self.snap_controls_container = QWidget()
801
+ self.snap_controls_container.setObjectName('snap_controls_container')
802
+ self.snap_controls_container.setLayout(QHBoxLayout())
803
+ self.snap_controls_container.layout().setContentsMargins(0, 0, 0, 0)
804
+ self.snap_controls_container.layout().setSpacing(0)
805
+
806
+ self.snap_button = QPushButton()
807
+ self.snap_button.setObjectName('snap_button')
808
+ self.snap_button.setCheckable(True)
809
+ self.snap_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
810
+ self.snap_button.clicked.connect(lambda: snap_button_clicked(self))
811
+ self.snap_button.setLayout(QHBoxLayout())
812
+ self.snap_button.layout().setSizeConstraint(QLayout.SetMinimumSize)
813
+ self.snap_button.layout().setContentsMargins(4, 0, 0, 0)
814
+ self.snap_button.layout().setSpacing(4)
815
+ self.snap_controls_container.layout().addWidget(self.snap_button)
816
+
817
+ self.snap_button_label = QLabel()
818
+ self.snap_button_label.setObjectName('snap_button_label')
819
+ self.snap_button_label.setAlignment(Qt.AlignCenter)
820
+ self.snap_button_label.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
821
+ self.snap_button.layout().addWidget(self.snap_button_label)
822
+
823
+ self.snap_value = QDoubleSpinBox()
824
+ self.snap_value.setProperty('class', 'spin_playercontrols')
825
+ self.snap_value.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
826
+ self.snap_value.valueChanged.connect(lambda: snap_value_changed(self))
827
+ self.snap_button.layout().addWidget(self.snap_value)
828
+
829
+ self.snap_grid_button = QPushButton()
830
+ self.snap_grid_button.setObjectName('snap_grid_button')
831
+ self.snap_grid_button.setCheckable(True)
832
+ self.snap_grid_button.setIconSize(QSize(24, 16))
833
+ self.snap_grid_button.setFixedWidth(28)
834
+ self.snap_grid_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
835
+ self.snap_grid_button.clicked.connect(lambda: snap_grid_button_clicked(self))
836
+ self.snap_controls_container.layout().addWidget(self.snap_grid_button)
837
+
838
+ self.snap_move_button = QPushButton()
839
+ self.snap_move_button.setObjectName('snap_move_button')
840
+ self.snap_move_button.setCheckable(True)
841
+ self.snap_move_button.setIconSize(QSize(24, 16))
842
+ self.snap_move_button.setFixedWidth(24)
843
+ self.snap_move_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
844
+ self.snap_move_button.clicked.connect(lambda: snap_move_button_clicked(self))
845
+ self.snap_controls_container.layout().addWidget(self.snap_move_button)
846
+
847
+ self.snap_limits_button = QPushButton()
848
+ self.snap_limits_button.setObjectName('snap_limits_button')
849
+ self.snap_limits_button.setCheckable(True)
850
+ self.snap_limits_button.setIconSize(QSize(24, 16))
851
+ self.snap_limits_button.setFixedWidth(24)
852
+ self.snap_limits_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
853
+ self.snap_limits_button.clicked.connect(lambda: snap_limits_button_clicked(self))
854
+ self.snap_controls_container.layout().addWidget(self.snap_limits_button)
855
+
856
+ self.snap_move_nereast_button = QPushButton()
857
+ self.snap_move_nereast_button.setObjectName('snap_move_nereast_button')
858
+ self.snap_move_nereast_button.setCheckable(True)
859
+ self.snap_move_nereast_button.setIconSize(QSize(24, 16))
860
+ self.snap_move_nereast_button.setFixedWidth(28)
861
+ self.snap_move_nereast_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
862
+ self.snap_move_nereast_button.clicked.connect(lambda: snap_move_nereast_button_clicked(self))
863
+ self.snap_controls_container.layout().addWidget(self.snap_move_nereast_button)
864
+
865
+ self.playercontrols_widget_left_bottom_line.layout().addWidget(self.snap_controls_container)
866
+
867
+ self.move_start_container = QWidget()
868
+ self.move_start_container.setObjectName('move_start_container')
869
+ self.move_start_container.setLayout(QHBoxLayout())
870
+ self.move_start_container.layout().setContentsMargins(0, 0, 0, 0)
871
+ self.move_start_container.layout().setSpacing(0)
872
+
873
+ self.move_start_back_subtitle = QPushButton()
874
+ self.move_start_back_subtitle.setObjectName('move_start_back_subtitle')
875
+ self.move_start_back_subtitle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
876
+ self.move_start_back_subtitle.setFixedWidth(24)
877
+ self.move_start_back_subtitle.clicked.connect(lambda: move_start_back_subtitle_clicked(self))
878
+ self.move_start_container.layout().addWidget(self.move_start_back_subtitle)
879
+
880
+ self.move_start_forward_subtitle = QPushButton()
881
+ self.move_start_forward_subtitle.setObjectName('move_start_forward_subtitle')
882
+ self.move_start_forward_subtitle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
883
+ self.move_start_forward_subtitle.setFixedWidth(24)
884
+ self.move_start_forward_subtitle.clicked.connect(lambda: move_start_forward_subtitle_clicked(self))
885
+ self.move_start_container.layout().addWidget(self.move_start_forward_subtitle)
886
+
887
+ self.playercontrols_widget_left_bottom_line.layout().addWidget(self.move_start_container)
888
+
889
+ self.move_backward_subtitle = QPushButton()
890
+ self.move_backward_subtitle.setObjectName('move_backward_subtitle')
891
+ self.move_backward_subtitle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
892
+ self.move_backward_subtitle.setFixedWidth(24)
893
+ self.move_backward_subtitle.clicked.connect(lambda: move_backward_subtitle_clicked(self))
894
+ self.playercontrols_widget_left_bottom_line.layout().addWidget(self.move_backward_subtitle)
895
+
896
+ self.timeline_cursor_back_frame = QPushButton()
897
+ self.timeline_cursor_back_frame.setObjectName('timeline_cursor_back_frame')
898
+ self.timeline_cursor_back_frame.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
899
+ self.timeline_cursor_back_frame.setFixedWidth(24)
900
+ self.timeline_cursor_back_frame.clicked.connect(lambda: timeline_cursor_back_frame_clicked(self))
901
+ self.playercontrols_widget_left_bottom_line.layout().addWidget(self.timeline_cursor_back_frame)
902
+
903
+ self.playercontrols_widget_bottom_line.layout().addWidget(self.playercontrols_widget_left_bottom_line)
904
+
905
+ self.playercontrols_widget_bottom_line.layout().addSpacing(-12)
906
+
907
+ self.playercontrols_widget_center_bottom_line = QWidget()
908
+ self.playercontrols_widget_center_bottom_line.setObjectName('playercontrols_widget_center_bottom_line')
909
+ # self.playercontrols_widget_center_bottom_line.setFixedHeight(26)
910
+ # self.playercontrols_widget_center_bottom_line.setAttribute(Qt.WA_TranslucentBackground)
911
+ # self.playercontrols_widget_center_bottom_line.setAttribute(Qt.WA_LayoutOnEntireRect)
912
+ self.playercontrols_widget_center_bottom_line.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
913
+ self.playercontrols_widget_center_bottom_line.setLayout(QHBoxLayout())
914
+ self.playercontrols_widget_center_bottom_line.layout().setContentsMargins(0, 0, 0, 0)
915
+ self.playercontrols_widget_center_bottom_line.layout().setSpacing(0)
916
+
917
+ class playercontrols_timecode_label(QLabel):
918
+ def __init__(widget, *args):
919
+ super(playercontrols_timecode_label, widget).__init__(*args)
920
+ widget.setAlignment(Qt.AlignCenter)
921
+ widget.setFixedWidth(120)
922
+ widget.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
923
+ widget.setObjectName('playercontrols_timecode_label')
924
+
925
+ def update_time(widget):
926
+ widget.setText(str(timecode.Timecode('1000', start_seconds=session.SUBTITLE.get('position', 0), fractional=True)))
927
+
928
+ self.playercontrols_timecode_label = playercontrols_timecode_label()
929
+ self.playercontrols_widget_center_bottom_line.layout().addWidget(self.playercontrols_timecode_label)
930
+ self.preview_panel_player.position_changed_signal.connect(self.playercontrols_timecode_label.update_time)
931
+ self.preview_panel_player.position_changed_signal.connect(lambda: timeline.update(self))
932
+
933
+ self.playercontrols_widget_bottom_line.layout().addWidget(self.playercontrols_widget_center_bottom_line)
934
+
935
+ self.playercontrols_widget_left_bottom_line.raise_()
936
+
937
+ self.playercontrols_widget_bottom_line.layout().addSpacing(-12)
938
+
939
+ self.playercontrols_widget_right_bottom_line = QWidget()
940
+ self.playercontrols_widget_right_bottom_line.setObjectName('playercontrols_widget_right_bottom_line')
941
+ # self.playercontrols_widget_right_bottom_line.setAttribute(Qt.WA_TranslucentBackground)
942
+ self.playercontrols_widget_right_bottom_line.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum))
943
+ self.playercontrols_widget_right_bottom_line.setLayout(QHBoxLayout())
944
+ self.playercontrols_widget_right_bottom_line.layout().setContentsMargins(0, 2, 0, 1)
945
+ self.playercontrols_widget_right_bottom_line.layout().setSpacing(6)
946
+
947
+ self.timeline_cursor_next_frame = QPushButton()
948
+ self.timeline_cursor_next_frame.setObjectName('timeline_cursor_next_frame')
949
+ self.timeline_cursor_next_frame.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
950
+ self.timeline_cursor_next_frame.setFixedWidth(24)
951
+ self.timeline_cursor_next_frame.clicked.connect(lambda: timeline_cursor_next_frame_clicked(self))
952
+ self.playercontrols_widget_right_bottom_line.layout().addWidget(self.timeline_cursor_next_frame)
953
+
954
+ self.move_forward_subtitle = QPushButton()
955
+ self.move_forward_subtitle.setObjectName('move_forward_subtitle')
956
+ self.move_forward_subtitle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
957
+ self.move_forward_subtitle.setFixedWidth(24)
958
+ self.move_forward_subtitle.clicked.connect(lambda: move_forward_subtitle_clicked(self))
959
+ self.playercontrols_widget_right_bottom_line.layout().addWidget(self.move_forward_subtitle)
960
+
961
+ self.move_end_container = QWidget()
962
+ self.move_end_container.setObjectName('move_end_container')
963
+ self.move_end_container.setLayout(QHBoxLayout())
964
+ self.move_end_container.layout().setContentsMargins(0, 0, 0, 0)
965
+ self.move_end_container.layout().setSpacing(0)
966
+
967
+ self.move_end_back_subtitle = QPushButton()
968
+ self.move_end_back_subtitle.setObjectName('move_end_back_subtitle')
969
+ self.move_end_back_subtitle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
970
+ self.move_end_back_subtitle.setFixedWidth(24)
971
+ self.move_end_back_subtitle.clicked.connect(lambda: move_end_back_subtitle_clicked(self))
972
+ self.move_end_container.layout().addWidget(self.move_end_back_subtitle)
973
+
974
+ self.move_end_forward_subtitle = QPushButton()
975
+ self.move_end_forward_subtitle.setObjectName('move_end_forward_subtitle')
976
+ self.move_end_forward_subtitle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
977
+ self.move_end_forward_subtitle.setFixedWidth(24)
978
+ self.move_end_forward_subtitle.clicked.connect(lambda: move_end_forward_subtitle_clicked(self))
979
+ self.move_end_container.layout().addWidget(self.move_end_forward_subtitle)
980
+
981
+ self.playercontrols_widget_right_bottom_line.layout().addWidget(self.move_end_container)
982
+
983
+ self.grid_controls_container = QWidget()
984
+ self.grid_controls_container.setObjectName('grid_controls_container')
985
+ self.grid_controls_container.setLayout(QHBoxLayout())
986
+ self.grid_controls_container.layout().setContentsMargins(0, 0, 0, 0)
987
+ self.grid_controls_container.layout().setSpacing(0)
988
+
989
+ self.grid_button = QPushButton()
990
+ self.grid_button.setObjectName('grid_button')
991
+ self.grid_button.setCheckable(True)
992
+ self.grid_button.clicked.connect(lambda: grid_button_clicked(self))
993
+ self.grid_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
994
+ self.grid_controls_container.layout().addWidget(self.grid_button)
995
+
996
+ self.grid_frames_button = QPushButton()
997
+ self.grid_frames_button.setObjectName('grid_frames_button')
998
+ self.grid_frames_button.setCheckable(True)
999
+ self.grid_frames_button.clicked.connect(lambda: grid_type_changed(self, 'frames'))
1000
+ self.grid_frames_button.setIconSize(QSize(16, 16))
1001
+ self.grid_frames_button.setFixedWidth(24)
1002
+ self.grid_frames_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1003
+ self.grid_controls_container.layout().addWidget(self.grid_frames_button)
1004
+
1005
+ self.grid_seconds_button = QPushButton()
1006
+ self.grid_seconds_button.setObjectName('grid_seconds_button')
1007
+ self.grid_seconds_button.setCheckable(True)
1008
+ self.grid_seconds_button.clicked.connect(lambda: grid_type_changed(self, 'seconds'))
1009
+ self.grid_seconds_button.setIconSize(QSize(16, 16))
1010
+ self.grid_seconds_button.setFixedWidth(24)
1011
+ self.grid_seconds_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1012
+ self.grid_controls_container.layout().addWidget(self.grid_seconds_button)
1013
+
1014
+ self.grid_scenes_button = QPushButton()
1015
+ self.grid_scenes_button.setObjectName('grid_scenes_button')
1016
+ self.grid_scenes_button.setCheckable(True)
1017
+ self.grid_scenes_button.setIconSize(QSize(16, 16))
1018
+ self.grid_scenes_button.setFixedWidth(24)
1019
+ self.grid_scenes_button.clicked.connect(lambda: grid_type_changed(self, 'scenes'))
1020
+ self.grid_scenes_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1021
+ self.grid_controls_container.layout().addWidget(self.grid_scenes_button)
1022
+
1023
+ self.playercontrols_widget_right_bottom_line.layout().addWidget(self.grid_controls_container)
1024
+
1025
+ self.step_button_container = QWidget()
1026
+ self.step_button_container.setObjectName('step_button_container')
1027
+ self.step_button_container.setLayout(QHBoxLayout())
1028
+ self.step_button_container.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1029
+ self.step_button_container.layout().setContentsMargins(0, 0, 0, 0)
1030
+ self.step_button_container.layout().setSpacing(0)
1031
+
1032
+ self.step_button = QPushButton()
1033
+ self.step_button.setObjectName('step_button')
1034
+ self.step_button.setCheckable(True)
1035
+ self.step_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1036
+ self.step_button.clicked.connect(lambda: update_step_buttons(self))
1037
+ self.step_button_container.layout().addWidget(self.step_button)
1038
+
1039
+ self.step_value_f = QDoubleSpinBox()
1040
+ self.step_value_f.setObjectName('step_value_f')
1041
+ self.step_value_f.setMinimum(.001)
1042
+ self.step_value_f.setMaximum(999.999)
1043
+ self.step_value_f.valueChanged.connect(lambda: step_value_changed(self))
1044
+ self.step_value_f.setFixedHeight(24)
1045
+ self.step_value_f.setFixedWidth(50)
1046
+ self.step_value_f.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1047
+ self.step_button_container.layout().addWidget(self.step_value_f)
1048
+
1049
+ self.step_value_i = QSpinBox()
1050
+ self.step_value_i.setObjectName('step_value_i')
1051
+ self.step_value_i.setMinimum(1)
1052
+ self.step_value_i.setMaximum(999)
1053
+ self.step_value_i.setFixedHeight(24)
1054
+ self.step_value_i.setFixedWidth(50)
1055
+ self.step_value_i.valueChanged.connect(lambda: step_value_changed(self))
1056
+ self.step_value_i.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1057
+ self.step_button_container.layout().addWidget(self.step_value_i)
1058
+
1059
+ self.step_unit = QComboBox()
1060
+ self.step_unit.setObjectName('step_unit')
1061
+ self.step_unit.insertItems(0, STEPS_LIST)
1062
+ self.step_unit.activated.connect(lambda: step_value_changed(self))
1063
+ # self.step_unit.setFixedHeight(24)
1064
+ # self.step_unit.setFixedWidth(80)
1065
+ self.step_unit.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1066
+ self.step_button_container.layout().addWidget(self.step_unit, 1)
1067
+
1068
+ self.playercontrols_widget_right_bottom_line.layout().addWidget(self.step_button_container)
1069
+
1070
+ self.zoom_controls_container = QWidget()
1071
+ self.zoom_controls_container.setObjectName('zoom_controls_container')
1072
+ self.zoom_controls_container.setLayout(QHBoxLayout())
1073
+ self.zoom_controls_container.layout().setContentsMargins(0, 0, 0, 0)
1074
+ self.zoom_controls_container.layout().setSpacing(0)
1075
+
1076
+ self.zoomin_button = QPushButton(parent=self.playercontrols_widget)
1077
+ self.zoomin_button.setObjectName('zoomin_button')
1078
+ self.zoomin_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1079
+ self.zoomin_button.clicked.connect(lambda: zoomin_button_clicked(self))
1080
+ self.zoom_controls_container.layout().addWidget(self.zoomin_button)
1081
+
1082
+ self.zoomout_button = QPushButton(parent=self.playercontrols_widget)
1083
+ self.zoomout_button.setObjectName('zoomout_button')
1084
+ self.zoomout_button.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1085
+ self.zoomout_button.clicked.connect(lambda: zoomout_button_clicked(self))
1086
+ self.zoom_controls_container.layout().addWidget(self.zoomout_button)
1087
+
1088
+ self.playercontrols_widget_right_bottom_line.layout().addWidget(self.zoom_controls_container)
1089
+
1090
+ self.playercontrols_widget_right_bottom_line.layout().addStretch()
1091
+
1092
+ self.playercontrols_widget_bottom_line.layout().addWidget(self.playercontrols_widget_right_bottom_line)
1093
+
1094
+ self.playercontrols_widget.layout().addWidget(self.playercontrols_widget_bottom_line, 0)
1095
+
1096
+ self.playercontrols_widget.layout().addSpacing(-25)
1097
+
1098
+ timeline.load(self)
1099
+
1100
+ self.playercontrols_widget.layout().addWidget(self.timeline_scroll, 1)
1101
+
1102
+ self.playercontrols_widget_bottom_line.raise_()
1103
+
1104
+ '''
1105
+ self.playercontrols_properties_panel_placeholder = QWidget(parent=self.playercontrols_widget)
1106
+
1107
+ self.playercontrols_properties_panel = QLabel(parent=self.playercontrols_properties_panel_placeholder)
1108
+ self.playercontrols_properties_panel.setObjectName('player_controls_sub_panel')
1109
+ self.playercontrols_properties_panel.setStyleSheet('QLabel {border-top:0; border-right:0;}')
1110
+ # self.playercontrols_properties_panel_animation = QPropertyAnimation(self.playercontrols_properties_panel, b'geometry')
1111
+ # self.playercontrols_properties_panel_animation.setEasingCurve(QEasingCurve.OutCirc)
1112
+
1113
+ self.playercontrols_properties_panel_tabwidget = QTabWidget(parent=self.playercontrols_properties_panel)
1114
+ self.playercontrols_properties_panel_tabwidget.setObjectName('playercontrols_properties_panel_tabwidget')
1115
+ self.playercontrols_properties_panel_tabwidget.setTabBar(QLeftTabBar(self.playercontrols_properties_panel_tabwidget))
1116
+ self.playercontrols_properties_panel_tabwidget.setTabPosition(QTabWidget.West)
1117
+ self.playercontrols_properties_panel_tabwidget.setStyleSheet(
1118
+ #QTabBar:tab { background: rgba(184,206,224,150); color: rgba(46,62,76,150); border: 1px solid rgba(106, 116, 131, 100); padding: 10px; border-top-left-radius: 2px; border-top-right-radius: 0; border-bottom-left-radius: 2px; border-left:0; padding-top: -16px; padding-left: 4px; padding-bottom:6px; padding-right:2px; }
1119
+ #QTabBar:tab:selected { background: rgb(184,206,224); color: rgb(46,62,76); border: 1px solid rgb(106, 116, 131); border-right:0; }
1120
+ #QTabWidget:pane { background: rgb(184,206,224); border: 1px solid rgb(106, 116, 131); border-bottom-right-radius: 2px; border-top-left-radius: 0; border-top-right-radius: 2px; border-left: 0;}
1121
+ )
1122
+
1123
+ self.playercontrols_properties_panel_tabwidget_subtitles = QWidget()
1124
+
1125
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_normal = QLabel('Normal subtitle colors'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1126
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_normal.setObjectName('small_label')
1127
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_normal.setStyleSheet(' QLabel {font-weight:bold;} ')
1128
+
1129
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_title_normal = QLabel('Border'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1130
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_title_normal.setObjectName('small_label')
1131
+
1132
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1133
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_button_clicked(self))
1134
+
1135
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_title_normal = QLabel('Fill'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1136
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_title_normal.setObjectName('small_label')
1137
+
1138
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1139
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_button_clicked(self))
1140
+
1141
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_title_normal = QLabel('Text'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1142
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_title_normal.setObjectName('small_label')
1143
+
1144
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1145
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_button_clicked(self))
1146
+
1147
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_selected = QLabel('Selected subtitle colors'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1148
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_selected.setObjectName('small_label')
1149
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_selected.setStyleSheet(' QLabel {font-weight:bold;} ')
1150
+
1151
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_title_selected = QLabel('Border'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1152
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_title_selected.setObjectName('small_label')
1153
+
1154
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_border_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1155
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_border_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_border_color_button_clicked(self))
1156
+
1157
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_title_selected = QLabel('Fill'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1158
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_title_selected.setObjectName('small_label')
1159
+
1160
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_fill_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1161
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_fill_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_fill_color_button_clicked(self))
1162
+
1163
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_title_selected = QLabel('Text'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1164
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_title_selected.setObjectName('small_label')
1165
+
1166
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_text_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1167
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_text_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_text_color_button_clicked(self))
1168
+
1169
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_arrows = QLabel('Arrows colors'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1170
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_arrows.setObjectName('small_label')
1171
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_arrows.setStyleSheet(' QLabel {font-weight:bold;} ')
1172
+
1173
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_normal_arrows = QLabel('Normal'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1174
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_title_normal_arrows.setObjectName('small_label')
1175
+
1176
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_arrow_normal_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1177
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_arrow_normal_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_subtitle_arrow_normal_button_clicked(self))
1178
+
1179
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_title_normal_arrows = QLabel('Selected'.upper(), parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1180
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_title_normal_arrows.setObjectName('small_label')
1181
+
1182
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_arrow_normal_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_subtitles)
1183
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_arrow_normal_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_arrow_normal_button_clicked(self))
1184
+
1185
+ self.playercontrols_properties_panel_tabwidget.addTab(self.playercontrols_properties_panel_tabwidget_subtitles, '')
1186
+ self.playercontrols_properties_panel_tabwidget.setTabIcon(0, QIcon(os.path.join(session.PATH_SUBTITLD_GRAPHICS, 'playercontrols_properties_panel_subtitle_icon.svg')))
1187
+
1188
+ self.playercontrols_properties_panel_tabwidget_waveform = QWidget()
1189
+
1190
+ self.playercontrols_properties_panel_tabwidget_waveform_title_normal = QLabel('Waveform colors'.upper(), parent=self.playercontrols_properties_panel_tabwidget_waveform)
1191
+ self.playercontrols_properties_panel_tabwidget_waveform_title_normal.setObjectName('small_label')
1192
+ self.playercontrols_properties_panel_tabwidget_waveform_title_normal.setStyleSheet(' QLabel {font-weight:bold;} ')
1193
+
1194
+ self.playercontrols_properties_panel_tabwidget_waveform_border_color_title_normal = QLabel('Border'.upper(), parent=self.playercontrols_properties_panel_tabwidget_waveform)
1195
+ self.playercontrols_properties_panel_tabwidget_waveform_border_color_title_normal.setObjectName('small_label')
1196
+
1197
+ self.playercontrols_properties_panel_tabwidget_waveform_border_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_waveform)
1198
+ self.playercontrols_properties_panel_tabwidget_waveform_border_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_waveform_border_color_button_clicked(self))
1199
+
1200
+ self.playercontrols_properties_panel_tabwidget_waveform_fill_color_title_normal = QLabel('Fill'.upper(), parent=self.playercontrols_properties_panel_tabwidget_waveform)
1201
+ self.playercontrols_properties_panel_tabwidget_waveform_fill_color_title_normal.setObjectName('small_label')
1202
+
1203
+ self.playercontrols_properties_panel_tabwidget_waveform_fill_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_waveform)
1204
+ self.playercontrols_properties_panel_tabwidget_waveform_fill_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_waveform_fill_color_button_clicked(self))
1205
+
1206
+ self.playercontrols_properties_panel_tabwidget.addTab(self.playercontrols_properties_panel_tabwidget_waveform, '')
1207
+ self.playercontrols_properties_panel_tabwidget.setTabIcon(1, QIcon(os.path.join(session.PATH_SUBTITLD_GRAPHICS, 'playercontrols_properties_panel_waveform_icon.svg')))
1208
+
1209
+ self.playercontrols_properties_panel_tabwidget_background = QWidget()
1210
+ self.playercontrols_properties_panel_tabwidget_background.setObjectName('playercontrols_properties_panel_tabwidget_background')
1211
+
1212
+ self.playercontrols_properties_panel_tabwidget_background_title_normal = QLabel('Background colors'.upper(), parent=self.playercontrols_properties_panel_tabwidget_background)
1213
+ self.playercontrols_properties_panel_tabwidget_background_title_normal.setObjectName('small_label')
1214
+ self.playercontrols_properties_panel_tabwidget_background_title_normal.setStyleSheet(' QLabel {font-weight:bold;} ')
1215
+
1216
+ self.playercontrols_properties_panel_tabwidget_background_time_text_color_title_normal = QLabel('Time'.upper(), parent=self.playercontrols_properties_panel_tabwidget_background)
1217
+ self.playercontrols_properties_panel_tabwidget_background_time_text_color_title_normal.setObjectName('small_label')
1218
+
1219
+ self.playercontrols_properties_panel_tabwidget_background_time_text_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_background)
1220
+ self.playercontrols_properties_panel_tabwidget_background_time_text_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_background_time_text_color_button_clicked(self))
1221
+
1222
+ self.playercontrols_properties_panel_tabwidget_background_cursor_color_title_normal = QLabel('Cursor'.upper(), parent=self.playercontrols_properties_panel_tabwidget_background)
1223
+ self.playercontrols_properties_panel_tabwidget_background_cursor_color_title_normal.setObjectName('small_label')
1224
+
1225
+ self.playercontrols_properties_panel_tabwidget_background_cursor_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_background)
1226
+ self.playercontrols_properties_panel_tabwidget_background_cursor_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_background_cursor_color_button_clicked(self))
1227
+
1228
+ self.playercontrols_properties_panel_tabwidget_background_grid_color_title_normal = QLabel('Grid'.upper(), parent=self.playercontrols_properties_panel_tabwidget_background)
1229
+ self.playercontrols_properties_panel_tabwidget_background_grid_color_title_normal.setObjectName('small_label')
1230
+
1231
+ self.playercontrols_properties_panel_tabwidget_background_grid_color_button = QPushButton(parent=self.playercontrols_properties_panel_tabwidget_background)
1232
+ self.playercontrols_properties_panel_tabwidget_background_grid_color_button.clicked.connect(lambda: playercontrols_properties_panel_tabwidget_background_grid_color_button_clicked(self))
1233
+
1234
+ self.playercontrols_properties_panel_tabwidget.addTab(self.playercontrols_properties_panel_tabwidget_background, '')
1235
+ self.playercontrols_properties_panel_tabwidget.setTabIcon(2, QIcon(os.path.join(session.PATH_SUBTITLD_GRAPHICS, 'playercontrols_properties_panel_background_icon.svg')))
1236
+
1237
+ self.playercontrols_widget_frame = QFrame(parent=self.playercontrols_widget)
1238
+ self.playercontrols_widget_frame.setLayout(QHBoxLayout())
1239
+ self.playercontrols_widget_frame.layout().setContentsMargins(0, 0, 0, 0)
1240
+
1241
+ self.playercontrols_widget_frame_top_hbox = QHBoxLayout()
1242
+ self.playercontrols_widget_frame_top_hbox.setSpacing(0)
1243
+
1244
+ self.playercontrols_widget_frame_top_left = QFrame()
1245
+ self.playercontrols_widget_frame_top_left.setAttribute(Qt.WA_LayoutOnEntireRect)
1246
+ self.playercontrols_widget_frame_top_left.setObjectName('playercontrols_widget_frame_top_left')
1247
+ self.playercontrols_widget_frame_top_left.setFixedHeight(60)
1248
+ self.playercontrols_widget_frame_top_left.setLayout(QHBoxLayout())
1249
+ self.playercontrols_widget_frame_top_left.layout().setContentsMargins(0, 7, 7, 13)
1250
+ self.playercontrols_widget_frame_top_left.layout().setSpacing(6)
1251
+ self.playercontrols_widget_frame_top_left.layout().addStretch()
1252
+
1253
+ self.playercontrols_widget_frame_top_left.layout().addWidget(self.gap_hbox, 0)
1254
+
1255
+ self.playercontrols_widget_frame_top_hbox.layout().addWidget(self.playercontrols_widget_frame_top_left, 1)
1256
+
1257
+ self.playercontrols_widget_frame_top_middle = QFrame()
1258
+ self.playercontrols_widget_frame_top_middle.setFixedHeight(60)
1259
+ self.playercontrols_widget_frame_top_middle.setObjectName('playercontrols_widget_frame_top_middle')
1260
+ self.playercontrols_widget_frame_top_middle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1261
+ self.playercontrols_widget_frame_top_middle.setLayout(QHBoxLayout())
1262
+ self.playercontrols_widget_frame_top_middle.layout().setContentsMargins(0, 10, 0, 6)
1263
+ self.playercontrols_widget_frame_top_middle.layout().setSpacing(0)
1264
+
1265
+ self.playercontrols_widget_frame_top_hbox.layout().addWidget(self.playercontrols_widget_frame_top_middle)
1266
+
1267
+ self.playercontrols_widget_frame_top_right = QFrame()
1268
+ self.playercontrols_widget_frame_top_right.setAttribute(Qt.WA_LayoutOnEntireRect)
1269
+ self.playercontrols_widget_frame_top_right.setObjectName('playercontrols_widget_frame_top_right')
1270
+ self.playercontrols_widget_frame_top_right.setFixedHeight(60)
1271
+ self.playercontrols_widget_frame_top_right.setLayout(QHBoxLayout())
1272
+ self.playercontrols_widget_frame_top_right.layout().setContentsMargins(7, 7, 0, 13)
1273
+ self.playercontrols_widget_frame_top_right.layout().setSpacing(6)
1274
+
1275
+ self.playercontrols_widget_frame_top_right.layout().addStretch()
1276
+
1277
+ self.playercontrols_widget_frame_top_hbox.layout().addWidget(self.playercontrols_widget_frame_top_right, 1)
1278
+
1279
+ self.playercontrols_widget_frame.layout().addLayout(self.playercontrols_widget_frame_top_hbox)
1280
+
1281
+ self.playercontrols_widget_frame_bottom_hbox = QHBoxLayout()
1282
+ self.playercontrols_widget_frame_bottom_hbox.setSpacing(0)
1283
+
1284
+ self.playercontrols_widget_frame_bottom_left = QFrame()
1285
+ self.playercontrols_widget_frame_bottom_left.setAttribute(Qt.WA_LayoutOnEntireRect)
1286
+ self.playercontrols_widget_frame_bottom_left.setObjectName('playercontrols_widget_frame_bottom_left')
1287
+ self.playercontrols_widget_frame_bottom_left.setFixedHeight(26)
1288
+ self.playercontrols_widget_frame_bottom_left.setLayout(QHBoxLayout())
1289
+ self.playercontrols_widget_frame_bottom_left.layout().setContentsMargins(0, 0, 4, 2)
1290
+ self.playercontrols_widget_frame_bottom_left.layout().setSpacing(0)
1291
+ self.playercontrols_widget_frame_bottom_left.layout().addStretch()
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+ self.playercontrols_widget_frame_bottom_left.layout().addSpacing(4)
1300
+
1301
+ self.playercontrols_widget_frame_bottom_left.layout().addSpacing(4)
1302
+
1303
+ self.playercontrols_widget_frame_bottom_left.layout().addSpacing(2)
1304
+
1305
+
1306
+ self.playercontrols_widget_frame_bottom_hbox.layout().addWidget(self.playercontrols_widget_frame_bottom_left, 1)
1307
+
1308
+ self.playercontrols_widget_frame_bottom_middle = QFrame()
1309
+ self.playercontrols_widget_frame_bottom_middle.setFixedHeight(26)
1310
+ self.playercontrols_widget_frame_bottom_middle.setObjectName('playercontrols_widget_frame_bottom_middle')
1311
+ self.playercontrols_widget_frame_bottom_middle.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1312
+ self.playercontrols_widget_frame_bottom_middle.setLayout(QHBoxLayout())
1313
+ self.playercontrols_widget_frame_bottom_middle.layout().setContentsMargins(0, 0, 0, 0)
1314
+ self.playercontrols_widget_frame_bottom_middle.layout().setSpacing(0)
1315
+
1316
+ self.playercontrols_widget_frame_bottom_hbox.layout().addWidget(self.playercontrols_widget_frame_bottom_middle, 0)
1317
+
1318
+ self.playercontrols_widget_frame_bottom_right_absolute = QFrame()
1319
+ self.playercontrols_widget_frame_bottom_right_absolute.setAttribute(Qt.WA_LayoutOnEntireRect)
1320
+ # self.playercontrols_widget_frame_bottom_right_absolute.setObjectName('playercontrols_widget_frame_bottom_right')
1321
+ self.playercontrols_widget_frame_bottom_right_absolute.setFixedHeight(26)
1322
+ self.playercontrols_widget_frame_bottom_right_absolute.setLayout(QHBoxLayout())
1323
+ self.playercontrols_widget_frame_bottom_right_absolute.layout().setContentsMargins(0, 0, 0, 0)
1324
+ self.playercontrols_widget_frame_bottom_right_absolute.layout().setSpacing(0)
1325
+
1326
+ self.playercontrols_widget_frame_bottom_right = QFrame()
1327
+ # self.playercontrols_widget_frame_bottom_right.setAttribute(Qt.WA_LayoutOnEntireRect)
1328
+ self.playercontrols_widget_frame_bottom_right.setObjectName('playercontrols_widget_frame_bottom_right')
1329
+ # self.playercontrols_widget_frame_bottom_right.setFixedHeight(26)
1330
+ self.playercontrols_widget_frame_bottom_right.setLayout(QHBoxLayout())
1331
+ self.playercontrols_widget_frame_bottom_right.layout().setContentsMargins(0, 0, 0, 2)
1332
+ self.playercontrols_widget_frame_bottom_right.layout().setSpacing(0)
1333
+
1334
+ self.playercontrols_widget_frame_bottom_right.layout().addSpacing(-8)
1335
+
1336
+ self.playercontrols_widget_frame_bottom_right.layout().addStretch()
1337
+
1338
+ self.playercontrols_widget_frame_bottom_right_absolute.layout().addWidget(self.playercontrols_widget_frame_bottom_right)
1339
+
1340
+ self.playercontrols_widget_frame_bottom_right_corner = QFrame()
1341
+ self.playercontrols_widget_frame_bottom_right_corner.setObjectName('playercontrols_widget_frame_bottom_right_corner')
1342
+ self.playercontrols_widget_frame_bottom_right_corner.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum))
1343
+ self.playercontrols_widget_frame_bottom_right_corner.setFixedWidth(35)
1344
+ self.playercontrols_widget_frame_bottom_right_corner.setLayout(QHBoxLayout())
1345
+ self.playercontrols_widget_frame_bottom_right_corner.layout().setContentsMargins(0, 0, 0, 0)
1346
+ self.playercontrols_widget_frame_bottom_right_corner.layout().setSpacing(0)
1347
+
1348
+ self.playercontrols_properties_panel_toggle = QPushButton()
1349
+ self.playercontrols_properties_panel_toggle.setObjectName('playercontrols_properties_panel_toggle')
1350
+ self.playercontrols_properties_panel_toggle.setCheckable(True)
1351
+ self.playercontrols_widget_frame_bottom_right_corner.layout().addWidget(self.playercontrols_properties_panel_toggle)
1352
+ self.playercontrols_properties_panel_toggle.clicked.connect(lambda: playercontrols_properties_panel_toggle_pressed(self))
1353
+ self.playercontrols_properties_panel_toggle_animation = QPropertyAnimation(self.playercontrols_properties_panel_toggle, b'geometry')
1354
+ self.playercontrols_properties_panel_toggle_animation.setEasingCurve(QEasingCurve.OutCirc)
1355
+
1356
+ self.playercontrols_widget_frame_bottom_right_absolute.layout().addWidget(self.playercontrols_widget_frame_bottom_right_corner, 0)
1357
+
1358
+ self.playercontrols_widget_frame_bottom_hbox.layout().addWidget(self.playercontrols_widget_frame_bottom_right_absolute, 1)
1359
+
1360
+ self.playercontrols_widget_frame.layout().addLayout(self.playercontrols_widget_frame_bottom_hbox)
1361
+ '''
1362
+
1363
+ def playercontrols_stop_button_clicked(self):
1364
+ playercontrols_playpause_button_clicked(self)
1365
+ self.preview_panel_player.stop()
1366
+ update_playercontrols_playpause_button(self)
1367
+ timeline.update(self)
1368
+
1369
+ @shortcut('playpause', 'Play/Pause', ['Space'])
1370
+ def playercontrols_playpause_button_pressed(self):
1371
+ if self.playercontrols_widget.isVisible():
1372
+ playercontrols_playpause_button_clicked(self)
1373
+ update_playercontrols_playpause_button(self)
1374
+
1375
+
1376
+ def playercontrols_playpause_button_clicked(self):
1377
+ """Function to call when play/pause button is clicked"""
1378
+ if self.preview_panel_player.is_paused():
1379
+ self.preview_panel_player.play()
1380
+ if session.CONFIG['repeat_activated']:
1381
+ session.REPEAT_DURATION_BUFFER = []
1382
+ else:
1383
+ self.preview_panel_player.pause()
1384
+
1385
+
1386
+ def playercontrols_record_button_clicked(self):
1387
+ pass
1388
+
1389
+
1390
+ def playercontrols_record_transcript_button_clicked(self):
1391
+ pass
1392
+
1393
+
1394
+ def playercontrols_record_audio_button_clicked(self):
1395
+ pass
1396
+
1397
+
1398
+ def update_playercontrols_playpause_button(self):
1399
+ self.playercontrols_playpause_button.setChecked(not self.preview_panel_player.is_paused())
1400
+
1401
+
1402
+ def show(self):
1403
+ update(self)
1404
+
1405
+
1406
+ def update(self):
1407
+ self.preview_panel_player.update_speed()
1408
+ self.playercontrols_timecode_label.update_time()
1409
+ update_playback_speed_buttons(self)
1410
+ update_playback_repeat_buttons(self)
1411
+ # self.add_subtitle_duration.setEnabled(not session.CONFIG.get('new_subtitle_to_next_start', False))
1412
+ self.add_subtitle_duration.setValue(session.CONFIG.get('default_new_subtitle_duration', 3.0))
1413
+ self.add_subtitle_starting_from_last.setChecked(session.CONFIG.get('new_subtitle_start_from_last', False))
1414
+ self.add_subtitle_and_play.setChecked(session.CONFIG.get('new_subtitle_and_play', False))
1415
+ self.add_subtitle_to_next_start.setChecked(session.CONFIG.get('new_subtitle_to_next_start', False))
1416
+ self.timeline_show_speaker_tracks_button.setChecked(session.CONFIG['timeline'].get('show_speaker_tracks', False))
1417
+ self.timeline_show_speaker_color_button.setChecked(session.CONFIG['timeline'].get('show_speaker_color', False))
1418
+ timelinescrolling_type_update(self)
1419
+ update_snap_buttons(self)
1420
+ update_grid_buttons(self)
1421
+ update_step_buttons(self)
1422
+ music_voice_separation_box_update(self)
1423
+
1424
+
1425
+ @shortcut('zoom_in', 'Zoom in', ['+'])
1426
+ def zoomin_button_clicked(self):
1427
+ """Function to call when zoonin button is clicked"""
1428
+ session.CONFIG['timeline_zoom'] += 10.0
1429
+ zoom_buttons_update(self)
1430
+
1431
+
1432
+ @shortcut('zoom_out', 'Zoom out', ['-'])
1433
+ def zoomout_button_clicked(self):
1434
+ """Function to call when zoonout button is clicked"""
1435
+ session.CONFIG['timeline_zoom'] -= 10.0
1436
+ zoom_buttons_update(self)
1437
+
1438
+
1439
+ def zoom_buttons_update(self):
1440
+ """Function to update zoom buttons"""
1441
+ self.zoomout_button.setEnabled(True if session.CONFIG['timeline_zoom'] - 10.0 > 0.0 else False)
1442
+ self.zoomin_button.setEnabled(True if session.CONFIG['timeline_zoom'] + 10.0 < 500.0 else False)
1443
+ proportion = ((session.SUBTITLE.get('position', 0) * self.timeline_widget.width_proportion) - self.timeline_scroll.horizontalScrollBar().value()) / self.timeline_scroll.width()
1444
+ self.timeline_widget.setGeometry(0, 0, int(round(session.VIDEO.get('duration', 0.01) * session.CONFIG['timeline_zoom'])), self.timeline_scroll.height() - 20)
1445
+ # timeline.zoom_update_waveform(self)
1446
+ timeline.update_scrollbar(self, position=proportion)
1447
+
1448
+
1449
+ def snap_button_clicked(self):
1450
+ """Function to call when snap button is clicked"""
1451
+ session.CONFIG['timeline']['snap'] = self.snap_button.isChecked()
1452
+ update_snap_buttons(self)
1453
+
1454
+
1455
+ def snap_move_button_clicked(self):
1456
+ """Function to call when snap move button is clicked"""
1457
+ session.CONFIG['timeline']['snap_moving'] = self.snap_move_button.isChecked()
1458
+
1459
+
1460
+ def snap_move_nereast_button_clicked(self):
1461
+ """Function to call when snap move next button is clicked"""
1462
+ session.CONFIG['timeline']['snap_move_nereast'] = self.snap_move_nereast_button.isChecked()
1463
+
1464
+
1465
+ def snap_limits_button_clicked(self):
1466
+ """Function to call when snap limits button is clicked"""
1467
+ session.CONFIG['timeline']['snap_limits'] = self.snap_limits_button.isChecked()
1468
+
1469
+
1470
+ def snap_grid_button_clicked(self):
1471
+ """Function to call when snap to grid button is clicked"""
1472
+ session.CONFIG['timeline']['snap_grid'] = self.snap_grid_button.isChecked()
1473
+
1474
+
1475
+ def snap_value_changed(self):
1476
+ """Function to call when snap value is changed"""
1477
+ session.CONFIG['timeline']['snap_value'] = self.snap_value.value() if self.snap_value.value() else .1
1478
+
1479
+
1480
+ def step_value_changed(self):
1481
+ """Function to set variables to settings"""
1482
+ session.CONFIG['timeline']['step_unit'] = self.step_unit.currentText()
1483
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Seconds':
1484
+ session.CONFIG['timeline']['step_value'] = self.step_value_f.value()
1485
+ else:
1486
+ session.CONFIG['timeline']['step_value'] = self.step_value_i.value()
1487
+ update_step_information(self)
1488
+
1489
+
1490
+ def update_step_buttons(self):
1491
+ """Function to update step widgets"""
1492
+ self.step_value_f.setEnabled(self.step_button.isChecked())
1493
+ self.step_value_i.setEnabled(self.step_button.isChecked())
1494
+ self.step_unit.setEnabled(self.step_button.isChecked())
1495
+ update_step_information(self)
1496
+
1497
+
1498
+ def update_step_information(self):
1499
+ """Updates the widgets information"""
1500
+ self.step_unit.setCurrentIndex(STEPS_LIST.index(session.CONFIG['timeline'].get('step_unit', 'Frames')))
1501
+ self.step_value_f.setValue(float(session.CONFIG['timeline'].get('step_value', 1.0)))
1502
+ self.step_value_i.setValue(int(session.CONFIG['timeline'].get('step_value', 1)))
1503
+ self.step_value_f.setVisible(session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Seconds')
1504
+ self.step_value_i.setVisible(session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames')
1505
+
1506
+
1507
+ def timelinescrolling_type_changed(self, scrollingtype='page'):
1508
+ session.CONFIG['timeline']['scrolling'] = scrollingtype
1509
+ timelinescrolling_type_update(self)
1510
+
1511
+
1512
+ def timelinescrolling_type_update(self):
1513
+ self.timelinescrolling_none_button.setChecked(session.CONFIG['timeline'].get('scrolling', 'page') == 'none')
1514
+ self.timelinescrolling_page_button.setChecked(session.CONFIG['timeline'].get('scrolling', 'page') == 'page')
1515
+ self.timelinescrolling_follow_button.setChecked(session.CONFIG['timeline'].get('scrolling', 'page') == 'follow')
1516
+
1517
+
1518
+ def add_subtitle_duration_changed(self):
1519
+ """Function to call when subtitle default duration is changed"""
1520
+ session.CONFIG['default_new_subtitle_duration'] = self.add_subtitle_duration.value()
1521
+
1522
+
1523
+ def add_subtitle_starting_from_last_clicked(self):
1524
+ session.CONFIG['new_subtitle_start_from_last'] = self.add_subtitle_starting_from_last.isChecked()
1525
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1526
+
1527
+
1528
+ def add_subtitle_and_play_clicked(self):
1529
+ session.CONFIG['new_subtitle_and_play'] = self.add_subtitle_and_play.isChecked()
1530
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1531
+
1532
+
1533
+ def add_subtitle_to_next_start_clicked(self):
1534
+ session.CONFIG['new_subtitle_to_next_start'] = self.add_subtitle_to_next_start.isChecked()
1535
+ self.add_subtitle_duration.setEnabled(not session.CONFIG.get('new_subtitle_to_next_start', False))
1536
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1537
+
1538
+
1539
+ def gap_add_subtitle_button_clicked(self):
1540
+ """Function to call when add gap button is clicked"""
1541
+ subtitles.set_gap(position=session.SUBTITLE.get('position', 0), gap=self.gap_subtitle_duration.value())
1542
+ left_panel.update(self)
1543
+ session.SUBTITLE['selected'] = None
1544
+ timeline.update(self)
1545
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1546
+ session.set_unsaved()
1547
+
1548
+
1549
+ def gap_remove_subtitle_button_clicked(self):
1550
+ """Function to call when remove gap button is clicked"""
1551
+ subtitles.set_gap(position=session.SUBTITLE.get('position', 0), gap=-(self.gap_subtitle_duration.value()))
1552
+ left_panel.update(self)
1553
+ session.SUBTITLE['selected'] = None
1554
+ timeline.update(self)
1555
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1556
+ session.set_unsaved()
1557
+
1558
+
1559
+ def update_snap_buttons(self):
1560
+ """Function to update snap buttons"""
1561
+ self.snap_button.setChecked(bool(session.CONFIG['timeline'].get('snap', True)))
1562
+ self.snap_limits_button.setEnabled(self.snap_button.isChecked())
1563
+ self.snap_limits_button.setChecked(bool(session.CONFIG['timeline'].get('snap_limits', True)))
1564
+ self.snap_move_button.setEnabled(self.snap_button.isChecked())
1565
+ self.snap_move_button.setChecked(bool(session.CONFIG['timeline'].get('snap_moving', True)))
1566
+ self.snap_grid_button.setEnabled(self.snap_button.isChecked())
1567
+ self.snap_grid_button.setChecked(bool(session.CONFIG['timeline'].get('snap_grid', False)))
1568
+ self.snap_move_nereast_button.setEnabled(self.snap_button.isChecked())
1569
+ self.snap_move_nereast_button.setChecked(bool(session.CONFIG['timeline'].get('snap_move_nereast', False)))
1570
+ self.snap_value.setEnabled(self.snap_button.isChecked())
1571
+ self.snap_value.setValue(float(session.CONFIG['timeline'].get('snap_value', .1)))
1572
+ self.timeline_widget.update()
1573
+
1574
+
1575
+ def update_playback_speed_buttons(self):
1576
+ if not session.CONFIG['playback_speed'] == 1.0 and not self.change_playback_speed.isChecked():
1577
+ self.change_playback_speed.setChecked(True)
1578
+ # self.change_playback_speed_icon_label.setEnabled(self.change_playback_speed.isChecked())
1579
+ self.change_playback_speed_decrease.setEnabled(self.change_playback_speed.isChecked())
1580
+ self.change_playback_speed_slider.setEnabled(self.change_playback_speed.isChecked())
1581
+ self.change_playback_speed_increase.setEnabled(self.change_playback_speed.isChecked())
1582
+ self.change_playback_speed_label.setText('x' + str(session.CONFIG['playback_speed']))
1583
+ self.change_playback_speed_slider.setValue(int(session.CONFIG['playback_speed'] * 100))
1584
+
1585
+
1586
+ def update_playback_repeat_buttons(self):
1587
+ if session.CONFIG['repeat_activated']:
1588
+ self.repeat_playback.setChecked(True)
1589
+ self.repeat_playback_duration.setValue(float(session.CONFIG.get('playback_repeat_duration', 10.0)))
1590
+ self.repeat_playback_times.setValue(int(session.CONFIG.get('playback_repeat_times', 3)))
1591
+ timeline.update(self)
1592
+
1593
+
1594
+ def grid_button_clicked(self):
1595
+ """Function to call when grid button is clicked"""
1596
+ session.CONFIG['timeline']['show_grid'] = self.grid_button.isChecked()
1597
+ if not session.CONFIG['timeline'].get('grid_type', False):
1598
+ session.CONFIG['timeline']['grid_type'] = 'seconds'
1599
+ update_grid_buttons(self)
1600
+
1601
+
1602
+ def grid_type_changed(self, gridtype):
1603
+ """Function to call when grid type button is clicked"""
1604
+ session.CONFIG['timeline']['grid_type'] = gridtype
1605
+ update_grid_buttons(self)
1606
+
1607
+
1608
+ def update_grid_buttons(self):
1609
+ """Function to update grid buttons"""
1610
+ self.grid_button.setChecked(session.CONFIG['timeline'].get('show_grid', False))
1611
+ self.grid_frames_button.setEnabled(session.CONFIG['timeline'].get('show_grid', False))
1612
+ self.grid_frames_button.setChecked(True if session.CONFIG['timeline'].get('grid_type', False) == 'frames' else False)
1613
+ self.grid_seconds_button.setEnabled(session.CONFIG['timeline'].get('show_grid', False))
1614
+ self.grid_seconds_button.setChecked(True if session.CONFIG['timeline'].get('grid_type', False) == 'seconds' else False)
1615
+ self.grid_scenes_button.setEnabled(session.CONFIG['timeline'].get('show_grid', False))
1616
+ self.grid_scenes_button.setChecked(True if session.CONFIG['timeline'].get('grid_type', False) == 'scenes' else False)
1617
+ self.timeline_widget.update()
1618
+
1619
+
1620
+ def playercontrols_play_from_last_start_button_clicked(self):
1621
+ """Function to call when stop button is clicked"""
1622
+ subt = [item['start'] for item in session.SUBTITLE['segments']]
1623
+ last_subtitle = session.SUBTITLE['segments'][bisect(subt, session.SUBTITLE.get('position', 0)) - 1]
1624
+ self.preview_panel_player.seek(last_subtitle['start'])
1625
+ self.preview_panel_player.play()
1626
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1627
+ update_playercontrols_playpause_button(self)
1628
+
1629
+
1630
+ def playercontrols_play_from_next_start_button_clicked(self):
1631
+ """Function to call when play from next subtitle button is clicked"""
1632
+ subt = [item['start'] for item in session.SUBTITLE['segments']]
1633
+ i = bisect(subt, session.SUBTITLE.get('position', 0))
1634
+ if i < len(session.SUBTITLE['segments']):
1635
+ next_subtitle = session.SUBTITLE['segments'][i]
1636
+ self.preview_panel_player.seek(next_subtitle['start'])
1637
+ self.preview_panel_player.play()
1638
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1639
+ update_playercontrols_playpause_button(self)
1640
+
1641
+
1642
+ @shortcut('add_new_subtitle_to_current_position', 'Add new subtitle to current position', ['Enter'])
1643
+ def add_subtitle_button_clicked(self):
1644
+ duration = session.CONFIG['default_new_subtitle_duration']
1645
+ if session.CONFIG.get('new_subtitle_to_next_start', False):
1646
+ next_subtitle = subtitles.next_subtitle_current_position(position=session.SUBTITLE.get('position', 0))
1647
+ if next_subtitle:
1648
+ duration = max(duration, next_subtitle['start'] - session.SUBTITLE.get('position', 0))
1649
+ session.SUBTITLE['selected'] = subtitles.add_subtitle(position=session.SUBTITLE.get('position', 0), duration=duration, from_last_subtitle=self.add_subtitle_starting_from_last.isChecked())
1650
+ self.left_panel_subtitleslist_textedit.setFocus(Qt.TabFocusReason)
1651
+ if self.add_subtitle_and_play.isChecked():
1652
+ self.preview_panel_player.play()
1653
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1654
+ update_playercontrols_playpause_button(self)
1655
+ timeline.update(self)
1656
+ self.timeline_widget.update()
1657
+ session.set_unsaved()
1658
+
1659
+
1660
+ @shortcut('remove_current_subtitle', 'Remove current subtitle', ['*'])
1661
+ def remove_selected_subtitle_button_clicked(self):
1662
+ """Function to call when remove selected subtitle button is clicked"""
1663
+ subtitles.remove_subtitle(selected_subtitle=session.SUBTITLE['selected'])
1664
+ session.SUBTITLE['selected'] = None
1665
+ left_panel.update(self)
1666
+ timeline.update(self)
1667
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1668
+ self.preview_panel_player._audio_device.sync_subtitle_dubs(session.SUBTITLE['segments'])
1669
+ session.set_unsaved()
1670
+
1671
+
1672
+ @shortcut('slice_current_subtitle', 'Slice current subtitle', ['/'])
1673
+ def slice_selected_subtitle_command(self):
1674
+ slice_selected_subtitle_button_clicked(self)
1675
+ slice_selected_subtitle_button_update(self)
1676
+
1677
+
1678
+ def slice_selected_subtitle_button_clicked(self):
1679
+ """Function to call when slice selected subtitle button is clicked"""
1680
+ if self.slice_selected_subtitle_button.isChecked() and session.SUBTITLE.get('selected', None) is not None and self.left_panel_subtitleslist_textedit.textCursor().position():
1681
+ pos = self.left_panel_subtitleslist_textedit.textCursor().position()
1682
+ last_text = self.left_panel_subtitleslist_textedit.toPlainText()[:pos]
1683
+ next_text = self.left_panel_subtitleslist_textedit.toPlainText()[pos:]
1684
+ session.SUBTITLE['selected'] = subtitles.slice_subtitle(selected_subtitle=session.SUBTITLE['selected'], position=session.SUBTITLE.get('position', 0), next_text=next_text, last_text=last_text)
1685
+ timeline.update(self)
1686
+ left_panel.update(self)
1687
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1688
+ session.set_unsaved()
1689
+ elif not self.slice_selected_subtitle_button.isChecked():
1690
+ self.timeline_widget.is_smart_splicing = False
1691
+ else:
1692
+ self.timeline_widget.is_smart_splicing = {'mode': 'words'}
1693
+ self.timeline_widget.update()
1694
+
1695
+
1696
+ def slice_selected_subtitle_button_update(self):
1697
+ self.slice_selected_subtitle_button.setChecked(bool(self.timeline_widget.is_smart_splicing))
1698
+
1699
+
1700
+ @shortcut('select_subtitle_in_current_position', 'Select subtitle in current position', ['5'])
1701
+ def select_subtitle_in_current_position(self):
1702
+ """Function to call when actual subtitle under cursor need to be selected"""
1703
+ subtitle = subtitles.subtitle_under_current_position(position=session.SUBTITLE.get('position', 0))
1704
+ if subtitle:
1705
+ session.SUBTITLE['selected'] = subtitle
1706
+ timeline.update(self)
1707
+
1708
+
1709
+ @shortcut('select_next_subtitle_over_current_position', 'Select next subtitle over current position', ['8'])
1710
+ def select_next_subtitle_over_current_position(self):
1711
+ """Function to call when next subtitle under cursor need to be selected"""
1712
+ subtitle = subtitles.next_subtitle_current_position(position=session.SUBTITLE.get('position', 0))
1713
+ if subtitle:
1714
+ session.SUBTITLE['selected'] = subtitle
1715
+ timeline.update(self)
1716
+
1717
+
1718
+ @shortcut('select_last_subtitle_over_current_position', 'Select last subtitle over current position', ['2'])
1719
+ def select_last_subtitle_over_current_position(self):
1720
+ """Function to call when last subtitle under cursor need to be selected"""
1721
+ subtitle = subtitles.last_subtitle_current_position(position=session.SUBTITLE.get('position', 0))
1722
+ if subtitle:
1723
+ session.SUBTITLE['selected'] = subtitle
1724
+ timeline.update(self)
1725
+
1726
+
1727
+ def merge_back_selected_subtitle_button_clicked(self):
1728
+ """Function to merge selected subtitle with the last subtitle"""
1729
+ if session.SUBTITLE.get('selected', None) is not None:
1730
+ session.SUBTITLE['selected'] = subtitles.merge_back_subtitle(selected_subtitle=session.SUBTITLE['selected'])
1731
+ timeline.update(self)
1732
+ left_panel.update(self)
1733
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1734
+ session.set_unsaved()
1735
+
1736
+
1737
+ def merge_next_selected_subtitle_button_clicked(self):
1738
+ """Function to merge selected subtitle with the next subtitle"""
1739
+ if session.SUBTITLE.get('selected', None) is not None:
1740
+ session.SUBTITLE['selected'] = subtitles.merge_next_subtitle(selected_subtitle=session.SUBTITLE['selected'])
1741
+ timeline.update(self)
1742
+ left_panel.update(self)
1743
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1744
+ session.set_unsaved()
1745
+
1746
+
1747
+ @shortcut('move_step_backward_subtitle', 'Move subtitle a step backward', ['4'])
1748
+ def move_backward_subtitle_clicked(self):
1749
+ """Function to move subtitle backward"""
1750
+ if session.SUBTITLE.get('selected', None) is not None:
1751
+ amount = (1.0 / session.VIDEO['framerate'])
1752
+ if self.step_button.isChecked():
1753
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames':
1754
+ amount = (int(session.CONFIG['timeline'].get('step_value', 1)) / session.VIDEO['framerate'])
1755
+ else:
1756
+ amount = float(session.CONFIG['timeline'].get('step_value', 1.0))
1757
+ subtitles.move_subtitle(selected_subtitle=session.SUBTITLE['selected'], amount=-amount)
1758
+ timeline.update(self)
1759
+ left_panel.update(self)
1760
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1761
+ session.set_unsaved()
1762
+
1763
+
1764
+ @shortcut('move_step_forward_subtitle', 'Move subtitle a step forward', ['6'])
1765
+ def move_forward_subtitle_clicked(self):
1766
+ """Function to move subtitle forward"""
1767
+ if session.SUBTITLE.get('selected', None) is not None:
1768
+ amount = (1.0 / session.VIDEO['framerate'])
1769
+ if self.step_button.isChecked():
1770
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames':
1771
+ amount = (int(session.CONFIG['timeline'].get('step_value', 1)) / session.VIDEO['framerate'])
1772
+ else:
1773
+ amount = float(session.CONFIG['timeline'].get('step_value', 1.0))
1774
+ subtitles.move_subtitle(selected_subtitle=session.SUBTITLE['selected'], amount=amount)
1775
+ timeline.update(self)
1776
+ left_panel.update(self)
1777
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1778
+ session.set_unsaved()
1779
+
1780
+
1781
+ @shortcut('subtract_step_subtitle_start', 'Subtract a step to subtitle start', ['1'])
1782
+ def move_start_back_subtitle_clicked(self):
1783
+ """Function to move starting position of selected subtitle backward"""
1784
+ if session.SUBTITLE.get('selected', None) is not None:
1785
+ amount = (1.0 / session.VIDEO['framerate'])
1786
+ if self.step_button.isChecked():
1787
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames':
1788
+ amount = (int(session.CONFIG['timeline'].get('step_value', 1)) / session.VIDEO['framerate'])
1789
+ else:
1790
+ amount = float(session.CONFIG['timeline'].get('step_value', 1.0))
1791
+ subtitles.move_start_subtitle(selected_subtitle=session.SUBTITLE['selected'], amount=-amount, move_nereast=bool(session.CONFIG['timeline'].get('snap_move_nereast', False)))
1792
+ timeline.update(self)
1793
+ left_panel.update(self)
1794
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1795
+ session.set_unsaved()
1796
+
1797
+
1798
+ @shortcut('add_step_subtitle_start', 'Add a step to subtitle start', ['7'])
1799
+ def move_start_forward_subtitle_clicked(self):
1800
+ """Function to move starting position of selected subtitle forward"""
1801
+ if session.SUBTITLE.get('selected', None) is not None:
1802
+ amount = (1.0 / session.VIDEO['framerate'])
1803
+ if self.step_button.isChecked():
1804
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames':
1805
+ amount = (int(session.CONFIG['timeline'].get('step_value', 1)) / session.VIDEO['framerate'])
1806
+ else:
1807
+ amount = float(session.CONFIG['timeline'].get('step_value', 1.0))
1808
+ subtitles.move_start_subtitle(selected_subtitle=session.SUBTITLE['selected'], amount=amount, move_nereast=bool(session.CONFIG['timeline'].get('snap_move_nereast', False)))
1809
+ timeline.update(self)
1810
+ left_panel.update(self)
1811
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1812
+ session.set_unsaved()
1813
+
1814
+
1815
+ @shortcut('subtract_step_subtitle_end', 'Subtract a step to subtitle end', ['3'])
1816
+ def move_end_back_subtitle_clicked(self):
1817
+ """Function to move ending position of selected subtitle backwards"""
1818
+ if session.SUBTITLE.get('selected', None) is not None:
1819
+ amount = (1.0 / session.VIDEO['framerate'])
1820
+ if self.step_button.isChecked():
1821
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames':
1822
+ amount = (int(session.CONFIG['timeline'].get('step_value', 1)) / session.VIDEO['framerate'])
1823
+ else:
1824
+ amount = float(session.CONFIG['timeline'].get('step_value', 1.0))
1825
+ subtitles.move_end_subtitle(selected_subtitle=session.SUBTITLE['selected'], amount=-amount)
1826
+ timeline.update(self)
1827
+ left_panel.update(self)
1828
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1829
+ session.set_unsaved()
1830
+
1831
+
1832
+ @shortcut('add_step_subtitle_end', 'Add a step to subtitle end', ['9'])
1833
+ def move_end_forward_subtitle_clicked(self):
1834
+ """Function to move ending position of selected subtitle forward"""
1835
+ if session.SUBTITLE.get('selected', None) is not None:
1836
+ amount = (1.0 / session.VIDEO['framerate'])
1837
+ if self.step_button.isChecked():
1838
+ if session.CONFIG['timeline'].get('step_unit', 'Frames') == 'Frames':
1839
+ amount = (int(session.CONFIG['timeline'].get('step_value', 1)) / session.VIDEO['framerate'])
1840
+ else:
1841
+ amount = float(session.CONFIG['timeline'].get('step_value', 1.0))
1842
+ subtitles.move_end_subtitle(selected_subtitle=session.SUBTITLE['selected'], amount=amount)
1843
+ timeline.update(self)
1844
+ left_panel.update(self)
1845
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1846
+ session.set_unsaved()
1847
+
1848
+
1849
+ def timeline_cursor_back_frame_clicked(self):
1850
+ """Function to move cursor one frame backward"""
1851
+ self.preview_panel_player.frameBackStep()
1852
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1853
+ session.set_unsaved()
1854
+
1855
+
1856
+ def timeline_cursor_next_frame_clicked(self):
1857
+ """Function to move cursor one frame forward"""
1858
+ self.preview_panel_player.frameStep()
1859
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1860
+ session.set_unsaved()
1861
+
1862
+
1863
+ def next_start_to_current_position_button_clicked(self):
1864
+ """Function to move cursor one frame backward"""
1865
+ subtitles.next_start_to_current_position(position=session.SUBTITLE.get('position', 0))
1866
+ timeline.update(self)
1867
+ left_panel.update(self)
1868
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1869
+ session.set_unsaved()
1870
+
1871
+
1872
+ def last_end_to_current_position_button_clicked(self):
1873
+ """Function to move last ending position of selected subtitle to current cursor position"""
1874
+ subtitles.last_end_to_current_position(position=session.SUBTITLE.get('position', 0))
1875
+ timeline.update(self)
1876
+ left_panel.update(self)
1877
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1878
+ session.set_unsaved()
1879
+
1880
+
1881
+ def last_start_to_current_position_button_clicked(self):
1882
+ """Function to move last starting position subtitle to current cursor position"""
1883
+ subtitles.last_start_to_current_position(position=session.SUBTITLE.get('position', 0))
1884
+ timeline.update(self)
1885
+ left_panel.update(self)
1886
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1887
+ session.set_unsaved()
1888
+
1889
+
1890
+ def last_start_last_end_to_current_position_button_clicked(self):
1891
+ """Function to move starting position subtitle to current cursor position"""
1892
+ subtitles.subtitle_start_to_current_position(position=session.SUBTITLE.get('position', 0))
1893
+ subtitles.last_end_to_current_position(position=session.SUBTITLE.get('position', 0) - .001)
1894
+ timeline.update(self)
1895
+ left_panel.update(self)
1896
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1897
+ session.set_unsaved()
1898
+
1899
+
1900
+ def next_start_next_end_to_current_position_button_clicked(self):
1901
+ """Function to move ending position subtitle to current cursor position"""
1902
+ subtitles.subtitle_end_to_current_position(position=session.SUBTITLE.get('position', 0))
1903
+ subtitles.next_start_to_current_position(position=session.SUBTITLE.get('position', 0))
1904
+ timeline.update(self)
1905
+ left_panel.update(self)
1906
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1907
+ session.set_unsaved()
1908
+
1909
+
1910
+ def next_end_to_current_position_button_clicked(self):
1911
+ """Function to move next ending position to current cursor position"""
1912
+ subtitles.next_end_to_current_position(position=session.SUBTITLE.get('position', 0))
1913
+ timeline.update(self)
1914
+ left_panel.update(self)
1915
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1916
+ session.set_unsaved()
1917
+
1918
+
1919
+ def change_playback_speed_clicked(self):
1920
+ """Function to call when playback speed button is clicked"""
1921
+ # if not self.change_playback_speed.isChecked():
1922
+ session.CONFIG['playback_speed'] = 1.0
1923
+ self.preview_panel_player.update_speed()
1924
+ update_playback_speed_buttons(self)
1925
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1926
+
1927
+
1928
+ def change_playback_speed_decrease_clicked(self):
1929
+ """Function to call when playback speed decrease button is clicked"""
1930
+ self.change_playback_speed_slider.setValue(self.change_playback_speed_slider.value() - 10)
1931
+ session.CONFIG['playback_speed'] = self.change_playback_speed_slider.value() / 100.0
1932
+ self.preview_panel_player.update_speed()
1933
+ update_playback_speed_buttons(self)
1934
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1935
+
1936
+
1937
+ def change_playback_speed_slider(self):
1938
+ """Function to call when playback speed slider button is changed"""
1939
+ session.CONFIG['playback_speed'] = self.change_playback_speed_slider.value() / 100.0
1940
+ self.preview_panel_player.update_speed()
1941
+ update_playback_speed_buttons(self)
1942
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1943
+
1944
+
1945
+ def change_playback_speed_increase_clicked(self):
1946
+ """Function to call when playback speed increase button is clicked"""
1947
+ self.change_playback_speed_slider.setValue(self.change_playback_speed_slider.value() + 10)
1948
+ session.CONFIG['playback_speed'] = self.change_playback_speed_slider.value() / 100.0
1949
+ self.preview_panel_player.update_speed()
1950
+ update_playback_speed_buttons(self)
1951
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1952
+
1953
+
1954
+ def repeat_playback_clicked(self):
1955
+ session.CONFIG['repeat_activated'] = self.repeat_playback.isChecked()
1956
+ session.REPEAT_DURATION_BUFFER = []
1957
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1958
+ timeline.update(self)
1959
+
1960
+
1961
+ def repeat_playback_duration_changed(self):
1962
+ """Function to call when playback repeat duration is changed"""
1963
+ session.CONFIG['playback_repeat_duration'] = self.repeat_playback_duration.value()
1964
+
1965
+
1966
+ def repeat_playback_times_changed(self):
1967
+ """Function to call when playback repeat number of times is changed"""
1968
+ session.CONFIG['playback_repeat_times'] = self.repeat_playback_times.value()
1969
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
1970
+
1971
+
1972
+ def playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self):
1973
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_border_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('selected_subtitle_border_color', '#cc3e5363')))
1974
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_fill_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('selected_subtitle_fill_color', '#cc3e5363')))
1975
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_text_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('selected_subtitle_text_color', '#ffffffff')))
1976
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('subtitle_border_color', '#ff6a7483')))
1977
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('subtitle_fill_color', '#ccb8cee0')))
1978
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('subtitle_text_color', '#ff304251')))
1979
+ self.playercontrols_properties_panel_tabwidget_subtitles_subtitle_arrow_normal_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('subtitle_arrow_color', '#ff969696')))
1980
+ self.playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_arrow_normal_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('selected_subtitle_arrow_color', '#ff969696')))
1981
+ self.playercontrols_properties_panel_tabwidget_waveform_border_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('waveform_border_color', '#ff153450')))
1982
+ self.playercontrols_properties_panel_tabwidget_waveform_fill_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('waveform_fill_color', '#cc153450')))
1983
+ self.playercontrols_properties_panel_tabwidget_background_grid_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('grid_color', '#336a7483')))
1984
+ self.playercontrols_properties_panel_tabwidget_background_time_text_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('time_text_color', '#806a7483')))
1985
+ self.playercontrols_properties_panel_tabwidget_background_cursor_color_button.setStyleSheet('background-color: {color};'.format(color=session.CONFIG['timeline'].get('cursor_color', '#ccff0000')))
1986
+
1987
+
1988
+ def show_or_hide_playercontrols_properties_panel(self):
1989
+ """Function to show playercontrol properties panel"""
1990
+ panel_width = 365
1991
+ if self.playercontrols_properties_panel_toggle.isChecked():
1992
+ self.playercontrols_properties_panel_placeholder.setGeometry(self.playercontrols_widget.width() - panel_width, 5, panel_width, 180)
1993
+ self.playercontrols_properties_panel.setGeometry(0, 56, self.playercontrols_properties_panel_placeholder.width(), 140)
1994
+ # self.playercontrols_properties_panel_toggle.setGeometry(self.playercontrols_widget_bottom_right_corner.x(), self.playercontrols_widget_bottom_right_corner.y() + 100, self.playercontrols_widget_bottom_right_corner.width(), self.playercontrols_widget_bottom_right_corner.height())
1995
+ else:
1996
+ self.playercontrols_properties_panel_placeholder.setGeometry(self.playercontrols_widget.width() - panel_width, 5, panel_width, 80)
1997
+ self.playercontrols_properties_panel.setGeometry(0, 56, self.playercontrols_properties_panel_placeholder.width(), 140)
1998
+ # self.playercontrols_properties_panel_toggle.setGeometry(self.playercontrols_widget_bottom_right_corner.x(), self.playercontrols_widget_bottom_right_corner.y(), self.playercontrols_widget_bottom_right_corner.width(), self.playercontrols_widget_bottom_right_corner.height())
1999
+
2000
+
2001
+ def playercontrols_properties_panel_toggle_pressed(self):
2002
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2003
+ show_or_hide_playercontrols_properties_panel(self)
2004
+
2005
+
2006
+ def playercontrols_properties_panel_tabwidget_subtitles_subtitle_border_color_button_clicked(self):
2007
+ """Function to show qcolordialog to choose subtitle border color"""
2008
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2009
+ if color.isValid():
2010
+ session.CONFIG['timeline']['subtitle_border_color'] = color.name(1)
2011
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2012
+ self.timeline_widget.update()
2013
+
2014
+
2015
+ def playercontrols_properties_panel_tabwidget_subtitles_subtitle_fill_color_button_clicked(self):
2016
+ """Function to show qcolordialog to choose subtitle fill color"""
2017
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2018
+ if color.isValid():
2019
+ session.CONFIG['timeline']['subtitle_fill_color'] = color.name(1)
2020
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2021
+ self.timeline_widget.update()
2022
+
2023
+
2024
+ def playercontrols_properties_panel_tabwidget_subtitles_subtitle_text_color_button_clicked(self):
2025
+ """Function to show qcolordialog to choose subtitle text color"""
2026
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2027
+ if color.isValid():
2028
+ session.CONFIG['timeline']['subtitle_text_color'] = color.name(1)
2029
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2030
+ self.timeline_widget.update()
2031
+
2032
+
2033
+ def playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_border_color_button_clicked(self):
2034
+ """Function to show qcolordialog to choose selected subtitle border color"""
2035
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2036
+ if color.isValid():
2037
+ session.CONFIG['timeline']['selected_subtitle_border_color'] = color.name(1)
2038
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2039
+ self.timeline_widget.update()
2040
+
2041
+
2042
+ def playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_fill_color_button_clicked(self):
2043
+ """Function to show qcolordialog to choose selected subtitle fill color"""
2044
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2045
+ if color.isValid():
2046
+ session.CONFIG['timeline']['selected_subtitle_fill_color'] = color.name(1)
2047
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2048
+ self.timeline_widget.update()
2049
+
2050
+
2051
+ def playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_text_color_button_clicked(self):
2052
+ """Function to show qcolordialog to choose selected subtitle text color"""
2053
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2054
+ if color.isValid():
2055
+ session.CONFIG['timeline']['selected_subtitle_text_color'] = color.name(1)
2056
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2057
+ self.timeline_widget.update()
2058
+
2059
+
2060
+ def playercontrols_properties_panel_tabwidget_subtitles_subtitle_arrow_normal_button_clicked(self):
2061
+ """Function to show qcolordialog to choose selected subtitle arrow color"""
2062
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2063
+ if color.isValid():
2064
+ session.CONFIG['timeline']['subtitle_arrow_color'] = color.name(1)
2065
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2066
+ self.timeline_widget.update()
2067
+
2068
+
2069
+ def playercontrols_properties_panel_tabwidget_subtitles_selected_subtitle_arrow_normal_button_clicked(self):
2070
+ """Function to show qcolordialog to choose selected selected subtitle arrow color"""
2071
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2072
+ if color.isValid():
2073
+ session.CONFIG['timeline']['selected_subtitle_arrow_color'] = color.name(1)
2074
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2075
+ self.timeline_widget.update()
2076
+
2077
+
2078
+ def playercontrols_properties_panel_tabwidget_waveform_border_color_button_clicked(self):
2079
+ """Function to show qcolordialog to choose waveform border color"""
2080
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2081
+ if color.isValid():
2082
+ for available_zoom in session.VIDEO['waveform']:
2083
+ if session.VIDEO['waveform'][available_zoom].get('qimages', []):
2084
+ session.VIDEO['waveform'][available_zoom]['qimages'] = []
2085
+ session.CONFIG['timeline']['waveform_border_color'] = color.name(1)
2086
+ self.thread_get_qimages.border_color = session.CONFIG['timeline'].get('waveform_border_color', '#ff153450')
2087
+ self.thread_get_qimages.fill_color = session.CONFIG['timeline'].get('waveform_fill_color', '#cc153450')
2088
+ self.thread_get_qimages.start(QThread.IdlePriority)
2089
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2090
+ self.timeline_widget.update()
2091
+
2092
+
2093
+ def playercontrols_properties_panel_tabwidget_waveform_fill_color_button_clicked(self):
2094
+ """Function to show qcolordialog to choose waveform fill color"""
2095
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2096
+ if color.isValid():
2097
+ for available_zoom in session.VIDEO['waveform']:
2098
+ if session.VIDEO['waveform'][available_zoom].get('qimages', []):
2099
+ session.VIDEO['waveform'][available_zoom]['qimages'] = []
2100
+ session.CONFIG['timeline']['waveform_fill_color'] = color.name(1)
2101
+ self.thread_get_qimages.border_color = session.CONFIG['timeline'].get('waveform_border_color', '#ff153450')
2102
+ self.thread_get_qimages.fill_color = session.CONFIG['timeline'].get('waveform_fill_color', '#cc153450')
2103
+ self.thread_get_qimages.start(QThread.IdlePriority)
2104
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2105
+ self.timeline_widget.update()
2106
+
2107
+
2108
+ def playercontrols_properties_panel_tabwidget_background_grid_color_button_clicked(self):
2109
+ """Function to show qcolordialog to choose background start color"""
2110
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2111
+ if color.isValid():
2112
+ session.CONFIG['timeline']['grid_color'] = color.name(1)
2113
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2114
+ self.timeline_widget.update()
2115
+
2116
+
2117
+ def playercontrols_properties_panel_tabwidget_background_time_text_color_button_clicked(self):
2118
+ """Function to show qcolordialog to choose background end color"""
2119
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2120
+ if color.isValid():
2121
+ session.CONFIG['timeline']['time_text_color'] = color.name(1)
2122
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2123
+ self.timeline_widget.update()
2124
+
2125
+
2126
+ def playercontrols_properties_panel_tabwidget_background_cursor_color_button_clicked(self):
2127
+ """Function to show qcolordialog to choose background end color"""
2128
+ color = QColorDialog.getColor(options=QColorDialog.ShowAlphaChannel)
2129
+ if color.isValid():
2130
+ session.CONFIG['timeline']['cursor_color'] = color.name(1)
2131
+ playercontrols_properties_panel_tabwidget_subtitles_update_widgets(self)
2132
+ self.timeline_widget.update()
2133
+
2134
+
2135
+ def send_text_to_last_subtitle_button_clicked(self):
2136
+ """Function to call when send text to last subtitle is clicked"""
2137
+ if session.SUBTITLE.get('selected', None) is not None:
2138
+ if self.left_panel_subtitleslist_textedit.textCursor().position():
2139
+ pos = self.left_panel_subtitleslist_textedit.textCursor().position()
2140
+ last_text = self.left_panel_subtitleslist_textedit.toPlainText()[:pos].strip()
2141
+ next_text = self.left_panel_subtitleslist_textedit.toPlainText()[pos:].strip()
2142
+ subtitles.send_text_to_last_subtitle(selected_subtitle=session.SUBTITLE['selected'], last_text=last_text, next_text=next_text)
2143
+ elif self.left_panel_subtitleslist_translation_textedit.textCursor().position():
2144
+ pos = self.left_panel_subtitleslist_translation_textedit.textCursor().position()
2145
+ last_text = self.left_panel_subtitleslist_translation_textedit.toPlainText()[:pos].strip()
2146
+ next_text = self.left_panel_subtitleslist_translation_textedit.toPlainText()[pos:].strip()
2147
+ subtitles.send_translated_text_to_last_subtitle(selected_subtitle=session.SUBTITLE['selected'], last_text=last_text, next_text=next_text)
2148
+ timeline.update(self)
2149
+ left_panel.update(self)
2150
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
2151
+ session.set_unsaved()
2152
+
2153
+
2154
+ def send_text_to_next_subtitle_button_clicked(self):
2155
+ """Function to call when send text to last subtitle is clicked"""
2156
+ if session.SUBTITLE.get('selected', None) is not None:
2157
+ if self.left_panel_subtitleslist_textedit.textCursor().position():
2158
+ pos = self.left_panel_subtitleslist_textedit.textCursor().position()
2159
+ last_text = self.left_panel_subtitleslist_textedit.toPlainText()[:pos].strip()
2160
+ next_text = self.left_panel_subtitleslist_textedit.toPlainText()[pos:].strip()
2161
+ subtitles.send_text_to_next_subtitle(selected_subtitle=session.SUBTITLE['selected'], last_text=last_text, next_text=next_text)
2162
+ elif self.left_panel_subtitleslist_translation_textedit.textCursor().position():
2163
+ pos = self.left_panel_subtitleslist_translation_textedit.textCursor().position()
2164
+ last_text = self.left_panel_subtitleslist_translation_textedit.toPlainText()[:pos].strip()
2165
+ next_text = self.left_panel_subtitleslist_translation_textedit.toPlainText()[pos:].strip()
2166
+ subtitles.send_translated_text_to_next_subtitle(selected_subtitle=session.SUBTITLE['selected'], last_text=last_text, next_text=next_text)
2167
+ timeline.update(self)
2168
+ left_panel.update(self)
2169
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
2170
+ session.set_unsaved()
2171
+
2172
+
2173
+ def send_text_to_last_subtitle_and_slice_button_clicked(self):
2174
+ """Function to call when send text to last subtitle is clicked"""
2175
+ if session.SUBTITLE.get('selected', None) is not None:
2176
+ pos = self.left_panel_subtitleslist_textedit.textCursor().position()
2177
+ last_text = self.left_panel_subtitleslist_textedit.toPlainText()[:pos].strip()
2178
+ next_text = self.left_panel_subtitleslist_textedit.toPlainText()[pos:].strip()
2179
+ subtitles.send_text_to_last_subtitle(selected_subtitle=session.SUBTITLE['selected'], last_text=last_text, next_text=next_text)
2180
+ subtitles.subtitle_start_to_current_position(position=session.SUBTITLE.get('position', 0))
2181
+ subtitles.last_end_to_current_position(position=session.SUBTITLE.get('position', 0) - .001)
2182
+ timeline.update(self)
2183
+ left_panel.update(self)
2184
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
2185
+ session.set_unsaved()
2186
+
2187
+
2188
+
2189
+ def send_text_to_next_subtitle_and_slice_button_clicked(self):
2190
+ """Function to call when send text to last subtitle is clicked"""
2191
+ if session.SUBTITLE.get('selected', None) is not None:
2192
+ pos = self.left_panel_subtitleslist_textedit.textCursor().position()
2193
+ last_text = self.left_panel_subtitleslist_textedit.toPlainText()[:pos].strip()
2194
+ next_text = self.left_panel_subtitleslist_textedit.toPlainText()[pos:].strip()
2195
+ subtitles.send_text_to_next_subtitle(selected_subtitle=session.SUBTITLE['selected'], last_text=last_text, next_text=next_text)
2196
+ subtitles.subtitle_end_to_current_position(position=session.SUBTITLE.get('position', 0))
2197
+ subtitles.next_start_to_current_position(position=session.SUBTITLE.get('position', 0))
2198
+ timeline.update(self)
2199
+ left_panel.update(self)
2200
+ self.timeline_widget.setFocus(Qt.TabFocusReason)
2201
+ session.set_unsaved()
2202
+
2203
+
2204
+ def music_voice_separation_activate_button_clicked(self):
2205
+ self.music_voice_separation_activate_button.setEnabled(False)
2206
+ self.music_voice_separation_activate_button.setText('...')
2207
+ self.music_voice_separation_thread.filename = session.VIDEO['filepath']
2208
+ self.music_voice_separation_thread.start()
2209
+
2210
+
2211
+ def music_voice_separation_music_icon_clicked(self):
2212
+ if not 'volume' in session.VIDEO.get('music_voice_separation', {}):
2213
+ session.VIDEO['music_voice_separation']['volume'] = .5
2214
+ session.VIDEO['music_voice_separation']['volume'] -= .05
2215
+ music_voice_separation_slider_update(self)
2216
+ music_voice_separation_buttons_update(self)
2217
+
2218
+ def music_voice_separation_box_update(self):
2219
+ self.music_voice_separation_box.setEnabled(bool(session.VIDEO.get('music_voice_separation', {})))
2220
+ music_voice_separation_slider_update(self)
2221
+ music_voice_separation_buttons_update(self)
2222
+
2223
+ def music_voice_separation_voice_icon_clicked(self):
2224
+ if not 'volume' in session.VIDEO.get('music_voice_separation', {}):
2225
+ session.VIDEO['music_voice_separation']['volume'] = .5
2226
+ session.VIDEO['music_voice_separation']['volume'] += .05
2227
+ music_voice_separation_slider_update(self)
2228
+ music_voice_separation_buttons_update(self)
2229
+
2230
+ def music_voice_separation_buttons_update(self):
2231
+ self.music_voice_separation_voice_icon.setEnabled(session.VIDEO.get('music_voice_separation', {}).get('volume', .5) < 1.0)
2232
+ self.music_voice_separation_music_icon.setEnabled(session.VIDEO.get('music_voice_separation', {}).get('volume', .5) > 0.0)
2233
+
2234
+ def music_voice_separation_slider_update(self):
2235
+ self.music_voice_separation_slider.setValue(int(session.VIDEO.get('music_voice_separation', {}).get('volume', .5) * 100))
2236
+ self.music_voice_separation_slider.setProperty('class', 'middle' if session.VIDEO.get('music_voice_separation', {}).get('volume', .5) == .5 else '')
2237
+ self.music_voice_separation_slider.style().unpolish(self.music_voice_separation_slider)
2238
+ self.music_voice_separation_slider.style().polish(self.music_voice_separation_slider)
2239
+
2240
+ def music_voice_separation_slider_changed(self):
2241
+ if session.VIDEO.get('music_voice_separation', False):
2242
+ session.VIDEO['music_voice_separation']['volume'] = self.music_voice_separation_slider.value() / 100.0
2243
+
2244
+ music_voice_separation_buttons_update(self)
2245
+
2246
+ if session.VIDEO['music_voice_separation']['volume'] == .5:
2247
+ self.preview_panel_player._audio_device.original_track.enabled = True
2248
+ self.preview_panel_player._audio_device.background_sound.enabled = False
2249
+ self.preview_panel_player._audio_device.vocals_sound.enabled = False
2250
+ self.music_voice_separation_slider.setProperty('class', 'middle')
2251
+ self.music_voice_separation_slider.style().unpolish(self.music_voice_separation_slider)
2252
+ self.music_voice_separation_slider.style().polish(self.music_voice_separation_slider)
2253
+ else:
2254
+ self.preview_panel_player._audio_device.original_track.enabled = False
2255
+ self.preview_panel_player._audio_device.background_sound.enabled = True
2256
+ self.preview_panel_player._audio_device.vocals_sound.enabled = True
2257
+ self.music_voice_separation_slider.setProperty('class', '')
2258
+ self.music_voice_separation_slider.style().unpolish(self.music_voice_separation_slider)
2259
+ self.music_voice_separation_slider.style().polish(self.music_voice_separation_slider)
2260
+
2261
+ background_volume = 1 if session.VIDEO['music_voice_separation']['volume'] < .5 else (1 - ((session.VIDEO['music_voice_separation']['volume'] - .5) * 2))
2262
+ voice_volume = 1 if session.VIDEO['music_voice_separation']['volume'] > .5 else (session.VIDEO['music_voice_separation']['volume'] * 2)
2263
+
2264
+ self.preview_panel_player._audio_device.background_sound.gain = background_volume
2265
+ self.preview_panel_player._audio_device.vocals_sound.gain = voice_volume
2266
+
2267
+
2268
+ def timeline_show_speaker_color_button_clicked(self):
2269
+ self.timeline_widget.show_speaker_color = self.timeline_show_speaker_color_button.isChecked()
2270
+ session.CONFIG['timeline']['show_speaker_color'] = self.timeline_show_speaker_color_button.isChecked()
2271
+ self.timeline_widget.update()
2272
+
2273
+
2274
+ def timeline_show_speaker_tracks_button_clicked(self):
2275
+ self.timeline_widget.show_speaker_tracks = self.timeline_show_speaker_tracks_button.isChecked()
2276
+ session.CONFIG['timeline']['show_speaker_tracks'] = self.timeline_show_speaker_tracks_button.isChecked()
2277
+ self.timeline_widget.update()
2278
+
2279
+
2280
+ @shortcut('timeline_escape_action', 'Escape timeline actions', ['Escape'])
2281
+ def escape_actions(self):
2282
+ if self.timeline_widget.is_smart_splicing:
2283
+ self.timeline_widget.is_smart_splicing = False
2284
+ self.timeline_widget.update()
2285
+ slice_selected_subtitle_button_update(self)
2286
+
2287
+
2288
+ def translate(self):
2289
+ self.add_subtitle_button.setText(' ' + _('playercontrols.add'))
2290
+ self.snap_button_label.setText(_('playercontrols.snap'))
2291
+ self.step_button.setText(_('playercontrols.step'))
2292
+ self.remove_selected_subtitle_button.setText(' ' + _('playercontrols.remove'))
2293
+ self.grid_button.setText(_('playercontrols.grid'))
2294
+
2295
+ self.send_text_to_last_subtitle_button.setToolTip(_('playercontrols.send_text_to_last_subtitle'))
2296
+ self.send_text_to_last_subtitle_and_slice_button.setToolTip(_('playercontrols.send_text_to_last_subtitle_and_slice'))
2297
+ self.send_text_to_next_subtitle_button.setToolTip(_('playercontrols.send_text_to_next_subtitle'))
2298
+ self.send_text_to_next_subtitle_and_slice_button.setToolTip(_('playercontrols.send_text_to_next_subtitle_and_slice'))
2299
+ self.slice_selected_subtitle_button.setToolTip(_('playercontrols.slice_selected_subtitle'))
2300
+ self.merge_next_selected_subtitle_button.setToolTip(_('playercontrols.merge_next_selected_subtitle'))
2301
+ self.last_end_to_current_position_button.setToolTip(_('playercontrols.last_end_to_current_position'))
2302
+ self.last_start_to_current_position_button.setToolTip(_('playercontrols.last_start_to_current_position'))
2303
+ self.last_start_last_end_to_current_position_button.setToolTip(_('playercontrols.last_start_last_end_to_current_position'))
2304
+ self.next_start_next_end_to_current_position_button.setToolTip(_('playercontrols.next_start_next_end_to_current_position'))
2305
+ self.next_end_to_current_position_button.setToolTip(_('playercontrols.next_end_to_current_position'))
2306
+ self.next_start_to_current_position_button.setToolTip(_('playercontrols.next_start_to_current_position'))
2307
+ self.change_playback_speed.setToolTip(_('playercontrols.change_playback_speed'))
2308
+ self.change_playback_speed_decrease.setToolTip(_('playercontrols.change_playback_speed_decrease'))
2309
+ self.change_playback_speed_increase.setToolTip(_('playercontrols.change_playback_speed_increase'))
2310
+ self.playercontrols_stop_button.setToolTip(_('playercontrols.stop'))
2311
+ self.playercontrols_playpause_button.setToolTip(_('playercontrols.playpause'))
2312
+ self.playercontrols_play_from_last_start_button.setToolTip(_('playercontrols.play_from_last_start'))
2313
+ self.playercontrols_play_from_next_start_button.setToolTip(_('playercontrols.play_from_next_start'))
2314
+ self.repeat_playback.setToolTip(_('playercontrols.repeat_playback'))
2315
+ self.gap_add_subtitle_button.setToolTip(_('playercontrols.gap_add_subtitle'))
2316
+ self.gap_remove_subtitle_button.setToolTip(_('playercontrols.gap_remove_subtitle'))
2317
+ self.add_subtitle_button.setToolTip(_('playercontrols.add_subtitle'))
2318
+ self.add_subtitle_starting_from_last.setToolTip(_('playercontrols.add_subtitle_starting_from_last'))
2319
+ self.add_subtitle_and_play.setToolTip(_('playercontrols.add_subtitle_and_play'))
2320
+ self.add_subtitle_to_next_start.setToolTip(_('playercontrols.add_subtitle_to_next_start'))
2321
+ self.remove_selected_subtitle_button.setToolTip(_('playercontrols.remove_selected_subtitle'))
2322
+ self.timelinescrolling_none_button.setToolTip(_('playercontrols.timelinescrolling_none'))
2323
+ self.timelinescrolling_page_button.setToolTip(_('playercontrols.timelinescrolling_page'))
2324
+ self.timelinescrolling_follow_button.setToolTip(_('playercontrols.timelinescrolling_follow'))
2325
+ self.snap_button.setToolTip(_('playercontrols.snap'))
2326
+ self.snap_limits_button.setToolTip(_('playercontrols.snap_limits'))
2327
+ self.snap_grid_button.setToolTip(_('playercontrols.snap_grid'))
2328
+ self.snap_move_button.setToolTip(_('playercontrols.snap_move'))
2329
+ self.snap_move_nereast_button.setToolTip(_('playercontrols.snap_move_nereast'))
2330
+ self.move_start_back_subtitle.setToolTip(_('playercontrols.move_start_back_subtitle'))
2331
+ self.move_start_forward_subtitle.setToolTip(_('playercontrols.move_start_forward_subtitle'))
2332
+ self.move_backward_subtitle.setToolTip(_('playercontrols.move_backward_subtitle'))
2333
+ self.timeline_cursor_back_frame.setToolTip(_('playercontrols.timeline_cursor_back_frame'))
2334
+ self.timeline_cursor_next_frame.setToolTip(_('playercontrols.timeline_cursor_next_frame'))
2335
+ self.move_forward_subtitle.setToolTip(_('playercontrols.move_forward_subtitle'))
2336
+ self.move_end_back_subtitle.setToolTip(_('playercontrols.move_end_back_subtitle'))
2337
+ self.move_end_forward_subtitle.setToolTip(_('playercontrols.move_end_forward_subtitle'))
2338
+ self.grid_button.setToolTip(_('playercontrols.grid'))
2339
+ self.grid_frames_button.setToolTip(_('playercontrols.grid_frames'))
2340
+ self.grid_seconds_button.setToolTip(_('playercontrols.grid_seconds'))
2341
+ self.grid_scenes_button.setToolTip(_('playercontrols.grid_scenes'))
2342
+ self.step_button.setToolTip(_('playercontrols.step'))
2343
+ self.zoomin_button.setToolTip(_('playercontrols.zoom_in'))
2344
+ self.zoomout_button.setToolTip(_('playercontrols.zoom_out'))
2345
+ self.timeline_show_speaker_color_button.setToolTip(_('playercontrols.timeline_show_speaker_color'))
2346
+ self.timeline_show_speaker_tracks_button.setToolTip(_('playercontrols.timeline_show_speaker_tracks'))
2347
+
2348
+