mirror of
https://github.com/Yuvi9587/Kemono-Downloader.git
synced 2025-12-17 15:36:51 +00:00
119 lines
5.0 KiB
Python
119 lines
5.0 KiB
Python
# --- PyQt5 Imports ---
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtWidgets import (
|
|
QApplication, QDialog, QHBoxLayout, QLabel, QPushButton, QVBoxLayout,
|
|
QRadioButton, QButtonGroup
|
|
)
|
|
|
|
# --- Local Application Imports ---
|
|
# This assumes the new project structure is in place.
|
|
from ...i18n.translator import get_translation
|
|
# get_app_icon_object is defined in the main window module in this refactoring plan.
|
|
from ..main_window import get_app_icon_object
|
|
|
|
|
|
class ExportOptionsDialog(QDialog):
|
|
"""
|
|
Dialog to choose the export format for error file links.
|
|
It allows the user to select between exporting only the URLs or
|
|
exporting URLs with additional details.
|
|
"""
|
|
# Constants to define the export modes
|
|
EXPORT_MODE_LINK_ONLY = 1
|
|
EXPORT_MODE_WITH_DETAILS = 2
|
|
|
|
def __init__(self, parent_app, parent=None):
|
|
"""
|
|
Initializes the dialog.
|
|
|
|
Args:
|
|
parent_app (DownloaderApp): A reference to the main application window for theming and translations.
|
|
parent (QWidget, optional): The parent widget. Defaults to None.
|
|
"""
|
|
super().__init__(parent)
|
|
self.parent_app = parent_app
|
|
self.setModal(True)
|
|
# Default option
|
|
self.selected_option = self.EXPORT_MODE_LINK_ONLY
|
|
|
|
# --- Basic Window Setup ---
|
|
app_icon = get_app_icon_object()
|
|
if app_icon and not app_icon.isNull():
|
|
self.setWindowIcon(app_icon)
|
|
|
|
# Set window size dynamically
|
|
screen_height = QApplication.primaryScreen().availableGeometry().height() if QApplication.primaryScreen() else 768
|
|
scale_factor = screen_height / 768.0
|
|
base_min_w = 350
|
|
scaled_min_w = int(base_min_w * scale_factor)
|
|
self.setMinimumWidth(scaled_min_w)
|
|
|
|
# --- Initialize UI and Apply Theming ---
|
|
self._init_ui()
|
|
self._retranslate_ui()
|
|
self._apply_theme()
|
|
|
|
def _init_ui(self):
|
|
"""Initializes all UI components and layouts for the dialog."""
|
|
layout = QVBoxLayout(self)
|
|
|
|
self.description_label = QLabel()
|
|
layout.addWidget(self.description_label)
|
|
|
|
self.radio_group = QButtonGroup(self)
|
|
|
|
self.radio_link_only = QRadioButton()
|
|
self.radio_link_only.setChecked(True)
|
|
self.radio_group.addButton(self.radio_link_only, self.EXPORT_MODE_LINK_ONLY)
|
|
layout.addWidget(self.radio_link_only)
|
|
|
|
self.radio_with_details = QRadioButton()
|
|
self.radio_group.addButton(self.radio_with_details, self.EXPORT_MODE_WITH_DETAILS)
|
|
layout.addWidget(self.radio_with_details)
|
|
|
|
# --- Action Buttons ---
|
|
button_layout = QHBoxLayout()
|
|
self.export_button = QPushButton()
|
|
self.export_button.clicked.connect(self._handle_export)
|
|
self.export_button.setDefault(True)
|
|
|
|
self.cancel_button = QPushButton()
|
|
self.cancel_button.clicked.connect(self.reject)
|
|
|
|
button_layout.addStretch(1)
|
|
button_layout.addWidget(self.export_button)
|
|
button_layout.addWidget(self.cancel_button)
|
|
layout.addLayout(button_layout)
|
|
|
|
def _tr(self, key, default_text=""):
|
|
"""Helper to get translation based on the main application's current language."""
|
|
if callable(get_translation) and self.parent_app:
|
|
return get_translation(self.parent_app.current_selected_language, key, default_text)
|
|
return default_text
|
|
|
|
def _retranslate_ui(self):
|
|
"""Sets the text for all translatable UI elements."""
|
|
self.setWindowTitle(self._tr("export_options_dialog_title", "Export Options"))
|
|
self.description_label.setText(self._tr("export_options_description_label", "Choose the format for exporting error file links:"))
|
|
self.radio_link_only.setText(self._tr("export_options_radio_link_only", "Link per line (URL only)"))
|
|
self.radio_link_only.setToolTip(self._tr("export_options_radio_link_only_tooltip", "Exports only the direct download URL..."))
|
|
self.radio_with_details.setText(self._tr("export_options_radio_with_details", "Export with details (URL [Post, File info])"))
|
|
self.radio_with_details.setToolTip(self._tr("export_options_radio_with_details_tooltip", "Exports the URL followed by details..."))
|
|
self.export_button.setText(self._tr("export_options_export_button", "Export"))
|
|
self.cancel_button.setText(self._tr("fav_posts_cancel_button", "Cancel"))
|
|
|
|
def _apply_theme(self):
|
|
"""Applies the current theme from the parent application."""
|
|
if self.parent_app and hasattr(self.parent_app, 'current_theme') and self.parent_app.current_theme == "dark":
|
|
if hasattr(self.parent_app, 'get_dark_theme'):
|
|
self.setStyleSheet(self.parent_app.get_dark_theme())
|
|
|
|
def _handle_export(self):
|
|
"""Sets the selected export option and accepts the dialog."""
|
|
self.selected_option = self.radio_group.checkedId()
|
|
self.accept()
|
|
|
|
def get_selected_option(self):
|
|
"""Returns the export mode chosen by the user."""
|
|
return self.selected_option
|