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: "" michael@0: michael@0: michael@0: michael@0: michael@0: 0 ? this.selectedItems[0] : null; michael@0: ]]> michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: 0) michael@0: return this.getIndexOfItem(this.selectedItems[0]); michael@0: return -1; michael@0: ]]> michael@0: michael@0: michael@0: = 0) { michael@0: this.selectItem(this.getItemAtIndex(val)); michael@0: } else { michael@0: this.clearSelection(); michael@0: this.currentItem = null; michael@0: } michael@0: ]]> michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: 0) michael@0: return this.selectedItem.value; michael@0: return 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: if (this._currentItem == val) michael@0: return val; michael@0: michael@0: if (this._currentItem) michael@0: this._currentItem.current = false; michael@0: this._currentItem = val; michael@0: michael@0: if (val) michael@0: val.current = true; michael@0: michael@0: return val; michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.currentItem ? this.getIndexOfItem(this.currentItem) : -1; michael@0: michael@0: michael@0: = 0) michael@0: this.currentItem = this.getItemAtIndex(val); michael@0: else michael@0: this.currentItem = 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: this._selectionStart = null; michael@0: michael@0: var suppress = this._suppressOnSelect; michael@0: this._suppressOnSelect = true; michael@0: michael@0: var item = this.getItemAtIndex(0); michael@0: while (item) { michael@0: this.addItemToSelection(item); michael@0: item = this.getNextItem(item, 1); michael@0: } michael@0: michael@0: this._suppressOnSelect = suppress; michael@0: this._fireOnSelect(); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: this._selectionStart = null; michael@0: michael@0: var suppress = this._suppressOnSelect; michael@0: this._suppressOnSelect = true; michael@0: michael@0: var item = this.getItemAtIndex(0); michael@0: while (item) { michael@0: if (item.selected) michael@0: this.removeItemFromSelection(item); michael@0: else michael@0: this.addItemToSelection(item); michael@0: item = this.getNextItem(item, 1); michael@0: } michael@0: michael@0: this._suppressOnSelect = suppress; michael@0: this._fireOnSelect(); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: = 0; --i) michael@0: this.selectedItems[i].selected = false; michael@0: michael@0: this.selectedItems.length = 0; michael@0: } michael@0: michael@0: this._selectionStart = null; michael@0: this._fireOnSelect(); 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: if (val) michael@0: this.setAttribute("disableKeyNavigation", "true"); michael@0: else michael@0: this.removeAttribute("disableKeyNavigation"); michael@0: return val; 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: numItems - 1) michael@0: newIndex = numItems - 1; michael@0: michael@0: var newItem = this.getItemAtIndex(newIndex); michael@0: // make sure that the item is actually visible/selectable michael@0: if (this._userSelecting && newItem && !this._canUserSelect(newItem)) michael@0: newItem = michael@0: aOffset > 0 ? this.getNextItem(newItem, 1) || this.getPreviousItem(newItem, 1) : michael@0: this.getPreviousItem(newItem, 1) || this.getNextItem(newItem, 1); michael@0: if (newItem) { michael@0: this.ensureIndexIsVisible(this.getIndexOfItem(newItem)); michael@0: if (aIsSelectingRange) michael@0: this.selectItemRange(null, newItem); michael@0: else if (aIsSelecting) michael@0: this.selectItem(newItem); michael@0: michael@0: this.currentItem = newItem; 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: aMe._fireOnSelect(); michael@0: aMe._selectTimeout = null; michael@0: michael@0: michael@0: michael@0: false michael@0: false michael@0: false michael@0: null michael@0: null 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: 0) { michael@0: if (this.currentIndex == -1) { michael@0: this.currentIndex = this.getIndexOfFirstVisibleRow(); michael@0: } michael@0: else { michael@0: this.currentItem._fireEvent("DOMMenuItemActive"); michael@0: } michael@0: } michael@0: this._lastKeyTime = 0; michael@0: ]]> michael@0: michael@0: michael@0: 1000) michael@0: this._incrementalString = ""; michael@0: michael@0: var key = String.fromCharCode(event.charCode).toLowerCase(); michael@0: this._incrementalString += key; michael@0: this._lastKeyTime = event.timeStamp; michael@0: michael@0: // If all letters in the incremental string are the same, just michael@0: // try to match the first one michael@0: var incrementalString = /^(.)\1+$/.test(this._incrementalString) ? michael@0: RegExp.$1 : this._incrementalString; michael@0: var length = incrementalString.length; michael@0: michael@0: var rowCount = this.getRowCount(); michael@0: var l = this.selectedItems.length; michael@0: var start = l > 0 ? this.getIndexOfItem(this.selectedItems[l - 1]) : -1; michael@0: // start from the first element if none was selected or from the one michael@0: // following the selected one if it's a new or a repeated-letter search michael@0: if (start == -1 || length == 1) michael@0: start++; michael@0: michael@0: for (var i = 0; i < rowCount; i++) { michael@0: var k = (start + i) % rowCount; michael@0: var listitem = this.getItemAtIndex(k); michael@0: if (!this._canUserSelect(listitem)) michael@0: continue; michael@0: // allow richlistitems to specify the string being searched for michael@0: var searchText = "searchLabel" in listitem ? listitem.searchLabel : michael@0: listitem.getAttribute("label"); // (see also bug 250123) michael@0: searchText = searchText.substring(0, length).toLowerCase(); michael@0: if (searchText == incrementalString) { michael@0: this.ensureIndexIsVisible(k); michael@0: this.timedSelect(listitem, this._selectDelay); michael@0: break; 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: const XULNS = michael@0: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; michael@0: michael@0: var item = this.ownerDocument.createElementNS(XULNS, "listitem"); michael@0: item.setAttribute("label", aLabel); michael@0: item.setAttribute("value", aValue); michael@0: this.appendChild(item); michael@0: return item; 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 = this.ownerDocument.createElementNS(XULNS, "listitem"); michael@0: item.setAttribute("label", aLabel); michael@0: item.setAttribute("value", aValue); michael@0: var before = this.getItemAtIndex(aIndex); michael@0: if (before) michael@0: this.insertBefore(item, before); michael@0: else michael@0: this.appendChild(item); michael@0: return item; michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.getIndexOfItem(item); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.getItemAtIndex(index); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.ensureIndexIsVisible(index); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.ensureIndexIsVisible(this.listBoxObject.getIndexOfItem(element)); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.scrollToIndex(index); michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.getNumberOfVisibleRows(); michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.getIndexOfFirstVisibleRow(); michael@0: michael@0: michael@0: michael@0: michael@0: return this.listBoxObject.getRowCount(); michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: = 0 && i > maxTop; i--) { michael@0: item = this.getItemAtIndex(i); michael@0: if (item && !this._canUserSelect(item)) michael@0: maxTop--; michael@0: } michael@0: if (newTop >= maxTop) michael@0: newTop = maxTop; michael@0: } michael@0: if (newTop < 0) michael@0: newTop = 0; michael@0: this.scrollToIndex(newTop); michael@0: return pageOffset; 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: 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: 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: