import os from PyQt6.QtWidgets import QLabel, QWidget, QGridLayout, QHBoxLayout, QVBoxLayout from PyQt6.QtGui import QPixmap from PyQt6.QtCore import Qt from gui.v2.ui.pages.Page import Page class WelcomePage(Page): def __init__(self, page_stack, main_window=None, parent=None): super().__init__("Welcome", page_stack, main_window, parent) self.btn_path = main_window.btn_path self.update_status = main_window self.ui_elements = [] self.button_next.clicked.connect(self.go_to_install) self.button_next.setVisible(True) self._setup_welcome_ui() self._setup_stats_display() def _setup_welcome_ui(self): welcome_title = QLabel('Welcome to HydraVeil', self) welcome_title.setGeometry(20, 45, 760, 60) welcome_title.setStyleSheet(""" font-size: 32px; font-weight: bold; color: cyan; """) welcome_title.setAlignment(Qt.AlignmentFlag.AlignCenter) welcome_msg = QLabel( "Before we begin your journey, we need to set up a few essential components. " "Click 'Next' to take you to the installation page.", self) welcome_msg.setGeometry(40, 100, 720, 80) welcome_msg.setWordWrap(True) welcome_msg.setStyleSheet(""" font-size: 16px; color: cyan; """) welcome_msg.setAlignment(Qt.AlignmentFlag.AlignCenter) def _setup_stats_display(self): stats_container = QWidget(self) stats_container.setGeometry(70, 200, 730, 240) stats_title = QLabel(stats_container) stats_title.setText("Features & Services") stats_title.setGeometry(190, 10, 300, 30) stats_title.setStyleSheet(""" font-size: 22px; font-weight: bold; color: cyan; """) grid_widget = QWidget(stats_container) grid_widget.setGeometry(0, 70, 700, 190) grid_layout = QGridLayout(grid_widget) grid_layout.setSpacing(30) stats = [ ("Browsers", "browsers_mini.png", "10 Supported Browsers", True), ("WireGuard", "wireguard_mini.png", "6 Global Locations", True), ("Proxy", "just proxy_mini.png", "5 Proxy Locations", True), ("Tor", "toricon_mini.png", "Tor Network Access", True) ] for i, (title, icon_name, count, available) in enumerate(stats): row = i // 2 col = i % 2 stat_widget = QWidget() stat_layout = QHBoxLayout(stat_widget) stat_layout.setContentsMargins(20, 10, 2, 10) stat_layout.setSpacing(15) icon_label = QLabel() icon_path = os.path.join(self.btn_path, icon_name) icon_label.setPixmap(QPixmap(icon_path).scaled( 30, 30, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)) icon_label.setFixedSize(30, 30) stat_layout.addWidget(icon_label) text_widget = QWidget() text_layout = QVBoxLayout(text_widget) text_layout.setSpacing(5) text_layout.setContentsMargins(0, 0, 30, 0) title_widget = QWidget() title_layout = QHBoxLayout(title_widget) title_layout.setContentsMargins(0, 0, 0, 0) title_layout.setSpacing(10) title_label = QLabel(title) title_label.setStyleSheet( "font-size: 16px; font-weight: bold; color: #2c3e50;") title_layout.addWidget(title_label) status_indicator = QLabel("●") status_indicator.setStyleSheet("color: #2ecc71; font-size: 16px;") title_layout.addWidget(status_indicator) title_layout.addStretch() text_layout.addWidget(title_widget) count_label = QLabel(count) count_label.setStyleSheet("font-size: 16px; color: #34495e;") text_layout.addWidget(count_label) stat_layout.addWidget(text_widget, stretch=1) stat_widget.setStyleSheet(""" QWidget { background-color: transparent; border-radius: 10px; } """) grid_layout.addWidget(stat_widget, row, col) def go_to_install(self): self.custom_window.navigator.navigate("install_system_package") install_page = self.custom_window.navigator.get_cached("install_system_package") if install_page is not None: install_page.configure(package_name='all', distro='debian')