Skip to content

Commit 00e3ed8

Browse files
committed
Adding Radio Browser search window checkboxes
1 parent 3cc81a3 commit 00e3ed8

File tree

2 files changed

+460
-20
lines changed

2 files changed

+460
-20
lines changed

pyradio/browser.py

Lines changed: 89 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from .player import info_dict_to_list
1919
from .cjkwrap import cjklen, PY3
2020
from .countries import countries
21-
from .simple_curses_widgets import SimpleCursesLineEdit, SimpleCursesHorizontalPushButtons
21+
from .simple_curses_widgets import SimpleCursesLineEdit, SimpleCursesHorizontalPushButtons, SimpleCursesWidgetColumns, SimpleCursesCheckBox
2222

2323
import locale
2424
locale.setlocale(locale.LC_ALL, '') # set your locale
@@ -1106,6 +1106,7 @@ def do_search(self, parent=None, init=False):
11061106
class RadioBrowserInfoSearchWindow(object):
11071107

11081108
search_by_items = (
1109+
'No search term',
11091110
'Name',
11101111
'Tag',
11111112
'Country',
@@ -1115,7 +1116,7 @@ class RadioBrowserInfoSearchWindow(object):
11151116
)
11161117

11171118
sort_by_items = (
1118-
'None',
1119+
'No sorting',
11191120
'Random',
11201121
'Name',
11211122
'Tag',
@@ -1140,7 +1141,11 @@ def __init__(self,
11401141
self.maxY = self.maxX = 0
11411142
self.TITLE = ' Radio Browser Search '
11421143

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]
11441149

11451150
@property
11461151
def focus(self):
@@ -1173,14 +1178,15 @@ def show(self):
11731178
# self.maxY, self.maxX,
11741179
# Y, X
11751180
# )
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)
11841190

11851191
''' start displaying things '''
11861192
self._win.addstr(1, 2, 'Search for', curses.color_pair(5))
@@ -1206,31 +1212,95 @@ def show(self):
12061212
self._widgets[0].bracket = False
12071213
self._line_editor = self._widgets[0]
12081214
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+
)
12101228
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))
12121234
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+
)
12141249
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:
12151259
self._widgets[i] = None
12161260
''' add horizontal push buttons '''
12171261
self._h_buttons = SimpleCursesHorizontalPushButtons(
1218-
Y=6, captions=('OK', 'Cancel'),
1262+
Y=5 + len(self.search_by_items) + 2,
1263+
captions=('OK', 'Cancel'),
12191264
color_focused=curses.color_pair(9),
12201265
color=curses.color_pair(4),
12211266
bracket_color=curses.color_pair(5),
12221267
parent=self._win)
12231268
#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
12261278

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+
)
12271285
self._win.refresh()
12281286
self._update_focus()
12291287
if not self._too_small:
12301288
self._line_editor.show(self._win, opening=False)
12311289
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+
12341304
# self._refresh()
12351305

12361306
def _update_focus(self):

0 commit comments

Comments
 (0)