Files
jellycon/resources/lib/action_menu.py

108 lines
3.0 KiB
Python

# Gnu General Public License - see LICENSE.TXT
import time
import threading
import xbmc
import xbmcgui
from .loghandler import LazyLogger
log = LazyLogger(__name__)
class ActionAutoClose(threading.Thread):
last_interaction = time.time()
parent_dialog = None
stop_thread = False
def __init__(self, parent):
self.parent_dialog = parent
self.stop_thread = False
self.last_interaction = time.time()
threading.Thread.__init__(self)
def run(self):
log.debug("ActionAutoClose Running")
while not xbmc.abortRequested and not self.stop_thread:
time_since_last = time.time() - self.last_interaction
log.debug("ActionAutoClose time_since_last : {0}".format(time_since_last))
if time_since_last > 20:
log.debug("ActionAutoClose Closing Parent")
self.parent_dialog.close()
break
xbmc.sleep(1000)
log.debug("ActionAutoClose Exited")
def set_last(self):
self.last_interaction = time.time()
log.debug("ActionAutoClose set_last : {0}".format(self.last_interaction))
def stop(self):
log.debug("ActionAutoClose stop_thread called")
self.stop_thread = True
class ActionMenu(xbmcgui.WindowXMLDialog):
selected_action = None
action_items = None
auto_close_thread = None
listControl = None
action_exitkeys_id = None
def __init__(self, *args, **kwargs):
log.debug("ActionMenu: __init__")
xbmcgui.WindowXML.__init__(self, *args, **kwargs)
self.auto_close_thread = ActionAutoClose(self)
self.auto_close_thread.start()
def onInit(self):
log.debug("ActionMenu: onInit")
self.action_exitkeys_id = [10, 13]
self.listControl = self.getControl(3000)
self.listControl.addItems(self.action_items)
self.setFocus(self.listControl)
# bg_image = self.getControl(3010)
# bg_image.setHeight(50 * len(self.action_items) + 20)
def onFocus(self, control_id):
pass
def doAction(self, action_id):
pass
def onMessage(self, message):
log.debug("ActionMenu: onMessage: {0}".format(message))
def onAction(self, action):
if action.getId() == 10: # ACTION_PREVIOUS_MENU
self.auto_close_thread.stop()
self.close()
elif action.getId() == 92: # ACTION_NAV_BACK
self.auto_close_thread.stop()
self.close()
else:
self.auto_close_thread.set_last()
log.debug("ActionMenu: onAction: {0}".format(action.getId()))
def onClick(self, control_id):
if control_id == 3000:
self.selected_action = self.listControl.getSelectedItem()
log.debug("ActionMenu: Selected Item: {0}".format(self.selected_action))
self.auto_close_thread.stop()
self.close()
def setActionItems(self, action_items):
self.action_items = action_items
def getActionItem(self):
return self.selected_action