Kemono-Downloader/src/ui/dialogs/MoreOptionsDialog.py

108 lines
4.6 KiB
Python
Raw Normal View History

2025-07-13 10:22:06 -07:00
from PyQt5.QtWidgets import (
QDialog, QVBoxLayout, QRadioButton, QDialogButtonBox, QButtonGroup, QLabel, QComboBox, QHBoxLayout, QCheckBox
)
from PyQt5.QtCore import Qt
2025-07-15 06:54:31 -07:00
from ...utils.resolution import get_dark_theme
2025-07-13 10:22:06 -07:00
class MoreOptionsDialog(QDialog):
"""
A dialog for selecting a scope, export format, and single PDF option.
"""
SCOPE_CONTENT = "content"
SCOPE_COMMENTS = "comments"
2025-12-14 19:33:17 +05:30
def __init__(self, parent=None, current_scope=None, current_format=None, single_pdf_checked=False, add_info_checked=False):
2025-07-13 10:22:06 -07:00
super().__init__(parent)
2025-07-15 06:54:31 -07:00
self.parent_app = parent
2025-07-13 10:22:06 -07:00
self.setWindowTitle("More Options")
self.setMinimumWidth(350)
layout = QVBoxLayout(self)
self.description_label = QLabel("Please choose the scope for the action:")
layout.addWidget(self.description_label)
2025-12-14 19:33:17 +05:30
2025-07-13 10:22:06 -07:00
self.radio_button_group = QButtonGroup(self)
self.radio_content = QRadioButton("Description/Content")
2025-07-27 06:32:15 -07:00
self.radio_comments = QRadioButton("Comments")
2025-07-13 10:22:06 -07:00
self.radio_button_group.addButton(self.radio_content)
self.radio_button_group.addButton(self.radio_comments)
layout.addWidget(self.radio_content)
layout.addWidget(self.radio_comments)
if current_scope == self.SCOPE_COMMENTS:
self.radio_comments.setChecked(True)
else:
self.radio_content.setChecked(True)
export_layout = QHBoxLayout()
export_label = QLabel("Export as:")
self.format_combo = QComboBox()
self.format_combo.addItems(["PDF", "DOCX", "TXT"])
if current_format and current_format.upper() in ["PDF", "DOCX", "TXT"]:
self.format_combo.setCurrentText(current_format.upper())
else:
self.format_combo.setCurrentText("PDF")
export_layout.addWidget(export_label)
export_layout.addWidget(self.format_combo)
export_layout.addStretch()
layout.addLayout(export_layout)
2025-12-14 19:33:17 +05:30
# --- Single PDF Checkbox ---
2025-07-13 10:22:06 -07:00
self.single_pdf_checkbox = QCheckBox("Single PDF")
self.single_pdf_checkbox.setToolTip("If checked, all text from matching posts will be compiled into one single PDF file.")
self.single_pdf_checkbox.setChecked(single_pdf_checked)
layout.addWidget(self.single_pdf_checkbox)
2025-12-14 19:33:17 +05:30
# --- NEW: Add Info Checkbox ---
self.add_info_checkbox = QCheckBox("Add info in PDF")
self.add_info_checkbox.setToolTip("If checked, adds a first page with post details (Title, Date, Link, Creator, Tags, etc.).")
self.add_info_checkbox.setChecked(add_info_checked)
layout.addWidget(self.add_info_checkbox)
self.format_combo.currentTextChanged.connect(self.update_checkbox_states)
self.update_checkbox_states(self.format_combo.currentText())
2025-07-13 10:22:06 -07:00
self.button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
self.button_box.accepted.connect(self.accept)
self.button_box.rejected.connect(self.reject)
layout.addWidget(self.button_box)
self.setLayout(layout)
2025-07-15 06:54:31 -07:00
self._apply_theme()
2025-12-14 19:33:17 +05:30
def update_checkbox_states(self, text):
"""Enable PDF-specific checkboxes only if the format is PDF."""
2025-07-13 10:22:06 -07:00
is_pdf = (text.upper() == "PDF")
self.single_pdf_checkbox.setEnabled(is_pdf)
2025-12-14 19:33:17 +05:30
self.add_info_checkbox.setEnabled(is_pdf)
2025-07-13 10:22:06 -07:00
if not is_pdf:
self.single_pdf_checkbox.setChecked(False)
2025-12-14 19:33:17 +05:30
# We don't uncheck add_info necessarily, just disable it,
# but unchecking is safer visually to imply "won't happen"
self.add_info_checkbox.setChecked(False)
2025-07-13 10:22:06 -07:00
def get_selected_scope(self):
if self.radio_comments.isChecked():
return self.SCOPE_COMMENTS
return self.SCOPE_CONTENT
def get_selected_format(self):
return self.format_combo.currentText().lower()
def get_single_pdf_state(self):
"""Returns the state of the Single PDF checkbox."""
2025-07-15 06:54:31 -07:00
return self.single_pdf_checkbox.isChecked() and self.single_pdf_checkbox.isEnabled()
2025-12-14 19:33:17 +05:30
def get_add_info_state(self):
"""Returns the state of the Add Info checkbox."""
return self.add_info_checkbox.isChecked() and self.add_info_checkbox.isEnabled()
2025-07-15 06:54:31 -07:00
def _apply_theme(self):
"""Applies the current theme from the parent application."""
2025-12-14 19:33:17 +05:30
if self.parent_app and hasattr(self.parent_app, 'current_theme') and self.parent_app.current_theme == "dark":
2025-07-15 06:54:31 -07:00
scale = getattr(self.parent_app, 'scale_factor', 1)
self.setStyleSheet(get_dark_theme(scale))
else:
2025-12-14 19:33:17 +05:30
self.setStyleSheet("")