From 3c5aed30d2c50803d6bdbb7817d97461890ffdc1 Mon Sep 17 00:00:00 2001 From: panni Date: Fri, 6 Jul 2018 03:49:44 +0200 Subject: [PATCH 1/4] allow round robin on player settings dialog list --- lib/windows/kodigui.py | 4 ++++ lib/windows/playersettings.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/windows/kodigui.py b/lib/windows/kodigui.py index ee140ded..c01d008d 100644 --- a/lib/windows/kodigui.py +++ b/lib/windows/kodigui.py @@ -500,6 +500,10 @@ def getSelectedItem(self): return None return self.getListItem(pos) + def setSelectedItemByPos(self, pos): + if self.positionIsValid(pos): + self.control.selectItem(pos) + def removeItem(self, index): old = self.items.pop(index) old.onDestroy() diff --git a/lib/windows/playersettings.py b/lib/windows/playersettings.py index 04b3e20a..072b3c0a 100644 --- a/lib/windows/playersettings.py +++ b/lib/windows/playersettings.py @@ -1,4 +1,5 @@ import xbmc +import xbmcgui import kodigui from lib import util @@ -23,6 +24,7 @@ def __init__(self, *args, **kwargs): self.video = kwargs.get('video') self.viaOSD = kwargs.get('via_osd') self.nonPlayback = kwargs.get('non_playback') + self.lastSelectedItem = 0 if not self.video.mediaChoice: playerObject = plexnet.plexplayer.PlexPlayer(self.video) @@ -44,6 +46,23 @@ def onAction(self, action): except: util.ERROR() + if action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and self.getFocusId() == self.SETTINGS_LIST_ID: + to_pos = None + last_index = self.settingsList.size() - 1 + if action == xbmcgui.ACTION_MOVE_UP and self.lastSelectedItem == 0 and self.settingsList.topHasFocus(): + to_pos = last_index + + elif action == xbmcgui.ACTION_MOVE_DOWN and self.lastSelectedItem == last_index \ + and self.settingsList.bottomHasFocus(): + to_pos = 0 + + if to_pos is not None: + self.settingsList.setSelectedItemByPos(to_pos) + self.lastSelectedItem = to_pos + return + + self.lastSelectedItem = self.settingsList.control.getSelectedPosition() + kodigui.BaseDialog.onAction(self, action) def onClick(self, controlID): From 0632192811deeecee28e8329c7e25a40244fcceb Mon Sep 17 00:00:00 2001 From: panni Date: Fri, 6 Jul 2018 04:27:16 +0200 Subject: [PATCH 2/4] episodes view: close options by left instead of top --- lib/windows/episodes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/windows/episodes.py b/lib/windows/episodes.py index 24258ace..0e4c688d 100644 --- a/lib/windows/episodes.py +++ b/lib/windows/episodes.py @@ -553,7 +553,7 @@ def optionsButtonClicked(self, from_item=False): pos = (1490, 167 + (viewPos * 100)) bottom = False setDropdownProp = True - choice = dropdown.showDropdown(options, pos, pos_is_bottom=bottom, close_direction='top', set_dropdown_prop=setDropdownProp) + choice = dropdown.showDropdown(options, pos, pos_is_bottom=bottom, close_direction='left', set_dropdown_prop=setDropdownProp) if not choice: return From 907ef35bfe4926728d77688ab0b66b5dad581685 Mon Sep 17 00:00:00 2001 From: panni Date: Fri, 6 Jul 2018 04:27:51 +0200 Subject: [PATCH 3/4] select dialog/dropdown: allow vertical round robin --- lib/windows/dropdown.py | 22 +++++++++++++++++++++- lib/windows/playersettings.py | 20 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/lib/windows/dropdown.py b/lib/windows/dropdown.py index ec17afce..fca0f93e 100644 --- a/lib/windows/dropdown.py +++ b/lib/windows/dropdown.py @@ -1,5 +1,5 @@ import kodigui - +import xbmcgui from lib import util SEPARATOR = None @@ -20,6 +20,7 @@ def __init__(self, *args, **kwargs): kodigui.BaseDialog.__init__(self, *args, **kwargs) self.options = kwargs.get('options') self.pos = kwargs.get('pos') + self.lastSelectedItem = 0 self.posIsBottom = kwargs.get('pos_is_bottom') self.closeDirection = kwargs.get('close_direction') self.setDropdownProp = kwargs.get('set_dropdown_prop', False) @@ -67,6 +68,25 @@ def onAction(self, action): except: util.ERROR() + if action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and self.getFocusId() == self.OPTIONS_LIST_ID: + to_pos = None + last_index = self.optionsList.size() - 1 + + if last_index > 0: + if action == xbmcgui.ACTION_MOVE_UP and self.lastSelectedItem == 0 and self.optionsList.topHasFocus(): + to_pos = last_index + + elif action == xbmcgui.ACTION_MOVE_DOWN and self.lastSelectedItem == last_index \ + and self.optionsList.bottomHasFocus(): + to_pos = 0 + + if to_pos is not None: + self.optionsList.setSelectedItemByPos(to_pos) + self.lastSelectedItem = to_pos + return + + self.lastSelectedItem = self.optionsList.control.getSelectedPosition() + kodigui.BaseDialog.onAction(self, action) def onClick(self, controlID): diff --git a/lib/windows/playersettings.py b/lib/windows/playersettings.py index 072b3c0a..b9e1704c 100644 --- a/lib/windows/playersettings.py +++ b/lib/windows/playersettings.py @@ -178,6 +178,7 @@ def __init__(self, *args, **kwargs): self.selectedIdx = kwargs.get('selected_idx') self.choice = None self.nonPlayback = kwargs.get('non_playback') + self.lastSelectedItem = self.selectedIdx if self.selectedIdx is not None else 0 def onFirstInit(self): self.optionsList = kodigui.ManagedControlList(self, self.OPTIONS_LIST_ID, 8) @@ -193,6 +194,25 @@ def onAction(self, action): except: util.ERROR() + if action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and self.getFocusId() == self.OPTIONS_LIST_ID: + to_pos = None + last_index = self.optionsList.size() - 1 + + if last_index > 0: + if action == xbmcgui.ACTION_MOVE_UP and self.lastSelectedItem == 0 and self.optionsList.topHasFocus(): + to_pos = last_index + + elif action == xbmcgui.ACTION_MOVE_DOWN and self.lastSelectedItem == last_index \ + and self.optionsList.bottomHasFocus(): + to_pos = 0 + + if to_pos is not None: + self.optionsList.setSelectedItemByPos(to_pos) + self.lastSelectedItem = to_pos + return + + self.lastSelectedItem = self.optionsList.control.getSelectedPosition() + kodigui.BaseDialog.onAction(self, action) def onClick(self, controlID): From 2619bbe0b395e34bdf1a21b8e72bae44447dd9df Mon Sep 17 00:00:00 2001 From: panni Date: Fri, 6 Jul 2018 05:19:56 +0200 Subject: [PATCH 4/4] make round-robining optional --- lib/windows/dropdown.py | 4 +++- lib/windows/playersettings.py | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/windows/dropdown.py b/lib/windows/dropdown.py index fca0f93e..e4eaab89 100644 --- a/lib/windows/dropdown.py +++ b/lib/windows/dropdown.py @@ -21,6 +21,7 @@ def __init__(self, *args, **kwargs): self.options = kwargs.get('options') self.pos = kwargs.get('pos') self.lastSelectedItem = 0 + self.roundRobin = kwargs.get('round_robin', True) self.posIsBottom = kwargs.get('pos_is_bottom') self.closeDirection = kwargs.get('close_direction') self.setDropdownProp = kwargs.get('set_dropdown_prop', False) @@ -68,7 +69,8 @@ def onAction(self, action): except: util.ERROR() - if action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and self.getFocusId() == self.OPTIONS_LIST_ID: + if self.roundRobin and action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and \ + self.getFocusId() == self.OPTIONS_LIST_ID: to_pos = None last_index = self.optionsList.size() - 1 diff --git a/lib/windows/playersettings.py b/lib/windows/playersettings.py index b9e1704c..bc8d7062 100644 --- a/lib/windows/playersettings.py +++ b/lib/windows/playersettings.py @@ -24,6 +24,7 @@ def __init__(self, *args, **kwargs): self.video = kwargs.get('video') self.viaOSD = kwargs.get('via_osd') self.nonPlayback = kwargs.get('non_playback') + self.roundRobin = kwargs.get('round_robin', True) self.lastSelectedItem = 0 if not self.video.mediaChoice: @@ -46,7 +47,8 @@ def onAction(self, action): except: util.ERROR() - if action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and self.getFocusId() == self.SETTINGS_LIST_ID: + if self.roundRobin and action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and \ + self.getFocusId() == self.SETTINGS_LIST_ID: to_pos = None last_index = self.settingsList.size() - 1 if action == xbmcgui.ACTION_MOVE_UP and self.lastSelectedItem == 0 and self.settingsList.topHasFocus(): @@ -179,6 +181,7 @@ def __init__(self, *args, **kwargs): self.choice = None self.nonPlayback = kwargs.get('non_playback') self.lastSelectedItem = self.selectedIdx if self.selectedIdx is not None else 0 + self.roundRobin = kwargs.get('round_robin', True) def onFirstInit(self): self.optionsList = kodigui.ManagedControlList(self, self.OPTIONS_LIST_ID, 8) @@ -194,7 +197,8 @@ def onAction(self, action): except: util.ERROR() - if action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and self.getFocusId() == self.OPTIONS_LIST_ID: + if self.roundRobin and action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN) and \ + self.getFocusId() == self.OPTIONS_LIST_ID: to_pos = None last_index = self.optionsList.size() - 1