www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit fdd8245eec7e5fee4d663b3645e267e276461652
parent 146d4811ab0ea541586413ae470133fb9faadaa7
Author: David Norton <david@nortoncrew.com>
Date:   Fri,  2 Jun 2006 12:59:58 +0000

Some experimentation with drag and drop (doesn't work yet)
Made some fixes on itemTreeView to allow for notify() on multiple deletes
	(shifts the row identifier up 1 for each previous delete, etc.)
	One more thing -- this might not happen because the tree calls each Item.erase() or Collection.removeItem() individually.
Bug fix on notifier.js so that register*Tree() actually returns the hash. :-)
	Unfortunately, unregister*Tree() does not seem to actually work, there is still an object at _observers['itemTree'][hash]
(temporary): When you select an item Scholar no longer loads a page into the browser.
	The javascript bugs on those HTML pages were frustrating the debugger.

Diffstat:
Mchrome/chromeFiles/content/scholar/folderTreeView.js | 29+++++++++++++++++++++++++++--
Mchrome/chromeFiles/content/scholar/itemTreeView.js | 80++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Mchrome/chromeFiles/content/scholar/overlay.js | 32+++++++++++++++++++++++++++++---
Mchrome/chromeFiles/content/scholar/overlay.xul | 2++
Mchrome/chromeFiles/content/scholar/xpcom/notifier.js | 4++--
5 files changed, 115 insertions(+), 32 deletions(-)

diff --git a/chrome/chromeFiles/content/scholar/folderTreeView.js b/chrome/chromeFiles/content/scholar/folderTreeView.js @@ -29,8 +29,16 @@ Scholar.FolderTreeView.prototype.getCellText = function(row, column) return ""; } -Scholar.FolderTreeView.prototype.isContainer = function(row) { return this._getItemAtRow(row).isCollection(); } -Scholar.FolderTreeView.prototype.isContainerOpen = function(row) { return this._dataItems[row][1]; } +Scholar.FolderTreeView.prototype.isContainer = function(row) +{ + return this._getItemAtRow(row).isCollection(); +} + +Scholar.FolderTreeView.prototype.isContainerOpen = function(row) +{ + return this._dataItems[row][1]; +} + Scholar.FolderTreeView.prototype.isContainerEmpty = function(row) { var itemGroup = this._getItemAtRow(row); @@ -164,6 +172,23 @@ Scholar.FolderTreeView.prototype._refreshHashMap = function() //Scholar.debug(Scholar.varDump(this.objectRowMap)); } +Scholar.FolderTreeView.prototype.canDrop = function(row, orient) +{ + if(orient == this.DROP_ON && this._getItemAtRow(row).isCollection()) + return true; + else + return false; + +} + +Scholar.FolderTreeView.prototype.drop = function(row, orient) +{ + //you can't really do anything here, look to overlay.js - ScholarCollectionsDragObserver +} + +// +// SCHOLAR ITEMGROUP +// Scholar.ItemGroup = function(type, ref) { this.type = type; diff --git a/chrome/chromeFiles/content/scholar/itemTreeView.js b/chrome/chromeFiles/content/scholar/itemTreeView.js @@ -119,10 +119,10 @@ Scholar.ItemTreeView.prototype.deleteSelection = function() else if(this._itemGroup.isCollection()) this._itemGroup.ref.removeItem(this._getItemAtRow(rows[i]-i).getID()); - + /* Don't do this, the notifier tells us? //remove row from tree: this._hideItem(rows[i]-i); - this._treebox.rowCountChanged(rows[i]-i, -1); + this._treebox.rowCountChanged(rows[i]-i, -1); */ } this._treebox.endUpdateBatch(); @@ -159,36 +159,66 @@ Scholar.ItemTreeView.prototype.getCollectionID = function() Scholar.ItemTreeView.prototype.notify = function(action, type, ids) { ids = Scholar.flattenArguments(ids); + var madeChanges = false; - for (var i=0, len=ids.length; i<len; i++){ - - var row = this._itemRowMap[ids[i]]; - if(action == 'remove' && row) - { - this._hideItem(row); - this._treebox.rowCountChanged(row,-1); - } - else if(action == 'modify' && row) - { - this._treebox.invalidateRow(row) - } - else if(action == 'add' && !row) + if(action == 'remove') + { + //Since a remove involves + + //sort the ids by row + var rows = new Array(); + for(var i=0, len=ids.length; i<len; i++) + if(this._itemRowMap[ids[i]] != null) + rows.push(this._itemRowMap[ids[i]]); + + if(rows.length > 0) { - var item = Scholar.Items.get(ids[i]); + rows.sort(function(a,b) { return a-b }); - if(this._itemGroup.isLibrary() || item.inCollection(this.getCollectionID())) + for(var i=0, len=rows.length; i<len; i++) { - this._showItem(item,this.rowCount); - this._treebox.rowCountChanged(this.rowCount,1); + var row = rows[i]; + this._hideItem(row-i); + this._treebox.rowCountChanged(row-i,-1); } - //TODO: sorted? figure it out later - } - else + + madeChanges = true; + } + + } + else + { + for (var i=0, len=ids.length; i<len; i++) { - return; - } + var row = this._itemRowMap[ids[i]]; + if(action == 'modify' && row != null) //must check for null because it could legitimately be 0 + { + this._treebox.invalidateRow(row) + } + else if(action == 'add' && row == null) + { + var item = Scholar.Items.get(ids[i]); + + if(this._itemGroup.isLibrary() || item.inCollection(this.getCollectionID())) + { + this._showItem(item,this.rowCount); + this._treebox.rowCountChanged(this.rowCount,1); + } + + madeChanges = true; + + //TODO: sorted? figure it out later + } + + } } - this._refreshHashMap(); + if(madeChanges) + this._refreshHashMap(); +} + +Scholar.ItemTreeView.prototype.canDrop = function(index, orient) +{ + return false; } \ No newline at end of file diff --git a/chrome/chromeFiles/content/scholar/overlay.js b/chrome/chromeFiles/content/scholar/overlay.js @@ -56,8 +56,8 @@ var ScholarPane = new function() function folderSelected() { - //if(itemsView) - // itemsView.unregister(); + if(itemsView) + itemsView.unregister(); if(foldersView.selection.count == 1 && foldersView.selection.currentIndex != -1) { @@ -88,7 +88,7 @@ var ScholarPane = new function() if(!validURL(url)) url = 'http://www.google.com/search?q='+encodeURIComponent('"'+item.getField("title")+'"'); //+'&btnI' - document.getElementById('content').loadURI(url); +// document.getElementById('content').loadURI(url); document.getElementById('scholar-floater').hidden=false; } else @@ -129,4 +129,30 @@ var ScholarPane = new function() } } +var ScholarItemsDragObserver = +{ + onDragStart: function (evt,transferData,action) + { + transferData.data=new TransferData(); + transferData.data.addDataForFlavour("text/unicode","finally"); + + } +}; + +var ScholarCollectionsDragObserver = +{ + getSupportedFlavours : function () + { + var flavours = new FlavourSet(); + flavours.appendFlavour("text/unicode"); + + return flavours; + }, + onDragOver: function (evt,dropdata,session){}, + onDrop: function (evt,dropdata,session) + { + alert(dropdata.data); + } +} + window.addEventListener("load", function(e) { ScholarPane.init(e); }, false); \ No newline at end of file diff --git a/chrome/chromeFiles/content/scholar/overlay.xul b/chrome/chromeFiles/content/scholar/overlay.xul @@ -33,6 +33,7 @@ <hbox flex="1"> <tree id="folders-tree" hidecolumnpicker="true" onselect="ScholarPane.folderSelected();" seltype="single" + ondragover="nsDragAndDrop.dragOver(event,ScholarCollectionsDragObserver)" ondragdrop="nsDragAndDrop.drop(event,ScholarCollectionsDragObserver)" persist="width" flex="1"> <treecols> <treecol @@ -48,6 +49,7 @@ id="items-tree" enableColumnDrag="true" onkeypress="if(event.keyCode == event.DOM_VK_BACK_SPACE || event.keyCode == event.DOM_VK_DELETE){ ScholarPane.deleteSelection(); return false; }" onselect="ScholarPane.itemSelected();" + ondraggesture="if (event.target.localName == 'treechildren') nsDragAndDrop.startDrag(event,ScholarItemsDragObserver);" persist="width" flex="5"> <treecols> <treecol diff --git a/chrome/chromeFiles/content/scholar/xpcom/notifier.js b/chrome/chromeFiles/content/scholar/xpcom/notifier.js @@ -10,11 +10,11 @@ Scholar.Notifier = new function(){ this.trigger = trigger; function registerColumnTree(ref){ - _register('columnTree', ref); + return _register('columnTree', ref); } function registerItemTree(ref){ - _register('itemTree', ref); + return _register('itemTree', ref); } function unregisterColumnTree(hash){