See09/main.js
author ivanl
Thu, 22 Oct 2009 15:52:58 +0100
changeset 19 f3521a11d878
permissions -rw-r--r--
See 09 widget, version 1.0rc3

// ////////////////////////////////////////////////////////////////////////////
// Symbian Foundation Example Code
//
// This software is in the public domain. No copyright is claimed, and you 
// may use it for any purpose without license from the Symbian Foundation.
// No warranty for any purpose is expressed or implied by the authors or
// the Symbian Foundation. 
// ////////////////////////////////////////////////////////////////////////////

var uiManager;
var homeView;
var mainView;
var scheduleView = null;
var twitterView = null;
var venueView = null;

var schedule;
var scheduleFile = "see09.csv";
var scheduleUrl;

var twitter;

// used as a title bar in all views
var header = "<img src=home.png>";


var day1 = "27-Oct-09";
var day2 = "28-Oct-09";
var showingDay = day1;


function ShowTopicView(topic) {
	var topicView = new ListView(null, header);
	var day = ( showingDay == day1 ) ? "day1": "day2";
	var titleButton = new NavigationButton(null, day+".png", "<b>" + topic + "</b>");
	//titleButton.setEnabled(false);
	topicView.addControl(titleButton);
	topicView.previousView = scheduleView;
	addSessions(topic, topicView);
	topicView.show();
}

function addSessions(topic, topicView) {
	var sessions = schedule.GetSessions(topic, showingDay);
	for ( var i = 0; i < sessions.length ; i++ ) {
		var session = sessions[i];
		var content = new ContentPanel(null, null, null, true);
		var contentHtml = session.GetContentHTML();
		// initialize feed item control
		var title = session.title;
		if ( title.length < 2 ) {
			title = session.chair;
			if (title.length < 2) {
				title = session.speakers;
			}
			title += "'s talk";
		}
		content.setCaption(session.startTime + ": " + title);
		content.setContent(contentHtml);
		content.setExpanded(false);		
		topicView.addControl(content);
	}
}

function ShowScheduleView(){
	scheduleView = new ListView(null, header);
	var title = ( showingDay == day1 ) ? "day1": "day2";
	var dayButton = new NavigationButton(null, "day-icon.png", "<img src="+title+".png border=0 align=center>");
	//dayButton.setEnabled(false);
	scheduleView.addControl(dayButton);
	scheduleView.previousView = mainView;
	// add 'general' sessions
	addSessions(schedule.topics[0], scheduleView);
	
	var trailsButton = new NavigationButton(null, "day-icon.png", "<img src=trailz.png border=0 align=center>");
	trailsButton.setEnabled(false);
	scheduleView.addControl(trailsButton);
	for ( var i = 1; i < schedule.topics.length ; i++ ) {
		var topic = schedule.topics[i];
		var scheduleButton = new NavigationButton(topic, "schedule-icon"+(i%4)+".png", topic);
		scheduleButton.addEventListener("ActionPerformed", function(event){
			var topic = event.source.id;
			ShowTopicView(topic);
		});
		scheduleView.addControl(scheduleButton);
	}
	scheduleView.show();
}


// Called when the data is loaded
function ShowMainView(){
	if (mainView == null) {
		UpdateMiniView();
		mainView = new ListView(null, header);
		var currentSessions = schedule.GetCurrentSessions();
		if (currentSessions != null) {
		// todo
		}
		
		var scheduleButton = new NavigationButton(null, "schedule-icon.png", "<img src='schedule.png' border=0>");
		scheduleButton.setEnabled(false);
		mainView.addControl(scheduleButton);
		var day1Button = new NavigationButton(null, "blank.png", "<img src=day1.png border=0 align=center>");
		day1Button.addEventListener("ActionPerformed", function(event){
			showingDay = day1;
			ShowScheduleView();
		});
		mainView.addControl(day1Button);
		var day2Button = new NavigationButton(null, "blank.png", "<img src=day2.png border=0 align=center>");
		day2Button.addEventListener("ActionPerformed", function(event){
			showingDay = day2;
			ShowScheduleView();
		});
		mainView.addControl(day2Button);
		
		venueView = new ListView(null, header);
		venueView.previousView = mainView;
		var venueMap = new ImageLabel(null, null, "venue.png");
		venueMap.contentElement.style.textAlign = "center";
		venueView.addControl(venueMap);
	
		var venueButton = new NavigationButton(null, "schedule-icon1.png", "<img src='venuelabel.png' border=0>");
		venueButton.addEventListener("ActionPerformed", function(event){
			venueView.show();
		});
		mainView.addControl(venueButton);
		
		twitterView.previousView = mainView;
		var twitterTitle = new NavigationButton(null, "tweetz-icon.png", "<img src='tweetz.png' border=0>");
		twitterTitle.addEventListener("ActionPerformed", function(event){
				if ( twitter == null ) {
					twitter = new Twitter(twitterView);
				}
				twitter.Update(10);
				twitterView.show();
				});
		mainView.addControl(twitterTitle);
//		twitter = new Twitter(mainView);
//		twitter.Update(10);
		mainView.previousView = null;
	}
	mainView.show();	
}

