Update of /cvsroot/freevo/freevo/src/tv
In directory sc8-pr-cvs1:/tmp/cvs-serv8709/tv

Modified Files:
        tv.py 
Added Files:
        tvguide.py 
Removed Files:
        tvmenu.py 
Log Message:
Added new tv main menu for the new skin. This includes the tv guide 
(file is now called tvguide and not tvmenu) and DIR_RECORD. This
directory is sort by date and can have a different menu style in the skin.
See blue_round2 as example: there is a tv watermark, no view area and
the listing area is larger.


--- NEW FILE: tvguide.py ---
# Configuration file. Determines where to look for AVI/MP3 files, etc
# Logging is initialized here, so it should be imported first
import config

import sys
import os
import time
import copy

# Various utilities
import util

import gui
import skin

# The RemoteControl class, sets up a UDP daemon that the remote control client
# sends commands to
import rc

# The Electronic Program Guide
import epg_xmltv as epg, epg_types

import record_video

rc   = rc.get_singleton()   # Create the remote control object
skin = skin.get_singleton() # Create the Skin object



DEBUG = config.DEBUG

TRUE = 1
FALSE = 0

CHAN_NO_DATA = 'This channel has no data loaded'


class TVGuide:
    def __init__(self):
        self.n_cols  = 4
        self.col_time = 30 # each col represents 30 minutes 
        self.all_channels = epg.get_guide().chan_list
        self.n_items = skin.DrawTVGuide_ItemsPerPage(self)


    def eventhandler(self, event):
        if hasattr(self, 'event_%s' % event):
            eval('self.event_%s()' % event)
        elif event == rc.CHUP:
            self.event_PageUp()
        elif event == rc.CHDOWN:
            self.event_PageDown()

        elif event == rc.REC:
            record_video.main_menu(self.selected)

        else:
            print 'No action defined to event: "%s"' % (event)
            return None


    def refresh(self):
        skin.DrawTVGuide(self)


    def rebuild(self, start_time, stop_time, start_channel, selected):

        self.guide = epg.get_guide()
        channels = self.guide.GetPrograms(start=start_time+1, stop=stop_time-1)

        table = [ ]

        self.start_time    = start_time
        self.stop_time     = stop_time
        self.start_channel = start_channel
        self.selected      = selected

        self.display_up_arrow   = FALSE
        self.display_down_arrow = FALSE


        # table header
        table += [ ['Chan'] ]
        for i in range(self.n_cols):
            table[0] += [ start_time + self.col_time * i* 60 ]

        table += [ self.selected ] # the selected program

        found_1stchannel = 0
        if stop_time == None:
            found_1stchannel = 1
            
        flag_selected = 0

        n = 0
        for chan in channels:
            if n >= self.n_items:
                self.display_down_arrow = TRUE
                break
            
            if start_channel != None and chan.id == start_channel:
                found_1stchannel = 1            

            if not found_1stchannel:
                self.display_up_arrow = TRUE
                
            if found_1stchannel:
                if not chan.programs:
                    prg = epg_types.TvProgram()
                    prg.channel_id = chan.id
                    prg.start = 0
                    prg.stop = 2147483647   # Year 2038
                    prg.title = CHAN_NO_DATA
                    prg.desc = ''
                    chan.programs = [ prg ]

                    
                for i in range(len(chan.programs)):
                    if selected:
                        if chan.programs[i] == selected:
                            flag_selected = 1
                                
                table += [  chan  ]
                n += 1

        if flag_selected == 0:
            for i in range(2, len(table)):
                if flag_selected == 1:
                    break
                else:
                    if table[i].programs:
                        for j in range(len(table[i].programs)):
                            if table[i].programs[j].stop > start_time:
                                self.selected = table[i].programs[j]
                                table[1] = table[i].programs[j]
                                flag_selected = 1
                                break

        self.table = table
        skin.DrawTVGuide(self)



    def event_RIGHT(self):
        start_time    = self.start_time
        stop_time     = self.stop_time
        start_channel = self.start_channel
        last_prg      = self.selected

        if last_prg.stop >= stop_time:
            start_time += (self.col_time * 60)
            stop_time += (self.col_time * 60)
            
        channel = self.guide.chan_dict[last_prg.channel_id]
        all_programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id 
])

        # Current channel programs
        programs = all_programs[0].programs
        if programs:
            for i in range(len(programs)):
                if programs[i].title == last_prg.title and \
                   programs[i].start == last_prg.start and \
                   programs[i].stop == last_prg.stop and \
                   programs[i].channel_id == last_prg.channel_id:
                    break

            prg = None
            if i < len(programs) - 1:
                prg = programs[i+1]
            else:
                prg = programs[i]
            if prg.sub_title:
                procdesc = '"' + prg.sub_title + '"\n' + prg.desc
            else:
                procdesc = prg.desc
            to_info = (prg.title, procdesc)
        else:
            prg = epg_types.TvProgram()
            prg.channel_id = channel.id            
            prg.start = 0
            prg.stop = 2147483647   # Year 2038
            prg.title = CHAN_NO_DATA
            prg.desc = ''
            to_info = CHAN_NO_DATA

        self.rebuild(start_time, stop_time, start_channel, prg)
        


    def event_LEFT(self):
        start_time    = self.start_time
        stop_time     = self.stop_time
        start_channel = self.start_channel
        last_prg      = self.selected

        if last_prg.start <= start_time:
            start_time -= (self.col_time * 60)
            stop_time -= (self.col_time * 60)
            
        channel = self.guide.chan_dict[last_prg.channel_id]
        programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
        programs = programs[0].programs        
        if programs:
            for i in range(len(programs)):
                if programs[i].title == last_prg.title and \
                   programs[i].start == last_prg.start and \
                   programs[i].stop == last_prg.stop and \
                   programs[i].channel_id == last_prg.channel_id:
                    break

            prg = None
            if i > 0:
                prg = programs[i-1]
            else:
                prg = programs[i]
            if prg.sub_title:
                procdesc = '"' + prg.sub_title + '"\n' + prg.desc
            else:
                procdesc = prg.desc
            to_info = (prg.title, procdesc)
        else:
            prg = epg_types.TvProgram()
            prg.channel_id = channel.id            
            prg.start = 0
            prg.stop = 2147483647   # Year 2038
            prg.title = CHAN_NO_DATA
            prg.desc = ''
            to_info = CHAN_NO_DATA
            
        self.rebuild(start_time, stop_time, start_channel, prg)

        
    def event_DOWN(self):
        start_time    = self.start_time
        stop_time     = self.stop_time
        start_channel = self.start_channel
        last_prg      = self.selected

        n = 1
        flag_start_channel = 0
        for i in range(len(self.guide.chan_list)):
            if self.guide.chan_list[i].id == start_channel:
                flag_start_channel = 1                                        
            if self.guide.chan_list[i].id == last_prg.channel_id:
                break
            if flag_start_channel == 1:
                n += 1

        if n >= self.n_items and (i-self.n_items+2) < len(self.guide.chan_list):
            start_channel = self.guide.chan_list[i-self.n_items+2].id
        else:
            channel = self.guide.chan_list[i]

        channel = None
        if i < len(self.guide.chan_list) - 1:
            channel = self.guide.chan_list[i+1]
        else:
            channel = self.guide.chan_list[i]


        programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
        programs = programs[0].programs


        prg = None
        if programs and len(programs) > 0:
            for i in range(len(programs)):
                if programs[i].stop > last_prg.start and programs[i].stop > start_time:
                    break

                
            prg = programs[i]
            if prg.sub_title:
                procdesc = '"' + prg.sub_title + '"\n' + prg.desc
            else:
                procdesc = prg.desc
            
            to_info = (prg.title, procdesc)
        else:
            prg = epg_types.TvProgram()
            prg.channel_id = channel.id            
            prg.start = 0
            prg.stop = 2147483647   # Year 2038
            prg.title = CHAN_NO_DATA
            prg.desc = ''
            to_info = CHAN_NO_DATA

        self.rebuild(start_time, stop_time, start_channel, prg)





    def event_UP(self):
        start_time    = self.start_time
        stop_time     = self.stop_time
        start_channel = self.start_channel
        last_prg      = self.selected

        if last_prg == None:
            last_prg = epg_types.TvProgram()

        n = 0
        flag_start_channel = 0
        for i in range(len(self.guide.chan_list)):
            if self.guide.chan_list[i].id == start_channel:
                flag_start_channel = 1
            if self.guide.chan_list[i].id == last_prg.channel_id:
                break
            if flag_start_channel == 1:
                n += 1


        channel = None
        if i > 0:
            channel = self.guide.chan_list[i-1]
            if n == 0:
                start_channel = self.guide.chan_list[i-1].id
                
        else:
            channel = self.guide.chan_list[i]


        programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
        programs = programs[0].programs

        if programs and len(programs) > 0:
            for i in range(len(programs)):
                if programs[i].stop > last_prg.start and programs[i].stop > start_time:
                    break

            prg = programs[i]
            if prg.sub_title:
                procdesc = '"' + prg.sub_title + '"\n' + prg.desc
            else:
                procdesc = prg.desc
            
            to_info = (prg.title, procdesc)
        else:
            prg = epg_types.TvProgram()
            prg.channel_id = channel.id            
            prg.start = 0
            prg.stop = 2147483647   # Year 2038
            prg.title = 'This channel has no data loaded'
            prg.desc = ''
            to_info = 'This channel has no data loaded'

            
        self.rebuild(start_time, stop_time, start_channel, prg)


    def event_PageUp(self):
        start_time    = self.start_time
        stop_time     = self.stop_time
        start_channel = self.start_channel
        last_prg      = self.selected

        for i in range(len(self.guide.chan_list)):
            if self.guide.chan_list[i].id == last_prg.channel_id:
                break


        channel = None
        if i-self.n_items > 0:
            channel = self.guide.chan_list[i-self.n_items]
            start_channel = self.guide.chan_list[i-self.n_items].id
        else:
            channel = self.guide.chan_list[0]
            start_channel = self.guide.chan_list[0].id


        programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
        programs = programs[0].programs


        prg = None
        if programs and len(programs) > 0:
            for i in range(len(programs)):
                if programs[i].stop > last_prg.start and programs[i].stop > start_time:
                    break

                
            prg = programs[i]
            if prg.sub_title:
                procdesc = '"' + prg.sub_title + '"\n' + prg.desc
            else:
                procdesc = prg.desc
            
            to_info = (prg.title, procdesc)
        else:
            prg = epg_types.TvProgram()
            prg.channel_id = channel.id            
            prg.start = 0
            prg.stop = 2147483647   # Year 2038
            prg.title = CHAN_NO_DATA
            prg.desc = ''
            to_info = CHAN_NO_DATA

        self.rebuild(start_time, stop_time, start_channel, prg)





    def event_PageDown(self):
        start_time    = self.start_time
        stop_time     = self.stop_time
        start_channel = self.start_channel
        last_prg      = self.selected

        n = 1
        flag_start_channel = 0
        for i in range(len(self.guide.chan_list)):
            if self.guide.chan_list[i].id == start_channel:
                flag_start_channel = 1                                        
            if self.guide.chan_list[i].id == last_prg.channel_id:
                break
            if flag_start_channel == 1:
                n += 1

        channel = None
        if i+self.n_items < len(self.guide.chan_list):
            channel = self.guide.chan_list[i+self.n_items]
            start_channel = self.guide.chan_list[i+self.n_items].id
        else:
            channel = self.guide.chan_list[i]
            start_channel = self.guide.chan_list[i].id


        programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
        programs = programs[0].programs

        prg = None
        if programs and len(programs) > 0:
            for i in range(len(programs)):
                if programs[i].stop > last_prg.start and programs[i].stop > start_time:
                    break

            prg = programs[i]
            if prg.sub_title:
                procdesc = '"' + prg.sub_title + '"\n' + prg.desc
            else:
                procdesc = prg.desc
            
            to_info = (prg.title, procdesc)

        else:
            prg = epg_types.TvProgram()
            prg.channel_id = channel.id            
            prg.start = 0
            prg.stop = 2147483647   # Year 2038
            prg.title = CHAN_NO_DATA
            prg.desc = ''
            to_info = CHAN_NO_DATA

        self.rebuild(start_time, stop_time, start_channel, prg)

Index: tv.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/tv.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tv.py       8 Mar 2003 17:40:42 -0000       1.2
--- tv.py       29 Mar 2003 21:49:54 -0000      1.3
***************
*** 10,13 ****
--- 10,20 ----
  # -----------------------------------------------------------------------
  # $Log$
+ # Revision 1.3  2003/03/29 21:49:54  dischi
+ # Added new tv main menu for the new skin. This includes the tv guide
+ # (file is now called tvguide and not tvmenu) and DIR_RECORD. This
+ # directory is sort by date and can have a different menu style in the skin.
+ # See blue_round2 as example: there is a tv watermark, no view area and
+ # the listing area is larger.
+ #
  # Revision 1.2  2003/03/08 17:40:42  dischi
  # integration of the tv guide
***************
*** 71,74 ****
--- 78,83 ----
  import epg_xmltv as epg
  
+ from item import Item
+ 
  # The Skin
  import skin
***************
*** 79,83 ****
      import ExtendedMenu_TV
  else:
!     from tvmenu import TVmenu
      
  # Set to 1 for debug output
--- 88,93 ----
      import ExtendedMenu_TV
  else:
!     from tvguide import TVGuide
!     from mediamenu import DirItem
      
  # Set to 1 for debug output
***************
*** 104,107 ****
--- 114,134 ----
  
  
+ class TVMenu(Item):
+     
+     def __init__(self):
+         Item.__init__(self)
+         self.type = 'tv'
+ 
+     def main_menu(self, arg, menuw):
+         items = [ menu.MenuItem('TV Guide', action=start_tvguide),
+                   DirItem(config.DIR_RECORD, None, name = 'Recorded Shows',
+                           display_type='tv') ]
+ 
+         menuw.pushmenu(menu.Menu('TV MAIN MENU', items, item_types = 'tv'))
+ 
+ 
+ 
+ 
+ 
  # Set up the extended menu
  if not config.NEW_SKIN:
***************
*** 109,115 ****
      info = ExtendedMenu_TV.ExtendedMenuInfo_TV()
      listing = ExtendedMenu_TV.ExtendedMenuListing_TV()
!     em = ExtendedMenu_TV.ExtendedMenu_TV(view, info, listing)
  else:
!     tvmenu = TVmenu()
  
  def get_start_time():
--- 136,142 ----
      info = ExtendedMenu_TV.ExtendedMenuInfo_TV()
      listing = ExtendedMenu_TV.ExtendedMenuListing_TV()
!     tvguide = ExtendedMenu_TV.ExtendedMenu_TV(view, info, listing)
  else:
!     tvguide = TVGuide()
  
  def get_start_time():
***************
*** 126,133 ****
      return time.mktime(stime)
  
- # Set up some global variables
- start_time = get_start_time()
- stop_time = get_start_time()
- 
  
  def start_tv(mode=None, channel_id=None):
--- 153,156 ----
***************
*** 161,180 ****
          skin.Clear()
          if not config.NEW_SKIN:
!             start_tv('tv', em.listing.last_to_listing[3].channel_id)
          else:
!             start_tv('tv', tvmenu.selected.channel_id)
      else:
!         if not config.NEW_SKIN:
!             em.eventhandler(event)
!         else:
!             tvmenu.eventhandler(event)
  
  def refresh():
