|
15 | 15 | import cv2
|
16 | 16 | import rawpy
|
17 | 17 | import structlog
|
| 18 | +import enum |
18 | 19 | from humanfriendly import format_size
|
19 | 20 | from PIL import Image, ImageFont, UnidentifiedImageError
|
20 | 21 | from PIL.Image import DecompressionBombError
|
@@ -77,6 +78,10 @@ def update_selected_entry(driver: "QtDriver"):
|
77 | 78 | assert results, f"Entry not found: {entry.id}"
|
78 | 79 | driver.frame_content[grid_idx] = next(results)
|
79 | 80 |
|
| 81 | +class previewType(enum.Enum): |
| 82 | + IMG = enum.auto() |
| 83 | + ANIM_IMG = enum.auto() |
| 84 | + VID = enum.auto() |
80 | 85 |
|
81 | 86 | class PreviewPanel(QWidget):
|
82 | 87 | """The Preview Panel Widget."""
|
@@ -132,6 +137,8 @@ def __init__(self, library: Library, driver: "QtDriver"):
|
132 | 137 | self.open_file_action = QAction("Open file", self)
|
133 | 138 | self.open_explorer_action = QAction(PlatformStrings.open_file_str, self)
|
134 | 139 |
|
| 140 | + self.base_preview_type = previewType.IMG |
| 141 | + |
135 | 142 | self.preview_img = QPushButtonWrapper()
|
136 | 143 | self.preview_img.setMinimumSize(*self.img_button_size)
|
137 | 144 | self.preview_img.setFlat(True)
|
@@ -524,6 +531,33 @@ def update_date_label(self, filepath: Path | None = None) -> None:
|
524 | 531 | self.date_created_label.setHidden(True)
|
525 | 532 | self.date_modified_label.setHidden(True)
|
526 | 533 |
|
| 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 | + |
527 | 561 | def get_anim_ext(self):
|
528 | 562 | for fmt_ext in self.preview_anim_img_fmts:
|
529 | 563 | 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):
|
575 | 609 | QSize(image.width, image.height),
|
576 | 610 | )
|
577 | 611 | )
|
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 | + |
581 | 614 |
|
582 | 615 | def update_widgets(self) -> bool:
|
583 | 616 | """Render the panel widgets with the newest data from the Library."""
|
@@ -613,12 +646,9 @@ def update_widgets(self) -> bool:
|
613 | 646 | self.preview_img.clicked.disconnect()
|
614 | 647 | for c in self.containers:
|
615 | 648 | 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) |
622 | 652 |
|
623 | 653 | self.selected = list(self.driver.selected)
|
624 | 654 | self.add_field_button.setHidden(True)
|
@@ -648,13 +678,7 @@ def update_widgets(self) -> bool:
|
648 | 678 | selected_idx = self.driver.selected[0]
|
649 | 679 | item = self.driver.frame_content[selected_idx]
|
650 | 680 |
|
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) |
658 | 682 |
|
659 | 683 | # If a new selection is made, update the thumbnail and filepath.
|
660 | 684 | if not self.selected or self.selected != self.driver.selected:
|
@@ -730,15 +754,14 @@ def update_widgets(self) -> bool:
|
730 | 754 | frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
731 | 755 | image = Image.fromarray(frame)
|
732 | 756 | if success:
|
733 |
| - self.preview_img.hide() |
734 | 757 | self.preview_vid.play(filepath, QSize(image.width, image.height))
|
735 | 758 | self.resizeEvent(
|
736 | 759 | QResizeEvent(
|
737 | 760 | QSize(image.width, image.height),
|
738 | 761 | QSize(image.width, image.height),
|
739 | 762 | )
|
740 | 763 | )
|
741 |
| - self.preview_vid.show() |
| 764 | + self.set_preview_type(previewType.VID) |
742 | 765 |
|
743 | 766 | # Stats for specific file types are displayed here.
|
744 | 767 | if image and (
|
@@ -820,13 +843,7 @@ def update_widgets(self) -> bool:
|
820 | 843 |
|
821 | 844 | # Multiple Selected Items
|
822 | 845 | 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) |
830 | 847 |
|
831 | 848 | self.update_date_label()
|
832 | 849 | if self.selected != self.driver.selected:
|
|
0 commit comments