Merge Save/Unsave into toggle button, add Ctrl+H to hide UI
- Single Save/Unsave button that toggles based on library state - Ctrl+H in slideshow hides/shows toolbar and video controls
This commit is contained in:
parent
cb249d9b36
commit
823bcd500e
@ -923,6 +923,12 @@ class BooruApp(QMainWindow):
|
|||||||
self._status.showMessage(f"#{post.id} not in library")
|
self._status.showMessage(f"#{post.id} not in library")
|
||||||
self._update_fullscreen_state()
|
self._update_fullscreen_state()
|
||||||
|
|
||||||
|
def _save_toggle_from_slideshow(self) -> None:
|
||||||
|
if self._fullscreen_window and self._fullscreen_window._is_saved:
|
||||||
|
self._unsave_from_preview()
|
||||||
|
else:
|
||||||
|
self._save_from_preview("")
|
||||||
|
|
||||||
def _open_fullscreen_preview(self) -> None:
|
def _open_fullscreen_preview(self) -> None:
|
||||||
path = self._preview._current_path
|
path = self._preview._current_path
|
||||||
if not path:
|
if not path:
|
||||||
@ -934,8 +940,7 @@ class BooruApp(QMainWindow):
|
|||||||
self._fullscreen_window = FullscreenPreview(grid_cols=cols, parent=self)
|
self._fullscreen_window = FullscreenPreview(grid_cols=cols, parent=self)
|
||||||
self._fullscreen_window.navigate.connect(self._navigate_fullscreen)
|
self._fullscreen_window.navigate.connect(self._navigate_fullscreen)
|
||||||
self._fullscreen_window.favorite_requested.connect(self._favorite_from_preview)
|
self._fullscreen_window.favorite_requested.connect(self._favorite_from_preview)
|
||||||
self._fullscreen_window.save_requested.connect(lambda: self._save_from_preview(""))
|
self._fullscreen_window.save_toggle_requested.connect(self._save_toggle_from_slideshow)
|
||||||
self._fullscreen_window.unsave_requested.connect(self._unsave_from_preview)
|
|
||||||
self._fullscreen_window.destroyed.connect(self._on_fullscreen_closed)
|
self._fullscreen_window.destroyed.connect(self._on_fullscreen_closed)
|
||||||
self._fullscreen_window.set_media(path, self._preview._info_label.text())
|
self._fullscreen_window.set_media(path, self._preview._info_label.text())
|
||||||
self._update_fullscreen_state()
|
self._update_fullscreen_state()
|
||||||
|
|||||||
@ -27,8 +27,7 @@ class FullscreenPreview(QMainWindow):
|
|||||||
|
|
||||||
navigate = Signal(int) # direction: -1/+1 for left/right, -cols/+cols for up/down
|
navigate = Signal(int) # direction: -1/+1 for left/right, -cols/+cols for up/down
|
||||||
favorite_requested = Signal()
|
favorite_requested = Signal()
|
||||||
save_requested = Signal()
|
save_toggle_requested = Signal() # save or unsave depending on state
|
||||||
unsave_requested = Signal()
|
|
||||||
|
|
||||||
def __init__(self, grid_cols: int = 3, parent=None) -> None:
|
def __init__(self, grid_cols: int = 3, parent=None) -> None:
|
||||||
super().__init__(parent, Qt.WindowType.Window)
|
super().__init__(parent, Qt.WindowType.Window)
|
||||||
@ -41,7 +40,8 @@ class FullscreenPreview(QMainWindow):
|
|||||||
main_layout.setSpacing(0)
|
main_layout.setSpacing(0)
|
||||||
|
|
||||||
# Top toolbar
|
# Top toolbar
|
||||||
toolbar = QHBoxLayout()
|
self._toolbar = QWidget()
|
||||||
|
toolbar = QHBoxLayout(self._toolbar)
|
||||||
toolbar.setContentsMargins(8, 4, 8, 4)
|
toolbar.setContentsMargins(8, 4, 8, 4)
|
||||||
|
|
||||||
self._fav_btn = QPushButton("Favorite")
|
self._fav_btn = QPushButton("Favorite")
|
||||||
@ -50,21 +50,17 @@ class FullscreenPreview(QMainWindow):
|
|||||||
toolbar.addWidget(self._fav_btn)
|
toolbar.addWidget(self._fav_btn)
|
||||||
|
|
||||||
self._save_btn = QPushButton("Save")
|
self._save_btn = QPushButton("Save")
|
||||||
self._save_btn.setFixedWidth(60)
|
self._save_btn.setFixedWidth(70)
|
||||||
self._save_btn.clicked.connect(self.save_requested)
|
self._save_btn.clicked.connect(self.save_toggle_requested)
|
||||||
toolbar.addWidget(self._save_btn)
|
toolbar.addWidget(self._save_btn)
|
||||||
|
self._is_saved = False
|
||||||
self._unsave_btn = QPushButton("Unsave")
|
|
||||||
self._unsave_btn.setFixedWidth(70)
|
|
||||||
self._unsave_btn.clicked.connect(self.unsave_requested)
|
|
||||||
toolbar.addWidget(self._unsave_btn)
|
|
||||||
|
|
||||||
toolbar.addStretch()
|
toolbar.addStretch()
|
||||||
|
|
||||||
self._info_label = QLabel()
|
self._info_label = QLabel()
|
||||||
toolbar.addWidget(self._info_label)
|
toolbar.addWidget(self._info_label)
|
||||||
|
|
||||||
main_layout.addLayout(toolbar)
|
main_layout.addWidget(self._toolbar)
|
||||||
|
|
||||||
# Media stack
|
# Media stack
|
||||||
self._stack = QStackedWidget()
|
self._stack = QStackedWidget()
|
||||||
@ -86,8 +82,8 @@ class FullscreenPreview(QMainWindow):
|
|||||||
def update_state(self, favorited: bool, saved: bool) -> None:
|
def update_state(self, favorited: bool, saved: bool) -> None:
|
||||||
self._fav_btn.setText("Unfavorite" if favorited else "Favorite")
|
self._fav_btn.setText("Unfavorite" if favorited else "Favorite")
|
||||||
self._fav_btn.setFixedWidth(90 if favorited else 80)
|
self._fav_btn.setFixedWidth(90 if favorited else 80)
|
||||||
self._save_btn.setEnabled(not saved)
|
self._is_saved = saved
|
||||||
self._unsave_btn.setEnabled(saved)
|
self._save_btn.setText("Unsave" if saved else "Save")
|
||||||
|
|
||||||
def set_media(self, path: str, info: str = "") -> None:
|
def set_media(self, path: str, info: str = "") -> None:
|
||||||
self._info_label.setText(info)
|
self._info_label.setText(info)
|
||||||
@ -116,7 +112,19 @@ class FullscreenPreview(QMainWindow):
|
|||||||
if isinstance(obj, (QLineEdit, QTextEdit, QSpinBox, QComboBox)):
|
if isinstance(obj, (QLineEdit, QTextEdit, QSpinBox, QComboBox)):
|
||||||
return super().eventFilter(obj, event)
|
return super().eventFilter(obj, event)
|
||||||
key = event.key()
|
key = event.key()
|
||||||
if key in (Qt.Key.Key_Escape, Qt.Key.Key_Q):
|
mods = event.modifiers()
|
||||||
|
if key == Qt.Key.Key_H and mods & Qt.KeyboardModifier.ControlModifier:
|
||||||
|
self._toolbar.setVisible(not self._toolbar.isVisible())
|
||||||
|
# Also hide video controls if showing video
|
||||||
|
if self._stack.currentIndex() == 1:
|
||||||
|
for child in self._video.findChildren(QPushButton):
|
||||||
|
child.setVisible(self._toolbar.isVisible())
|
||||||
|
for child in self._video.findChildren(QSlider):
|
||||||
|
child.setVisible(self._toolbar.isVisible())
|
||||||
|
for child in self._video.findChildren(QLabel):
|
||||||
|
child.setVisible(self._toolbar.isVisible())
|
||||||
|
return True
|
||||||
|
elif key in (Qt.Key.Key_Escape, Qt.Key.Key_Q):
|
||||||
self.close()
|
self.close()
|
||||||
return True
|
return True
|
||||||
elif key in (Qt.Key.Key_Left, Qt.Key.Key_H):
|
elif key in (Qt.Key.Key_Left, Qt.Key.Key_H):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user