commit 9e5c15423a0e8248e6b263755d268ad84390d6f6
parent 6626eba844e847a2490b7508973d1a3abbf68e4e
Author: David Norton <david@nortoncrew.com>
Date: Mon, 7 Aug 2006 15:25:29 +0000
Fixes #164, On item delete, if "Erase Files" is not checked, it still shows files and notes being deleted.
If you are simple removing an item from a project, it won't ask you if you want to delete files and notes.
ItemTreeView:
- notify() now works with multiple ids for action=modify.
- saveSelection() returns an array of selected IDs instead of saving it to a class variable
- rememberSelection(selection) takes an array of IDs.
Diffstat:
2 files changed, 55 insertions(+), 32 deletions(-)
diff --git a/chrome/chromeFiles/content/scholar/itemTreeView.js b/chrome/chromeFiles/content/scholar/itemTreeView.js
@@ -34,7 +34,6 @@ Scholar.ItemTreeView = function(itemGroup)
this._itemGroup = itemGroup;
this._treebox = null;
- this._savedSelection = null;
this.refresh();
this._unregisterID = Scholar.Notifier.registerItemTree(this);
@@ -82,9 +81,9 @@ Scholar.ItemTreeView.prototype.refresh = function()
Scholar.ItemTreeView.prototype.notify = function(action, type, ids)
{
var madeChanges = false;
-
+
this.selection.selectEventsSuppressed = true;
- this.saveSelection();
+ var savedSelection = this.saveSelection();
if((action == 'remove' && !this._itemGroup.isLibrary()) || (action == 'delete' && this._itemGroup.isLibrary()))
{
@@ -117,19 +116,40 @@ Scholar.ItemTreeView.prototype.notify = function(action, type, ids)
}
else if(action == 'modify') //must check for null because it could legitimately be 0
{
- var row = this._itemRowMap[ids];
- if( row != null)
+ ids = Scholar.flattenArguments(ids);
+
+ for(var i=0, len=ids.length; i<len; i++)
{
- if(this.isContainer(row) && this.isContainerOpen(row))
+ var row = this._itemRowMap[ids[i]];
+ if( row != null)
{
- this.toggleOpenState(row);
- this.toggleOpenState(row);
+ if(this.isContainer(row) && this.isContainerOpen(row))
+ {
+ this.toggleOpenState(row);
+ this.toggleOpenState(row);
+ }
+ else if(this.getParentIndex(row))
+ {
+
+ }
+ else
+ {
+ this._treebox.invalidateRow(row);
+ }
+ madeChanges = true;
}
- else
+ else if(this._itemGroup.isLibrary() || this._itemGroup.ref.hasItem(ids[i]))
{
- this._treebox.invalidateRow(row);
+ var item = Scholar.Items.get(ids[i]);
+
+ if(!item.getSource())
+ {
+ //most likely, the note or file's parent was removed.
+ this._showItem(new Scholar.ItemTreeView.TreeRow(item,0,false),this.rowCount);
+ this._treebox.rowCountChanged(this.rowCount-1,1);
+ madeChanges = true;
+ }
}
- madeChanges = true;
}
}
else if(action == 'add')
@@ -154,7 +174,7 @@ Scholar.ItemTreeView.prototype.notify = function(action, type, ids)
this.sort(); //this also refreshes the hash map
this._treebox.invalidate();
}
- else if(action != 'modify') //no need to update this if we just modified
+ else if(action != 'modify') //no need to update this if we modified
{
this._refreshHashMap();
}
@@ -165,7 +185,7 @@ Scholar.ItemTreeView.prototype.notify = function(action, type, ids)
}
else
{
- this.rememberSelection();
+ this.rememberSelection(savedSelection);
}
}
this.selection.selectEventsSuppressed = false;
@@ -358,9 +378,9 @@ Scholar.ItemTreeView.prototype.cycleHeader = function(column)
}
this.selection.selectEventsSuppressed = true;
- this.saveSelection();
+ var savedSelection = this.saveSelection();
this.sort();
- this.rememberSelection();
+ this.rememberSelection(savedSelection);
this.selection.selectEventsSuppressed = false;
this._treebox.invalidate();
}
@@ -515,7 +535,7 @@ Scholar.ItemTreeView.prototype.deleteSelection = function(eraseChildren)
Scholar.ItemTreeView.prototype.searchText = function(search)
{
this.selection.selectEventsSuppressed = true;
- this.saveSelection();
+ var savedSelection = this.saveSelection();
this._itemGroup.setSearch(search);
var oldCount = this.rowCount;
@@ -524,7 +544,7 @@ Scholar.ItemTreeView.prototype.searchText = function(search)
this.sort();
- this.rememberSelection();
+ this.rememberSelection(savedSelection);
this.selection.selectEventsSuppressed = false;
this._treebox.invalidate();
}
@@ -576,7 +596,7 @@ Scholar.ItemTreeView.prototype._refreshHashMap = function()
*/
Scholar.ItemTreeView.prototype.saveSelection = function()
{
- this._savedSelection = new Array();
+ savedSelection = new Array();
var start = new Object();
var end = new Object();
@@ -585,21 +605,22 @@ Scholar.ItemTreeView.prototype.saveSelection = function()
this.selection.getRangeAt(i,start,end);
for (var j=start.value; j<=end.value; j++)
{
- this._savedSelection.push(this._getItemAtRow(j).ref.getID());
+ savedSelection.push(this._getItemAtRow(j).ref.getID());
}
}
+ return savedSelection;
}
/*
* Sets the selection based on saved selection ids (see above)
*/
-Scholar.ItemTreeView.prototype.rememberSelection = function()
+Scholar.ItemTreeView.prototype.rememberSelection = function(selection)
{
this.selection.clearSelection();
- for(var i=0; i < this._savedSelection.length; i++)
+ for(var i=0; i < selection.length; i++)
{
- if(this._itemRowMap[this._savedSelection[i]] != null)
- this.selection.toggleSelect(this._itemRowMap[this._savedSelection[i]]);
+ if(this._itemRowMap[selection[i]] != null)
+ this.selection.toggleSelect(this._itemRowMap[selection[i]]);
}
}
@@ -651,8 +672,7 @@ Scholar.ItemTreeCommandController.prototype.onEvent = function(evt)
Scholar.ItemTreeView.prototype.onDragStart = function (evt,transferData,action)
{
transferData.data=new TransferData();
- this.saveSelection();
- transferData.data.addDataForFlavour("scholar/item",this._savedSelection);
+ transferData.data.addDataForFlavour("scholar/item",this.saveSelection());
}
/*
diff --git a/chrome/chromeFiles/content/scholar/overlay.js b/chrome/chromeFiles/content/scholar/overlay.js
@@ -245,14 +245,17 @@ var ScholarPane = new function()
.getService(Components.interfaces.nsIPromptService);
var hasChildren;
- var start = new Object();
- var end = new Object();
- for (var i=0, len=itemsView.selection.getRangeCount(); i<len && !hasChildren; i++)
+ if(!getSelectedCollection())
{
- itemsView.selection.getRangeAt(i,start,end);
- for (var j=start.value; j<=end.value && !hasChildren; j++)
- if(itemsView._getItemAtRow(j).numNotes() || itemsView._getItemAtRow(j).numFiles())
- hasChildren = true;
+ var start = new Object();
+ var end = new Object();
+ for (var i=0, len=itemsView.selection.getRangeCount(); i<len && !hasChildren; i++)
+ {
+ itemsView.selection.getRangeAt(i,start,end);
+ for (var j=start.value; j<=end.value && !hasChildren; j++)
+ if(itemsView._getItemAtRow(j).numNotes() || itemsView._getItemAtRow(j).numFiles())
+ hasChildren = true;
+ }
}
if(promptService.confirmCheck(window, Scholar.getString('pane.items.delete.title'), Scholar.getString('pane.items.delete'), ( hasChildren ? Scholar.getString('pane.items.delete.attached') : ''), eraseChildren))