diff --git a/rtv/page.py b/rtv/page.py index 5f81015..24a1940 100644 --- a/rtv/page.py +++ b/rtv/page.py @@ -91,11 +91,13 @@ class Navigator(object): return valid, redraw def move_page(self, direction, n_windows): - """Move the page down (positive direction) or up (negative - direction)""" + """ + Move page down (positive direction) or up (negative direction). + """ - # top of submission page: act as normal move - if self.absolute_index < 0: + # top of subreddit/submission page or only one + # submission/reply on the screen: act as normal move + if (self.absolute_index < 0) | (n_windows == 0): valid, redraw = self.move(direction, n_windows) else: # first page @@ -109,18 +111,26 @@ class Navigator(object): self.page_index = 0 valid = True else: + # flip to the direction of movement + if ((direction > 0) & (self.inverted is True))\ + | ((direction < 0) & (self.inverted is False)): + self.page_index += (self.step * (n_windows-1)) + self.inverted = not self.inverted + self.cursor_index \ + = (n_windows-(direction<0)) - self.cursor_index + valid = False adj = 0 # check if reached the bottom while not valid: - n_move = n_windows-adj + n_move = n_windows - adj if n_move == 0: break - self.page_index += n_move*direction + self.page_index += n_move * direction valid = self._is_valid(self.absolute_index) if not valid: - self.page_index -= n_move*direction + self.page_index -= n_move * direction adj += 1 redraw = True @@ -239,13 +249,13 @@ class BasePage(object): self.clear_input_queue() @BaseController.register('n') - def move_cursor_page_down(self): - self._move_cursor(1, page_ud=True) + def move_page_down(self): + self._move_page(1) self.clear_input_queue() @BaseController.register('m') - def move_cursor_page_up(self): - self._move_cursor(-1, page_ud=True) + def move_page_up(self): + self._move_page(-1) self.clear_input_queue() @BaseController.register('a') @@ -507,15 +517,9 @@ class BasePage(object): def _remove_cursor(self): self._edit_cursor(curses.A_NORMAL) - def _move_cursor(self, direction, page_ud=False): - + def _move_cursor(self, direction): self._remove_cursor() - - if page_ud: - valid, redraw = self.nav.move_page(direction, - len(self._subwindows)) - else: - valid, redraw = self.nav.move(direction, len(self._subwindows)) + valid, redraw = self.nav.move(direction, len(self._subwindows)) if not valid: curses.flash() @@ -525,16 +529,25 @@ class BasePage(object): self._draw_content() self._add_cursor() + def _move_page(self, direction): + self._remove_cursor() + valid, redraw = self.nav.move_page(direction, + len(self._subwindows)-1) + if not valid: + curses.flash() + + self._draw_content() + # Don't allow the cursor to go over the subwindow number + if self.nav.cursor_index >= len(self._subwindows): + self.nav.cursor_index = len(self._subwindows)-1 + self._add_cursor() + def _edit_cursor(self, attribute=None): # Don't allow the cursor to go below page index 0 if self.nav.absolute_index < 0: return - # Don't allow the cursor to go over the subwindow number - if self.nav.cursor_index >= len(self._subwindows): - self.nav.cursor_index = len(self._subwindows)-1 - window, attr = self._subwindows[self.nav.cursor_index] if attr is not None: attribute |= attr