Advertisement
Guest User

OBCGUI on Kodi (xbmc)

a guest
Dec 25th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 47.60 KB | None | 0 0
  1. class ObcGuiClass(xbmcgui.WindowXML):
  2.     obc_screen = 0
  3.  
  4.     MAINLABEL = {}
  5.     BUTTON1 = {}
  6.     BUTTON2 = {}
  7.     BUTTON3 = {}
  8.     BUTTON4 = {}
  9.     BUTTON5 = {}
  10.     BUTTON6 = {}
  11.     BUTTON7 = {}
  12.     BUTTON8 = {}
  13.  
  14.     LABEL1 = {}
  15.     LABEL2 = {}
  16.     LABEL3 = {}
  17.     LABEL4 = {}
  18.     LABEL5 = {}
  19.     LABEL6 = {}
  20.     LABEL7 = {}
  21.     LABEL8 = {}
  22.  
  23.     IMAGE1 = {}
  24.     IMAGE2 = {}
  25.     IMAGE3 = {}
  26.     IMAGE4 = {}
  27.     IMAGE5 = {}
  28.     IMAGE6 = {}
  29.     IMAGE7 = {}
  30.     IMAGE8 = {}
  31.  
  32.     #         [imgae, label]
  33.     GAUGE_L = [None, None]
  34.     GAUGE_M = [None, None]
  35.     GAUGE_R = [None, None]
  36.  
  37.     isActive = False
  38.  
  39.     ACTION_PARENT_DIR = 9
  40.     ACTION_PREVIOUS_MENU = 10
  41.     ACTION_CLOSE_DIALOG = 51
  42.     ACTION_SELECT_ITEM = 7
  43.     ACTION_MOVE_LEFT = 1
  44.     ACTION_MOVE_RIGHT = 2
  45.     ACTION_MOVE_UP = 3
  46.     ACTION_MOVE_DOWN = 4
  47.     ACTION_NAV_BACK = 92
  48.     ACTION_BACKSPACE = 110
  49.  
  50.     def __init__(self, xmlFilename, scriptPath, defaultSkin, defaultRes):
  51.         log("Initializing OBC Gui...")
  52.         self.updateTimer = None
  53.         self.updateObc = None
  54.  
  55.         self.pause_submenu_counter = False
  56.         self.window_id = -10000
  57.  
  58.     def isVisible(self):
  59.         log('OBC VISIBLE: WINDOW ID: %s' % xbmcgui.getCurrentWindowId())
  60.         if self.isActive and xbmcgui.getCurrentWindowId() == self.window_id:
  61.             return True
  62.         else:
  63.             return False
  64.  
  65.     def onInit(self):
  66.         log('OBC INIT: WINDOW ID: %s' % xbmcgui.getCurrentWindowId())
  67.         self.window_id = xbmcgui.getCurrentWindowId()
  68.  
  69.         self.COOLANT = [['- Kühlwassertemperatur', True, False], [partial(EVENT.obc_coolant_get), True, True, [], []], []]
  70.         self.CONS1 = [['Verbrauch 1', True, True], [partial(EVENT.obc_cons1_get), True, True, ['RESET'], [partial(EVENT.obc_cons1_reset)]], []]
  71.         self.CONS2 = [['Verbrauch 2', True, True], [partial(EVENT.obc_cons2_get), True, True, ['RESET'], [partial(EVENT.obc_cons2_reset)]], []]
  72.         self.RANGE = [['- Reichweite', True, False], [partial(EVENT.obc_range_get), True, True, [], []], []]
  73.         self.FUELLEVEL = [['- Tankinhalt', True, False], [partial(EVENT.obc_fuellevel_get), True, True, [], []], []]
  74.         self.DIST = [['Distanz', True, True], [partial(EVENT.obc_dist_get), True, True, ['SET', 'RESET'], [partial(self.set_distance), partial(EVENT.obc_dist_reset)]], []]
  75.         self.ARR = [['- Ankunft', True, False], [partial(EVENT.obc_arr_get), True, True, [], []], []]
  76.         self.RPM = [['- Drehzahl', True, False], [partial(EVENT.obc_rpm_get), True, True, [], []], []]
  77.         self.SPEED = [['- Akt. Geschwindigkeit', True, False], [partial(EVENT.obc_speed_get), True, True, [], []], []]
  78.         self.AVG = [['Geschwindigkeit', True, True], [partial(EVENT.obc_avg_get), True, True, ['RESET'], [partial(EVENT.obc_avg_reset)]], []]
  79.         self.LIMIT = [['Limit', True, True], [partial(EVENT.obc_limit_get), True, True, ['SET', 'SPEED', 'RESET', 'ACTIVATE', 'DEACTIVATE'], [partial(self.set_limit), partial(EVENT.obc_limit_set), partial(EVENT.obc_limit_reset), partial(EVENT.obc_limit_enable, True), partial(EVENT.obc_limit_enable, False)]], [EVENT.obc_limit_get_ind]]
  80.         self.MEMO = [['Memo', True, True], [' ', True, True, ['ACTIVATE', 'DEACTIVATE'], [partial(EVENT.obc_memo_enable, True), partial(EVENT.obc_memo_enable, False)]], [EVENT.obc_memo_get_ind]]
  81.         self.TMR1 = [['Timer 1', True, True], [partial(EVENT.obc_tmr1_get), True, True, ['SET', 'RESET', 'ACTIVATE', 'DEACTIVATE'], [partial(self.set_timer, 1), partial(EVENT.obc_tmr1_reset), partial(EVENT.obc_tmr1_enable, True), partial(EVENT.obc_tmr1_enable, False)]], [EVENT.obc_tmr1_get_ind]]
  82.         self.TMR2 = [['Timer 2', True, True], [partial(EVENT.obc_tmr2_get), True, True, ['SET', 'RESET', 'ACTIVATE', 'DEACTIVATE'], [partial(self.set_timer, 2), partial(EVENT.obc_tmr2_reset), partial(EVENT.obc_tmr2_enable, True), partial(EVENT.obc_tmr2_enable, False)]], [EVENT.obc_tmr2_get_ind]]
  83.         self.STPWTCH = [['- Stopuhr', True, False], [partial(EVENT.obc_stpwtch_get), True, True, [], []], []]
  84.         self.VOLTAGE = [['- Bordspannung', True, False], [partial(EVENT.obc_voltage_get), True, True, [], []], []]
  85.         self.KEYS = [['- Fahrzeugschlüssel', True, False], [partial(EVENT.obc_key_get), True, True, [], []], []]
  86.         self.VIN = [['- VIN', True, False], [partial(EVENT.obc_vin_get), True, True, [], []], []]
  87.         self.ODOMETER = [['- Kilometerstand', True, False], [partial(EVENT.obc_odometer_get), True, True, [], []], []]
  88.         self.CARMODEL = [['- Fahrzeugtyp', True, False], [partial(EVENT.obc_network_get), True, True, [], []], []]
  89.         self.LANGUAGE = [['- Sprache', True, False], [partial(EVENT.obc_language_get), True, True, [], []], []]
  90.  
  91.         self.AUXLBL = [[' ', True, False], [partial(EVENT.obc_auxventheat_label), True, True, [], []], []]
  92.         self.AUXVENT = [['Standlüftung', EVENT.obc_auxvent_available, EVENT.obc_auxvent_available], [' ', EVENT.obc_auxvent_available, EVENT.obc_auxvent_available, ['ACTIVATE', 'DEACTIVATE'], [partial(EVENT.obc_auxvent_enable, True), partial(EVENT.obc_auxvent_enable, False)]], [EVENT.obc_auxvent_get_ind]]
  93.         self.AUXHEAT = [['Standheizung', EVENT.obc_auxheat_available, EVENT.obc_auxheat_available], [' ', EVENT.obc_auxheat_available, EVENT.obc_auxheat_available, ['ACTIVATE', 'DEACTIVATE'], [partial(EVENT.obc_auxheat_enable, True), partial(EVENT.obc_auxheat_enable, False)]], [EVENT.obc_auxheat_get_ind]]
  94.  
  95.         self.GPSFIX = [['- GPS FIX', True, False], [partial(EVENT.nav_time_get), True, True, [], []], [EVENT.nav_gpsfix_get]]
  96.         self.GPSTOWN = [['- Ort', True, False], [partial(EVENT.nav_town_get), True, True, [], []], []]
  97.         self.GPSSTREET = [['- Straße', True, False], [partial(EVENT.nav_street_get), True, True, [], []], []]
  98.         self.GPSLAT = [['- Latitude', True, False], [partial(EVENT.nav_latitude_get), True, True, [], []], []]
  99.         self.GPSLON = [['- Longitude', True, False], [partial(EVENT.nav_longitude_get), True, True, [], []], []]
  100.         self.GPSALT = [['- Altitude', True, False], [partial(EVENT.nav_altitude_get), True, True, [], []], []]
  101.  
  102.         self.EMPTY = [[' ', False, False], [' ', False, False, [], []], []]
  103.  
  104.         ## BUTTON OBC-Screen[Text, Visible, Enable]
  105.         ## LABEL OBC-Screen[Text, Visible, Enable, Submenu, SubEvents]
  106.         ## IMAGE OBC-Screen[Visible]
  107.  
  108.         self.obc_screen_min = 0
  109.         self.obc_screen_max = 4
  110.  
  111.         # OBC 0
  112.         self.MAINLABEL[0] = ['ON-BOARD', True, True]
  113.         self.BUTTON1[0], self.LABEL1[0], self.IMAGE1[0] = self.CONS1
  114.         self.BUTTON2[0], self.LABEL2[0], self.IMAGE2[0] = self.CONS2
  115.         self.BUTTON3[0], self.LABEL3[0], self.IMAGE3[0] = self.RANGE
  116.         self.BUTTON4[0], self.LABEL4[0], self.IMAGE4[0] = self.FUELLEVEL
  117.         self.BUTTON5[0], self.LABEL5[0], self.IMAGE5[0] = self.DIST
  118.         self.BUTTON6[0], self.LABEL6[0], self.IMAGE6[0] = self.ARR
  119.         self.BUTTON7[0], self.LABEL7[0], self.IMAGE7[0] = self.LIMIT
  120.         self.BUTTON8[0], self.LABEL8[0], self.IMAGE8[0] = self.SPEED
  121.  
  122.         # OBC 1
  123.         self.MAINLABEL[1] = ['ON-BOARD', True, True]
  124.         self.BUTTON1[1], self.LABEL1[1], self.IMAGE1[1] = self.AVG
  125.         self.BUTTON2[1], self.LABEL2[1], self.IMAGE2[1] = self.MEMO
  126.         self.BUTTON3[1], self.LABEL3[1], self.IMAGE3[1] = self.STPWTCH
  127.         self.BUTTON4[1], self.LABEL4[1], self.IMAGE4[1] = self.EMPTY
  128.         self.BUTTON5[1], self.LABEL5[1], self.IMAGE5[1] = self.TMR1
  129.         self.BUTTON6[1], self.LABEL6[1], self.IMAGE6[1] = self.TMR2
  130.         self.BUTTON7[1], self.LABEL7[1], self.IMAGE7[1] = self.AUXVENT
  131.         self.BUTTON8[1], self.LABEL8[1], self.IMAGE8[1] = self.AUXHEAT
  132.  
  133.         # OBC 2 - Info
  134.         self.MAINLABEL[2] = ['INFORMATION', True, True]
  135.         self.BUTTON1[2], self.LABEL1[2], self.IMAGE1[2] = self.KEYS
  136.         self.BUTTON2[2], self.LABEL2[2], self.IMAGE2[2] = self.ODOMETER
  137.         self.BUTTON3[2], self.LABEL3[2], self.IMAGE3[2] = self.VIN
  138.         self.BUTTON4[2], self.LABEL4[2], self.IMAGE4[2] = self.RPM
  139.         self.BUTTON5[2], self.LABEL5[2], self.IMAGE5[2] = self.COOLANT
  140.         self.BUTTON6[2], self.LABEL6[2], self.IMAGE6[2] = self.VOLTAGE
  141.         self.BUTTON7[2], self.LABEL7[2], self.IMAGE7[2] = self.CARMODEL
  142.         self.BUTTON8[2], self.LABEL8[2], self.IMAGE8[2] = self.LANGUAGE
  143.  
  144.         # OBC 3 - GPS
  145.         self.MAINLABEL[3] = ['GPS', True, True]
  146.         self.BUTTON1[3], self.LABEL1[3], self.IMAGE1[3] = self.GPSFIX
  147.         self.BUTTON2[3], self.LABEL2[3], self.IMAGE2[3] = self.GPSTOWN
  148.         self.BUTTON3[3], self.LABEL3[3], self.IMAGE3[3] = self.GPSSTREET
  149.         self.BUTTON4[3], self.LABEL4[3], self.IMAGE4[3] = self.GPSLAT
  150.         self.BUTTON5[3], self.LABEL5[3], self.IMAGE5[3] = self.GPSLON
  151.         self.BUTTON6[3], self.LABEL6[3], self.IMAGE6[3] = self.GPSALT
  152.         self.BUTTON7[3], self.LABEL7[3], self.IMAGE7[3] = self.EMPTY
  153.         self.BUTTON8[3], self.LABEL8[3], self.IMAGE8[3] = self.EMPTY
  154.  
  155.         # OBC 4 - Gauges
  156.         self.MAINLABEL[self.obc_screen_max] = ['INSTRUMENTS', True, True]
  157.         self.BUTTON1[self.obc_screen_max], self.LABEL1[self.obc_screen_max], self.IMAGE1[self.obc_screen_max] = self.EMPTY
  158.         self.BUTTON2[self.obc_screen_max], self.LABEL2[self.obc_screen_max], self.IMAGE2[self.obc_screen_max] = self.EMPTY
  159.         self.BUTTON3[self.obc_screen_max], self.LABEL3[self.obc_screen_max], self.IMAGE3[self.obc_screen_max] = self.EMPTY
  160.         self.BUTTON4[self.obc_screen_max], self.LABEL4[self.obc_screen_max], self.IMAGE4[self.obc_screen_max] = self.EMPTY
  161.         self.BUTTON5[self.obc_screen_max], self.LABEL5[self.obc_screen_max], self.IMAGE5[self.obc_screen_max] = self.EMPTY
  162.         self.BUTTON6[self.obc_screen_max], self.LABEL6[self.obc_screen_max], self.IMAGE6[self.obc_screen_max] = self.EMPTY
  163.         self.BUTTON7[self.obc_screen_max], self.LABEL7[self.obc_screen_max], self.IMAGE7[self.obc_screen_max] = self.EMPTY
  164.         self.BUTTON8[self.obc_screen_max], self.LABEL8[self.obc_screen_max], self.IMAGE8[self.obc_screen_max] = self.EMPTY
  165.  
  166.  
  167.         log('OBC: GUI Opening')
  168.         self.selectedButton = -1
  169.         self.selectedSubButton = -1
  170.         self.timeoutSubMenu = 2000
  171.  
  172.         self.obc_screen_next = False
  173.  
  174.         self.isActive = True
  175.  
  176.         self.MAINLABEL[-1] = self.getControl(200)
  177.         self.mainleft = self.getControl(201)
  178.         self.mainright = self.getControl(202)
  179.  
  180.         self.IMAGE1[-1] = self.getControl(101)
  181.         self.IMAGE2[-1] = self.getControl(102)
  182.         self.IMAGE3[-1] = self.getControl(103)
  183.         self.IMAGE4[-1] = self.getControl(104)
  184.         self.IMAGE5[-1] = self.getControl(105)
  185.         self.IMAGE6[-1] = self.getControl(106)
  186.         self.IMAGE7[-1] = self.getControl(107)
  187.         self.IMAGE8[-1] = self.getControl(108)
  188.  
  189.         self.BUTTON1[-1] = self.getControl(111)
  190.         self.BUTTON2[-1] = self.getControl(112)
  191.         self.BUTTON3[-1] = self.getControl(113)
  192.         self.BUTTON4[-1] = self.getControl(114)
  193.         self.BUTTON5[-1] = self.getControl(115)
  194.         self.BUTTON6[-1] = self.getControl(116)
  195.         self.BUTTON7[-1] = self.getControl(117)
  196.         self.BUTTON8[-1] = self.getControl(118)
  197.  
  198.         self.LABEL1[-1] = self.getControl(121)
  199.         self.LABEL2[-1] = self.getControl(122)
  200.         self.LABEL3[-1] = self.getControl(123)
  201.         self.LABEL4[-1] = self.getControl(124)
  202.         self.LABEL5[-1] = self.getControl(125)
  203.         self.LABEL6[-1] = self.getControl(126)
  204.         self.LABEL7[-1] = self.getControl(127)
  205.         self.LABEL8[-1] = self.getControl(128)
  206.  
  207.         self.GAUGE_L = [self.getControl(203), self.getControl(213)]
  208.         self.GAUGE_M = [self.getControl(204), self.getControl(214)]
  209.         self.GAUGE_R = [self.getControl(205), self.getControl(215)]
  210.  
  211.         # Bottom Line
  212.         self.LABEL211 = self.getControl(211)
  213.  
  214.         self.update(startup=True)
  215.  
  216.         self.set_default_navigation()
  217.  
  218.         if self.updateTimer:
  219.             self.updateTimer.cancel()
  220.             self.updateTimer.join()
  221.         self.updateTimer = RepeatTimer(0.333, self.update)
  222.         self.updateTimer.start()
  223.  
  224.         self.some_obc_req()
  225.  
  226.         if self.updateObc:
  227.             self.updateObc.cancel()
  228.             self.updateObc.join()
  229.         self.updateObc = RepeatTimer(1, self.some_obc_req)
  230.         self.updateObc.start()
  231.  
  232.         EVENT.obc_req(True)
  233.  
  234.  
  235.     def onClick(self, controlId):
  236.         log('ONCLICK: %s' % controlId, 3)
  237.         # left
  238.         if controlId == 201:
  239.             self.obcPrev()
  240.         # right
  241.         elif controlId == 202:
  242.             self.obcNext()
  243.  
  244.  
  245.     def onAction(self, Action):
  246.         if Action in [self.ACTION_PREVIOUS_MENU, self.ACTION_CLOSE_DIALOG, self.ACTION_NAV_BACK, self.ACTION_BACKSPACE]:
  247.             self.onStop()
  248.  
  249.         if Action == self.ACTION_MOVE_LEFT and self.obc_screen > self.obc_screen_min:  # left
  250.             self.obcPrev()
  251.  
  252.         elif Action == self.ACTION_MOVE_RIGHT and self.obc_screen < self.obc_screen_max:  # right
  253.             self.obcNext()
  254.  
  255.         elif Action == self.ACTION_SELECT_ITEM:
  256.             if self.selectedButton < 0:
  257.                 if self.set_submenu(0):
  258.                     self.counter_submenu()
  259.             else:
  260.                 log('submenu selected')
  261.                 log('obc screen %s' % self.obc_screen)
  262.                 log('Button %s' % self.selectedButton)
  263.                 log('SubButton %s' % self.selectedSubButton)
  264.                 self.onSubmenuSelected(self.obc_screen, self.selectedButton, self.selectedSubButton)
  265.                 self.timeoutSubMenu = 0
  266.  
  267.         elif Action == self.ACTION_MOVE_UP:
  268.             if self.selectedButton > 0:
  269.                 self.set_submenu(self.selectedSubButton - 1)
  270.                 self.timeoutSubMenu = 2000
  271.  
  272.         elif Action == self.ACTION_MOVE_DOWN:
  273.             if self.selectedButton > 0:
  274.                 self.set_submenu(self.selectedSubButton + 1)
  275.                 self.timeoutSubMenu = 2000
  276.  
  277.         log('OBCGUI FOCUSED ID: %s' % self.getFocusId(), 3)
  278.  
  279.     def onFocus(self, controlId):
  280.         pass
  281.  
  282.     def onStop(self):
  283.         log('OBC: GUI Closing')
  284.         self.updateObc.cancel()
  285.         self.updateTimer.cancel()
  286.         self.isActive = False
  287.         self.close()
  288.  
  289.         self.updateObc.join()
  290.         self.updateTimer.join()
  291.         log('Timer joined')
  292.  
  293.         delete_object(self.updateObc)
  294.         delete_object(self.updateTimer)
  295.  
  296.  
  297.  
  298.     def set_default_navigation(self):
  299.         self.BUTTON1[-1].setNavigation(self.BUTTON1[-1], self.BUTTON2[-1], self.BUTTON1[-1], self.BUTTON1[-1])
  300.         self.BUTTON2[-1].setNavigation(self.BUTTON1[-1], self.BUTTON3[-1], self.BUTTON2[-1], self.BUTTON2[-1])
  301.         self.BUTTON3[-1].setNavigation(self.BUTTON2[-1], self.BUTTON4[-1], self.BUTTON3[-1], self.BUTTON3[-1])
  302.         self.BUTTON4[-1].setNavigation(self.BUTTON3[-1], self.BUTTON5[-1], self.BUTTON4[-1], self.BUTTON4[-1])
  303.         self.BUTTON5[-1].setNavigation(self.BUTTON4[-1], self.BUTTON6[-1], self.BUTTON5[-1], self.BUTTON5[-1])
  304.         self.BUTTON6[-1].setNavigation(self.BUTTON5[-1], self.BUTTON7[-1], self.BUTTON6[-1], self.BUTTON6[-1])
  305.         self.BUTTON7[-1].setNavigation(self.BUTTON6[-1], self.BUTTON8[-1], self.BUTTON7[-1], self.BUTTON7[-1])
  306.         self.BUTTON8[-1].setNavigation(self.BUTTON7[-1], self.BUTTON8[-1], self.BUTTON8[-1], self.BUTTON8[-1])
  307.  
  308.     def set_submenu(self, menu_pos):
  309.         if self.getFocusId() == 111:
  310.             label_textlist = self.LABEL1
  311.             label_control = self.LABEL1[-1]
  312.             self.selectedButton = 1
  313.             button_control = self.BUTTON1[-1]
  314.         elif self.getFocusId() == 112:
  315.             label_textlist = self.LABEL2
  316.             label_control = self.LABEL2[-1]
  317.             self.selectedButton = 2
  318.             button_control = self.BUTTON2[-1]
  319.         elif self.getFocusId() == 113:
  320.             label_textlist = self.LABEL3
  321.             label_control = self.LABEL3[-1]
  322.             self.selectedButton = 3
  323.             button_control = self.BUTTON3[-1]
  324.         elif self.getFocusId() == 114:
  325.             label_textlist = self.LABEL4
  326.             label_control = self.LABEL4[-1]
  327.             self.selectedButton = 4
  328.             button_control = self.BUTTON4[-1]
  329.         elif self.getFocusId() == 115:
  330.             label_textlist = self.LABEL5
  331.             label_control = self.LABEL5[-1]
  332.             self.selectedButton = 5
  333.             button_control = self.BUTTON5[-1]
  334.         elif self.getFocusId() == 116:
  335.             label_textlist = self.LABEL6
  336.             label_control = self.LABEL6[-1]
  337.             self.selectedButton = 6
  338.             button_control = self.BUTTON6[-1]
  339.         elif self.getFocusId() == 117:
  340.             label_textlist = self.LABEL7
  341.             label_control = self.LABEL7[-1]
  342.             self.selectedButton = 7
  343.             button_control = self.BUTTON7[-1]
  344.         elif self.getFocusId() == 118:
  345.             label_textlist = self.LABEL8
  346.             label_control = self.LABEL8[-1]
  347.             self.selectedButton = 8
  348.             button_control = self.BUTTON8[-1]
  349.         else:
  350.             return False
  351.  
  352.         if not len(label_textlist[self.obc_screen][3]) > 0:
  353.             self.selectedButton = -1
  354.             self.selectedSubButton = -1
  355.             return False
  356.  
  357.         if menu_pos < 0:
  358.             menu_pos = len(label_textlist[self.obc_screen][3]) - 1
  359.         elif menu_pos > len(label_textlist[self.obc_screen][3]) - 1:
  360.             menu_pos = 0
  361.  
  362.         if label_textlist[self.obc_screen][3][menu_pos]:
  363.             label_control.setLabel(' ')
  364.             time.sleep(0.100)
  365.             color = 'FFFF7E00'  # amber
  366.             # color = 'FF0084FF' # blue
  367.             # color = 'FFEEEEFF' # white
  368.  
  369.             label_control.setLabel('[COLOR %s]- %s -[/COLOR]' % (color, label_textlist[self.obc_screen][3][menu_pos]))
  370.             self.selectedSubButton = menu_pos
  371.             button_control.setNavigation(button_control, button_control, button_control, button_control)
  372.             return True
  373.         else:
  374.             self.selectedButton = -1
  375.             self.selectedSubButton = -1
  376.             return False
  377.  
  378.     def reset_submenu(self):
  379.         self.selectedButton = -1
  380.         self.selectedSubButton = -1
  381.  
  382.         self.update()
  383.         self.set_default_navigation()
  384.  
  385.     def onSubmenuSelected(self, obc_screen, button, sub_button):
  386.         if button == 1:
  387.             obc_event = self.LABEL1[obc_screen][4]
  388.         elif button == 2:
  389.             obc_event = self.LABEL2[obc_screen][4]
  390.         elif button == 3:
  391.             obc_event = self.LABEL3[obc_screen][4]
  392.         elif button == 4:
  393.             obc_event = self.LABEL4[obc_screen][4]
  394.         elif button == 5:
  395.             obc_event = self.LABEL5[obc_screen][4]
  396.         elif button == 6:
  397.             obc_event = self.LABEL6[obc_screen][4]
  398.         elif button == 7:
  399.             obc_event = self.LABEL7[obc_screen][4]
  400.         elif button == 8:
  401.             obc_event = self.LABEL8[obc_screen][4]
  402.         else:
  403.             return
  404.  
  405.         obc_event[sub_button]()
  406.  
  407.     def counter_submenu(self):
  408.         self.timeoutSubMenu = 2000
  409.         thread = Thread(target=self._counter_submenu)
  410.         thread.setDaemon(True)
  411.         thread.start()
  412.  
  413.     def _counter_submenu(self):
  414.         while self.timeoutSubMenu > 0:
  415.             if not self.pause_submenu_counter:
  416.                 self.timeoutSubMenu -= 1
  417.             time.sleep(0.001)
  418.         self.reset_submenu()
  419.  
  420.     def some_obc_req(self):
  421.         if self.obc_screen_next or self.obc_screen == self.obc_screen_max:
  422.             return
  423.         log('OBCGUI: SOME REQUEST TICK', 3)
  424.         if self.obc_screen == 2:
  425.             EVENT.obc_voltage_req()
  426.         elif self.obc_screen == 0:
  427.             EVENT.ike_get_state()
  428.         elif self.obc_screen == 3:
  429.             EVENT.nav_position_req()
  430.             EVENT.nav_location_req()
  431.  
  432.  
  433.     def obcNext(self):
  434.         self.obc_screen_next = True  # pause update
  435.         if self.obc_screen == self.obc_screen_max:
  436.             KODI.set_property('IBUSCOMMUNICATOR_OBC_Gauges', '0')
  437.         else:
  438.             KODI.set_property('IBUSCOMMUNICATOR_OBC_SLIDE', 'left_out')
  439.  
  440.         self.obc_screen += 1
  441.         if self.obc_screen > self.obc_screen_max:
  442.             inv_slide_direction = True
  443.             self.obc_screen = self.obc_screen_min
  444.         else:
  445.             inv_slide_direction = False
  446.  
  447.         time.sleep(0.5)  # wait for window animation
  448.         self.obc_screen_next = False
  449.         self.reset_submenu()
  450.         if self.obc_screen == self.obc_screen_max and self.MAINLABEL[self.obc_screen_max][2]:
  451.             KODI.set_property('IBUSCOMMUNICATOR_OBC_Gauges', '1')
  452.         else:
  453.             if inv_slide_direction:
  454.                 KODI.set_property('IBUSCOMMUNICATOR_OBC_SLIDE', 'left_in')
  455.             else:
  456.                 KODI.set_property('IBUSCOMMUNICATOR_OBC_SLIDE', 'right_in')
  457.             self.setFocus(self.BUTTON1[-1])
  458.  
  459.     def obcPrev(self):
  460.         self.obc_screen_next = True
  461.         if self.obc_screen == self.obc_screen_max and self.MAINLABEL[self.obc_screen_max][2]:
  462.             KODI.set_property('IBUSCOMMUNICATOR_OBC_Gauges', '0')
  463.         else:
  464.             KODI.set_property('IBUSCOMMUNICATOR_OBC_SLIDE', 'right_out')
  465.  
  466.         self.obc_screen -= 1
  467.         if self.obc_screen < self.obc_screen_min:
  468.             inv_slide_direction = True
  469.             self.obc_screen = self.obc_screen_max
  470.         else:
  471.             inv_slide_direction = False
  472.  
  473.         time.sleep(0.5)  # wait for window animation
  474.         self.obc_screen_next = False
  475.         self.reset_submenu()
  476.         if self.obc_screen == self.obc_screen_max:
  477.             KODI.set_property('IBUSCOMMUNICATOR_OBC_Gauges', '1')
  478.         else:
  479.             if inv_slide_direction:
  480.                 KODI.set_property('IBUSCOMMUNICATOR_OBC_SLIDE', 'right_in')
  481.             else:
  482.                 KODI.set_property('IBUSCOMMUNICATOR_OBC_SLIDE', 'left_in')
  483.             self.setFocus(self.BUTTON1[-1])
  484.  
  485.     def update(self, startup=False):
  486.  
  487.         def set_button_control(button, obc_screen):
  488.             button[-1].setLabel(button[obc_screen][0])
  489.             button[-1].setVisible(button[obc_screen][1])
  490.             button[-1].setEnabled(button[obc_screen][2])
  491.  
  492.         def set_label_control(label, obc_screen):
  493.             if label[obc_screen][0] != ' ':
  494.                 label[-1].setLabel(label[obc_screen][0]())
  495.             else:
  496.                 label[-1].setLabel(' ')
  497.             label[-1].setVisible(label[obc_screen][1])
  498.             label[-1].setEnabled(label[obc_screen][2])
  499.  
  500.         def set_img_control(image, obc_screen):
  501.             if len(image[obc_screen]) > 0:
  502.                 image[-1].setVisible(image[obc_screen][0]())
  503.             else:
  504.                 image[-1].setVisible(False)
  505.                 # control[-1].setVisibleCondition(control[obc_screen][0])
  506.  
  507.         def set_gauges():
  508.             self.GAUGE_L[0].setImage(EVENT.obc_speed_get_gauge(), False)
  509.             self.GAUGE_M[0].setImage(EVENT.obc_coolant_get_gauge(), False)
  510.             self.GAUGE_R[0].setImage(EVENT.obc_rpm_get_gauge(), False)
  511.  
  512.             rpm = EVENT.obc_rpm
  513.             if rpm < 1:
  514.                 rpm = '---'
  515.                 speed = '---'
  516.             else:
  517.                 speed = EVENT.obc_speed_kmh
  518.             self.GAUGE_L[1].setLabel('%s' % speed)
  519.             if EVENT.obc_temperature_unit == '°F':
  520.                 self.GAUGE_M[1].setLabel('%s' % EVENT.obc_coolant_F)
  521.             else:
  522.                 self.GAUGE_M[1].setLabel('%s' % EVENT.obc_coolant_C)
  523.             self.GAUGE_R[1].setLabel('%s' % rpm)
  524.  
  525.         set_button_control(self.MAINLABEL, self.obc_screen)
  526.  
  527.         # top arrows
  528.         if self.obc_screen == self.obc_screen_max:
  529.             self.mainright.setVisible(False)
  530.         else:
  531.             self.mainright.setVisible(True)
  532.         if self.obc_screen == self.obc_screen_min:
  533.             self.mainleft.setVisible(False)
  534.         else:
  535.             self.mainleft.setVisible(True)
  536.  
  537.         if not startup:
  538.             if self.obc_screen_next:
  539.                 return
  540.             elif self.obc_screen == self.obc_screen_max:
  541.                 set_gauges()
  542.                 return
  543.  
  544.         if self.selectedButton != 1:
  545.             set_button_control(self.BUTTON1, self.obc_screen)
  546.             set_label_control(self.LABEL1, self.obc_screen)
  547.             set_img_control(self.IMAGE1, self.obc_screen)
  548.         if self.selectedButton != 2:
  549.             set_button_control(self.BUTTON2, self.obc_screen)
  550.             set_label_control(self.LABEL2, self.obc_screen)
  551.             set_img_control(self.IMAGE2, self.obc_screen)
  552.         if self.selectedButton != 3:
  553.             set_button_control(self.BUTTON3, self.obc_screen)
  554.             set_label_control(self.LABEL3, self.obc_screen)
  555.             set_img_control(self.IMAGE3, self.obc_screen)
  556.         if self.selectedButton != 4:
  557.             set_button_control(self.BUTTON4, self.obc_screen)
  558.             set_label_control(self.LABEL4, self.obc_screen)
  559.             set_img_control(self.IMAGE4, self.obc_screen)
  560.         if self.selectedButton != 5:
  561.             set_button_control(self.BUTTON5, self.obc_screen)
  562.             set_label_control(self.LABEL5, self.obc_screen)
  563.             set_img_control(self.IMAGE5, self.obc_screen)
  564.         if self.selectedButton != 6:
  565.             set_button_control(self.BUTTON6, self.obc_screen)
  566.             set_label_control(self.LABEL6, self.obc_screen)
  567.             set_img_control(self.IMAGE6, self.obc_screen)
  568.         if self.selectedButton != 7:
  569.             set_button_control(self.BUTTON7, self.obc_screen)
  570.             set_label_control(self.LABEL7, self.obc_screen)
  571.             set_img_control(self.IMAGE7, self.obc_screen)
  572.         if self.selectedButton != 8:
  573.             set_button_control(self.BUTTON8, self.obc_screen)
  574.             set_label_control(self.LABEL8, self.obc_screen)
  575.             set_img_control(self.IMAGE8, self.obc_screen)
  576.  
  577.         # Bottom Text
  578.         self.LABEL211.setLabel('%s' % EVENT.obc_outtemp_get())
  579.  
  580.     def set_distance(self):
  581.         self.pause_submenu_counter = True
  582.         obc_set_value = ObcSetValueClass('OBC_SETVALUE.xml', ADDONPATH, 'Default', '720p')
  583.  
  584.         if EVENT.obc_distance_unit == 'MLS':
  585.             result = obc_set_value.get_value(EVENT.obc_dist, 1, 6213)
  586.         else:
  587.             result = obc_set_value.get_value(EVENT.obc_dist, 1, 9999)
  588.         log('Value set %s' % result)
  589.  
  590.         if result != -1:
  591.             EVENT.obc_dist_set(result)
  592.  
  593.         delete_object(obc_set_value)
  594.         self.pause_submenu_counter = False
  595.  
  596.     def set_limit(self):
  597.         self.pause_submenu_counter = True
  598.         obc_set_value = ObcSetValueClass('OBC_SETVALUE.xml', ADDONPATH, 'Default', '720p')
  599.  
  600.         if EVENT.obc_speed_unit == 'MPH':
  601.             result = obc_set_value.get_value(EVENT.obc_limit, 4, 199)
  602.         else:
  603.             result = obc_set_value.get_value(EVENT.obc_limit, 6, 299)
  604.         log('Value set %s' % result)
  605.  
  606.         if result != -1:
  607.             EVENT.obc_limit_set(result)
  608.  
  609.         delete_object(obc_set_value)
  610.         self.pause_submenu_counter = False
  611.  
  612.     def set_timer(self, timer):
  613.         self.pause_submenu_counter = True
  614.         if EVENT.obc_time_unit == '12H':
  615.             obc_set_timer = ObcSetTimer12Class('OBC_SETTIMER12.xml', ADDONPATH, 'Default', '720p')
  616.         else:
  617.             obc_set_timer = ObcSetTimer24Class('OBC_SETTIMER24.xml', ADDONPATH, 'Default', '720p')
  618.  
  619.         result = obc_set_timer.get_value()
  620.  
  621.         log('Value set %s' % result)
  622.  
  623.         if result:
  624.             if timer == 1:
  625.                 EVENT.obc_tmr1_set(result[0], result[1])
  626.             if timer == 2:
  627.                 EVENT.obc_tmr2_set(result[0], result[1])
  628.  
  629.         delete_object(obc_set_timer)
  630.  
  631.         self.pause_submenu_counter = False
  632.  
  633. class ObcSetValueClass(xbmcgui.WindowXMLDialog):
  634.         isActive = False
  635.  
  636.         ACTION_PARENT_DIR = 9
  637.         ACTION_PREVIOUS_MENU = 10
  638.         ACTION_CLOSE_DIALOG = 51
  639.         ACTION_SELECT_ITEM = 7
  640.         ACTION_MOVE_LEFT = 1
  641.         ACTION_MOVE_RIGHT = 2
  642.         ACTION_MOVE_UP = 3
  643.         ACTION_MOVE_DOWN = 4
  644.         ACTION_NAV_BACK = 92
  645.         ACTION_BACKSPACE = 110
  646.  
  647.         def __init__(self, xmlFilename, scriptPath, defaultSkin, defaultRes):
  648.             log("Initializing OBC Set-Value Gui...")
  649.             self.input_value_start = -1
  650.             self.input_value_min = 0
  651.             self.input_value_max = 0
  652.  
  653.         def onInit(self):
  654.             log('OBC: Set-Value GUI Opening')
  655.  
  656.             self.input_value = self.input_value_start
  657.  
  658.             self.ENTER = self.getControl(201)
  659.             #self.BUTTON1 = self.getControl(202)  # HH
  660.             self.BUTTON2 = self.getControl(203)  # MM , DISTANCE, LIMIT
  661.             #self.BUTTON3 = self.getControl(204)  # AM/PM
  662.             self.CANCEL = self.getControl(205)
  663.  
  664.             self.selectedButton = -1
  665.  
  666.             self.isActive = True
  667.  
  668.             self.setFocus(self.BUTTON2)
  669.             self.BUTTON2.setLabel(('%s' % self.input_value).zfill(2))
  670.  
  671.             self.set_default_navigation()
  672.  
  673.             time.sleep(0.050)
  674.             self.submenu_set()
  675.  
  676.         def onAction(self, Action):
  677.             log('OBC VALUE: ACTION ID: %s' % Action.getId(), 2)
  678.             log('OBC VALUE: FOCUS ID: %s' % self.getFocusId(), 2)
  679.  
  680.             if Action in [self.ACTION_PREVIOUS_MENU, self.ACTION_CLOSE_DIALOG, self.ACTION_NAV_BACK, self.ACTION_BACKSPACE]:
  681.                 self.input_value = -1
  682.                 self.onStop()
  683.  
  684.             if Action == self.ACTION_MOVE_LEFT:  # left
  685.                 pass
  686.  
  687.             elif Action == self.ACTION_MOVE_RIGHT:  # right
  688.                 pass
  689.  
  690.             elif Action == self.ACTION_SELECT_ITEM:
  691.                 if self.getFocus() == self.ENTER:
  692.                     self.onStop()
  693.                     return
  694.                 elif self.getFocus() == self.CANCEL:
  695.                     self.input_value = -1
  696.                     self.onStop()
  697.                     return
  698.  
  699.                 # togle between on and off mode
  700.                 if self.selectedButton < 0:
  701.                     log('OBC Value: SubAction Enable')
  702.                     self.submenu_set()
  703.                 else:
  704.                     log('OBC Value: SubAction Disable')
  705.                     kodi_jump = False
  706.                     if self.selectedButton == 203:
  707.                         kodi_jump = True
  708.                     self.submenu_reset()
  709.                     if kodi_jump: KODI.left()
  710.  
  711.             elif Action == self.ACTION_MOVE_UP:
  712.                 if self.selectedButton == 203:
  713.                     self.input_value += 1
  714.                     if self.input_value > self.input_value_max:
  715.                         self.input_value = self.input_value_max
  716.                     self.BUTTON2.setLabel(('%s' % self.input_value).zfill(2))
  717.  
  718.             elif Action == self.ACTION_MOVE_DOWN:
  719.                 if self.selectedButton == 203:
  720.                     self.input_value -= 1
  721.                     if self.input_value < self.input_value_min:
  722.                         self.input_value = self.input_value_min
  723.                     self.BUTTON2.setLabel(('%s' % self.input_value).zfill(2))
  724.  
  725.         def onFocus(self, controlId):
  726.             pass
  727.  
  728.         def onStop(self):
  729.             log('OBC: GUI Closing')
  730.             self.submenu_reset()
  731.             self.close()
  732.             self.isActive = False
  733.  
  734.  
  735.         def get_value(self, value_start=0, value_min=0, value_max=500):
  736.             if value_start < value_min or value_start > value_max:
  737.                 self.input_value_start = value_min
  738.             else:
  739.                 self.input_value_start = value_start
  740.             self.input_value_min = value_min
  741.             self.input_value_max = value_max
  742.  
  743.             self.doModal()
  744.  
  745.             return self.input_value
  746.  
  747.         def set_default_navigation(self):
  748.             # setNavigation(up, down, left, right) -- Set's the controls navigation.
  749.             self.ENTER.setNavigation(self.BUTTON2, self.ENTER, self.ENTER, self.BUTTON2)
  750.  
  751.             #self.BUTTON1.setNavigation(self.BUTTON2, self.BUTTON1, self.ENTER, self.BUTTON2)
  752.             self.BUTTON2.setNavigation(self.CANCEL, self.ENTER, self.ENTER, self.CANCEL)
  753.             #self.BUTTON3.setNavigation(self.CANCEL, self.BUTTON3, self.BUTTON2, self.CANCEL)
  754.  
  755.             self.CANCEL.setNavigation(self.CANCEL, self.BUTTON2, self.BUTTON2, self.CANCEL)
  756.  
  757.         def submenu_set(self):
  758.             if self.getFocusId() == 203:
  759.                 self.selectedButton = 203
  760.                 self.BUTTON2.setLabel(('%s' % self.input_value).zfill(2), textColor='0xFF000000')
  761.                 self.BUTTON2.setNavigation(self.BUTTON2, self.BUTTON2, self.BUTTON2, self.BUTTON2)
  762.  
  763.         def submenu_reset(self):
  764.             self.BUTTON2.setLabel(('%s' % self.input_value).zfill(2), textColor='0xFFEEEEFF')
  765.             self.selectedButton = -1
  766.             self.set_default_navigation()
  767.  
  768. class ObcSetTimer12Class(xbmcgui.WindowXMLDialog):
  769.             isActive = False
  770.  
  771.             ACTION_PARENT_DIR = 9
  772.             ACTION_PREVIOUS_MENU = 10
  773.             ACTION_CLOSE_DIALOG = 51
  774.             ACTION_SELECT_ITEM = 7
  775.             ACTION_MOVE_LEFT = 1
  776.             ACTION_MOVE_RIGHT = 2
  777.             ACTION_MOVE_UP = 3
  778.             ACTION_MOVE_DOWN = 4
  779.             ACTION_NAV_BACK = 92
  780.             ACTION_BACKSPACE = 110
  781.  
  782.             def __init__(self, xmlFilename, scriptPath, defaultSkin, defaultRes):
  783.                 log("Initializing OBC Set-Time 12 Gui...")
  784.                 self.input_value_hour = -1
  785.                 self.input_value_minute = -1
  786.                 self.input_value_am_pm = 'AM'
  787.  
  788.             def onInit(self):
  789.                 log('OBC: Set-Value GUI Opening')
  790.  
  791.                 self.ENTER = self.getControl(201)
  792.                 self.BUTTON1 = self.getControl(202)  # HH
  793.                 self.BUTTON2 = self.getControl(203)  # MM
  794.                 self.BUTTON3 = self.getControl(204)  # AM/PM
  795.                 self.CANCEL = self.getControl(205)
  796.  
  797.                 self.selectedButton = -1
  798.  
  799.                 self.isActive = True
  800.  
  801.                 self.setFocus(self.BUTTON3)
  802.                 self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2))
  803.                 self.BUTTON2.setLabel(('%s' % self.input_value_minute).zfill(2))
  804.                 self.BUTTON3.setLabel('%s' % self.input_value_am_pm)
  805.  
  806.                 self.set_default_navigation()
  807.  
  808.                 time.sleep(0.050)
  809.                 self.submenu_set()
  810.  
  811.             def onAction(self, Action):
  812.                 if Action in [self.ACTION_PREVIOUS_MENU, self.ACTION_CLOSE_DIALOG, self.ACTION_NAV_BACK, self.ACTION_BACKSPACE]:
  813.                     self.input_value_hour = -1
  814.                     self.input_value_minute = -1
  815.                     self.input_value_am_pm = ' '
  816.                     self.onStop()
  817.  
  818.                 if Action == self.ACTION_MOVE_LEFT:  # left
  819.                     pass
  820.  
  821.                 elif Action == self.ACTION_MOVE_RIGHT:  # right
  822.                     pass
  823.  
  824.                 elif Action == self.ACTION_SELECT_ITEM:
  825.                     if self.getFocus() == self.ENTER:
  826.                         self.onStop()
  827.                         return
  828.                     elif self.getFocus() == self.CANCEL:
  829.                         self.input_value_hour = -1
  830.                         self.input_value_minute = -1
  831.                         self.input_value_am_pm = ' '
  832.                         self.onStop()
  833.                         return
  834.  
  835.                     # togle between on and off mode
  836.                     if self.selectedButton < 0:
  837.                         self.submenu_set()
  838.                     else:
  839.                         log('submenu selected')
  840.                         self.submenu_reset()
  841.  
  842.  
  843.                 elif Action == self.ACTION_MOVE_UP:
  844.                     if self.selectedButton == 202:
  845.                         self.input_value_hour += 1
  846.                         if self.input_value_hour > 12:
  847.                             self.input_value_hour = 1
  848.                         self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2))
  849.  
  850.                     elif self.selectedButton == 203:
  851.                         self.input_value_minute += 1
  852.                         if self.input_value_minute > 59:
  853.                             self.input_value_minute = 0
  854.                         self.BUTTON2.setLabel(('%s' % self.input_value_minute).zfill(2))
  855.  
  856.                     elif self.selectedButton == 204:
  857.                         if self.input_value_am_pm == 'AM':
  858.                             self.input_value_am_pm = 'PM'
  859.                         else:
  860.                             self.input_value_am_pm = 'AM'
  861.                         self.BUTTON3.setLabel('%s' % self.input_value_am_pm)
  862.  
  863.                 elif Action == self.ACTION_MOVE_DOWN:
  864.                     if self.selectedButton == 202:
  865.                         self.input_value_hour -= 1
  866.                         if self.input_value_hour < 1:
  867.                             self.input_value_hour = 12
  868.                         self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2))
  869.  
  870.                     elif self.selectedButton == 203:
  871.                         self.input_value_minute -= 1
  872.                         if self.input_value_minute < 0:
  873.                             self.input_value_minute = 59
  874.                         self.BUTTON2.setLabel(('%s' % self.input_value_minute).zfill(2))
  875.  
  876.                     elif self.selectedButton == 204:
  877.                         if self.input_value_am_pm == 'AM':
  878.                             self.input_value_am_pm = 'PM'
  879.                         else:
  880.                             self.input_value_am_pm = 'AM'
  881.                         self.BUTTON3.setLabel('%s' % self.input_value_am_pm)
  882.  
  883.                 log('OBCGUI FOCUSED ID: %s' % self.getFocusId(), 3)
  884.  
  885.             def onFocus(self, controlId):
  886.                 pass
  887.  
  888.             def onStop(self):
  889.                 log('OBC: GUI Closing')
  890.                 self.submenu_reset()
  891.                 self.close()
  892.                 self.isActive = False
  893.  
  894.             def get_value(self, value_hour=12, value_minute=0, value_am_pm='AM'):
  895.  
  896.                 self.input_value_hour = value_hour
  897.                 self.input_value_minute = value_minute
  898.                 self.input_value_am_pm = value_am_pm
  899.  
  900.                 self.doModal()
  901.  
  902.                 if self.input_value_hour < 0:
  903.                     return None
  904.                 else:
  905.                     # 00:00 – 11:59 Uhr = AM
  906.                     # 12:00 – 23:59 Uhr = PM
  907.                     # https://de.wikipedia.org/wiki/24-Stunden-Z%C3%A4hlung
  908.                     if self.input_value_am_pm == 'AM':
  909.                         if self.input_value_hour == 12:
  910.                             self.input_value_hour = 0
  911.                     if self.input_value_am_pm == 'PM':
  912.                         if self.input_value_hour <= 12:
  913.                             self.input_value_hour += 12
  914.                         if self.input_value_hour > 23:
  915.                             self.input_value_hour = 0
  916.  
  917.                     return [self.input_value_hour, self.input_value_minute]
  918.  
  919.  
  920.             def set_default_navigation(self):
  921.                 # setNavigation(up, down, left, right) -- Set's the controls navigation.
  922.                 self.ENTER.setNavigation(self.BUTTON1, self.ENTER, self.ENTER, self.BUTTON1)
  923.  
  924.                 self.BUTTON1.setNavigation(self.BUTTON2, self.ENTER, self.ENTER, self.BUTTON2)
  925.                 self.BUTTON2.setNavigation(self.BUTTON3, self.BUTTON1, self.BUTTON1, self.BUTTON3)
  926.                 self.BUTTON3.setNavigation(self.CANCEL, self.BUTTON2, self.BUTTON2, self.CANCEL)
  927.  
  928.                 self.CANCEL.setNavigation(self.CANCEL, self.BUTTON3, self.BUTTON3, self.CANCEL)
  929.  
  930.             def submenu_set(self):
  931.                 if self.getFocusId() == 202:
  932.                     self.selectedButton = 202
  933.                     self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2), textColor='0xFF000000')
  934.                     self.BUTTON1.setNavigation(self.BUTTON1, self.BUTTON1, self.BUTTON1, self.BUTTON1)
  935.                 elif self.getFocusId() == 203:
  936.                     self.selectedButton = 203
  937.                     self.BUTTON2.setLabel(('%s' % self.input_value_minute).zfill(2), textColor='0xFF000000')
  938.                     self.BUTTON2.setNavigation(self.BUTTON2, self.BUTTON2, self.BUTTON2, self.BUTTON2)
  939.                 elif self.getFocusId() == 204:
  940.                     self.selectedButton = 204
  941.                     self.BUTTON3.setLabel('%s' % self.input_value_am_pm, textColor='0xFF000000')
  942.                     self.BUTTON3.setNavigation(self.BUTTON3, self.BUTTON3, self.BUTTON3, self.BUTTON3)
  943.  
  944.             def submenu_reset(self):
  945.                 self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2), textColor='0xFFEEEEFF')
  946.                 self.BUTTON2.setLabel(('%s' % self.input_value_minute).zfill(2), textColor='0xFFEEEEFF')
  947.                 self.BUTTON3.setLabel('%s' % self.input_value_am_pm, textColor='0xFFEEEEFF')
  948.                 self.selectedButton = -1
  949.                 self.set_default_navigation()
  950.  
  951. class ObcSetTimer24Class(xbmcgui.WindowXMLDialog):
  952.                 isActive = False
  953.  
  954.                 ACTION_PARENT_DIR = 9
  955.                 ACTION_PREVIOUS_MENU = 10
  956.                 ACTION_CLOSE_DIALOG = 51
  957.                 ACTION_SELECT_ITEM = 7
  958.                 ACTION_MOVE_LEFT = 1
  959.                 ACTION_MOVE_RIGHT = 2
  960.                 ACTION_MOVE_UP = 3
  961.                 ACTION_MOVE_DOWN = 4
  962.                 ACTION_NAV_BACK = 92
  963.                 ACTION_BACKSPACE = 110
  964.  
  965.                 def __init__(self, xmlFilename, scriptPath, defaultSkin, defaultRes):
  966.                     log("Initializing OBC Set-Time 24 Gui...")
  967.                     self.input_value_hour = -1
  968.                     self.input_value_minute = -1
  969.  
  970.  
  971.                 def onInit(self):
  972.                     log('OBC: Set-Value GUI Opening')
  973.  
  974.                     self.ENTER = self.getControl(201)
  975.                     self.BUTTON1 = self.getControl(202)  # HH
  976.                     #self.BUTTON2 = self.getControl(203)  # MM
  977.                     self.BUTTON3 = self.getControl(204)  # AM/PM
  978.                     self.CANCEL = self.getControl(205)
  979.  
  980.                     self.selectedButton = -1
  981.  
  982.                     self.isActive = True
  983.  
  984.                     self.setFocus(self.BUTTON3)
  985.                     self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2))
  986.                     self.BUTTON3.setLabel(('%s' % self.input_value_minute).zfill(2))
  987.  
  988.                     self.set_default_navigation()
  989.  
  990.                     time.sleep(0.050)
  991.                     self.submenu_set()
  992.  
  993.                 def onAction(self, Action):
  994.                     if Action in [self.ACTION_PREVIOUS_MENU, self.ACTION_CLOSE_DIALOG, self.ACTION_NAV_BACK, self.ACTION_BACKSPACE]:
  995.                         self.input_value_hour = -1
  996.                         self.input_value_minute = -1
  997.                         self.onStop()
  998.  
  999.                     if Action == self.ACTION_MOVE_LEFT:  # left
  1000.                         pass
  1001.  
  1002.                     elif Action == self.ACTION_MOVE_RIGHT:  # right
  1003.                         pass
  1004.  
  1005.                     elif Action == self.ACTION_SELECT_ITEM:
  1006.                         if self.getFocus() == self.ENTER:
  1007.                             self.onStop()
  1008.                             return
  1009.                         elif self.getFocus() == self.CANCEL:
  1010.                             self.input_value_hour = -1
  1011.                             self.input_value_minute = -1
  1012.                             self.onStop()
  1013.                             return
  1014.  
  1015.                         # togle between on and off mode
  1016.                         if self.selectedButton < 0:
  1017.                             self.submenu_set()
  1018.                         else:
  1019.                             log('submenu selected')
  1020.                             self.submenu_reset()
  1021.  
  1022.  
  1023.                     elif Action == self.ACTION_MOVE_UP:
  1024.                         if self.selectedButton == 202:
  1025.                             self.input_value_hour += 1
  1026.                             if self.input_value_hour > 23:
  1027.                                 self.input_value_hour = 0
  1028.                             self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2))
  1029.  
  1030.                         elif self.selectedButton == 204:
  1031.                             self.input_value_minute += 1
  1032.                             if self.input_value_minute > 59:
  1033.                                 self.input_value_minute = 0
  1034.                             self.BUTTON3.setLabel(('%s' % self.input_value_minute).zfill(2))
  1035.  
  1036.                     elif Action == self.ACTION_MOVE_DOWN:
  1037.                         if self.selectedButton == 202:
  1038.                             self.input_value_hour -= 1
  1039.                             if self.input_value_hour < 0:
  1040.                                 self.input_value_hour = 23
  1041.                             self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2))
  1042.  
  1043.                         elif self.selectedButton == 204:
  1044.                             self.input_value_minute -= 1
  1045.                             if self.input_value_minute < 0:
  1046.                                 self.input_value_minute = 59
  1047.                             self.BUTTON3.setLabel(('%s' % self.input_value_minute).zfill(2))
  1048.  
  1049.                     log('OBCGUI FOCUSED ID: %s' % self.getFocusId(), 3)
  1050.  
  1051.                 def onFocus(self, controlId):
  1052.                     pass
  1053.  
  1054.                 def onStop(self):
  1055.                     log('OBC: GUI Closing')
  1056.                     self.submenu_reset()
  1057.                     self.close()
  1058.                     self.isActive = False
  1059.  
  1060.                 def get_value(self, value_hour=0, value_minute=0):
  1061.  
  1062.                     self.input_value_hour = value_hour
  1063.                     self.input_value_minute = value_minute
  1064.  
  1065.                     self.doModal()
  1066.  
  1067.                     if self.input_value_hour < 0:
  1068.                         return None
  1069.                     else:
  1070.                         return [self.input_value_hour, self.input_value_minute]
  1071.  
  1072.                 def set_default_navigation(self):
  1073.                     # setNavigation(up, down, left, right) -- Set's the controls navigation.
  1074.                     self.ENTER.setNavigation(self.BUTTON1, self.ENTER, self.ENTER, self.BUTTON1)
  1075.  
  1076.                     self.BUTTON1.setNavigation(self.BUTTON3, self.ENTER, self.ENTER, self.BUTTON3)
  1077.  
  1078.                     self.BUTTON3.setNavigation(self.CANCEL, self.BUTTON1, self.BUTTON1, self.CANCEL)
  1079.  
  1080.                     self.CANCEL.setNavigation(self.CANCEL, self.BUTTON3, self.BUTTON3, self.CANCEL)
  1081.  
  1082.                 def submenu_set(self):
  1083.                     if self.getFocusId() == 202:
  1084.                         self.selectedButton = 202
  1085.                         self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2), textColor='0xFF000000')
  1086.                         self.BUTTON1.setNavigation(self.BUTTON1, self.BUTTON1, self.BUTTON1, self.BUTTON1)
  1087.                     elif self.getFocusId() == 204:
  1088.                         self.selectedButton = 204
  1089.                         self.BUTTON3.setLabel(('%s' % self.input_value_minute).zfill(2), textColor='0xFF000000')
  1090.                         self.BUTTON3.setNavigation(self.BUTTON3, self.BUTTON3, self.BUTTON3, self.BUTTON3)
  1091.  
  1092.                 def submenu_reset(self):
  1093.                     self.BUTTON1.setLabel(('%s' % self.input_value_hour).zfill(2), textColor='0xFFEEEEFF')
  1094.                     self.BUTTON3.setLabel(('%s' % self.input_value_minute).zfill(2), textColor='0xFFEEEEFF')
  1095.                     self.selectedButton = -1
  1096.                     self.set_default_navigation()
  1097.  
  1098. def obc_open_gui(self):
  1099.     # log('OBC: current Window ID: %s' % xbmcgui.getCurrentWindowId())
  1100.     if xbmcgui.getCurrentWindowDialogId() == 10140:  # AddonSettings
  1101.         KODI.back()
  1102.     if OBCGUI.isActive and xbmcgui.getCurrentWindowId() == OBCGUI.window_id:
  1103.         OBCGUI.onStop()
  1104.     elif OBCGUI.isActive:
  1105.         OBCGUI.onStop()
  1106.         OBCGUI.show()
  1107.     else:
  1108.         OBCGUI.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement