forked from Support/sp-hydra-veil-gui
update: updated location page fixes
This commit is contained in:
parent
5975b2d254
commit
05a1000583
1 changed files with 65 additions and 3 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from PyQt6.QtWidgets import QApplication, QLabel, QPushButton, QButtonGroup
|
from PyQt6.QtWidgets import QApplication, QLabel, QPushButton, QButtonGroup, QScrollArea, QWidget
|
||||||
from PyQt6.QtGui import QPixmap, QIcon, QPainter, QColor, QFont, QTransform
|
from PyQt6.QtGui import QPixmap, QIcon, QPainter, QColor, QFont, QTransform
|
||||||
from PyQt6.QtCore import Qt
|
from PyQt6.QtCore import Qt
|
||||||
from PyQt6 import QtCore
|
from PyQt6 import QtCore
|
||||||
|
|
@ -20,6 +20,7 @@ class LocationPage(Page):
|
||||||
self.display.setGeometry(QtCore.QRect(5, 10, 390, 520))
|
self.display.setGeometry(QtCore.QRect(5, 10, 390, 520))
|
||||||
self.title.setGeometry(395, 40, 380, 40)
|
self.title.setGeometry(395, 40, 380, 40)
|
||||||
self.title.setText("Pick a location")
|
self.title.setText("Pick a location")
|
||||||
|
self._setup_scroll_area()
|
||||||
|
|
||||||
self.initial_display = QLabel(self)
|
self.initial_display = QLabel(self)
|
||||||
self.initial_display.setGeometry(5, 22, 355, 485)
|
self.initial_display.setGeometry(5, 22, 355, 485)
|
||||||
|
|
@ -70,13 +71,24 @@ class LocationPage(Page):
|
||||||
self.refresh_protocol_location_visibility()
|
self.refresh_protocol_location_visibility()
|
||||||
|
|
||||||
def create_interface_elements(self, available_locations):
|
def create_interface_elements(self, available_locations):
|
||||||
|
old_button_widget = self.scroll_area.takeWidget()
|
||||||
|
if old_button_widget is not None:
|
||||||
|
old_button_widget.deleteLater()
|
||||||
|
|
||||||
|
button_widget = QWidget()
|
||||||
|
button_widget.setStyleSheet("background: transparent;")
|
||||||
|
self._button_widget = button_widget
|
||||||
self.buttonGroup = QButtonGroup(self)
|
self.buttonGroup = QButtonGroup(self)
|
||||||
self.buttons = []
|
self.buttons = []
|
||||||
|
|
||||||
for j, (object_type, icon_name, geometry) in enumerate(available_locations):
|
for j, (object_type, icon_name, geometry) in enumerate(available_locations):
|
||||||
boton = object_type(self)
|
boton = object_type(button_widget)
|
||||||
boton.setGeometry(*geometry)
|
boton.setGeometry(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
geometry[2],
|
||||||
|
geometry[3],
|
||||||
|
)
|
||||||
boton.setIconSize(boton.size())
|
boton.setIconSize(boton.size())
|
||||||
boton.setCheckable(True)
|
boton.setCheckable(True)
|
||||||
|
|
||||||
|
|
@ -123,11 +135,61 @@ class LocationPage(Page):
|
||||||
boton.clicked.connect(
|
boton.clicked.connect(
|
||||||
lambda checked, loc=icon_name: self.show_location(loc))
|
lambda checked, loc=icon_name: self.show_location(loc))
|
||||||
|
|
||||||
|
content_height = max(
|
||||||
|
(geometry[3] for _, _, geometry in available_locations),
|
||||||
|
default=0,
|
||||||
|
)
|
||||||
|
button_widget.setFixedSize(380, max(1, content_height))
|
||||||
|
self.scroll_area.setWidget(button_widget)
|
||||||
|
self._layout_visible_buttons()
|
||||||
|
|
||||||
|
def _setup_scroll_area(self):
|
||||||
|
self.scroll_area = QScrollArea(self)
|
||||||
|
self.scroll_area.setGeometry(405, 90, 385, 400)
|
||||||
|
self.scroll_area.setWidgetResizable(False)
|
||||||
|
self.scroll_area.setHorizontalScrollBarPolicy(
|
||||||
|
Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
||||||
|
self.scroll_area.setStyleSheet("""
|
||||||
|
QScrollArea {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
QScrollBar:vertical {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
width: 10px;
|
||||||
|
margin: 0px 0px 0px 4px;
|
||||||
|
}
|
||||||
|
QScrollBar::handle:vertical {
|
||||||
|
background: #00ffff;
|
||||||
|
border-radius: 5px;
|
||||||
|
min-height: 20px;
|
||||||
|
margin: 1px 0px;
|
||||||
|
}
|
||||||
|
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
|
||||||
|
height: 0px;
|
||||||
|
}
|
||||||
|
""")
|
||||||
|
|
||||||
def refresh_protocol_location_visibility(self):
|
def refresh_protocol_location_visibility(self):
|
||||||
for button in self.buttons:
|
for button in self.buttons:
|
||||||
location_key = getattr(button, 'location_icon_name', None)
|
location_key = getattr(button, 'location_icon_name', None)
|
||||||
locations = self.connection_manager.get_location_info(location_key)
|
locations = self.connection_manager.get_location_info(location_key)
|
||||||
button.setVisible(not locations or self._location_supports_selected_protocol(locations))
|
button.setVisible(not locations or self._location_supports_selected_protocol(locations))
|
||||||
|
self._layout_visible_buttons()
|
||||||
|
|
||||||
|
def _layout_visible_buttons(self):
|
||||||
|
visible_buttons = [button for button in self.buttons if not button.isHidden()]
|
||||||
|
for index, button in enumerate(visible_buttons):
|
||||||
|
button.move((index % 2) * 195, (index // 2) * 105)
|
||||||
|
|
||||||
|
if hasattr(self, '_button_widget'):
|
||||||
|
button_height = self.buttons[0].height() if self.buttons else 0
|
||||||
|
row_count = (len(visible_buttons) + 1) // 2
|
||||||
|
self._button_widget.setFixedSize(
|
||||||
|
380,
|
||||||
|
max(1, row_count * 105 - 30 + button_height),
|
||||||
|
)
|
||||||
|
|
||||||
def _current_protocol(self):
|
def _current_protocol(self):
|
||||||
profile_data = self.update_status.read_data()
|
profile_data = self.update_status.read_data()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue