hydraveil-gui/gui/v2/ui/pages/protocol_page.py
2026-06-13 16:19:11 -04:00

87 lines
3.5 KiB
Python
Executable file

import os
from PyQt6.QtWidgets import QPushButton, QLabel, QButtonGroup
from PyQt6.QtGui import QPixmap, QIcon
from PyQt6.QtCore import Qt
from PyQt6 import QtCore
from gui.v2.ui.pages.Page import Page
class ProtocolPage(Page):
def __init__(self, page_stack, main_window=None, parent=None):
super().__init__("Protocol", page_stack, main_window, parent)
self.main_window = main_window
self.selected_protocol = None
self.btn_path = main_window.btn_path
self.selected_protocol_icon = None
self.connection_manager = main_window.connection_manager
self.button_back.setVisible(True)
self.update_status = main_window
self.button_go.clicked.connect(self.go_selected)
self.coming_soon_label = QLabel("Coming soon", self)
self.coming_soon_label.setGeometry(210, 50, 200, 40)
self.coming_soon_label.setStyleSheet("font-size: 22px;")
self.coming_soon_label.setVisible(False)
self.title.setGeometry(585, 40, 185, 40)
self.title.setText("Pick a Protocol")
self.display.setGeometry(QtCore.QRect(0, 50, 580, 435))
self.create_interface_elements()
if self.connection_manager.is_synced():
self.enable_protocol_buttons()
def create_interface_elements(self):
self.buttonGroup = QButtonGroup(self)
self.buttons = []
self.selected_page_name = None
for j, (object_type, icon_name, page_name, geometry) in enumerate([
(QPushButton, "wireguard", "wireguard", (585, 90, 185, 75)),
(QPushButton, "residential", "residential", (585, 90+30+75, 185, 75)),
(QPushButton, "hidetor", "hidetor", (585, 90+30+75+30+75, 185, 75))
]):
boton = object_type(self)
boton.setGeometry(*geometry)
boton.setIconSize(boton.size())
boton.setCheckable(True)
boton.setDisabled(True)
boton.setIcon(
QIcon(os.path.join(self.btn_path, f"{icon_name}_button.png")))
self.buttons.append(boton)
self.buttonGroup.addButton(boton, j)
boton.clicked.connect(
lambda _, name=page_name, protocol=icon_name: self.show_protocol(name, protocol))
def enable_protocol_buttons(self):
for button in self.buttons:
button.setDisabled(False)
def update_swarp_json(self):
self.update_status.write_data(
{"protocol": self.selected_protocol_icon})
def show_protocol(self, page_name, protocol):
self.update_status.clear_data()
self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"{protocol}.png")).scaled(
self.display.size(), Qt.AspectRatioMode.KeepAspectRatio))
self.selected_protocol_icon = protocol
self.selected_page_name = page_name
if protocol in ["wireguard", "hidetor"]:
self.button_go.setVisible(True)
self.coming_soon_label.setVisible(False)
else:
self.button_go.setVisible(False)
self.coming_soon_label.setVisible(True)
self.update_swarp_json()
def go_selected(self):
if self.selected_page_name:
self.custom_window.navigator.navigate(self.selected_page_name)
self.display.clear()
for boton in self.buttons:
boton.setChecked(False)
self.button_go.setVisible(False)
def find_menu_page(self):
return self.custom_window.navigator.get_cached("menu")