michael@0: // -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- michael@0: michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: var gTreeUtils = { michael@0: deleteAll: function (aTree, aView, aItems, aDeletedItems) michael@0: { michael@0: for (var i = 0; i < aItems.length; ++i) michael@0: aDeletedItems.push(aItems[i]); michael@0: aItems.splice(0, aItems.length); michael@0: var oldCount = aView.rowCount; michael@0: aView._rowCount = 0; michael@0: aTree.treeBoxObject.rowCountChanged(0, -oldCount); michael@0: }, michael@0: michael@0: deleteSelectedItems: function (aTree, aView, aItems, aDeletedItems) michael@0: { michael@0: var selection = aTree.view.selection; michael@0: selection.selectEventsSuppressed = true; michael@0: michael@0: var rc = selection.getRangeCount(); michael@0: for (var i = 0; i < rc; ++i) { michael@0: var min = { }; var max = { }; michael@0: selection.getRangeAt(i, min, max); michael@0: for (var j = min.value; j <= max.value; ++j) { michael@0: aDeletedItems.push(aItems[j]); michael@0: aItems[j] = null; michael@0: } michael@0: } michael@0: michael@0: var nextSelection = 0; michael@0: for (i = 0; i < aItems.length; ++i) { michael@0: if (!aItems[i]) { michael@0: var j = i; michael@0: while (j < aItems.length && !aItems[j]) michael@0: ++j; michael@0: aItems.splice(i, j - i); michael@0: nextSelection = j < aView.rowCount ? j - 1 : j - 2; michael@0: aView._rowCount -= j - i; michael@0: aTree.treeBoxObject.rowCountChanged(i, i - j); michael@0: } michael@0: } michael@0: michael@0: if (aItems.length) { michael@0: selection.select(nextSelection); michael@0: aTree.treeBoxObject.ensureRowIsVisible(nextSelection); michael@0: aTree.focus(); michael@0: } michael@0: selection.selectEventsSuppressed = false; michael@0: }, michael@0: michael@0: sort: function (aTree, aView, aDataSet, aColumn, aComparator, michael@0: aLastSortColumn, aLastSortAscending) michael@0: { michael@0: var ascending = (aColumn == aLastSortColumn) ? !aLastSortAscending : true; michael@0: if (aDataSet.length == 0) michael@0: return ascending; michael@0: michael@0: var numericSort = !isNaN(aDataSet[0][aColumn]); michael@0: var sortFunction = null; michael@0: if (aComparator) { michael@0: sortFunction = function (a, b) { return aComparator(a[aColumn], b[aColumn]); }; michael@0: } michael@0: aDataSet.sort(sortFunction); michael@0: if (!ascending) michael@0: aDataSet.reverse(); michael@0: michael@0: aTree.view.selection.clearSelection(); michael@0: aTree.view.selection.select(0); michael@0: aTree.treeBoxObject.invalidate(); michael@0: aTree.treeBoxObject.ensureRowIsVisible(0); michael@0: michael@0: return ascending; michael@0: } michael@0: }; michael@0: