diff -r bf4420e9fa4d -r 2e16851ffecd ginebra2/chrome/js/ToggleButton.js --- a/ginebra2/chrome/js/ToggleButton.js Fri Jun 11 16:23:26 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -// Call ToggleButton to wire an HTML button (typically an tag) to a JS callback -// when you want the button pressed state to be tied to a Ginebra snippets -// visible attribute. -// -// -// Params: -// id - the id of the button. Ex: -// snippetId - the id of the ginebra snippet to which the button state should be tied -// upImg - the path to the "up" image for the button. -// downImg - the path to the "down" image for the button. -// disabledImg - the path to the "disabled" image for the button. -// handler - the javascript callback to be called when triggered -// triggerOnMouseUp- if true the handler will be called on mouse-up, defaults to true. -// triggerOnMouseDown - if true the handler will be called on mouse-down, defaults to false. -// triggerOnMouseOut - if true the handler will be called on mouse-out, defaults to false. -// -function ToggleButton(id, snippetId, upImg, downImg, disabledImg, handler, triggerOnMouseUp, triggerOnMouseDown, triggerOnMouseOut) { - this.id = id; - this.snippetId = snippetId; - this.upImg = upImg; - this.downImg = downImg; - this.disabledImg = disabledImg; - this.handler = handler; - this.isDown = false; - this.enabled = true; - this.triggerOnMouseUp= triggerOnMouseUp == undefined ? true : triggerOnMouseUp; - this.triggerOnMouseDown = triggerOnMouseDown == undefined ? false : triggerOnMouseDown; - this.triggerOnMouseOut = triggerOnMouseOut == undefined ? false : triggerOnMouseOut; - - // attach this class to the item as "button" for later access - // delete/cleanup existing button (if any) and attach this as button - dom = document.getElementById(this.id); - if (dom.button) { - delete dom.button; - } - dom.button = this; - - //! Provide easy access to button element. - this.element = function() { - return document.getElementById(this.id); - } - - //! Allow client to change button images after object creation. - this.updateImages = function(upImg, downImg, disabledImg) { - this.upImg = upImg; - this.downImg = downImg; - this.disableImg = disabledImg; - this.updateButton(); - } - - //! Updates button image to appropriate up/down/disabled icon. - this.updateButton = function() { - if (this.enabled) { - // button is enabled - if (this.isDown) { - // button is down - this.element().src = this.downImg; - } else { - // button is up - this.element().src = this.upImg; - } - } else { - // button is disabled - this.element().src = this.disabledImg; - } - } - - //! Enables/Disables button. - this.setEnabled = function(state) { - this.enabled = state; - this.updateButton(); - } - - //! Handler for the mouse down event. - this.onMouseDown = function() { - if (this.triggerOnMouseDown && this.enabled) { - this.handler(); - } - } - - //! Handler for the mouse up event. - this.onMouseUp = function() { - if (this.triggerOnMouseUp && this.enabled) { - this.handler(); - } - } - - //! Handler for the mouse out event. - this.onMouseOut = function() { - if (this.isDown) { - if (this.triggerOnMouseOut && this.enabled) { - this.handler(); - } - } - } - - //! Handler for the snippet shown signal. - this.onSnippetShown = function() { - // When the snippet is shown the button should be down. - this.isDown = true; - this.updateButton.call(this); - } - - //! Handler for the snippet hidden signal. - this.onSnippetHidden = function() { - // When the snippet is hidden the button should be up. - this.isDown = false; - this.updateButton.call(this); - } - - //! After chrome is loaded, setup shown/hidden handlers. - this.chromeLoadComplete = function() { - // The up/down state of this button is tied to the visibility state of - // the specified snippet. - window.snippets[this.snippetId].shown.connect(this.onSnippetShown.bind(this)); - window.snippets[this.snippetId].hidden.connect(this.onSnippetHidden.bind(this)); - } - - // Make sure we can find the element. - if (!this.element()) { - alert("ToggleButton: element not found, " + id); - return; - } - - // Set up element event handlers. - this.element().onmousedown = this.onMouseDown.bind(this); - this.element().onmouseup = this.onMouseUp.bind(this); - this.element().onmouseout = this.onMouseOut.bind(this); - - // Set the initial state of the button. - this.updateButton(); - - // can't access chrome snippets until chrome load complete - window.chrome.chromeComplete.connect(this.chromeLoadComplete.bind(this)); -} -