!     if not config.NEW_SKIN:
!         em.refresh()
!     else:
!         tvmenu.refresh()
  
  def main_menu(arg, menuw):
  
      # Check that the TV channel list is not None
--- 184,202 ----
          skin.Clear()
          if not config.NEW_SKIN:
!             start_tv('tv', tvguide.listing.last_to_listing[3].channel_id)
          else:
!             start_tv('tv', tvguide.selected.channel_id)
      else:
!         tvguide.eventhandler(event)
  
  def refresh():
!     tvguide.refresh()
! 
  
  def main_menu(arg, menuw):
+     start_tvguide(arg, menuw)
+ 
+ 
+ def start_tvguide(arg, menuw):
  
      # Check that the TV channel list is not None
***************
*** 217,223 ****
      if not config.NEW_SKIN:
          listing.ToListing([start_time, stop_time, guide.chan_list[0].id, prg])
!         em.eventhandler(rc.UP)
!         em.refresh()
      else:
!         tvmenu.rebuild(start_time, stop_time, guide.chan_list[0].id, prg)
!         tvmenu.refresh()
--- 239,245 ----
      if not config.NEW_SKIN:
          listing.ToListing([start_time, stop_time, guide.chan_list[0].id, prg])
!         tvguide.eventhandler(rc.UP)
!         tvguide.refresh()
      else:
!         tvguide.rebuild(start_time, stop_time, guide.chan_list[0].id, prg)
!         tvguide.refresh()

--- tvmenu.py DELETED ---




-------------------------------------------------------
This SF.net email is sponsored by:
The Definitive IT and Networking Event. Be There!
NetWorld+Interop Las Vegas 2003 -- Register today!
http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
_______________________________________________
Freevo-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to