22
33from PySide6 .QtCore import QEvent , QSize , Qt
44from PySide6 .QtGui import QColor , QIcon , QPainter
5- from PySide6 .QtWidgets import QApplication , QStackedWidget , QVBoxLayout , QWidget
5+ from PySide6 .QtWidgets import QApplication , QHBoxLayout , QStackedWidget , QVBoxLayout , QWidget
66from qfluentwidgets import (
7- FluentIcon , InfoBar , InfoBarPosition , PrimaryToolButton ,
7+ FluentIcon , InfoBar , InfoBarPosition , PrimaryToolButton , SearchLineEdit ,
88 Theme , isDarkTheme , qconfig ,
99)
1010
@@ -38,6 +38,7 @@ def __init__(self):
3838 )
3939 self .taskPage = MobileTaskPage (self )
4040 self .settingPage = MobileSettingPage (self )
41+ self .searchEdit = SearchLineEdit (self )
4142 self .addButton = PrimaryToolButton (FluentIcon .ADD , self )
4243 self .vBoxLayout = QVBoxLayout (self )
4344
@@ -50,13 +51,16 @@ def __init__(self):
5051 self ._bind ()
5152 self ._updatePermissionBanner ()
5253 self ._updateAddButtonVisibility ()
54+ self ._updateSearchTarget (self .taskPage )
5355
5456 def _initWidget (self ):
5557 self .setObjectName ("MobileMainWindow" )
5658 self .setWindowIcon (QIcon (":/image/logo.png" ))
5759 self .setWindowTitle ("Ghost Downloader" )
5860 self .taskPage .setObjectName ("taskInterface" )
5961 self .settingPage .setObjectName ("settingInterface" )
62+ self .searchEdit .setClearButtonEnabled (True )
63+ self .taskPage .searchLineEdit .hide ()
6064 self .addButton .setFixedSize (56 , 56 )
6165 self .addButton .setIconSize (QSize (22 , 22 ))
6266 self .addButton .raise_ ()
@@ -68,12 +72,21 @@ def _initLayout(self):
6872 self .vBoxLayout .setSpacing (0 )
6973 self .vBoxLayout .addWidget (self .permissionBanner , 0 )
7074 self .vBoxLayout .addWidget (self .notificationBanner , 0 )
75+ searchBar = QWidget (self )
76+ searchBarLayout = QHBoxLayout (searchBar )
77+ searchBarLayout .setContentsMargins (10 , 6 , 10 , 6 )
78+ searchBarLayout .addWidget (self .searchEdit )
79+ self .vBoxLayout .addWidget (searchBar , 0 )
7180 self .vBoxLayout .addWidget (self .stackedWidget , 1 )
7281 self .vBoxLayout .addWidget (self .navigationBar , 0 )
7382
7483 def _bind (self ):
7584 self .navigationBar .currentChanged .connect (self .stackedWidget .setCurrentIndex )
7685 self .navigationBar .currentChanged .connect (lambda * _ : self ._updateAddButtonVisibility ())
86+ self .navigationBar .currentChanged .connect (
87+ lambda index : self ._updateSearchTarget (self .stackedWidget .widget (index ))
88+ )
89+ self .searchEdit .textChanged .connect (self ._onSearchTextChanged )
7790 self .taskPage .selectionModeChanged .connect (lambda * _ : self ._updateAddButtonVisibility ())
7891 self .addButton .clicked .connect (self ._showAddTaskDialog )
7992 self ._draft .taskConfirmed .connect (taskService .add )
@@ -87,6 +100,19 @@ def _addPage(self, page: QWidget, icon: FluentIcon, text: str):
87100 self .stackedWidget .addWidget (page )
88101 self .navigationBar .addItem (icon , text )
89102
103+ def _onSearchTextChanged (self , text : str ) -> None :
104+ page = self .stackedWidget .currentWidget ()
105+ if hasattr (page , 'setSearchText' ):
106+ page .setSearchText (text )
107+
108+ def _updateSearchTarget (self , page : QWidget ) -> None :
109+ self .searchEdit .clear ()
110+ if hasattr (page , 'setSearchText' ):
111+ self .searchEdit .setPlaceholderText (page .searchPlaceholder )
112+ self .searchEdit .show ()
113+ else :
114+ self .searchEdit .hide ()
115+
90116 def _onSystemColorSchemeChanged (self , colorScheme ):
91117 if cfg .themeMode .value != Theme .AUTO :
92118 return
0 commit comments