See09/main.js
changeset 19 f3521a11d878
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/See09/main.js	Thu Oct 22 15:52:58 2009 +0100
@@ -0,0 +1,239 @@
+// ////////////////////////////////////////////////////////////////////////////
+// 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>";
+}
+