forked from Support/sp-hydra-veil-gui
121 lines
4.3 KiB
Python
Executable file
121 lines
4.3 KiB
Python
Executable file
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_networking_setup)
|
|
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 review the optional networking setup.", 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(chr(9679))
|
|
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_networking_setup(self):
|
|
self.custom_window.navigator.navigate("networking_setup")
|