123 Zeilen
4.8 KiB
Python
123 Zeilen
4.8 KiB
Python
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QPushButton
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtGui import QPixmap, QIcon
|
|
import os
|
|
|
|
from updates.version import get_version
|
|
|
|
|
|
class AboutDialog(QDialog):
|
|
"""Dialog that shows information about the application."""
|
|
|
|
def __init__(self, language_manager=None, parent=None):
|
|
super().__init__(parent)
|
|
# Remove the standard "?" help button that appears on some platforms
|
|
self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)
|
|
self.language_manager = language_manager
|
|
self.theme_manager = None
|
|
|
|
# Try to get theme manager from parent (MainWindow)
|
|
if parent and hasattr(parent, 'theme_manager'):
|
|
self.theme_manager = parent.theme_manager
|
|
|
|
self._setup_ui()
|
|
if self.language_manager:
|
|
self.language_manager.language_changed.connect(self.update_texts)
|
|
self.update_texts()
|
|
|
|
def _setup_ui(self):
|
|
self.setWindowTitle("About")
|
|
# Dialog-Größe festlegen
|
|
self.setFixedSize(550, 450) # Fixed size for consistent appearance
|
|
|
|
layout = QVBoxLayout(self)
|
|
layout.setContentsMargins(20, 20, 40, 40) # Less margin on top/left for logo
|
|
layout.setSpacing(25)
|
|
|
|
# Add logo in top-left corner
|
|
logo_label = QLabel()
|
|
logo_label.setAlignment(Qt.AlignLeft) # Align left instead of center
|
|
|
|
# Get the theme-aware logo path
|
|
if self.theme_manager:
|
|
# Use theme manager to get correct logo based on current theme
|
|
logo_path = self.theme_manager.get_icon_path("intelsight-logo")
|
|
else:
|
|
# Fallback to light logo if no theme manager
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
parent_dir = os.path.dirname(current_dir)
|
|
logo_path = os.path.join(parent_dir, "resources", "icons", "intelsight-logo.svg")
|
|
|
|
if os.path.exists(logo_path):
|
|
# Load logo and display it at a smaller size for corner placement
|
|
logo_pixmap = QPixmap(logo_path)
|
|
# Scale the logo smaller for top-left corner
|
|
scaled_pixmap = logo_pixmap.scaled(
|
|
200, 60, # Smaller size for corner placement
|
|
Qt.KeepAspectRatio,
|
|
Qt.SmoothTransformation
|
|
)
|
|
logo_label.setPixmap(scaled_pixmap)
|
|
logo_label.setFixedSize(scaled_pixmap.size())
|
|
else:
|
|
# Fallback if logo not found
|
|
logo_label.setText("IntelSight")
|
|
logo_label.setStyleSheet("font-size: 18px; font-weight: bold;")
|
|
|
|
# Logo in top-left corner
|
|
layout.addWidget(logo_label, 0, Qt.AlignLeft | Qt.AlignTop)
|
|
|
|
# Add some space after logo
|
|
layout.addSpacing(20)
|
|
|
|
self.info_label = QLabel()
|
|
self.info_label.setAlignment(Qt.AlignCenter)
|
|
self.info_label.setWordWrap(True)
|
|
self.info_label.setMaximumWidth(450) # Maximale Breite für bessere Lesbarkeit
|
|
layout.addWidget(self.info_label, 1, Qt.AlignCenter) # Use stretch factor 1
|
|
|
|
# Spacer für bessere vertikale Verteilung
|
|
layout.addStretch()
|
|
|
|
self.close_button = QPushButton("OK")
|
|
self.close_button.clicked.connect(self.accept)
|
|
self.close_button.setFixedWidth(100) # Feste Breite für Button
|
|
layout.addWidget(self.close_button, 0, Qt.AlignCenter)
|
|
|
|
def update_texts(self):
|
|
version_text = (
|
|
self.language_manager.get_text("main.version", f"Version {get_version()}")
|
|
if self.language_manager
|
|
else f"Version {get_version()}"
|
|
)
|
|
lm = self.language_manager
|
|
title = "AccountForger" if not lm else lm.get_text("main.title", "AccountForger")
|
|
support = (
|
|
lm.get_text(
|
|
"about_dialog.support",
|
|
"Für Support kontaktieren Sie uns unter: support@intelsight.de",
|
|
)
|
|
if lm
|
|
else "Für Support kontaktieren Sie uns unter: support@intelsight.de"
|
|
)
|
|
license_text = (
|
|
lm.get_text(
|
|
"about_dialog.license",
|
|
"Diese Software ist lizenzpflichtig und darf nur mit gültiger Lizenz verwendet werden.",
|
|
)
|
|
if lm
|
|
else "Diese Software ist lizenzpflichtig und darf nur mit gültiger Lizenz verwendet werden."
|
|
)
|
|
lines = [
|
|
f"<h2>{title}</h2>",
|
|
f"<p>{version_text}</p>",
|
|
"<p>© 2025 IntelSight UG (haftungsbeschränkt)</p>",
|
|
f"<p>{support}</p>",
|
|
f"<p>{license_text}</p>",
|
|
]
|
|
self.info_label.setText("".join(lines))
|
|
if lm:
|
|
self.setWindowTitle(lm.get_text("menu.about", "Über"))
|
|
self.close_button.setText(lm.get_text("buttons.ok", "OK"))
|
|
|