mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			306 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			306 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ' *********************************************************
 | |
| ' **  Simple Grid Screen Demonstration App
 | |
| ' **  Jun 2010
 | |
| ' **  Copyright (c) 2010 Roku Inc. All Rights Reserved.
 | |
| ' *********************************************************
 | |
| 
 | |
| '************************************************************
 | |
| '** Application startup
 | |
| '************************************************************
 | |
| Sub Main()
 | |
| 
 | |
|     'initialize theme attributes like titles, logos and overhang color
 | |
|     initTheme()
 | |
|   
 | |
|     gridstyle = "Flat-Movie"
 | |
| 
 | |
|     'set to go, time to get started
 | |
|     while gridstyle <> ""
 | |
|         print "starting grid style= ";gridstyle
 | |
|         screen=preShowGridScreen(gridstyle)
 | |
|         gridstyle = showGridScreen(screen, gridstyle)
 | |
|     end while
 | |
| 
 | |
| End Sub
 | |
| 
 | |
| 
 | |
| '*************************************************************
 | |
| '** Set the configurable theme attributes for the application
 | |
| '** 
 | |
| '** Configure the custom overhang and Logo attributes
 | |
| '** These attributes affect the branding of the application
 | |
| '** and are artwork, colors and offsets specific to the app
 | |
| '*************************************************************
 | |
| 
 | |
| Sub initTheme()
 | |
|     app = CreateObject("roAppManager")
 | |
|     app.SetTheme(CreateDefaultTheme())
 | |
| End Sub
 | |
| 
 | |
| '******************************************************
 | |
| '** @return The default application theme.
 | |
| '** Screens can make slight adjustments to the default
 | |
| '** theme by getting it from here and then overriding
 | |
| '** individual theme attributes.
 | |
| '******************************************************
 | |
| Function CreateDefaultTheme() as Object
 | |
|     theme = CreateObject("roAssociativeArray")
 | |
| 
 | |
|     theme.ThemeType = "generic-dark"
 | |
| 
 | |
|     ' All these are greyscales
 | |
|     theme.GridScreenBackgroundColor = "#363636"
 | |
|     theme.GridScreenMessageColor    = "#808080"
 | |
|     theme.GridScreenRetrievingColor = "#CCCCCC"
 | |
|     theme.GridScreenListNameColor   = "#FFFFFF"
 | |
| 
 | |
|     ' Color values work here
 | |
|     theme.GridScreenDescriptionTitleColor    = "#001090"
 | |
|     theme.GridScreenDescriptionDateColor     = "#FF005B"
 | |
|     theme.GridScreenDescriptionRuntimeColor  = "#5B005B"
 | |
|     theme.GridScreenDescriptionSynopsisColor = "#606000"
 | |
|     
 | |
|     'used in the Grid Screen
 | |
|     theme.CounterTextLeft           = "#FF0000"
 | |
|     theme.CounterSeparator          = "#00FF00"
 | |
|     theme.CounterTextRight          = "#0000FF"
 | |
|     
 | |
|     theme.GridScreenLogoHD          = "pkg:/images/Overhang_Test_HD.png"
 | |
| 
 | |
|     theme.GridScreenLogoOffsetHD_X  = "0"
 | |
|     theme.GridScreenLogoOffsetHD_Y  = "0"
 | |
|     theme.GridScreenOverhangHeightHD = "99"
 | |
| 
 | |
|     theme.GridScreenLogoSD          = "pkg:/images/Overhang_Test_SD43.png"
 | |
|     theme.GridScreenOverhangHeightSD = "66"
 | |
|     theme.GridScreenLogoOffsetSD_X  = "0"
 | |
|     theme.GridScreenLogoOffsetSD_Y  = "0"
 | |
|     
 | |
|     ' to use your own focus ring artwork 
 | |
|     'theme.GridScreenFocusBorderSD        = "pkg:/images/GridCenter_Border_Movies_SD43.png"
 | |
|     'theme.GridScreenBorderOffsetSD  = "(-26,-25)"
 | |
|     'theme.GridScreenFocusBorderHD        = "pkg:/images/GridCenter_Border_Movies_HD.png"
 | |
|     'theme.GridScreenBorderOffsetHD  = "(-28,-20)"
 | |
|     
 | |
|     ' to use your own description background artwork
 | |
|     'theme.GridScreenDescriptionImageSD  = "pkg:/images/Grid_Description_Background_SD43.png"
 | |
|     'theme.GridScreenDescriptionOffsetSD = "(125,170)"
 | |
|     'theme.GridScreenDescriptionImageHD  = "pkg:/images/Grid_Description_Background_HD.png"
 | |
|     'theme.GridScreenDescriptionOffsetHD = "(190,255)"
 | |
|     
 | |
| 
 | |
|     return theme
 | |
| End Function
 | |
| 
 | |
| '******************************************************
 | |
| '** Perform any startup/initialization stuff prior to 
 | |
| '** initially showing the screen.  
 | |
