forked from Support/sp-hydra-veil-gui
87 lines
3.5 KiB
Python
Executable file
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")
|