org.symbian.tools.wrttools/projecttemplates/WRTKit/UI/NotificationPopup.js
changeset 309 c01f5ab28a11
parent 308 c521df56b15d
child 310 e9484be98cfe
--- a/org.symbian.tools.wrttools/projecttemplates/WRTKit/UI/NotificationPopup.js	Thu Apr 15 16:00:54 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,306 +0,0 @@
-/**
- * Copyright (c) 2009-2010 Symbian Foundation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the License "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- * 
- * Contributors:
- * 
- * Description:
- * 
- */
-
-///////////////////////////////////////////////////////////////////////////////
-// The NotificationPopup class handles the display of notifications such as
-// warnings, information messages and progress indication.
-
-// Constructor.
-function NotificationPopup() {
-    // create notification popup
-    this.containerElement = document.createElement("div");
-    this.containerElement.className = "NotificationPopupContainer";
-    this.popupElement = document.createElement("div");
-    this.popupElement.className = "NotificationPopup";
-    this.typeIndicatorElement = document.createElement("div");
-    this.typeIndicatorElement.className = "NotificationPopupTypeIndicator";
-    this.textElement = document.createElement("div");
-    this.textElement.className = "NotificationPopupText";
-    this.progressBarElement = document.createElement("div");
-    this.progressBarElement.className = "NotificationPopupProgressBar";
-    
-    // assemble popup
-    this.popupElement.appendChild(this.typeIndicatorElement);
-    this.popupElement.appendChild(this.textElement);
-    this.popupElement.appendChild(this.progressBarElement);
-    this.containerElement.appendChild(this.popupElement);
-    
-    // create progress bar image element and initialize it
-    this.progressBarImageElement = document.createElement("img");
-    var self = this;
-    this.progressBarImageElement.addEventListener("load", function() { self.progressBarImageLoadingCompleted(); }, false);
-    this.progressBarImageElement.setAttribute("alt", "");
-    this.progressBarImageURL = this.getProgressBarImage(0);
-    this.progressBarImageElement.src = this.progressBarImageURL;
-    this.progressBarElement.appendChild(this.progressBarImageElement);
-    
-    // init the popup to be fully down
-    this.popupElement.style.top = "100%";
-    
-    // set default popup contents
-    this.setPopupContents(null, null, null);
-}
-
-// Notification container element.
-NotificationPopup.prototype.containerElement = null;
-
-// Notification popup element.
-NotificationPopup.prototype.popupElement = null;
-
-// Type indicator element.
-NotificationPopup.prototype.typeIndicatorElement = null;
-
-// Notification text element.
-NotificationPopup.prototype.textElement = null;
-
-// Progress bar element.
-NotificationPopup.prototype.progressBarElement = null;
-
-// Progress bar image element.
-NotificationPopup.prototype.progressBarImageElement = null;
-
-// Progress bar image URL.
-NotificationPopup.prototype.progressBarImageURL = null;
-
-// Has the progress bar image been loaded?
-NotificationPopup.prototype.progressBarImageLoaded = false;
-
-// Flag that tracks whether we're in the middle of starting to
-// show a notification popup.
-NotificationPopup.prototype.processingShowNotification = false;
-
-// Notification popup position (0 = hidden, 1 = showing).
-NotificationPopup.prototype.popupPosition = 0;
-
-// Interval for timer ticks (in milliseconds)
-NotificationPopup.prototype.ANIM_TIMER_INTERVAL = 25;
-
-// Animation timer identifier or null if no active timer.
-NotificationPopup.prototype.animTimerId = null;
-
-// Time in milliseconds for the popup animation to complete
-NotificationPopup.prototype.ANIM_TIME = 300;
-
-// Flag that determines the behavior of showNotification(). If set to true
-// the popup will snap open when showNotification() is called instead of
-// animation.
-NotificationPopup.prototype.SHOW_SNAPS_OPEN = true;
-
-// Animation direction (0 = no movement, -1 hiding, +1 = showing).
-NotificationPopup.prototype.animDir = 0;
-
-// Auto-hide timer identifier or null if no active timer.
-NotificationPopup.prototype.autoHideTimerId = null;
-
-// The commanded display time.
-NotificationPopup.prototype.displayTime = -1;
-
-// Displays a notification.
-NotificationPopup.prototype.showNotification = function(displayTime, type, text, progress) {
-    uiLogger.debug("NotificationPopup.showNotification(" + displayTime + ", " + type + ", " + text + ", " + progress + ")");
-    
-    // mark that showNotification() has been called and that we are in
-    // the middle of starting to show the notification popup
-    this.processingShowNotification = true;
-    
-    // remember the display time
-    this.displayTime = displayTime;
-    
-    // attach the popup to the document if not attached
-    if (this.containerElement.parentNode == null) {
-        document.body.appendChild(this.containerElement);
-        uiLogger.debug("Notification popup attached to document");
-    }
-    
-    // set popup contents and update style
-    this.setPopupContents(type, text, progress);
-    
-    // if the progress image is loaded then we can complete the showing
-    // of the notification popup immediately - otherwise the image loaded
-    // allback will complete the process.
-    if (this.progressBarImageLoaded) {
-        this.completeShowNotification();
-    }
-};
-
-// Completes displaying of a notification.
-// Note: Used internally - don't call this directly.
-NotificationPopup.prototype.completeShowNotification = function() {
-    uiLogger.debug("NotificationPopup.completeShowNotification()");
-    
-    // animation direction is +1 for showing the popup
-    if (this.popupPosition != 1) {
-        if (this.SHOW_SNAPS_OPEN) {
-            if (this.popupPosition == 0) {
-                this.popupPosition = 1;
-            }
-        }
-        this.animatePopup(1);
-    }
-    
-    // setup auto hiding if a display time is specified
-    if (this.displayTime > 0) {
-        // stop any existing timer
-        if (this.autoHideTimerId != null) {
-            clearTimeout(this.autoHideTimerId);
-            uiLogger.debug("Auto hide timer stopped");
-        }
-        // set timer to hide notification
-        var self = this;
-        this.autoHideTimerId = setTimeout(function() {
-                                              if (self.displayTime > 0) {
-                                                  self.hideNotification();
-                                              }
-                                          }, this.ANIM_TIME + this.displayTime);
-        uiLogger.debug("Auto hide timer started");
-    }
-    
-    // mark us as no longer processing a show notification call
-    this.processingShowNotification = false;
-};
-
-// Hides the currently displayed notification.
-NotificationPopup.prototype.hideNotification = function() {
-    uiLogger.debug("NotificationPopup.hideNotification()");
-    // mark us as no longer processing a show notification call
-    this.processingShowNotification = false;
-    
-    // animation direction is -1 for hiding the popup
-    if (this.popupPosition != 0) {
-        this.animatePopup(-1);
-    }
-    
-    // stop auto hide timer if one is set
-    if (this.autoHideTimerId != null) {
-        clearTimeout(this.autoHideTimerId);
-        this.autoHideTimerId = null;
-        uiLogger.debug("Auto hide timer stopped");
-    }
-};
-
-// Starts animation of the popup (1 to show, -1 to hide).
-NotificationPopup.prototype.animatePopup = function(direction) {
-    uiLogger.debug("NotificationPopup.animatePopup(" + direction + ")");
-    // set the direction and star the animation timer
-    this.animDir = direction;
-    if (this.animTimerId == null) {
-        var self = this;
-        this.animTimerId = setInterval(function() { self.animate(); }, this.ANIM_TIMER_INTERVAL);
-        uiLogger.debug("Notification popup animation started");
-    }
-};
-
-// Callback for animation timer.
-NotificationPopup.prototype.animate = function() {
-    // calculate new popup position and clamp
-    var animStep = (this.ANIM_TIMER_INTERVAL / this.ANIM_TIME) * this.animDir;
-    var newPos = this.popupPosition + animStep;
-    if (newPos < 0) {
-        newPos = 0;
-    } else if (newPos > 1) {
-        newPos = 1;
-    }
-    
-    // set the new position to the popup element
-    this.popupPosition = newPos;
-    this.popupElement.style.top = (100 - Math.round(this.popupPosition * 100)) + "%";
-    
-    // have we reached the end of the animation?
-    if (newPos == 0 || newPos == 1) {
-        // reset animation direction
-        this.animDir = 0;
-        
-        // remove the popup from the body if its hidden
-        if (newPos == 0) {
-            document.body.removeChild(this.containerElement);
-            uiLogger.debug("Notification popup detached from document");
-        }
-        
-        // stop timer
-        clearTimeout(this.animTimerId);
-        this.animTimerId = null;
-        uiLogger.debug("Notification popup animation stopped");
-    }
-};
-
-// Returns a URL for the progress bar image to use for the specified progress.
-NotificationPopup.prototype.getProgressBarImage = function(progress) {
-    // path for progress bar images
-    var progressBarImagePath = "WRTKit/Resources/";
-    
-    if (progress < 0) {
-        // unknown progress
-        return progressBarImagePath + "ProgressBarUnknown.gif";
-    } else {
-        // known progress (should be between 0 and 1)
-        var progPct = Math.round(progress * 10) * 10;
-        if (progPct < 0) {
-            progPct = 0;
-        } else if (progPct > 100) {
-            progPct = 100;
-        }
-        return progressBarImagePath + "ProgressBar" + progPct + ".png";
-    }
-};
-
-// Sets the contents of the popup.
-NotificationPopup.prototype.setPopupContents = function(type, text, progress) {
-    uiLogger.debug("NotificationPopup.setPopupContents(" + type + ", " + text + ", " + progress + ")");
-    
-    // figure out notification type style name
-    var typeName = (type == null) ? "none" : type.toLowerCase();
-    typeName = typeName.charAt(0).toUpperCase() + typeName.substring(1);
-    
-    // set type element class names
-    this.typeIndicatorElement.className = "NotificationPopupTypeIndicator NotificationPopupTypeIndicator" + typeName;
-    
-    // set notification text
-    this.textElement.innerHTML = (text == null) ? "" : text;
-    
-    // set progress
-    this.progressBarElement.style.display = (progress == null) ? "none" : "block";
-    if (progress != null) {
-        var imgURL = this.getProgressBarImage(progress);
-        if (imgURL != this.progressBarImageURL) {
-            // load new image
-            this.progressBarImageLoaded = false;
-            this.progressBarImageURL = imgURL;
-            this.progressBarImageElement.src = imgURL;
-        } else {
-            // the correct image is already loaded
-            this.progressBarImageLoaded = true;
-        }
-    } else {
-        // there is no progress bar so there is no need
-        // to load any progress bar image
-        this.progressBarImageLoaded = true;
-    }
-};
-
-// Callback for notifying the object that its progress bar image completed loading.
-NotificationPopup.prototype.progressBarImageLoadingCompleted = function() {
-    uiLogger.debug("NotificationPopup.progressBarImageLoadingCompleted()");
-    
-    // mark the progress bar image as loaded
-    this.progressBarImageLoaded = true;
-    
-    // complete the process of displaying the notification popup
-    // if it has been commanded but not yet completed
-    if (this.processingShowNotification) {
-        this.completeShowNotification();
-    }
-};