| '******************************************************
 | |
| Function preShowGridScreen(style as string) As Object
 | |
| 
 | |
|     m.port=CreateObject("roMessagePort")
 | |
|     screen = CreateObject("roGridScreen")
 | |
|     screen.SetMessagePort(m.port)
 | |
| '    screen.SetDisplayMode("best-fit")
 | |
|     screen.SetDisplayMode("scale-to-fill")
 | |
| 
 | |
|     screen.SetGridStyle(style)
 | |
|     return screen
 | |
| 
 | |
| End Function
 | |
| 
 | |
| 
 | |
| '******************************************************
 | |
| '** Display the gird screen and wait for events from 
 | |
| '** the screen. The screen will show retreiving while
 | |
| '** we fetch and parse the feeds for the show posters
 | |
| '******************************************************
 | |
| Function showGridScreen(screen As Object, gridstyle as string) As string
 | |
| 
 | |
|     print "enter showGridScreen"
 | |
| 
 | |
|     categoryList = getCategoryList()
 | |
|     categoryList[0] = "GridStyle: " + gridstyle
 | |
|     screen.setupLists(categoryList.count())
 | |
|     screen.SetListNames(categoryList)
 | |
|     StyleButtons = getGridControlButtons()
 | |
|     screen.SetContentList(0, StyleButtons)
 | |
|     for i = 1 to categoryList.count()-1
 | |
|         screen.SetContentList(i, getShowsForCategoryItem(categoryList[i]))
 | |
|     end for
 | |
|     screen.Show()
 | |
| 
 | |
|     while true
 | |
|         print "Waiting for message"
 | |
|         msg = wait(0, m.port)
 | |
|         'msg = wait(0, screen.GetMessagePort())     ' getmessageport does not work on gridscreen
 | |
|         print "Got Message:";type(msg)
 | |
|         if type(msg) = "roGridScreenEvent" then
 | |
|             print "msg= "; msg.GetMessage() " , index= "; msg.GetIndex(); " data= "; msg.getData()
 | |
|             if msg.isListItemFocused() then
 | |
|                 print"list item focused | current show = "; msg.GetIndex()
 | |
|             else if msg.isListItemSelected() then
 | |
|                 row = msg.GetIndex()
 | |
|                 selection = msg.getData()
 | |
|                 print "list item selected row= "; row; " selection= "; selection
 | |
| 
 | |
|                 ' Did we get a selection from the gridstyle selection row?
 | |
|                 if (row = 0)
 | |
|                     ' yes, return so we can come back with new style
 | |
|                     return StyleButtons[selection].Title
 | |
|                 endif
 | |
| 
 | |
|                 'm.curShow = displayShowDetailScreen(showList[msg.GetIndex()])
 | |
|             else if msg.isScreenClosed() then
 | |
|                 return ""
 | |
|             end if
 | |
|         end If
 | |
|     end while
 | |
| 
 | |
| 
 | |
| End Function
 | |
| 
 | |
| '**********************************************************
 | |
| '** When a poster on the home screen is selected, we call
 | |
| '** this function passing an roAssociativeArray with the 
 | |
| '** ContentMetaData for the selected show.  This data should 
 | |
| '** be sufficient for the springboard to display
 | |
| '**********************************************************
 | |
| Function displayShowDetailScreen(category as Object, showIndex as Integer) As Integer
 | |
| 
 | |
|     'add code to create springboard, for now we do nothing
 | |
|     return 1
 | |
| 
 | |
| End Function
 | |
| 
 | |
| 
 | |
| '**************************************************************
 | |
| '** Return the list of categories to display in the filter
 | |
| '** banner. The result is an roArray containing the names of 
 | |
| '** all of the categories. All just static data for the example.
 | |
| '***************************************************************
 | |
| Function getCategoryList() As Object
 | |
| 
 | |
|     categoryList = [ "GridStyle", "Reality", "History", "News", "Comedy", "Drama"]
 | |
|     return categoryList
 | |
| 
 | |
| End Function
 | |
| 
 | |
| 
 | |
| '********************************************************************
 | |
| '** Given the category from the filter banner, return an array 
 | |
| '** of ContentMetaData objects (roAssociativeArray's) representing 
 | |
| '** the shows for the category. For this example, we just cheat and
 | |
| '** create and return a static array with just the minimal items
 | |
| '** set, but ideally, you'd go to a feed service, fetch and parse
 | |
| '** this data dynamically, so content for each category is dynamic
 | |
| '********************************************************************
 | |
| Function getShowsForCategoryItem(category As Object) As Object
 | |
| 
 | |
|     print "getting shows for category "; category
 | |
| 
 | |
