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
1917
2018logger = logging .getLogger ("logs/BlocksScreen.log" )
2119
22- < << << << HEAD
23-
24- class BuildNetworkList (QtCore .QThread ):
25- """Retrieves information from sdbus interface about scanned networks"""
26- == == == =
2720class NetworkScanRunnable (QRunnable ):
2821 """QRunnable task that performs network scanning using SdbusNetworkManagerAsync
29- >>>>>>> 9285fb7 (Refactor: Refac to MVC view with Controller being runnables on a threadpoll)
3022
3123 This runnable:
3224 - Triggers a network rescan via SdbusNetworkManagerAsync
@@ -222,9 +214,6 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget], /) -> None:
222214
223215 self .panel = Ui_wifi_stacked_page ()
224216 self .panel .setupUi (self )
225-
226- self ._setupUI ()
227-
228217 self ._provider = WifiIconProvider ()
229218 self .ongoing_update : bool = False
230219
@@ -243,16 +232,14 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget], /) -> None:
243232
244233 #View Models and Delegates
245234 self .model = EntryListModel ()
246- self .model .setParent (self .network_list_widget )
235+ self .model .setParent (self .panel . listView )
247236 self .entry_delegate = EntryDelegate ()
248- self .network_list_widget .setModel (self .model )
249- self .network_list_widget .setItemDelegate (self .entry_delegate )
237+ self .panel . listView .setModel (self .model )
238+ self .panel . listView .setItemDelegate (self .entry_delegate )
250239 self .entry_delegate .item_selected .connect (self .ssid_item_clicked )
251- self .panel .network_backButton .clicked .connect (self .reset_view_model )
252240
253241 # Network Scan
254242 self .build_network_list ()
255-
256243 self .network_list_worker = BuildNetworkList ()
257244 self .network_list_worker .finished_network_list_build .connect (
258245 self .handle_network_list
@@ -413,8 +400,15 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget], /) -> None:
413400
414401 self .network_list_worker .build ()
415402 self .request_network_scan .emit ()
403+ self .panel .listView .verticalScrollBar ().valueChanged .connect (
404+ self ._handle_scrollbar
405+ )
406+ self .panel .verticalScrollBar .valueChanged .connect (self ._handle_scrollbar )
407+ self .panel .verticalScrollBar .valueChanged .connect (
408+ lambda value : self .panel .listView .verticalScrollBar ().setValue (value )
409+ )
410+ self .panel .verticalScrollBar .show ()
416411 self .hide ()
417-
418412 self .info_box_load ()
419413
420414 self .qwerty = CustomQwertyKeyboard (self )
@@ -477,20 +471,28 @@ def deleteLater(self) -> None:
477471
478472 def showEvent (self , event : QtGui .QShowEvent | None ) -> None :
479473 """Re-add clients to update list"""
474+ # Block all touch events so multitouch is ignored
475+ if event .type () in (
476+ QtCore .QEvent .Type .TouchBegin ,
477+ QtCore .QEvent .Type .TouchUpdate ,
478+ QtCore .QEvent .Type .TouchEnd
479+ ):
480+ return True # ignore the event entirely
481+
480482 self .build_model_list ()
481483 return super ().showEvent (event )
482484
483485 def build_model_list (self ) -> None :
484486 """Builds the model list (`self.model`) containing updatable clients"""
485- self .network_list_widget .blockSignals (True )
486- self .model .clear ()
487-
488- test :dict = copy .copy (self .saved_network )
489- if test .items ():
490- for ssid ,(signal ,is_saved ) in test .items ():
487+ self .panel .listView .blockSignals (True )
488+ self .reset_view_model ()
489+ saved_networks :dict = copy .copy (self .saved_network )
490+ if saved_networks .items ():
491+ for ssid ,(signal ,is_saved ) in saved_networks .items ():
491492 self .add_network_entry (ssid = ssid , signal = signal , is_saved = is_saved )
492-
493- self .network_list_widget .blockSignals (False )
493+ self ._setup_scrollbar ()
494+
495+ self .panel .listView .blockSignals (False )
494496
495497 def saved_wifi_option_selected (self ):
496498 """Handle connect/delete network button clicks"""
@@ -739,6 +741,7 @@ def evaluate_network_state(self, nm_state: str = "") -> None:
739741 self .panel .hotspot_button .setEnabled (True )
740742 self .repaint ()
741743
744+
742745 if (
743746 wifi_btn .state == wifi_btn .State .OFF
744747 and hotspot_btn .state == hotspot_btn .State .OFF
@@ -905,15 +908,9 @@ def add_network(self) -> None:
905908 self .panel .add_network_validation_button .setEnabled (True )
906909 self .panel .add_network_validation_button .repaint ()
907910 self .popup .new_message (message_type = Popup .MessageType .ERROR , message = message )
908- < << << << HEAD
909-
910- @QtCore .pyqtSlot (QtWidgets .QListWidgetItem , name = "ssid_item_clicked" )
911- def ssid_item_clicked (self , item : QtWidgets .QListWidgetItem ) -> None :
912- == == == =
913911
914912 @QtCore .pyqtSlot (ListItem , name = "ssid_item_clicked" )
915913 def ssid_item_clicked (self , item : ListItem ) -> None :
916- >> >> >> > da41c34 (refactor : change network list to listview )
917914 """Handles when a network is clicked on the QListWidget.
918915
919916 Args:
@@ -923,7 +920,6 @@ def ssid_item_clicked(self, item: ListItem) -> None:
923920 return
924921
925922 _current_ssid_name = item .text
926- #_current_ssid_name = self.saved_network.get(item.text, {})
927923 self .selected_item = copy .copy (item )
928924 if (
929925 _current_ssid_name in self .sdbus_network .get_saved_ssid_names ()
@@ -964,7 +960,6 @@ def handle_network_list(self, data: typing.List[typing.Tuple]) -> None:
964960 scroll_bar_position = self .network_list_widget .verticalScrollBar ().value ()
965961== == == =
966962 def handle_network_list (self , data : typing .Dict ) -> None :
967- >> >> >> > da41c34 (refactor : change network list to listview )
968963 self .network_list_widget .blockSignals (True )
969964 for entry in data :
970965 if entry [0 ] == self .sdbus_network .hotspot_ssid :
@@ -975,8 +970,6 @@ def handle_network_list(self, data: typing.Dict) -> None:
975970 continue
976971 self .saved_network [entry [0 ]] = (entry [1 ], entry [2 ])
977972 self .build_model_list ()
978- self .network_list_widget .blockSignals (False )
979-
980973 self .evaluate_network_state ()
981974 QtCore .QTimer ().singleShot (10000 , lambda : self .network_list_worker .build ())
982975
@@ -990,7 +983,7 @@ def handle_button_click(self, ssid: str):
990983 self .panel .network_activate_btn .show ()
991984 else :
992985 self .panel .network_activate_btn .hide ()
993- self .panel .frame .repaint ()
986+ # self.panel.frame.repaint()
994987
995988 else :
996989 self .setCurrentIndex (self .indexOf (self .panel .add_network_page ))
@@ -1070,67 +1063,35 @@ def add_network_entry(self, ssid: str, signal: int, is_saved:str) -> None:
10701063 """Adds a new item to the list model"""
10711064
10721065 wifi_pixmap = self ._provider .get_pixmap (signal = signal , state = is_saved )
1073-
1066+ ssid = ssid if ssid is not "" else "UNKOWN"
10741067 item = ListItem (
10751068 text = ssid ,
10761069 left_icon = wifi_pixmap ,
10771070 right_text = is_saved ,
10781071 selected = False ,
10791072 allow_check = False ,
10801073 _lfontsize = 17 ,
1081- _rfontsize = 13 ,
1082- height = 70 ,
1074+ _rfontsize = 12 ,
1075+ height = 80 ,
10831076 )
10841077 self .model .add_item (item )
1078+
1079+ def _handle_scrollbar (self , value ):
1080+ # Block signals to avoid recursion
1081+ self .panel .verticalScrollBar .blockSignals (True )
1082+ self .panel .verticalScrollBar .setValue (value )
1083+ self .panel .verticalScrollBar .blockSignals (False )
10851084
1086- def _setupUI (self ) -> None :
1087-
1088- """Sets up the UI components and layout for the network window."""
1089-
1090- font_id = QtGui .QFontDatabase .addApplicationFont (
1091- ":/font/media/fonts for text/Momcake-Bold.ttf"
1085+ def _setup_scrollbar (self ) -> None :
1086+ self .panel .verticalScrollBar .setMinimum (
1087+ self .panel .listView .verticalScrollBar ().minimum ()
10921088 )
1093- font_family = QtGui .QFontDatabase .applicationFontFamilies (font_id )[0 ]
1094- sizePolicy = QtWidgets .QSizePolicy (
1095- QtWidgets .QSizePolicy .Policy .MinimumExpanding ,
1096- QtWidgets .QSizePolicy .Policy .MinimumExpanding ,
1089+ self .panel .verticalScrollBar .setMaximum (
1090+ self .panel .listView .verticalScrollBar ().maximum ()
1091+ )
1092+ self .panel .verticalScrollBar .setPageStep (
1093+ self .panel .listView .verticalScrollBar ().pageStep ()
10971094 )
1098- sizePolicy .setHorizontalStretch (1 )
1099- #sizePolicy.setVerticalStretch(1)
1100- self .setSizePolicy (sizePolicy )
1101- self .setMinimumSize (QtCore .QSize (800 , 500 ))
1102- #self.setMaximumSize(QtCore.QSize(800, 500))
1103- self .setLayoutDirection (QtCore .Qt .LayoutDirection .LeftToRight )
1104- self .main_content_layout = QtWidgets .QHBoxLayout ()
1105- self .main_content_layout .setAlignment (QtCore .Qt .AlignmentFlag .AlignTop )
1106-
1107- font = QtGui .QFont ()
1108- font .setFamily (font_family )
1109- font .setPointSize (24 )
1110-
1111- self .header_title = QtWidgets .QLabel (self )
1112- self .header_title .setMinimumSize (QtCore .QSize (100 , 60 ))
1113- self .header_title .setMaximumSize (QtCore .QSize (16777215 , 60 ))
1114- self .header_title .setFont (font )
1115-
1116- # Timer for loading screen timeout
1117- self ._load_timer = QtCore .QTimer (self )
1118-
1119- #Buttons frame for update buttons
1120- self .network_buttons_frame = BlocksCustomFrame ()
1121- #self.network_buttons_frame.setMinimumSize(QtCore.QSize(100, 100))
1122- #self.network_buttons_frame.setMaximumSize(QtCore.QSize(800, 450))
1123-
1124- #List widget for update buttons
1125- self .network_list_widget = QtWidgets .QListView (self .network_buttons_frame )
1126-
1127- self .network_buttons_layout = QtWidgets .QVBoxLayout ()
1128- self .network_buttons_layout .setContentsMargins (15 , 20 , 20 , 5 )
1129- self .network_buttons_layout .addWidget (self .network_list_widget , 0 , QtCore .Qt .AlignmentFlag .AlignBottom )
1130- self .network_buttons_frame .setLayout (self .network_buttons_layout )
1131-
1132- self .main_content_layout .addWidget (self .network_buttons_frame , 0 )
1133- self .setLayout (self .main_content_layout )
11341095
11351096 def build_network_list (self ) -> None :
11361097 """Build available/saved network list with optimized palette setup."""
@@ -1159,56 +1120,4 @@ def set_brush_for_all_groups(palette, role, color, style=QtCore.Qt.BrushStyle.So
11591120 set_brush_for_all_groups (palette , QtGui .QPalette .ColorRole .Link , (0 , 0 , 255 , 0 ))
11601121
11611122 # Apply palette
1162- self .network_list_widget .setPalette (palette )
1163-
1164- # General QListView setup
1165- self .network_list_widget .setFocusPolicy (QtCore .Qt .FocusPolicy .NoFocus )
1166- self .network_list_widget .setStyleSheet ("background-color:transparent" )
1167- self .network_list_widget .setFrameShape (QtWidgets .QFrame .Shape .NoFrame )
1168- self .network_list_widget .setFrameShadow (QtWidgets .QFrame .Shadow .Sunken )
1169- self .network_list_widget .setVerticalScrollBarPolicy (QtCore .Qt .ScrollBarPolicy .ScrollBarAsNeeded )
1170- self .network_list_widget .setHorizontalScrollBarPolicy (QtCore .Qt .ScrollBarPolicy .ScrollBarAlwaysOff )
1171- self .network_list_widget .setSizeAdjustPolicy (QtWidgets .QAbstractScrollArea .SizeAdjustPolicy .AdjustIgnored )
1172- self .network_list_widget .setAutoScroll (False )
1173- self .network_list_widget .setProperty ("showDropIndicator" , False )
1174- self .network_list_widget .setDefaultDropAction (QtCore .Qt .DropAction .IgnoreAction )
1175- self .network_list_widget .setAlternatingRowColors (False )
1176- self .network_list_widget .setSelectionMode (QtWidgets .QAbstractItemView .SelectionMode .NoSelection )
1177- self .network_list_widget .setSelectionBehavior (QtWidgets .QAbstractItemView .SelectionBehavior .SelectItems )
1178- self .network_list_widget .setVerticalScrollMode (QtWidgets .QAbstractItemView .ScrollMode .ScrollPerPixel )
1179- self .network_list_widget .setHorizontalScrollMode (QtWidgets .QAbstractItemView .ScrollMode .ScrollPerPixel )
1180- self .network_list_widget .setUniformItemSizes (True )
1181- self .network_list_widget .setSpacing (3 )
1182-
1183- viewport = self .network_list_widget .viewport ()
1184- QScroller .grabGesture (viewport , QScroller .ScrollerGestureType .TouchGesture )
1185- QScroller .grabGesture (viewport , QScroller .ScrollerGestureType .LeftMouseButtonGesture )
1186-
1187- scroller = QScroller .scroller (viewport )
1188- props = scroller .scrollerProperties ()
1189-
1190- props .setScrollMetric (
1191- QScrollerProperties .ScrollMetric .VerticalOvershootPolicy ,
1192- QVariant (QScrollerProperties .OvershootPolicy .OvershootAlwaysOff )
1193- )
1194- props .setScrollMetric (
1195- QScrollerProperties .ScrollMetric .OvershootDragResistanceFactor ,
1196- QVariant (1.0 )
1197- )
1198- props .setScrollMetric (
1199- QScrollerProperties .ScrollMetric .OvershootDragDistanceFactor ,
1200- QVariant (0.0 )
1201- )
1202- props .setScrollMetric (
1203- QScrollerProperties .ScrollMetric .OvershootScrollDistanceFactor ,
1204- QVariant (0.0 )
1205- )
1206- props .setScrollMetric (
1207- QScrollerProperties .ScrollMetric .OvershootScrollTime ,
1208- QVariant (0.0 )
1209- )
1210-
1211- scroller .setScrollerProperties (props )
1212-
1213- self .network_list_widget .setObjectName ("network_list_widget" )
1214- self .panel .nl_content_layout .addWidget (self .network_list_widget )
1123+ self .panel .listView .setPalette (palette )
0 commit comments