def up(self):
     if self.current_y == 0:
         if self.start_channel_id - settings.getDisplayChannelsCount() < 0:
             self.start_channel_id = 0
         else:
             self.start_channel_id -= settings.getDisplayChannelsCount()
         self.displayChannels()
         self.setFocus(0, settings.getDisplayChannelsCount() - 1)
         self.setTimesLabels()
     else:
         self.current_y -= 1
         self.current_x = 0
         self.setFocus(self.current_x, self.current_y)
 def down(self):
     if len(self.currentGrid) - 1 == self.current_y:
         if (self.start_channel_id + settings.getDisplayChannelsCount()) > (
                 self.getChannelsCount() -
                 settings.getDisplayChannelsCount()):
             self.start_channel_id = self.getChannelsCount(
             ) - settings.getDisplayChannelsCount()
         else:
             self.start_channel_id += settings.getDisplayChannelsCount()
         self.displayChannels()
         self.setFocus(0, 0)
         self.setTimesLabels()
     else:
         self.current_y += 1
         self.current_x = 0
         self.setFocus(self.current_x, self.current_y)
    def __getGridPortion(self):
        def __removeDuplicates(plist):
            rem = []
            for i in range(len(plist)):
                for y in range(len(plist)):
                    if y != i and int(plist[y]["start"]) == int(
                            plist[i]["start"]):
                        idx = i if int(plist[y]["end"]) > int(
                            plist[i]["end"]) else y
                        if not idx in rem:
                            rem.append(idx)
                        break
            remrt = []
            for i in range(len(plist)):
                if not i in rem:
                    remrt.append(plist[i])
            return remrt

        grid = self.globalGrid[self.start_channel_id:self.start_channel_id +
                               settings.getDisplayChannelsCount()]
        tbr = []
        for channel in grid:
            programs = []
            for program in __removeDuplicates(channel["programs"]):

                stop = strToDatetime(program["end"])
                start = strToDatetime(program["start"])

                if stop > self.start_time and start < self.stop_time:
                    programs.append(program)

            tbr.append({
                "db_id": channel["db_id"],
                "id_channel": channel["id_channel"],
                "display_name": channel["display_name"],
                "programs": programs,
                "logo": channel["logo"]
            })
        return tbr
    def __init__(self, window):

        self.window = window
        self.start_time = self.stop_time = None
        self.start_channel_id = 0

        globalControl = self.window.getControl(EPGControl.GLOBAL_CONTROL)
        self.left, self.top = globalControl.getPosition()
        self.right = self.left + globalControl.getWidth()
        self.bottom = self.top + globalControl.getHeight()
        self.width = globalControl.getWidth()
        self.cellHeight = globalControl.getHeight(
        ) / settings.getDisplayChannelsCount()

        start_time = datetime.now()
        self.start_time = start_time.replace(
            minute=(0 if start_time.minute <= 29 else 30))
        self.stop_time = self.start_time + timedelta(
            minutes=settings.getTimelineToDisplay() - 2)

        self.setEPGBackgrounds()
        self.setTimeMarker(timer=True)
        self.setTimesLabels()