|     showList = [
 | |
|         {
 | |
|             Title: category + ": Header",
 | |
|             releaseDate: "1976",
 | |
|             length: 3600-600,
 | |
|             Description:"This row is category " + category,
 | |
|             hdBranded: true,
 | |
|             HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif",
 | |
|             SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif",
 | |
|             Description:"Short Synopsis #1",
 | |
|             Synopsis:"Length",
 | |
|             StarRating:10,
 | |
|         }
 | |
|         {
 | |
|             Title: category + ": Beverly Hillbillies",
 | |
|             releaseDate: "1969",
 | |
|             rating: "PG",
 | |
|             Description:"Come and listen to a story about a man named Jed: Poor mountaineer, barely kept his family fed. Then one day he was shootin at some food, and up through the ground came a bubblin crude. Oil that is, black gold, Texas tea.",
 | |
|             numEpisodes:42,
 | |
|             contentType:"season",
 | |
|             HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/4/4e/The_Beverly_Hillbillies.jpg",
 | |
|             SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/4/4e/The_Beverly_Hillbillies.jpg",
 | |
|             StarRating:80,
 | |
|             UserStarRating:40
 | |
|         }
 | |
|         {
 | |
|             Title: category + ": Babylon 5",
 | |
|             releaseDate: "1996",
 | |
|             rating: "PG",
 | |
|             Description:"The show centers on the Babylon 5 space station: a focal point for politics, diplomacy, and conflict during the years 2257-2262.",
 | |
|             numEpisodes:102,
 | |
|             contentType:"season",
 | |
|             HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/9/9d/Smb5-s4.jpg",
 | |
|             SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/9/9d/Smb5-s4.jpg",
 | |
|             StarRating:80,
 | |
|             UserStarRating:40
 | |
|         }
 | |
|         {
 | |
|             Title: category + ": John F. Kennedy",
 | |
|             releaseDate: "1961",
 | |
|             rating: "PG",
 | |
|             Description:"My fellow citizens of the world: ask not what America will do for you, but what together we can do for the freedom of man.",
 | |
|             HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/5/52/Jfk_happy_birthday_1.jpg",
 | |
|             SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/5/52/Jfk_happy_birthday_1.jpg",
 | |
|             StarRating:100
 | |
|         }
 | |
|         {
 | |
|             Title: category + ": Man on the Moon",
 | |
|             releaseDate: "1969",
 | |
|             rating: "PG",
 | |
|             Description:"That's one small step for a man, one giant leap for mankind.",
 | |
|             HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_11_first_step.jpg",
 | |
|             SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_11_first_step.jpg",
 | |
|             StarRating:100
 | |
|         }
 | |
|         {
 | |
|             Title: category + ": I have a Dream",
 | |
|             releaseDate: "1963",
 | |
|             rating: "PG",
 | |
|             Description:"I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin, but by the content of their character.",
 | |
|             HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/8/81/Martin_Luther_King_-_March_on_Washington.jpg",
 | |
|             SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/8/81/Martin_Luther_King_-_March_on_Washington.jpg",
 | |
|             StarRating:100
 | |
|         }
 | |
|     ]
 | |
| 
 | |
|     return showList
 | |
| End Function
 | |
|     
 | |
| function getGridControlButtons() as object
 | |
|         buttons = [
 | |
|             { Title: "Flat-Movie"
 | |
|               ReleaseDate: "HD:5x2 SD:5x2"
 | |
|               Description: "Flat-Movie (Netflix) style"
 | |
|               HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif"
 | |
|               SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif"
 | |
|             }
 | |
|             { Title: "Flat-Landscape"
 | |
|               ReleaseDate: "HD:5x3 SD:4x3"
 | |
|               Description: "Channel Store"
 | |
|               HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Dunkery_Hill.jpg/800px-Dunkery_Hill.jpg",
 | |
|               SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Dunkery_Hill.jpg/800px-Dunkery_Hill.jpg",
 | |
|             }
 | |
|             { Title: "Flat-Portrait"
 | |
|               ReleaseDate: "HD:5x2 SD:5x2"
 | |
|               Description: "3x4 style posters"
 | |
|               HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/9/9f/Kane_George_Gurnett.jpg",
 | |
|               SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/9/9f/Kane_George_Gurnett.jpg",
 | |
|             }
 | |
|             { Title: "Flat-Square"
 | |
|               ReleaseDate: "HD:7x3 SD:6x3"
 | |
|               Description: "1x1 style posters"
 | |
|               HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/SQUARE_SHAPE.svg/536px-SQUARE_SHAPE.svg.png",
 | |
|               SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/SQUARE_SHAPE.svg/536px-SQUARE_SHAPE.svg.png",
 | |
|             }
 | |
|             { Title: "Flat-16x9"
 | |
|               ReleaseDate: "HD:5x3 SD:4x3"
 | |
|               Description: "HD style posters"
 | |
|               HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/%C3%89cran_TV_plat.svg/200px-%C3%89cran_TV_plat.svg.png",
 | |
|               SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/%C3%89cran_TV_plat.svg/200px-%C3%89cran_TV_plat.svg.png",
 | |
|             }
 | |
|        ]
 | |
|        return buttons
 | |
| End Function
 |