michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: document.getAnonymousElementByAttribute(this, "anonid", "main-box"); michael@0: michael@0: michael@0: this._scrollbox.boxObject.QueryInterface(Components.interfaces.nsIScrollBoxObject); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: -1) michael@0: this._currentIndex = this.currentIndex + 1; michael@0: michael@0: var event = document.createEvent("Events"); michael@0: event.initEvent("select", true, true); michael@0: this.dispatchEvent(event); michael@0: michael@0: // always call this (allows a commandupdater without controller) michael@0: document.commandDispatcher.updateCommands("richlistbox-select"); michael@0: ]]> michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.insertItemAt(-1, aLabel, aValue); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: const XULNS = michael@0: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; michael@0: michael@0: var item = michael@0: this.ownerDocument.createElementNS(XULNS, "richlistitem"); michael@0: item.setAttribute("value", aValue); michael@0: michael@0: var label = this.ownerDocument.createElementNS(XULNS, "label"); michael@0: label.setAttribute("value", aLabel); michael@0: label.setAttribute("flex", "1"); michael@0: label.setAttribute("crop", "end"); michael@0: item.appendChild(label); michael@0: michael@0: var before = this.getItemAtIndex(aIndex); michael@0: if (!before) michael@0: this.appendChild(item); michael@0: else michael@0: this.insertBefore(item, before); michael@0: michael@0: return item; michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.children[aIndex] || null; michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: = 0) { michael@0: // scrollRect.bottom wouldn't take a horizontal scroll bar into account michael@0: let scrollRectBottom = scrollRect.top + this._scrollbox.clientHeight; michael@0: offset = targetRect.bottom - scrollRectBottom; michael@0: if (offset <= 0) michael@0: return; michael@0: } michael@0: this._scrollbox.scrollTop += offset; michael@0: ]]> michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: height) michael@0: break; // we've reached the desired distance michael@0: index = ix; michael@0: } michael@0: michael@0: return index != this.currentIndex ? index - this.currentIndex : aDirection; michael@0: ]]> michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: = 0; i--) { michael@0: if (this.selectedItems[i] && this.selectedItems[i].id) michael@0: this.selectedItems[i] = document.getElementById(this.selectedItems[i].id); michael@0: else michael@0: this.selectedItems[i] = null; michael@0: if (!this.selectedItems[i]) michael@0: this.selectedItems.splice(i, 1); michael@0: } michael@0: } michael@0: if (this.currentItem && this.currentItem.id) michael@0: this.currentItem = document.getElementById(this.currentItem.id); michael@0: else michael@0: this.currentItem = null; michael@0: michael@0: // if we have no previously current item or if the above check fails to michael@0: // find the previous nodes (which causes it to clear selection) michael@0: if (!this.currentItem && this.selectedCount == 0) { michael@0: this.currentIndex = this._currentIndex ? this._currentIndex - 1 : 0; michael@0: michael@0: // cf. listbox constructor: michael@0: // select items according to their attributes michael@0: var children = this.children; michael@0: for (var i = 0; i < children.length; ++i) { michael@0: if (children[i].getAttribute("selected") == "true") michael@0: this.selectedItems.push(children[i]); michael@0: } michael@0: } michael@0: michael@0: if (this.selType != "multiple" && this.selectedCount == 0) michael@0: this.selectedItem = this.currentItem; michael@0: ]]> michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: y.value) && michael@0: (aItem.boxObject.y < y.value + this.scrollBoxObject.height); michael@0: ]]> michael@0: michael@0: michael@0: michael@0: null michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: