31
31
class PreviewThumbView (QWidget ):
32
32
"""The Preview Panel Widget."""
33
33
34
+ __img_button_size : tuple [int , int ]
35
+ __image_ratio : float
36
+
34
37
def __init__ (self , library : Library , driver : "QtDriver" ) -> None :
35
38
super ().__init__ ()
36
39
37
40
self .lib = library
38
41
self .driver : QtDriver = driver
39
42
40
- self .__img_button_size : tuple [ int , int ] = (266 , 266 )
41
- self .__image_ratio : float = 1.0
43
+ self .__img_button_size = (266 , 266 )
44
+ self .__image_ratio = 1.0
42
45
43
46
self .__image_layout = QStackedLayout (self )
44
47
self .__image_layout .setAlignment (Qt .AlignmentFlag .AlignCenter )
45
48
self .__image_layout .setStackingMode (QStackedLayout .StackingMode .StackAll )
46
49
self .__image_layout .setContentsMargins (0 , 0 , 0 , 0 )
47
50
48
- self . __open_file_action = QAction (Translations ["file.open_file" ], self )
49
- self . __open_file_action .triggered .connect (self ._open_file_action_callback )
50
- self . __open_explorer_action = QAction (open_file_str (), self )
51
- self . __open_explorer_action .triggered .connect (self ._open_explorer_action_callback )
52
- self . __delete_action = QAction (
51
+ open_file_action = QAction (Translations ["file.open_file" ], self )
52
+ open_file_action .triggered .connect (self ._open_file_action_callback )
53
+ open_explorer_action = QAction (open_file_str (), self )
54
+ open_explorer_action .triggered .connect (self ._open_explorer_action_callback )
55
+ delete_action = QAction (
53
56
Translations .format ("trash.context.singular" , trash_term = trash_term ()),
54
57
self ,
55
58
)
56
- self . __delete_action .triggered .connect (self ._delete_action_callback )
59
+ delete_action .triggered .connect (self ._delete_action_callback )
57
60
58
61
self .__button_wrapper = QPushButton ()
59
62
self .__button_wrapper .setMinimumSize (* self .__img_button_size )
60
63
self .__button_wrapper .setFlat (True )
61
64
self .__button_wrapper .setContextMenuPolicy (Qt .ContextMenuPolicy .ActionsContextMenu )
62
- self .__button_wrapper .addAction (self . __open_file_action )
63
- self .__button_wrapper .addAction (self . __open_explorer_action )
64
- self .__button_wrapper .addAction (self . __delete_action )
65
+ self .__button_wrapper .addAction (open_file_action )
66
+ self .__button_wrapper .addAction (open_explorer_action )
67
+ self .__button_wrapper .addAction (delete_action )
65
68
self .__button_wrapper .clicked .connect (self ._button_wrapper_callback )
66
69
67
70
# In testing, it didn't seem possible to center the widgets directly
68
71
# on the QStackedLayout. Adding sublayouts allows us to center the widgets.
69
- self .preview_img_page = QWidget ()
70
- self .__stacked_page_setup (self .preview_img_page , self .__button_wrapper )
72
+ self .__preview_img_page = QWidget ()
73
+ self .__stacked_page_setup (self .__preview_img_page , self .__button_wrapper )
71
74
72
75
self .__preview_gif = QLabel ()
73
76
self .__preview_gif .setMinimumSize (* self .__img_button_size )
74
77
self .__preview_gif .setContextMenuPolicy (Qt .ContextMenuPolicy .ActionsContextMenu )
75
78
self .__preview_gif .setCursor (Qt .CursorShape .ArrowCursor )
76
- self .__preview_gif .addAction (self . __open_file_action )
77
- self .__preview_gif .addAction (self . __open_explorer_action )
78
- self .__preview_gif .addAction (self . __delete_action )
79
+ self .__preview_gif .addAction (open_file_action )
80
+ self .__preview_gif .addAction (open_explorer_action )
81
+ self .__preview_gif .addAction (delete_action )
79
82
self .__gif_buffer : QBuffer = QBuffer ()
80
83
81
84
self .__preview_gif_page = QWidget ()
82
85
self .__stacked_page_setup (self .__preview_gif_page , self .__preview_gif )
83
86
84
87
self .__media_player = MediaPlayer (driver )
85
- self .__media_player .addAction (self . __open_file_action )
86
- self .__media_player .addAction (self . __open_explorer_action )
87
- self .__media_player .addAction (self . __delete_action )
88
+ self .__media_player .addAction (open_file_action )
89
+ self .__media_player .addAction (open_explorer_action )
90
+ self .__media_player .addAction (delete_action )
88
91
89
92
# Need to watch for this to resize the player appropriately.
90
93
self .__media_player .player .hasVideoChanged .connect (
@@ -100,7 +103,7 @@ def __init__(self, library: Library, driver: "QtDriver") -> None:
100
103
self .__thumb_renderer .updated .connect (self .__thumb_renderer_updated_callback )
101
104
self .__thumb_renderer .updated_ratio .connect (self .__thumb_renderer_updated_ratio_callback )
102
105
103
- self .__image_layout .addWidget (self .preview_img_page )
106
+ self .__image_layout .addWidget (self .__preview_img_page )
104
107
self .__image_layout .addWidget (self .__preview_gif_page )
105
108
self .__image_layout .addWidget (self .__media_player_page )
106
109
@@ -208,7 +211,7 @@ def __switch_preview(self, preview: MediaType | None) -> None:
208
211
if preview in [MediaType .IMAGE , MediaType .AUDIO ]:
209
212
self .__button_wrapper .show ()
210
213
self .__image_layout .setCurrentWidget (
211
- self .preview_img_page if preview == MediaType .IMAGE else self .__media_player_page
214
+ self .__preview_img_page if preview == MediaType .IMAGE else self .__media_player_page
212
215
)
213
216
else :
214
217
self .__button_wrapper .hide ()
@@ -222,6 +225,15 @@ def __switch_preview(self, preview: MediaType | None) -> None:
222
225
self .__gif_buffer .close ()
223
226
self .__preview_gif .hide ()
224
227
228
+ def __render_thumb (self , filepath : Path ) -> None :
229
+ self .__thumb_renderer .render (
230
+ time .time (),
231
+ filepath ,
232
+ (512 , 512 ),
233
+ self .devicePixelRatio (),
234
+ update_on_ratio_change = True ,
235
+ )
236
+
225
237
def __get_video_res (self , filepath : str ) -> tuple [bool , QSize ]:
226
238
video = cv2 .VideoCapture (filepath , cv2 .CAP_FFMPEG )
227
239
success , frame = video .read ()
@@ -261,13 +273,7 @@ def _display_video(self, filepath: Path) -> dict[str, int]:
261
273
262
274
def _display_audio (self , filepath : Path ) -> dict [str , int ]:
263
275
self .__switch_preview (MediaType .AUDIO )
264
- self .__thumb_renderer .render (
265
- time .time (),
266
- filepath ,
267
- (512 , 512 ),
268
- self .devicePixelRatio (),
269
- update_on_ratio_change = True ,
270
- )
276
+ self .__render_thumb (filepath )
271
277
return {"duration" : self .__update_media_player (filepath )}
272
278
273
279
def _display_animated_image (self , filepath : Path ) -> dict [str , int ] | None :
@@ -331,13 +337,7 @@ def _display_animated_image(self, filepath: Path) -> dict[str, int] | None:
331
337
def _display_image (self , filepath : Path ):
332
338
"""Renders the given file as an image, no matter its media type."""
333
339
self .__switch_preview (MediaType .IMAGE )
334
- self .__thumb_renderer .render (
335
- time .time (),
336
- filepath ,
337
- (512 , 512 ),
338
- self .devicePixelRatio (),
339
- update_on_ratio_change = True ,
340
- )
340
+ self .__render_thumb (filepath )
341
341
342
342
def hide_preview (self ) -> None :
343
343
"""Completely hide the file preview."""
0 commit comments