1+ import copy
12import logging
2- import typing
3- import copy
43import subprocess
4+ import typing
55from functools import partial
66
77from PyQt6 import QtCore , QtGui , QtWidgets
8- from PyQt6 .QtCore import QRunnable , QThreadPool , QObject , pyqtSignal , QVariant
9- from PyQt6 .QtWidgets import QScroller , QScrollerProperties
8+ from PyQt6 .QtCore import QRunnable , QThreadPool , QObject , pyqtSignal
109
1110from lib .network import SdbusNetworkManagerAsync
1211from lib .panels .widgets .popupDialogWidget import Popup
1312from lib .ui .wifiConnectivityWindow_ui import Ui_wifi_stacked_page
1413from lib .panels .widgets .keyboardPage import CustomQwertyKeyboard
15- from lib .utils .blocks_frame import BlocksCustomFrame
1614from lib .panels .widgets .loadPage import LoadScreen
1715from lib .utils .list_model import EntryDelegate , EntryListModel , ListItem
1816
@@ -216,9 +214,6 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget], /) -> None:
216214
217215 self .panel = Ui_wifi_stacked_page ()
218216 self .panel .setupUi (self )
219-
220- self ._setupUI ()
221-
222217 self ._provider = WifiIconProvider ()
223218 self .ongoing_update : bool = False
224219
@@ -237,16 +232,14 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget], /) -> None:
237232
238233 #View Models and Delegates
239234 self .model = EntryListModel ()
240- self .model .setParent (self .network_list_widget )
235+ self .model .setParent (self .panel . listView )
241236 self .entry_delegate = EntryDelegate ()
242- self .network_list_widget .setModel (self .model )
243- self .network_list_widget .setItemDelegate (self .entry_delegate )
237+ self .panel . listView .setModel (self .model )
238+ self .panel . listView .setItemDelegate (self .entry_delegate )
244239 self .entry_delegate .item_selected .connect (self .ssid_item_clicked )
245- self .panel .network_backButton .clicked .connect (self .reset_view_model )
246240
247241 # Network Scan
248242 self .build_network_list ()
249-
250243 self .network_list_worker = BuildNetworkList ()
251244 self .network_list_worker .finished_network_list_build .connect (
252245 self .handle_network_list
@@ -412,8 +405,15 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget], /) -> None:
412405
413406 self .network_list_worker .build ()
414407 self .request_network_scan .emit ()
408+ self .panel .listView .verticalScrollBar ().valueChanged .connect (
409+ self ._handle_scrollbar
410+ )
411+ self .panel .verticalScrollBar .valueChanged .connect (self ._handle_scrollbar )
412+ self .panel .verticalScrollBar .valueChanged .connect (
413+ lambda value : self .panel .listView .verticalScrollBar ().setValue (value )
414+ )
415+ self .panel .verticalScrollBar .show ()
415416 self .hide ()
416-
417417 self .info_box_load ()
418418
419419 self .qwerty = CustomQwertyKeyboard (self )
@@ -476,20 +476,28 @@ def deleteLater(self) -> None:
476476
477477 def showEvent (self , event : QtGui .QShowEvent | None ) -> None :
478478 """Re-add clients to update list"""
479+ # Block all touch events so multitouch is ignored
480+ if event .type () in (
481+ QtCore .QEvent .Type .TouchBegin ,
482+ QtCore .QEvent .Type .TouchUpdate ,
483+ QtCore .QEvent .Type .TouchEnd
484+ ):
485+ return True # ignore the event entirely
486+
479487 self .build_model_list ()
480488 return super ().showEvent (event )
481489
482490 def build_model_list (self ) -> None :
483491 """Builds the model list (`self.model`) containing updatable clients"""
484- self .network_list_widget .blockSignals (True )
485- self .model .clear ()
486-
487- test :dict = copy .copy (self .saved_network )
488- if test .items ():
489- for ssid ,(signal ,is_saved ) in test .items ():
492+ self .panel .listView .blockSignals (True )
493+ self .reset_view_model ()
494+ saved_networks :dict = copy .copy (self .saved_network )
495+ if saved_networks .items ():
496+ for ssid ,(signal ,is_saved ) in saved_networks .items ():
490497 self .add_network_entry (ssid = ssid , signal = signal , is_saved = is_saved )
491-
492- self .network_list_widget .blockSignals (False )
498+ self ._setup_scrollbar ()
499+
500+ self .panel .listView .blockSignals (False )
493501
494502 def saved_wifi_option_selected (self ):
495503 _sender = self .sender ()
@@ -721,7 +729,7 @@ def evaluate_network_state(self, nm_state: str = "") -> None:
721729 self .info_box_load (False )
722730 self .panel .wifi_button .setEnabled (True )
723731 self .panel .hotspot_button .setEnabled (True )
724- self . repaint ()
732+
725733
726734
727735 if (
@@ -877,7 +885,6 @@ def ssid_item_clicked(self, item: ListItem) -> None:
877885 return
878886
879887 _current_ssid_name = item .text
880- #_current_ssid_name = self.saved_network.get(item.text, {})
881888 self .selected_item = copy .copy (item )
882889 if (
883890 _current_ssid_name in self .sdbus_network .get_saved_ssid_names ()
@@ -912,7 +919,6 @@ def update_network(
912919
913920 @QtCore .pyqtSlot (list , name = "finished-network-list-build" )
914921 def handle_network_list (self , data : typing .Dict ) -> None :
915- self .network_list_widget .blockSignals (True )
916922 for entry in data :
917923 if entry [0 ] == self .sdbus_network .hotspot_ssid :
918924 continue
@@ -922,8 +928,6 @@ def handle_network_list(self, data: typing.Dict) -> None:
922928 continue
923929 self .saved_network [entry [0 ]] = (entry [1 ], entry [2 ])
924930 self .build_model_list ()
925- self .network_list_widget .blockSignals (False )
926-
927931 self .evaluate_network_state ()
928932 QtCore .QTimer ().singleShot (10000 , lambda : self .network_list_worker .build ())
929933
@@ -937,7 +941,7 @@ def handle_button_click(self, ssid: str):
937941 self .panel .network_activate_btn .show ()
938942 else :
939943 self .panel .network_activate_btn .hide ()
940- self .panel .frame .repaint ()
944+ # self.panel.frame.repaint()
941945
942946 else :
943947 self .setCurrentIndex (self .indexOf (self .panel .add_network_page ))
@@ -1017,67 +1021,35 @@ def add_network_entry(self, ssid: str, signal: int, is_saved:str) -> None:
10171021 """Adds a new item to the list model"""
10181022
10191023 wifi_pixmap = self ._provider .get_pixmap (signal = signal , state = is_saved )
1020-
1024+ ssid = ssid if ssid is not "" else "UNKOWN"
10211025 item = ListItem (
10221026 text = ssid ,
10231027 left_icon = wifi_pixmap ,
10241028 right_text = is_saved ,
10251029 selected = False ,
10261030 allow_check = False ,
10271031 _lfontsize = 17 ,
1028- _rfontsize = 13 ,
1029- height = 70 ,
1032+ _rfontsize = 12 ,
1033+ height = 80 ,
10301034 )
10311035 self .model .add_item (item )
1036+
1037+ def _handle_scrollbar (self , value ):
1038+ # Block signals to avoid recursion
1039+ self .panel .verticalScrollBar .blockSignals (True )
1040+ self .panel .verticalScrollBar .setValue (value )
1041+ self .panel .verticalScrollBar .blockSignals (False )
10321042
1033- def _setupUI (self ) -> None :
1034-
1035- """Sets up the UI components and layout for the network window."""
1036-
1037- font_id = QtGui .QFontDatabase .addApplicationFont (
1038- ":/font/media/fonts for text/Momcake-Bold.ttf"
1043+ def _setup_scrollbar (self ) -> None :
1044+ self .panel .verticalScrollBar .setMinimum (
1045+ self .panel .listView .verticalScrollBar ().minimum ()
10391046 )
1040- font_family = QtGui .QFontDatabase .applicationFontFamilies (font_id )[0 ]
1041- sizePolicy = QtWidgets .QSizePolicy (
1042- QtWidgets .QSizePolicy .Policy .MinimumExpanding ,
1043- QtWidgets .QSizePolicy .Policy .MinimumExpanding ,
1047+ self .panel .verticalScrollBar .setMaximum (
1048+ self .panel .listView .verticalScrollBar ().maximum ()
1049+ )
1050+ self .panel .verticalScrollBar .setPageStep (
1051+ self .panel .listView .verticalScrollBar ().pageStep ()
10441052 )
1045- sizePolicy .setHorizontalStretch (1 )
1046- #sizePolicy.setVerticalStretch(1)
1047- self .setSizePolicy (sizePolicy )
1048- self .setMinimumSize (QtCore .QSize (800 , 500 ))
1049- #self.setMaximumSize(QtCore.QSize(800, 500))
1050- self .setLayoutDirection (QtCore .Qt .LayoutDirection .LeftToRight )
1051- self .main_content_layout = QtWidgets .QHBoxLayout ()
1052- self .main_content_layout .setAlignment (QtCore .Qt .AlignmentFlag .AlignTop )
1053-
1054- font = QtGui .QFont ()
1055- font .setFamily (font_family )
1056- font .setPointSize (24 )
1057-
1058- self .header_title = QtWidgets .QLabel (self )
1059- self .header_title .setMinimumSize (QtCore .QSize (100 , 60 ))
1060- self .header_title .setMaximumSize (QtCore .QSize (16777215 , 60 ))
1061- self .header_title .setFont (font )
1062-
1063- # Timer for loading screen timeout
1064- self ._load_timer = QtCore .QTimer (self )
1065-
1066- #Buttons frame for update buttons
1067- self .network_buttons_frame = BlocksCustomFrame ()
1068- #self.network_buttons_frame.setMinimumSize(QtCore.QSize(100, 100))
1069- #self.network_buttons_frame.setMaximumSize(QtCore.QSize(800, 450))
1070-
1071- #List widget for update buttons
1072- self .network_list_widget = QtWidgets .QListView (self .network_buttons_frame )
1073-
1074- self .network_buttons_layout = QtWidgets .QVBoxLayout ()
1075- self .network_buttons_layout .setContentsMargins (15 , 20 , 20 , 5 )
1076- self .network_buttons_layout .addWidget (self .network_list_widget , 0 , QtCore .Qt .AlignmentFlag .AlignBottom )
1077- self .network_buttons_frame .setLayout (self .network_buttons_layout )
1078-
1079- self .main_content_layout .addWidget (self .network_buttons_frame , 0 )
1080- self .setLayout (self .main_content_layout )
10811053
10821054 def build_network_list (self ) -> None :
10831055 """Build available/saved network list with optimized palette setup."""
@@ -1106,56 +1078,4 @@ def set_brush_for_all_groups(palette, role, color, style=QtCore.Qt.BrushStyle.So
11061078 set_brush_for_all_groups (palette , QtGui .QPalette .ColorRole .Link , (0 , 0 , 255 , 0 ))
11071079
11081080 # Apply palette
1109- self .network_list_widget .setPalette (palette )
1110-
1111- # General QListView setup
1112- self .network_list_widget .setFocusPolicy (QtCore .Qt .FocusPolicy .NoFocus )
1113- self .network_list_widget .setStyleSheet ("background-color:transparent" )
1114- self .network_list_widget .setFrameShape (QtWidgets .QFrame .Shape .NoFrame )
1115- self .network_list_widget .setFrameShadow (QtWidgets .QFrame .Shadow .Sunken )
1116- self .network_list_widget .setVerticalScrollBarPolicy (QtCore .Qt .ScrollBarPolicy .ScrollBarAsNeeded )
1117- self .network_list_widget .setHorizontalScrollBarPolicy (QtCore .Qt .ScrollBarPolicy .ScrollBarAlwaysOff )
1118- self .network_list_widget .setSizeAdjustPolicy (QtWidgets .QAbstractScrollArea .SizeAdjustPolicy .AdjustIgnored )
1119- self .network_list_widget .setAutoScroll (False )
1120- self .network_list_widget .setProperty ("showDropIndicator" , False )
1121- self .network_list_widget .setDefaultDropAction (QtCore .Qt .DropAction .IgnoreAction )
1122- self .network_list_widget .setAlternatingRowColors (False )
1123- self .network_list_widget .setSelectionMode (QtWidgets .QAbstractItemView .SelectionMode .NoSelection )
1124- self .network_list_widget .setSelectionBehavior (QtWidgets .QAbstractItemView .SelectionBehavior .SelectItems )
1125- self .network_list_widget .setVerticalScrollMode (QtWidgets .QAbstractItemView .ScrollMode .ScrollPerPixel )
1126- self .network_list_widget .setHorizontalScrollMode (QtWidgets .QAbstractItemView .ScrollMode .ScrollPerPixel )
1127- self .network_list_widget .setUniformItemSizes (True )
1128- self .network_list_widget .setSpacing (3 )
1129-
1130- viewport = self .network_list_widget .viewport ()
1131- QScroller .grabGesture (viewport , QScroller .ScrollerGestureType .TouchGesture )
1132- QScroller .grabGesture (viewport , QScroller .ScrollerGestureType .LeftMouseButtonGesture )
1133-
1134- scroller = QScroller .scroller (viewport )
1135- props = scroller .scrollerProperties ()
1136-
1137- props .setScrollMetric (
1138- QScrollerProperties .ScrollMetric .VerticalOvershootPolicy ,
1139- QVariant (QScrollerProperties .OvershootPolicy .OvershootAlwaysOff )
1140- )
1141- props .setScrollMetric (
1142- QScrollerProperties .ScrollMetric .OvershootDragResistanceFactor ,
1143- QVariant (1.0 )
1144- )
1145- props .setScrollMetric (
1146- QScrollerProperties .ScrollMetric .OvershootDragDistanceFactor ,
1147- QVariant (0.0 )
1148- )
1149- props .setScrollMetric (
1150- QScrollerProperties .ScrollMetric .OvershootScrollDistanceFactor ,
1151- QVariant (0.0 )
1152- )
1153- props .setScrollMetric (
1154- QScrollerProperties .ScrollMetric .OvershootScrollTime ,
1155- QVariant (0.0 )
1156- )
1157-
1158- scroller .setScrollerProperties (props )
1159-
1160- self .network_list_widget .setObjectName ("network_list_widget" )
1161- self .panel .nl_content_layout .addWidget (self .network_list_widget )
1081+ self .panel .listView .setPalette (palette )
0 commit comments