Skip to content

Commit a689e21

Browse files
committed
adding search function for Group Selection window
1 parent 9adcb6f commit a689e21

File tree

3 files changed

+79
-71
lines changed

3 files changed

+79
-71
lines changed

pyradio/radio.py

+38-22
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ def __init__(self, pyradio_config,
482482
self.ws.SEARCH_THEME_MODE: self._redisplay_search_show,
483483
self.ws.SEARCH_SELECT_STATION_MODE: self._redisplay_search_show,
484484
self.ws.SEARCH_SELECT_PLAYLIST_MODE: self._redisplay_search_show,
485+
self.ws.GROUP_SEARCH_MODE: self._redisplay_search_show,
485486
self.ws.THEME_MODE: self._redisplay_theme_mode,
486487
self.ws.PLAYLIST_RECOVERY_ERROR_MODE: self._print_playlist_recovery_error,
487488
self.ws.ASK_TO_CREATE_NEW_THEME_MODE: self._redisplay_ask_to_create_new_theme,
@@ -585,7 +586,7 @@ def __init__(self, pyradio_config,
585586
1 - playlist search
586587
2 - theme search
587588
'''
588-
self._search_classes = [None, None, None, None]
589+
self._search_classes = [None, None, None, None, None]
589590

590591
''' points to list in which the search will be performed '''
591592
self._search_list = []
@@ -598,6 +599,7 @@ def __init__(self, pyradio_config,
598599
self.ws.SELECT_PLAYLIST_MODE: 1,
599600
self.ws.THEME_MODE: 2,
600601
self.ws.PASTE_MODE: 3,
602+
self.ws.GROUP_SELECTION_MODE: 4,
601603
}
602604

603605
''' which search mode opens from each allowed mode '''
@@ -608,6 +610,7 @@ def __init__(self, pyradio_config,
608610
self.ws.SELECT_PLAYLIST_MODE: self.ws.SEARCH_SELECT_PLAYLIST_MODE,
609611
self.ws.PASTE_MODE: self.ws.SEARCH_SELECT_PLAYLIST_MODE,
610612
self.ws.SELECT_STATION_MODE: self.ws.SEARCH_SELECT_STATION_MODE,
613+
self.ws.GROUP_SELECTION_MODE: self.ws.GROUP_SEARCH_MODE,
611614
}
612615

613616
''' search modes opened from main windows '''
@@ -5038,6 +5041,8 @@ def _apply_main_windows(ret):
50385041
self._playlist_select_win.setPlaylistById(ret, adjust=True)
50395042
elif self.ws.operation_mode == self.ws.SELECT_STATION_MODE:
50405043
self._station_select_win.setPlaylistById(ret, adjust=True)
5044+
elif self.ws.operation_mode in (self.ws.GROUP_SELECTION_MODE, self.ws.GROUP_SEARCH_MODE):
5045+
self._group_selection_window.selection = ret
50415046
self.refreshBody()
50425047

50435048
else:
@@ -5050,6 +5055,8 @@ def _apply_main_windows(ret):
50505055
self._playlist_select_win.setPlaylistById(ret, adjust=True)
50515056
elif self.ws.previous_operation_mode == self.ws.SELECT_STATION_MODE:
50525057
self._station_select_win.setPlaylistById(ret, adjust=True)
5058+
elif self.ws.operation_mode in (self.ws.GROUP_SELECTION_MODE, self.ws.GROUP_SEARCH_MODE):
5059+
self._group_selection_window.selection = ret
50535060
self.ws.close_window()
50545061
self.refreshBody()
50555062

@@ -6699,27 +6706,6 @@ def keypress(self, char):
66996706
self._update_stations_result()
67006707
return
67016708

6702-
elif self.ws.operation_mode == self.ws.GROUP_SELECTION_MODE:
6703-
ret = self._group_selection_window.keypress(char)
6704-
if ret <= 0:
6705-
if ret == 0:
6706-
ret = self._groups[self._group_selection_window.selection][0]
6707-
self.setStation(ret)
6708-
self._put_selection_in_the_middle(force=True)
6709-
self.refreshBody()
6710-
self.selections[self.ws.NORMAL_MODE] = [self.selection,
6711-
self.startPos,
6712-
self.playing,
6713-
self.stations]
6714-
self._group_selection_window = None
6715-
self._groups = None
6716-
self.ws.close_window()
6717-
self.refreshBody()
6718-
elif ret == 2:
6719-
''' show help '''
6720-
pass
6721-
return
6722-
67236709
elif self.ws.operation_mode == self.ws.CHANGE_PLAYER_MODE:
67246710
ret = self._change_player.keypress(char)
67256711
if ret is None:
@@ -7757,6 +7743,27 @@ def keypress(self, char):
77577743
self.refreshBody()
77587744
return
77597745

7746+
elif self.ws.operation_mode == self.ws.GROUP_SELECTION_MODE:
7747+
ret = self._group_selection_window.keypress(char)
7748+
if ret <= 0:
7749+
if ret == 0:
7750+
ret = self._groups[self._group_selection_window.selection][0]
7751+
self.setStation(ret)
7752+
self._put_selection_in_the_middle(force=True)
7753+
self.refreshBody()
7754+
self.selections[self.ws.NORMAL_MODE] = [self.selection,
7755+
self.startPos,
7756+
self.playing,
7757+
self.stations]
7758+
self._group_selection_window = None
7759+
self._groups = None
7760+
self.ws.close_window()
7761+
self.refreshBody()
7762+
elif ret == 2:
7763+
''' show help '''
7764+
pass
7765+
return
7766+
77607767
elif self.ws.operation_mode == self.ws.UPDATE_NOTIFICATION_OK_MODE:
77617768
if char in self._global_functions.keys():
77627769
self._global_functions[char]()
@@ -7807,6 +7814,9 @@ def keypress(self, char):
78077814
elif self.ws.operation_mode == self.ws.SELECT_STATION_MODE:
78087815
self._search_list = self._station_select_win._items
78097816
sel = self._station_select_win._selected_playlist_id + 1
7817+
elif self.ws.operation_mode == self.ws.GROUP_SELECTION_MODE:
7818+
self._search_list = self._group_selection_window._items
7819+
sel = self._group_selection_window.selection + 1
78107820

78117821
if self.search.string:
78127822
if sel == len(self._search_list):
@@ -7845,6 +7855,9 @@ def keypress(self, char):
78457855
elif self.ws.operation_mode == self.ws.SELECT_STATION_MODE:
78467856
self._search_list = self._station_select_win._items
78477857
sel = self._station_select_win._selected_playlist_id - 1
7858+
elif self.ws.operation_mode == self.ws.GROUP_SELECTION_MODE:
7859+
self._search_list = self._group_selection_window._items
7860+
sel = self._group_selection_window.selection - 1
78487861

78497862
if self.search.string:
78507863
if sel < 0:
@@ -7883,6 +7896,9 @@ def keypress(self, char):
78837896
elif self.ws.previous_operation_mode == self.ws.SELECT_STATION_MODE:
78847897
self._search_list = self._station_select_win._items
78857898
sel = self._station_select_win._selected_playlist_id + 1
7899+
elif self.ws.previous_operation_mode == self.ws.GROUP_SELECTION_MODE:
7900+
self._search_list = self._group_selection_window._items
7901+
sel = self._group_selection_window.selection + 1
78867902

78877903
''' perform search '''
78887904
if sel == len(self._search_list):

pyradio/simple_curses_widgets.py

+39-49
Original file line numberDiff line numberDiff line change
@@ -1818,12 +1818,13 @@ def _set_selection(self, a_sel):
18181818
self._old_start_pos = self._start_pos
18191819

18201820
self._selection = a_sel
1821+
self._make_sure_selection_is_visible()
18211822
self._verify_selection_not_on_caption()
18221823

18231824
# log_it('last line = {}'.format(self._start_pos + self._maxY))
18241825
if a_sel < self._start_pos or a_sel >= self._start_pos + self._body_maxY:
18251826
self._start_pos = self._selection - int(self._body_maxY / 2) + 1
1826-
self.show()
1827+
self._refresh()
18271828
else:
18281829
self._toggle_selected_item()
18291830

@@ -1940,29 +1941,39 @@ def show(self, parent=None):
19401941
the window to print output
19411942
'''
19421943
# log_it('show')
1944+
new_win = False
19431945
if (not self._showed or parent != self._parent) \
19441946
and parent is not None:
19451947
# log_it('\n\nhere\n\n')
19461948
# log_it('got new parent')
19471949
self._parent = parent
19481950
self._get_window()
1949-
self._win.bkgdset(' ', self._color_border)
1950-
self._win.erase()
1951-
self._win.box()
19521951
# logger.error('too_small = {}'.format(self._too_small))
1953-
if not self._too_small:
1954-
self._win.addstr(
1955-
0, int((self._maxX-len(self._title))/2),
1956-
self._title, self._color_title
1957-
)
19581952
self._calculate_max_height_max_width()
1953+
new_win = True
19591954

19601955
if self._too_small:
19611956
self._win.addstr(1, 1, ' Window is', self._color)
19621957
self._win.addstr(2, 1, ' Too small', self._color)
19631958
self._win.refresh()
19641959
return
19651960

1961+
if new_win:
1962+
self._verify_selection_not_on_caption()
1963+
self._make_sure_selection_is_visible()
1964+
self.show()
1965+
return
1966+
1967+
self._win.bkgdset(' ', self._color_border)
1968+
self._win.erase()
1969+
self._win.box()
1970+
self._win.addstr(
1971+
0, int((self._maxX-len(self._title))/2),
1972+
self._title, self._color_title
1973+
)
1974+
self._refresh()
1975+
1976+
def _refresh(self):
19661977
if len(self._items) == 0:
19671978
self._win.hline(self._Y, self._X, ' ', self._maxX, self._color)
19681979
self._win.refresh()
@@ -2111,7 +2122,7 @@ def delete_item(self, target):
21112122

21122123
self._verify_selection_not_on_caption(mov)
21132124
if not self._make_sure_selection_is_visible():
2114-
self.show()
2125+
self._refresh()
21152126

21162127
return len(self._items)
21172128

@@ -2190,28 +2201,6 @@ def keypress(self, char):
21902201
if self._too_small:
21912202
return 1
21922203

2193-
if char == ord('z'):
2194-
self.selection = 10
2195-
return 1
2196-
2197-
if char == ord('d'):
2198-
self.selection = 50
2199-
return 1
2200-
2201-
if char == ord('c'):
2202-
self.selection = 100
2203-
return 1
2204-
2205-
if char == ord('e'):
2206-
self.selection = 15
2207-
return 1
2208-
2209-
if char == ord('w'):
2210-
self.selection = 1122
2211-
return 1
2212-
2213-
2214-
22152204
if (not self._focused) or (not self._enabled):
22162205
return 1
22172206

@@ -2239,7 +2228,7 @@ def keypress(self, char):
22392228
if len(self._items) == len(self._captions) + 1:
22402229
return 0
22412230
self.delete_item(self._selection)
2242-
self.show()
2231+
self._refresh()
22432232
return 0
22442233

22452234
elif self._right_arrow_selects and char in (
@@ -2270,7 +2259,7 @@ def keypress(self, char):
22702259
self._toggle_selected_item()
22712260
else:
22722261
self._start_pos = 0
2273-
self.show()
2262+
self._refresh()
22742263

22752264
elif char in (ord('G'), curses.KEY_END):
22762265
if len(self._items) == 0:
@@ -2284,10 +2273,10 @@ def keypress(self, char):
22842273
self._toggle_selected_item()
22852274
else:
22862275
self._start_pos = self._selection - self._body_maxY + 1
2287-
self.show()
2276+
self._refresh()
22882277
else:
22892278
self._start_pos = 0
2290-
self.show()
2279+
self._refresh()
22912280

22922281
elif char == ord('H'):
22932282
if len(self._items) == 0:
@@ -2318,17 +2307,17 @@ def keypress(self, char):
23182307
self._verify_selection_not_on_caption()
23192308
if self._scroll:
23202309
self._start_pos = self._selection - self._body_maxY + 1
2321-
self.show()
2310+
self._refresh()
23222311
return 1
23232312
else:
23242313
self._selection -= 5
23252314
self._verify_selection_not_on_caption()
23262315
if self._selection < self._start_pos:
23272316
self._start_pos = self._selection
2328-
self.show()
2317+
self._refresh()
23292318
return 1
23302319
if not self._toggle_selected_item():
2331-
self.show()
2320+
self._refresh()
23322321

23332322
elif char in (curses.KEY_NPAGE, ):
23342323
if len(self._items) == 0:
@@ -2338,7 +2327,7 @@ def keypress(self, char):
23382327
self._verify_selection_not_on_caption()
23392328
self._start_pos = 0
23402329
if self._scroll:
2341-
self.show()
2330+
self._refresh()
23422331
return 1
23432332
else:
23442333
self._selection += 5
@@ -2350,10 +2339,10 @@ def keypress(self, char):
23502339
# log_it('sel = {1}, start = {1}'.format(self._selection, self._start_pos))
23512340
if self._selection - self._start_pos > self._body_maxY - 1:
23522341
self._start_pos = self._selection - self._body_maxY + 1
2353-
self.show()
2342+
self._refresh()
23542343
return 1
23552344
if not self._toggle_selected_item():
2356-
self.show()
2345+
self._refresh()
23572346

23582347
elif char in (ord('k'), curses.KEY_UP):
23592348
if len(self._items) == 0:
@@ -2366,20 +2355,20 @@ def keypress(self, char):
23662355
self._start_pos = 0
23672356
if self._scroll:
23682357
self._start_pos = self._selection - self._body_maxY + 1
2369-
self.show()
2358+
self._refresh()
23702359
return 1
23712360
if self._scroll:
23722361
# we have scrolling items
23732362
if self._selection < self._start_pos:
23742363
# we need to scroll!
23752364
self._start_pos -= 1
23762365
# log_it('We need to scroll: start: {0}, selection = {1}'.format(self._start_pos,self._selection))
2377-
self.show()
2366+
self._refresh()
23782367
return 1
23792368
# log_it('going from {0} to {1}, start at {2}'.format(self._old_selection, self._selection, self._start_pos))
23802369
if not self._toggle_selected_item():
2381-
# log_it('self.show')
2382-
self.show()
2370+
# log_it('self._refresh')
2371+
self._refresh()
23832372

23842373
elif char in (ord('j'), curses.KEY_DOWN):
23852374
if len(self._items) == 0:
@@ -2393,19 +2382,19 @@ def keypress(self, char):
23932382
self._verify_selection_not_on_caption()
23942383
self._start_pos = 0
23952384
if self._scroll:
2396-
self.show()
2385+
self._refresh()
23972386
return 1
23982387
if self._scroll:
23992388
# we have scrolling items
24002389
if self._selection >= self._start_pos + self._body_maxY:
24012390
# we need to scroll!
24022391
self._start_pos = self._selection - self._body_maxY + 1
24032392
# log_it('We need to scroll: start: {0}, selection {1}'.format(self._start_pos, self._selection))
2404-
self.show()
2393+
self._refresh()
24052394
return 1
24062395

24072396
if not self._toggle_selected_item():
2408-
self.show()
2397+
self._refresh()
24092398

24102399
elif char in self._local_functions.keys():
24112400
self._local_functions(char)
@@ -2415,6 +2404,7 @@ def keypress(self, char):
24152404

24162405
return 1
24172406

2407+
24182408
class SimpleCursesCheckBox(SimpleCursesWidget):
24192409
'''A very simple checkbox curses widget '''
24202410
_checked = False

pyradio/window_stack.py

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class Window_Stack_Constants(object):
9696
ASK_TO_UPDATE_STATIONS_CSV_MODE = 135
9797
UPDATE_STATIONS_CSV_RESULT_MODE = 136
9898
GROUP_SELECTION_MODE = 137
99+
GROUP_SEARCH_MODE = 138
99100
# TODO: return values from opening theme
100101
PLAYLIST_RECOVERY_ERROR_MODE = 200
101102
PLAYLIST_NOT_FOUND_ERROR_MODE = 201
@@ -276,6 +277,7 @@ class Window_Stack_Constants(object):
276277
UPDATE_NOTIFICATION_MODE: 'UPDATE_NOTIFICATION_MODE',
277278
UPDATE_STATIONS_CSV_RESULT_MODE: 'UPDATE_STATIONS_CSV_RESULT_MODE',
278279
GROUP_SELECTION_MODE: 'GROUP_SELECTION_MODE',
280+
GROUP_SEARCH_MODE: 'GROUP_SEARCH_MODE'
279281
}
280282

281283
''' When PASSIVE_WINDOWS target is one of them,

0 commit comments

Comments
 (0)