18
18
from .player import info_dict_to_list
19
19
from .cjkwrap import cjklen , PY3
20
20
from .countries import countries
21
- from .simple_curses_widgets import SimpleCursesLineEdit , SimpleCursesHorizontalPushButtons
21
+ from .simple_curses_widgets import SimpleCursesLineEdit , SimpleCursesHorizontalPushButtons , SimpleCursesWidgetColumns , SimpleCursesCheckBox
22
22
23
23
import locale
24
24
locale .setlocale (locale .LC_ALL , '' ) # set your locale
@@ -1106,6 +1106,7 @@ def do_search(self, parent=None, init=False):
1106
1106
class RadioBrowserInfoSearchWindow (object ):
1107
1107
1108
1108
search_by_items = (
1109
+ 'No search term' ,
1109
1110
'Name' ,
1110
1111
'Tag' ,
1111
1112
'Country' ,
@@ -1115,7 +1116,7 @@ class RadioBrowserInfoSearchWindow(object):
1115
1116
)
1116
1117
1117
1118
sort_by_items = (
1118
- 'None ' ,
1119
+ 'No sorting ' ,
1119
1120
'Random' ,
1120
1121
'Name' ,
1121
1122
'Tag' ,
@@ -1140,7 +1141,11 @@ def __init__(self,
1140
1141
self .maxY = self .maxX = 0
1141
1142
self .TITLE = ' Radio Browser Search '
1142
1143
1143
- self ._widgets = [ None , None , None , None , None ]
1144
+ ''' we have two columns;
1145
+ this is the width of each of them
1146
+ '''
1147
+ self ._half_width = 0
1148
+ self ._widgets = [ None , None , None , None , None , None , None , None ]
1144
1149
1145
1150
@property
1146
1151
def focus (self ):
@@ -1173,14 +1178,15 @@ def show(self):
1173
1178
# self.maxY, self.maxX,
1174
1179
# Y, X
1175
1180
# )
1176
- self ._win .bkgdset (' ' , curses .color_pair (5 ))
1177
- # self._win.erase()
1178
- self ._win .box ()
1179
- self ._win .addstr (0 , int ((self .maxX - len (self .TITLE )) / 2 ),
1180
- self .TITLE ,
1181
- curses .color_pair (4 ))
1182
- self ._win .refresh ()
1183
- self ._erase_win (self .maxY , self .maxX , self .Y , self .X )
1181
+ self ._half_width = int ((self .maxX - 2 ) / 2 ) - 3
1182
+ self ._win .bkgdset (' ' , curses .color_pair (5 ))
1183
+ # self._win.erase()
1184
+ self ._win .box ()
1185
+ self ._win .addstr (0 , int ((self .maxX - len (self .TITLE )) / 2 ),
1186
+ self .TITLE ,
1187
+ curses .color_pair (4 ))
1188
+ self ._win .refresh ()
1189
+ self ._erase_win (self .maxY , self .maxX , self .Y , self .X )
1184
1190
1185
1191
''' start displaying things '''
1186
1192
self ._win .addstr (1 , 2 , 'Search for' , curses .color_pair (5 ))
@@ -1206,31 +1212,95 @@ def show(self):
1206
1212
self ._widgets [0 ].bracket = False
1207
1213
self ._line_editor = self ._widgets [0 ]
1208
1214
elif i == 1 :
1209
- self ._widgets [i ] = None
1215
+ ''' search by '''
1216
+ self ._widgets [i ] = SimpleCursesWidgetColumns (
1217
+ Y = 5 , X = 3 , window = self ._win ,
1218
+ selection = 0 ,
1219
+ active = 0 ,
1220
+ items = self .search_by_items ,
1221
+ color = curses .color_pair (5 ),
1222
+ color_active = curses .color_pair (4 ),
1223
+ color_cursor_selection = curses .color_pair (6 ),
1224
+ color_cursor_active = curses .color_pair (9 ),
1225
+ margin = 1 ,
1226
+ max_width = self ._half_width
1227
+ )
1210
1228
elif i == 2 :
1211
- self ._widgets [i ] = None
1229
+ ''' search exact '''
1230
+ self ._widgets [2 ] = SimpleCursesCheckBox (
1231
+ self ._widgets [1 ].Y + self ._widgets [1 ].height + 2 , 2 ,
1232
+ 'Exact match' ,
1233
+ curses .color_pair (9 ), curses .color_pair (4 ), curses .color_pair (5 ))
1212
1234
elif i == 3 :
1213
- self ._widgets [i ] = None
1235
+ ''' sort by '''
1236
+ self ._widgets [i ] = SimpleCursesWidgetColumns (
1237
+ Y = 5 , X = self .maxX - 1 - self ._half_width ,
1238
+ max_width = self ._half_width ,
1239
+ window = self ._win ,
1240
+ selection = 0 ,
1241
+ active = 0 ,
1242
+ items = self .sort_by_items ,
1243
+ color = curses .color_pair (5 ),
1244
+ color_active = curses .color_pair (4 ),
1245
+ color_cursor_selection = curses .color_pair (6 ),
1246
+ color_cursor_active = curses .color_pair (9 ),
1247
+ margin = 1
1248
+ )
1214
1249
elif i == 4 :
1250
+ '''' sort ascending / descending '''
1251
+ self ._widgets [4 ] = SimpleCursesCheckBox (
1252
+ self ._widgets [3 ].Y + self ._widgets [3 ].height + 2 , self ._widgets [3 ].X - 2 + self ._widgets [3 ].margin ,
1253
+ 'Sort descending' ,
1254
+ curses .color_pair (9 ), curses .color_pair (4 ), curses .color_pair (5 ))
1255
+ elif i == 5 :
1256
+ '''' limit results '''
1257
+ self ._widgets [5 ] = None
1258
+ elif i == 6 :
1215
1259
self ._widgets [i ] = None
1216
1260
''' add horizontal push buttons '''
1217
1261
self ._h_buttons = SimpleCursesHorizontalPushButtons (
1218
- Y = 6 , captions = ('OK' , 'Cancel' ),
1262
+ Y = 5 + len (self .search_by_items ) + 2 ,
1263
+ captions = ('OK' , 'Cancel' ),
1219
1264
color_focused = curses .color_pair (9 ),
1220
1265
color = curses .color_pair (4 ),
1221
1266
bracket_color = curses .color_pair (5 ),
1222
1267
parent = self ._win )
1223
1268
#self._h_buttons.calculate_buttons_position()
1224
- self ._widgets [4 ], self ._widgets [5 ] = self ._h_buttons .buttons
1225
- self ._widgets [4 ]._focused = self ._widgets [5 ].focused = False
1269
+ self ._widgets [6 ], self ._widgets [7 ] = self ._h_buttons .buttons
1270
+ self ._widgets [6 ]._focused = self ._widgets [7 ].focused = False
1271
+ else :
1272
+ if i in (1 , 3 ):
1273
+ ''' update lists' window '''
1274
+ if i == 3 :
1275
+ self ._widgets [3 ].X = self .maxX - 1 - self ._half_width
1276
+ self ._widgets [i ].window = self ._win
1277
+ self ._widgets [i ].max_width = self ._half_width
1226
1278
1279
+ self ._win .addstr (
1280
+ 4 ,
1281
+ self ._widgets [3 ].X - 2 + self ._widgets [3 ].margin ,
1282
+ 'Sort by' ,
1283
+ curses .color_pair (5 )
1284
+ )
1227
1285
self ._win .refresh ()
1228
1286
self ._update_focus ()
1229
1287
if not self ._too_small :
1230
1288
self ._line_editor .show (self ._win , opening = False )
1231
1289
self ._h_buttons .calculate_buttons_position ()
1232
- self ._widgets [1 ].show ()
1233
- self ._widgets [2 ].show ()
1290
+ for n in range (1 , len (self ._widgets )):
1291
+ if self ._widgets [n ]:
1292
+ if i in (2 , 4 ):
1293
+ if i == 2 :
1294
+ self ._widgets [2 ].Y = self ._widgets [1 ].Y + self ._widgets [1 ].height + 2
1295
+ else :
1296
+ self ._widgets [4 ].Y = self ._widgets [3 ].Y + self ._widgets [3 ].height + 2
1297
+ self ._widgets [4 ].X = self ._widgets [3 ].X - 2 + self ._widgets [3 ].margin
1298
+ self ._widgets [i ].window = self ._win
1299
+ self ._widgets [i ].resize ()
1300
+ else :
1301
+ self ._widgets [n ].show ()
1302
+ self ._win .refresh ()
1303
+
1234
1304
# self._refresh()
1235
1305
1236
1306
def _update_focus (self ):
0 commit comments