From b6956de362409394db81e857e0a8c3fb52d3b14b Mon Sep 17 00:00:00 2001 From: "jminta%gmail.com" Date: Wed, 1 Nov 2006 16:08:08 +0000 Subject: [PATCH] Bug 232202 Checking 'done' checkbox in Tasks sidebar scrolls to top of listbox, r=ctalbert, mvl --- calendar/resources/content/unifinderToDo.js | 61 +++++++++++++++++---- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/calendar/resources/content/unifinderToDo.js b/calendar/resources/content/unifinderToDo.js index cba3809429f5..5bc3af5063f4 100644 --- a/calendar/resources/content/unifinderToDo.js +++ b/calendar/resources/content/unifinderToDo.js @@ -87,21 +87,61 @@ var unifinderToDoDataSourceObserver = }, onAddItem: function(aItem) { if (aItem instanceof Components.interfaces.calITodo && - !this.mInBatch) - toDoUnifinderRefresh(); + !this.mInBatch) { + if (document.getElementById("hide-completed-checkbox").checked && + aItem.isCompleted) { + return; + } + this.addItemToTree(aItem); + } }, onModifyItem: function(aNewItem, aOldItem) { if (aNewItem instanceof Components.interfaces.calITodo && - !this.mInBatch) - toDoUnifinderRefresh(); + !this.mInBatch) { + var completedChange = (aNewItem.isCompleted != aOldItem.isCompleted); + if (document.getElementById("hide-completed-checkbox").checked && + completedChange) { + if (aNewItem.isCompleted) { + this.removeItemFromTree(aOldItem); + } else { + this.addItemToTree(aNewItem); + } + return; + } + + // We need to add+remove, because the property that our sort is + // based on could be the same as the property that was changed in + // the task + this.removeItemFromTree(aOldItem); + this.addItemToTree(aNewItem); + } }, onDeleteItem: function(aDeletedItem) { if (aDeletedItem instanceof Components.interfaces.calITodo && - !this.mInBatch) - toDoUnifinderRefresh(); + !this.mInBatch) { + if (document.getElementById("hide-completed-checkbox").checked && + aDeletedItem.isCompleted) { + return; + } + this.removeItemFromTree(aDeletedItem); + } }, onError: function(aErrNo, aMessage) {}, + addItemToTree: function(aItem) { + var tree = document.getElementById("unifinder-todo-tree"); + gTaskArray.push(aItem); + gTaskArray.sort(compareTasks); + tree.treeBoxObject.rowCountChanged(tree.taskView.getRowOfCalendarTask(aItem), 1); + }, + + removeItemFromTree: function(aItem) { + var tree = document.getElementById("unifinder-todo-tree"); + var index = tree.taskView.getRowOfCalendarTask(aItem); + gTaskArray.splice(index, 1); + tree.treeBoxObject.rowCountChanged(index, -1); + }, + // calICompositeObserver: onCalendarAdded: function(aDeletedItem) { if (!this.mInBatch) @@ -515,12 +555,11 @@ calendarTaskView.prototype.getCalendarTaskAtRow = function( i ) calendarTaskView.prototype.getRowOfCalendarTask = function( Task ) { - for( var i = 0; i < this.gTaskArray.length; i++ ) - { - if( this.gTaskArray[i].id == Event.id ) - return( i ); + for (var i in gTaskArray) { + if (gTaskArray[i].hasSameIds(Task)) + return i; } - return( "null" ); + return null; } /**