Skip to content

Commit 15208a8

Browse files
committed
SimpleCursesWidgetColumns left and right cursor movement improved to navigata all items
1 parent e1bb314 commit 15208a8

File tree

1 file changed

+115
-12
lines changed

1 file changed

+115
-12
lines changed

pyradio/simple_curses_widgets.py

Lines changed: 115 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import curses.ascii
44
import logging
55
from sys import version_info, platform, version
6-
from .cjkwrap import PY3, is_wide, cjklen
6+
try:
7+
from .cjkwrap import PY3, is_wide, cjklen
8+
except:
9+
from cjkwrap import PY3, is_wide, cjklen
710
import locale
811
locale.setlocale(locale.LC_ALL, '') # set your locale
912

@@ -793,12 +796,19 @@ def keypress(self, char):
793796
pX += 1
794797
if pX >= self._columns:
795798
pX = 0
799+
pY += 1
796800
# logger.error('DE pY ={0}, pX ={1}'.format(pY, pX))
797801
# logger.error('DE {}'.format(self._coords))
798802
try:
799803
it = self._coords.index((pY, pX))
800804
except ValueError:
801-
it = self._coords.index((pY, 0))
805+
pX = 0
806+
pY += 1
807+
# logger.error('DE pY ={0}, pX ={1}'.format(pY, pX))
808+
try:
809+
it = self._coords.index((pY, pX))
810+
except:
811+
it = self._coords.index((0, 0))
802812
# logger.error('DE it = {}'.format(it))
803813
self.selection = it
804814
self.show()
@@ -810,20 +820,27 @@ def keypress(self, char):
810820
pX -= 1
811821
if pX < 0:
812822
pX = self._columns - 1
813-
# logger.error('DE pY ={0}, pX ={1}'.format(pY, pX))
814-
# logger.error('DE {}'.format(self._coords))
815-
try:
816-
it = self._coords.index((pY, pX))
817-
except ValueError:
818-
pX -= 1
819-
while True:
823+
pY -= 1
824+
if pY < 0:
825+
self.selection = self._coords.index(max(self._coords))
826+
else:
827+
# logger.error('DE pY ={0}, pX ={1}'.format(pY, pX))
828+
# logger.error('DE {}'.format(self._coords))
820829
try:
821830
it = self._coords.index((pY, pX))
822-
break
823831
except ValueError:
824832
pX -= 1
825-
# logger.error('DE it = {}'.format(it))
826-
self.selection = it
833+
while True:
834+
try:
835+
it = self._coords.index((pY, pX))
836+
break
837+
except ValueError:
838+
pX -= 1
839+
# logger.error('DE it = {}'.format(it))
840+
self.selection = it
841+
else:
842+
self.selection = self._coords.index((pY, pX))
843+
827844
self.show()
828845
return 2
829846

@@ -2730,3 +2747,89 @@ def reset_index(self):
27302747
self._active_history_index = 0
27312748

27322749

2750+
'''
2751+
#
2752+
# Testing part
2753+
#
2754+
2755+
import logging
2756+
logger = logging.getLogger('pyradio')
2757+
logger.setLevel(logging.DEBUG)
2758+
2759+
def main(stdscr):
2760+
__configureLogger()
2761+
curses.start_color()
2762+
curses.use_default_colors()
2763+
#stdscr.addstr('Number of colors: {0}, number of pairs: {1}\n'.format(curses.COLORS, curses.COLOR_PAIRS), curses.color_pair(0))
2764+
#stdscr.getch()
2765+
2766+
#pr(stdscr)
2767+
#stdscr.getch()
2768+
2769+
curses.init_pair(4,curses.COLOR_RED, curses.COLOR_BLACK)
2770+
curses.init_pair(5,curses.COLOR_WHITE,curses.COLOR_BLACK)
2771+
curses.init_pair(6,curses.COLOR_BLACK,curses.COLOR_RED)
2772+
curses.init_pair(9,curses.COLOR_BLACK,curses.COLOR_WHITE)
2773+
#curses.init_pair(1,237,248)
2774+
#for n in range(3,13):
2775+
# stdscr.addstr(n,1,str(n),curses.color_pair(1))
2776+
2777+
stdscr.bkgdset(' ', curses.color_pair(3))
2778+
stdscr.erase()
2779+
stdscr.refresh()
2780+
search_by_items = (
2781+
'Votes',
2782+
'Clicks',
2783+
'Recent click',
2784+
'Recently changed',
2785+
'Item 1',
2786+
'Item 2',
2787+
'Item 3',
2788+
'Item 4',
2789+
)
2790+
2791+
a_widget = SimpleCursesWidgetColumns(
2792+
Y=2, X=3, window=stdscr,
2793+
selection=0,
2794+
active=0,
2795+
items=search_by_items,
2796+
color=curses.color_pair(5),
2797+
color_active=curses.color_pair(4),
2798+
color_cursor_selection=curses.color_pair(6),
2799+
color_cursor_active=curses.color_pair(9),
2800+
margin=1,
2801+
max_width=65
2802+
)
2803+
a_widget.show()
2804+
2805+
while True:
2806+
try:
2807+
c = stdscr.getch()
2808+
# logger.error('DE pressed "{0} - {1}"'.format(c, chr(c)))
2809+
ret = a_widget.keypress(c)
2810+
if (ret == -1):
2811+
return
2812+
except KeyboardInterrupt:
2813+
break
2814+
2815+
def __configureLogger():
2816+
logger = logging.getLogger('pyradio')
2817+
logger.setLevel(logging.DEBUG)
2818+
2819+
# Handler
2820+
fh = logging.FileHandler('/home/spiros/pyradio.log')
2821+
fh.setLevel(logging.DEBUG)
2822+
2823+
# create formatter
2824+
PATTERN = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
2825+
formatter = logging.Formatter(PATTERN)
2826+
2827+
# add formatter to ch
2828+
fh.setFormatter(formatter)
2829+
2830+
# add ch to logger
2831+
logger.addHandler(fh)
2832+
2833+
if __name__ == "__main__":
2834+
curses.wrapper(main)
2835+
'''

0 commit comments

Comments
 (0)