// Called from the onload event handler to initialize the widget.
function init() {
	
    if (window.widget) {
        widget.setNavigationEnabled(false);
        menu.showSoftkeys();
        var updateMenuItem = new MenuItem("Check for updates", 0);
        updateMenuItem.onSelect = CheckForUpdates;
        menu.append(updateMenuItem);
		setInterval("if ( IsHSViewMode() ) UpdateMiniView();", 30000); // wrt bug fix
    }
	
	// create UI manager
	uiManager = new UIManager(document.getElementById("main"));
	
	homeView = new ListView(null, "<img style='margin: 0px 0px; padding: 0px 0px; border: none' src='home.png'>");
	
	var homeViewImage2 = new ImageLabel(null, null, "logo.png");
	homeViewImage2.contentElement.style.textAlign = "center";
	homeView.addControl(homeViewImage2);
	
	setDefaultFontSizeForScreenSize();
	SetViewMode();
	homeView.show();

	twitterView = new ListView(null, "<img style='margin: 0px 0px; padding: 0px 0px; border: none' src='home.png'>");

	schedule = new Schedule();
	schedule.Init(scheduleFile, function(event){
		ShowMainView();
	});
	
//	if ( !window.widget ) {
//		// for firefox / firebug testing
//		CheckForUpdates();
//	}
	
}


// ////////////////////////////////////////////////////////////////
// Support for home screen view
// ////////////////////////////////////////////////////////////////
var HS_VIEW_THRESHOLD = 150;

function SetViewMode(){
	var mainDiv = document.getElementById("main");
	var miniDiv = document.getElementById("mini");
	var hsView = IsHSViewMode(); 
	if ( !hsView ) {
		// normal view		
		mainDiv.style.visibility = 'visible';
		miniDiv.style.visibility = 'hidden';
		miniDiv.style.position = 'static';
		miniDiv.style.top = null;
	}
	else {
		// home screen view
		mainDiv.style.visibility = 'hidden';
		miniDiv.style.visibility = 'visible';
		miniDiv.style.position = 'absolute';
		miniDiv.style.top = '0';
	}
	setDefaultFontSizeForScreenSize();
	UpdateMiniView();
}

function IsHSViewMode() {
	//var screenHeight = document.body.clientHeight;
	var screenHeight = window.innerHeight;
	//alert(screenHeight);
	return ( screenHeight < HS_VIEW_THRESHOLD );
}

function UpdateMiniView() {
	var text = "";
	var current;
	if (schedule) {
		current = schedule.GetCurrentSessions();
	}
	if ( current && current.length > 0 ) {
		text = "Now: " + current[0].title;
		if ( current.length > 1 ) {
			text += "<br>Now: " + current[1].title;
		}
	} else if( twitter && twitter.buttons && twitter.buttons.length > 0  ){
		text = twitter.buttons[0].getText();
	} else {
		text = "Symbian Exchange & Exposition 2009<br>Earls Court 2, 27-28 October 2009" 
	}
	var mini = document.getElementById("mini");
	mini.innerHTML = "<table border=0><tr><td><img src=minilogo.png></td><td><span style='font-size: 10px'>"+text+"</span></td></tr></table>";
}