diff -r 000000000000 -r 1450b09d0cfd ginebra/chrome/bedrockchrome/windowcount.snippet/windowcount.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ginebra/chrome/bedrockchrome/windowcount.snippet/windowcount.js Tue May 04 12:39:35 2010 +0300 @@ -0,0 +1,222 @@ +/* This snippet is used to display the circles indicating the number of windows open. + * Current window is indicated using filled in circle and others by an empty circle. + * In portrait mode, the snippet is placed below the status bar while in landscape + * mode, it is overlaid on the status bar + * Note: When overlaying the snippet there were some issues repainting when the background was set to none + * and hence a table with three cells are being used - the width of first and last cells match the + * area we need to see from the status bar and their backgrounds are set to none. The middle cell is + * used to display the circles and its bakground changes between black and white based + * on the display mode. + */ + +// +// INIT the WindowCount snippet +// +function WindowCountBar(id) +{ + + this.id = id; + + this.begin = + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'+ + ''; + + this.filledimg = + '' ; + + this.emptyimg = + '' ; + + this.end = + ''+ + '
' ; + + this.InitWCBar = function() { + this.wcUpdateWindowHtml(); + this.setId(); + } + + /* To identify the class. This class can also be identified through the + * global variable wcbar which saves the instance when initialized + * in chrome.html + */ + this.setId = function () { + el = document.getElementById(this.id); + if(el.wcChrome) { + delete eldom.wcChrome; + } + el.wcChrome = this; + + } + + this.wcUpdateWindowHtml = function() { + + //window.chrome.alert("wcUpdateWindowHtml "+ window.pageController.pageCount()); + + /* Generate html based on the number of windows open */ + switch(window.pageController.pageCount()) { + case 1: + this.wcOneWindow(); + break; + case 2: + this.wcTwoWindows(); + break; + case 3: + this.wcThreeWindows(); + break; + case 4: + this.wcFourWindows(); + break; + case 5: + this.wcFiveWindows(); + break; + default : + break; + } + this.setProps(); + + } + + this.wcOneWindow = function() { + + var htmlText = '' + + this.begin + this.filledimg + this.end; + + var el = document.getElementById("wcrow"); + if (el ) { + el.innerHTML = htmlText; + } + else { + document.write(htmlText); + } + } + + this.wcTwoWindows = function() { + var htmlText = '' + + this.begin + this.emptyimg + this.emptyimg + this.end; + + this.setHtmlText(htmlText) + + + } + + this.wcThreeWindows = function() { + var htmlText = '' + + this.begin + this.emptyimg + this.emptyimg + this.emptyimg+ this.end; + this.setHtmlText(htmlText) + } + + this.wcFourWindows = function() { + var htmlText = '' + + this.begin + this.emptyimg + this.emptyimg + this.emptyimg + this.emptyimg + this.end; + + this.setHtmlText(htmlText) + } + + this.wcFiveWindows = function() { + var htmlText = '' + + this.begin + this.emptyimg + this.emptyimg + this.emptyimg + this.emptyimg + this.emptyimg + this.end; + + this.setHtmlText(htmlText) + } + + this.setHtmlText = function(htmlText) { + + var el = document.getElementById("wcrow"); + if (el ) { + el.innerHTML = htmlText; + } + else { + document.write(htmlText); + } + this.setCurrentIndex(); + } + + this.setCurrentIndex = function(){ + var el = document.getElementById("wcrow"); + Icons = el.getElementsByTagName("img"); + + Icons[window.pageController.currentPageIndex].setAttribute('src', "windowcount.snippet/icons/filledcircle.png"); + } + + + this.setSnippetPosition = function(mode) { + if (window.snippets.WindowCountBarId ) { + if (mode == "portrait") { + window.snippets.WindowCountBarId.anchor = "AnchorTop"; + window.snippets.WindowCountBarId.anchorOffset = 27; + document.getElementById("WindowCountBarId").style.backgroundColor='white'; + + + } + else if (mode == "landscape") { + window.snippets.WindowCountBarId.anchor = "AnchorNone"; + window.snippets.WindowCountBarId.setPosition(0, 0); + document.getElementById("WindowCountBarId").style.backgroundColor='transparent'; + } + + } + } + + + /* Private method that sets the properties: + * set the widht of first and last cells, + * set the background of middle cell based on + * display mode + */ + this.setProps = function() { + var leftW = document.getElementById("strength").offsetWidth + + document.getElementById("title").offsetWidth; + + var rightW = document.getElementById("clock").offsetWidth + + document.getElementById("battery").offsetWidth; + + if (window.snippets.WindowCountBarId ) { + document.getElementById("wcfirst").width = leftW; + document.getElementById("wclast").width = rightW; + + if (window.chrome.displayMode == "portrait" ) { + document.getElementById("wccontent").style.backgroundColor='white'; + } + else { + // match status bar style (transparent doesn't repaint/refresh correctly) + document.getElementById("wccontent").style.background='-webkit-gradient(linear, left top, left bottom,color-stop(0%,#111122),color-stop(100%,#111144))'; + } + } + + } + + /* Initialize */ + this.InitWCBar(); + + /* Slots */ + window.chrome.loadComplete.connect( + function() { + document.getElementById('WindowCountBarId').wcChrome.setSnippetPosition(window.chrome.displayMode); + window.snippets.updateGeometry(); + } + ); + + /* Geometry is updated when there is a change in display mode. Here, we + * just need to set our attributes + */ + window.chrome.onDisplayModeChangeStart.connect( + function(mode) { + document.getElementById('WindowCountBarId').wcChrome.setSnippetPosition(mode); + } + ); + + window.chrome.onDisplayModeChanged.connect( + function(mode) { + document.getElementById('WindowCountBarId').wcChrome.setProps(); + } + ); + + +}