Skip to content

Commit 951ca30

Browse files
committed
added base type for preview window and changed the hiding and showing of parts to be based on that instead of repeated for each different way you want to show an img
1 parent 599aa25 commit 951ca30

File tree

1 file changed

+42
-25
lines changed

1 file changed

+42
-25
lines changed

tagstudio/src/qt/widgets/preview_panel.py

+42-25
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import cv2
1616
import rawpy
1717
import structlog
18+
import enum
1819
from humanfriendly import format_size
1920
from PIL import Image, ImageFont, UnidentifiedImageError
2021
from PIL.Image import DecompressionBombError
@@ -77,6 +78,10 @@ def update_selected_entry(driver: "QtDriver"):
7778
assert results, f"Entry not found: {entry.id}"
7879
driver.frame_content[grid_idx] = next(results)
7980

81+
class previewType(enum.Enum):
82+
IMG = enum.auto()
83+
ANIM_IMG = enum.auto()
84+
VID = enum.auto()
8085

8186
class PreviewPanel(QWidget):
8287
"""The Preview Panel Widget."""
@@ -132,6 +137,8 @@ def __init__(self, library: Library, driver: "QtDriver"):
132137
self.open_file_action = QAction("Open file", self)
133138
self.open_explorer_action = QAction(PlatformStrings.open_file_str, self)
134139

140+
self.base_preview_type = previewType.IMG
141+
135142
self.preview_img = QPushButtonWrapper()
136143
self.preview_img.setMinimumSize(*self.img_button_size)
137144
self.preview_img.setFlat(True)
@@ -524,6 +531,33 @@ def update_date_label(self, filepath: Path | None = None) -> None:
524531
self.date_created_label.setHidden(True)
525532
self.date_modified_label.setHidden(True)
526533

534+
def set_preview_type(self, preview_type):
535+
self.base_preview_type = preview_type
536+
537+
if self.base_preview_type == previewType.IMG:
538+
self.preview_img.show()
539+
self.preview_anim_img.hide()
540+
self.preview_vid.stop()
541+
self.preview_vid.hide()
542+
543+
if self.preview_anim_img.movie():
544+
self.preview_anim_img.movie().stop()
545+
546+
if self.base_preview_type == previewType.ANIM_IMG:
547+
self.preview_img.hide()
548+
self.preview_vid.hide()
549+
self.preview_vid.stop()
550+
self.preview_anim_img.show()
551+
552+
if self.base_preview_type == previewType.VID:
553+
self.preview_img.hide()
554+
if self.preview_anim_img.movie():
555+
self.preview_anim_img.movie().stop()
556+
557+
self.preview_vid.show()
558+
559+
560+
527561
def get_anim_ext(self):
528562
for fmt_ext in self.preview_anim_img_fmts:
529563
fmt_ext = self.preview_anim_img_pil_map.get(fmt_ext, fmt_ext)
@@ -575,9 +609,8 @@ def set_anim_img(self, filepath, ext, file_bytes, image):
575609
QSize(image.width, image.height),
576610
)
577611
)
578-
self.preview_img.hide()
579-
self.preview_vid.hide()
580-
self.preview_anim_img.show()
612+
self.set_preview_type(previewType.ANIM_IMG)
613+
581614

582615
def update_widgets(self) -> bool:
583616
"""Render the panel widgets with the newest data from the Library."""
@@ -613,12 +646,9 @@ def update_widgets(self) -> bool:
613646
self.preview_img.clicked.disconnect()
614647
for c in self.containers:
615648
c.setHidden(True)
616-
self.preview_img.show()
617-
self.preview_vid.stop()
618-
self.preview_vid.hide()
619-
self.preview_anim_img.hide()
620-
if self.preview_anim_img.movie():
621-
self.preview_anim_img.movie().stop()
649+
650+
651+
self.set_preview_type(previewType.IMG)
622652

623653
self.selected = list(self.driver.selected)
624654
self.add_field_button.setHidden(True)
@@ -648,13 +678,7 @@ def update_widgets(self) -> bool:
648678
selected_idx = self.driver.selected[0]
649679
item = self.driver.frame_content[selected_idx]
650680

651-
self.preview_img.show()
652-
self.preview_vid.stop()
653-
self.preview_vid.hide()
654-
self.preview_anim_img.hide()
655-
if self.preview_anim_img.movie():
656-
self.preview_anim_img.movie().stop()
657-
681+
self.set_preview_type(previewType.IMG)
658682

659683
# If a new selection is made, update the thumbnail and filepath.
660684
if not self.selected or self.selected != self.driver.selected:
@@ -730,15 +754,14 @@ def update_widgets(self) -> bool:
730754
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
731755
image = Image.fromarray(frame)
732756
if success:
733-
self.preview_img.hide()
734757
self.preview_vid.play(filepath, QSize(image.width, image.height))
735758
self.resizeEvent(
736759
QResizeEvent(
737760
QSize(image.width, image.height),
738761
QSize(image.width, image.height),
739762
)
740763
)
741-
self.preview_vid.show()
764+
self.set_preview_type(previewType.VID)
742765

743766
# Stats for specific file types are displayed here.
744767
if image and (
@@ -820,13 +843,7 @@ def update_widgets(self) -> bool:
820843

821844
# Multiple Selected Items
822845
elif len(self.driver.selected) > 1:
823-
self.preview_img.show()
824-
self.preview_anim_img.hide()
825-
self.preview_vid.stop()
826-
self.preview_vid.hide()
827-
828-
if self.preview_anim_img.movie():
829-
self.preview_anim_img.movie().stop()
846+
self.set_preview_type(previewType.IMG)
830847

831848
self.update_date_label()
832849
if self.selected != self.driver.selected:

0 commit comments

Comments
 (0)