diff --git a/platformcode/keymaptools.py b/platformcode/keymaptools.py
index 6c9cb972..906c682f 100644
--- a/platformcode/keymaptools.py
+++ b/platformcode/keymaptools.py
@@ -1,16 +1,21 @@
# -*- coding: utf-8 -*-
from builtins import map
-import sys, xbmc, xbmcaddon, xbmcgui, base64, json, os
-PY3 = False
-if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
+import sys, xbmc, xbmcaddon, xbmcgui, base64, json, os, re
from threading import Timer
-
-from channelselector import get_thumb
-from platformcode import config, logger
+from platformcode import config, logger, platformtools, launcher
+from core.item import Item
import channelselector
addon_icon = os.path.join( config.__settings__.getAddonInfo( "path" ),'resources', 'media', 'logo.png' )
+background = 'FF232323'
+text = 'FFFFFFFF'
+select = 'FF0082C2'
+if config.get_setting('icon_set') == 'dark':
+ background = 'FFDCDCDC'
+ text = 'FF232323'
+ select = '880082C2'
+
class KeyListener(xbmcgui.WindowXMLDialog):
TIMEOUT = 10
@@ -89,89 +94,113 @@ def delete_key():
config.set_setting("shortcut_key", '')
xbmc.executebuiltin('Action(reloadkeymaps)')
+LEFT = 1
+RIGHT = 2
+UP = 3
+DOWN = 4
+EXIT = 10
+BACKSPACE = 92
+RIGHTCLICK = 101
class Main(xbmcgui.WindowXMLDialog):
def __init__(self, *args, **kwargs):
self.items = []
-
def onInit(self):
+ self.MENU = self.getControl(1)
+ self.SUBMENU = self.getControl(2)
#### Compatibility with Kodi 18 ####
if config.get_platform(True)['num_version'] < 18:
self.setCoordinateResolution(2)
- for menuentry in menu:
- if not menuentry.channel: menuentry.channel = prevchannel
- item = xbmcgui.ListItem(menuentry.title)
- if not submenu and menuentry.channel in ['news', 'channelselector', 'search', 'videolibrary']:
- item.setProperty('sub', 'Shortcut/sub.png')
- if menuentry.title != 'Redirect':
- for key , value in json.loads(menuentry.tojson()).items():
- item.setProperty(key, str(value))
- item.setProperty('run', menuentry.tojson())
- self.items.append(item)
+ itemlist = self.menulist(channelselector.getmainlist())
- self.getControl(32500).addItems(self.items)
- self.setFocusId(32500)
+ self.MENU.addItems(itemlist)
+ self.setFocusId(1)
+ self.submenu()
+
+ def menulist(self, menu):
+ itemlist = []
+ for menuentry in menu:
+ # if not menuentry.channel: menuentry.channel = 'news'
+ item = xbmcgui.ListItem(menuentry.title)
+ item.setProperty('background', background)
+ item.setProperty('text', text)
+ item.setProperty('select', select)
+ item.setProperty('channel', menuentry.channel)
+ item.setProperty('focus', '0')
+ item.setProperty('thumbnail', menuentry.thumbnail)
+ if menuentry.channel in ['news', 'channelselector', 'search', 'videolibrary', 'favorites']:
+ item.setProperty('sub', 'true')
+ item.setProperty('run', menuentry.tourl())
+ itemlist.append(item)
+ return itemlist
def onClick(self, control_id):
- if control_id == 32500:
- action = self.getControl(32500).getSelectedItem().getProperty('run')
+ if control_id in [1, 2]:
+ action = self.getControl(control_id).getSelectedItem().getProperty('run')
self.close()
- if self.getControl(32500).getSelectedItem().getProperty('folder') == 'False':
- xbmc.executebuiltin('RunPlugin("plugin://plugin.video.kod/?' + base64.b64encode(action) + '")')
+ if self.getControl(control_id).getSelectedItem().getProperty('folder') == 'False':
+ xbmc.executebuiltin('RunPlugin("plugin://plugin.video.kod/?' + action + '")')
else:
- xbmc.executebuiltin('ActivateWindow(10025, "plugin://plugin.video.kod/?' + base64.b64encode(action) + '")')
+ xbmc.executebuiltin('ActivateWindow(10025, "plugin://plugin.video.kod/?' + action + '")')
+
+ elif control_id in [101]:
+ logger.debug('DOWN')
+ self.setFocusId(2)
+ elif control_id in [102]:
+ logger.debug('UP')
+ self.setFocusId(1)
def onAction(self, action):
- action = action.getId()
- # exit
- if action in [xbmcgui.ACTION_PREVIOUS_MENU, xbmcgui.ACTION_NAV_BACK]:
+ if action.getButtonCode() == config.get_setting('shortcut_key'):
self.close()
- if submenu: open_shortcut_menu(self=True)
- if action == xbmcgui.ACTION_CONTEXT_MENU:
- config.open_settings()
+ action = action.getId()
+
+ if action in [EXIT, BACKSPACE, RIGHTCLICK]:
+ self.close()
focus = self.getFocusId()
- if action == 3:
- if focus == 61:
- self.setFocusId(32500)
- elif submenu:
- self.close()
- open_shortcut_menu(self=True)
- elif self.getControl(32500).getSelectedItem().getProperty('channel') in ['news', 'channelselector', 'search', 'videolibrary']:
- channel_name = self.getControl(32500).getSelectedItem().getProperty('channel')
- if channel_name == 'channelselector':
- import channelselector
- self.close()
- open_shortcut_menu(channelselector.getchanneltypes(), channel_name, self=True)
- else:
- from core.item import Item
- channel = __import__('specials.%s' % channel_name, fromlist=["specials.%s" % channel_name])
- self.close()
- open_shortcut_menu(channel.mainlist(Item()), channel_name, self=True)
+ if action in [LEFT, RIGHT]:
+ if focus in [1]:
+ self.submenu()
+ else:
+ itfocus = str(self.SUBMENU.getSelectedPosition())
+ self.MENU.getSelectedItem().setProperty('focus', itfocus)
-def open_shortcut_menu(newmenu='', channel='', self=False):
- if not self: xbmc.executebuiltin('Dialog.Close(all,true)')
- global menu
- global submenu
- global prevchannel
- prevchannel = channel
- if newmenu:
- menu = newmenu
- submenu = True
- else:
- menu = channelselector.getmainlist()
- submenu = False
- XML = 'ShortCutMenu.xml'
- if config.get_setting('icon_set') == 'dark':
- XML = 'Dark' + XML
- main = Main(XML, config.get_runtime_path())
- main.doModal()
- del main
+ def submenu(self):
+ channel_name = self.MENU.getSelectedItem().getProperty('channel')
+ focus = int(self.MENU.getSelectedItem().getProperty('focus'))
+ if channel_name == 'channelselector':
+ import channelselector
+ itemlist = self.menulist(channelselector.getchanneltypes())
+ elif channel_name in ['news', 'channelselector', 'search', 'videolibrary', 'favorites']:
+ channel = __import__('specials.%s' % channel_name, fromlist=["specials.%s" % channel_name])
+ itemlist = self.menulist(channel.mainlist(Item().fromurl(self.MENU.getSelectedItem().getProperty('run'))))
+ self.SUBMENU.reset()
+ self.SUBMENU.addItems(itemlist)
+ self.SUBMENU.selectItem(focus)
+
+ def context(self):
+ focus = self.getFocusId()
+ item_url = self.MENU.getSelectedItem().getProperty('run')
+ item = Item().fromurl(item_url)
+ logger.debug(item)
+ commands = platformtools.set_context_commands(item, item_url, Item())
+ context = [c[0] for c in commands]
+ context_commands = [c[1].replace('Container.Refresh', 'RunPlugin').replace('Container.Update', 'RunPlugin') for c in commands]
+ index = xbmcgui.Dialog().contextmenu(context)
+ if index > 0: xbmc.executebuiltin(context_commands[index])
+
+
+def open_shortcut_menu():
+ logger.debug('WID',xbmcgui.getCurrentWindowDialogId())
+ if xbmcgui.getCurrentWindowDialogId() == 9999:
+ main = Main('ShortCutMenu.xml', config.get_runtime_path())
+ main.doModal()
diff --git a/resources/skins/Default/720p/DarkShortCutMenu.xml b/resources/skins/Default/720p/DarkShortCutMenu.xml
deleted file mode 100644
index 3055dd33..00000000
--- a/resources/skins/Default/720p/DarkShortCutMenu.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
- 0.52
-
- 0
- 0
-
-
-
-
- 0
- 0
- 100%
- 100%
- white.png
- white.png
- WindowOpen
- WindowClose
- Action(close)
-
-
-
- 100
- 250
-
-
-
-
-
-
-
-
-
-
- Control.HasFocus(61)
- Unfocus
- Focus
- 0
- 219
- 1100
- 10
- white.png
- white.png
- white.png
- false
- horizontal
- 32500
-
-
-
- 1100
- 218
- white.png
-
-
- -130
- -1
- 1100
- 220
- 32501
- 61
- horizontal
- 200
- 61
- Conditional
- Conditional
-
-
- 220
- 220
- $INFO[ListItem.Property(thumbnail)]
- keep
- center
-
-
-
-
- 1
- 220
- 218
- white.png
-
-
- 220
- 220
- $INFO[ListItem.Property(thumbnail)]
- keep
- center
-
-
- 0
- 160
- 220
- 74
- font13
- FF232323
-
- center
- center
-
-
- 90
- 0
- 40
- 40
- $INFO[ListItem.Property(sub)]
- keep
- center
-
-
-
-
-
-
diff --git a/resources/skins/Default/720p/ShortCutMenu.xml b/resources/skins/Default/720p/ShortCutMenu.xml
index 8a191a35..63c20c63 100644
--- a/resources/skins/Default/720p/ShortCutMenu.xml
+++ b/resources/skins/Default/720p/ShortCutMenu.xml
@@ -6,22 +6,29 @@
0
-
+ Close Button
0
0
100%
100%
- white.png
- white.png
+ white.png
+ white.png
WindowOpen
WindowClose
Action(close)
+ 100
+ 100
+ 100
+ 100
-
+
+ Group Controls
100
250
+ 1100
+ 220
@@ -30,84 +37,146 @@
-
-
- Control.HasFocus(61)
- Unfocus
- Focus
- 0
- 219
- 1100
- 10
- white.png
- white.png
- white.png
- false
- horizontal
- 32500
-
-
+
- 1100
- 218
- white.png
+ Background
+ 0
+ 0
+ 100%
+ 100%
+ white.png
-
- -130
- -1
- 1100
+
+
+ Group List
+ 0
+ 0
+ 100%
220
- 32501
- 61
- horizontal
- 200
- 61
- Conditional
- Conditional
-
-
- 220
- 220
- $INFO[ListItem.Property(thumbnail)]
- keep
- center
-
-
-
-
- 1
- 220
- 218
- white.png
-
-
- 220
- 220
- $INFO[ListItem.Property(thumbnail)]
- keep
- center
-
-
- 0
- 160
- 220
- 74
- font13
- FFFFFFFF
-
- center
- center
-
-
- 90
- 0
- 40
- 40
- $INFO[ListItem.Property(sub)]
- keep
- center
-
-
+ vertical
+
+
+ Menu
+ 0
+ 0
+ 100%
+ 220
+ 32501
+ 61
+ horizontal
+ 200
+ 61
+
+
+ 220
+ 220
+ $INFO[ListItem.Property(thumbnail)]
+ keep
+ center
+
+
+
+
+ 1
+ 220
+ 218
+ white.png
+
+
+ 220
+ 220
+ $INFO[ListItem.Property(thumbnail)]
+ keep
+ center
+
+
+
+
+
+ Submenu
+ 0
+ 0
+ 100%
+ 220
+ 32501
+ 61
+ horizontal
+ 200
+ 61
+
+
+ 220
+ 220
+ $INFO[ListItem.Property(thumbnail)]
+ keep
+ center
+
+
+
+
+ 1
+ 220
+ 218
+ white.png
+
+
+ 220
+ 220
+ $INFO[ListItem.Property(thumbnail)]
+ keep
+ center
+
+
+
+
+
+
+ Selected Item
+ 0
+ 280
+ 100%
+ 40
+ font13
+ FFFFFFFF
+
+ center
+ center
+
+
+
+ !String.IsEmpty(Container(1).ListItem.Property(sub)) + !Control.HasFocus(2) + !Control.HasFocus(102)
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ 90
+ 180
+ 40
+ 40
+ down.png
+ down.png
+ keep
+
+
+
+ !Control.HasFocus(1) + !Control.HasFocus(101)
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ Conditional
+ 90
+ 0
+ 40
+ 40
+ up.png
+ up.png
+ keep