Revised the way the ItemTreeView handles multiple-selection deletes.

Revised the way the dateAdded and dateModified columns are displayed.
Views are now unregistered on window close.

A few functions in overlay.js were renamed.
Began better commenting of the interface code.
This commit is contained in:
David Norton 2006-06-02 15:27:52 +00:00
parent 2a117168a9
commit f37ab47b39
4 changed files with 55 additions and 29 deletions

View File

@ -7,12 +7,17 @@ Scholar.FolderTreeView = function()
this._unregisterID = Scholar.Notifier.registerColumnTree(this); this._unregisterID = Scholar.Notifier.registerColumnTree(this);
} }
/*
* Unregisters itself from Scholar.Notifier (called on window close)
*/
Scholar.FolderTreeView.prototype.unregister = function() Scholar.FolderTreeView.prototype.unregister = function()
{ {
Scholar.Notifier.unregisterColumnTree(this._unregisterID); Scholar.Notifier.unregisterColumnTree(this._unregisterID);
} }
//CALLED BY DATA LAYER ON CHANGE: /*
* Is called by Scholar.Notifier on any changes to the data layer
*/
Scholar.FolderTreeView.prototype.notify = function(action, type, ids) Scholar.FolderTreeView.prototype.notify = function(action, type, ids)
{ {
ids = Scholar.flattenArguments(ids); ids = Scholar.flattenArguments(ids);

View File

@ -40,19 +40,14 @@ Scholar.ItemTreeView.prototype.getCellText = function(row, column)
if(column.id == 'dateAdded' || column.id == 'dateModified') //this is not so much that we will use this format for date, but a simple template for later revisions. if(column.id == 'dateAdded' || column.id == 'dateModified') //this is not so much that we will use this format for date, but a simple template for later revisions.
{ {
//
var d = val.split(' ');
var date = d[0].split('-');
var time = d[1].split('-');
var myDate = new Date(); var myDate = new Date();
myDate.setFullYear(date[0],date[1]-1,date[2]);
val = myDate.getMonth()+1 + '/' + myDate.getDate() + '/' + myDate.getFullYear(); myDate.setTime(Date.parse(val.replace("-","/").replace("-","/")));
val = myDate.getMonth()+1 + '/' + myDate.getDate() + '/' + myDate.getFullYear() + " " + myDate.getHours() + ":" + myDate.getMinutes();
} }
return val; return val;
} }
@ -100,24 +95,24 @@ Scholar.ItemTreeView.prototype.deleteSelection = function()
return; return;
//create an array of selected items //create an array of selected items
var rows = new Array(); var items = new Array();
var start = new Object(); var start = new Object();
var end = new Object(); var end = new Object();
for (var i=0, len=this.selection.getRangeCount(); i<len; i++) for (var i=0, len=this.selection.getRangeCount(); i<len; i++)
{ {
this.selection.getRangeAt(i,start,end); this.selection.getRangeAt(i,start,end);
for (var j=start.value; j<=end.value; j++) for (var j=start.value; j<=end.value; j++)
rows.push(j); items.push(this._getItemAtRow(j));
} }
//iterate and erase... //iterate and erase...
this._treebox.beginUpdateBatch(); this._treebox.beginUpdateBatch();
for (var i=0; i<rows.length; i++) for (var i=0; i<items.length; i++)
{ {
if(this._itemGroup.isLibrary()) //erase item from DB if(this._itemGroup.isLibrary()) //erase item from DB
this._getItemAtRow(rows[i]-i).erase(); items[i].erase();
else if(this._itemGroup.isCollection()) else if(this._itemGroup.isCollection())
this._itemGroup.ref.removeItem(this._getItemAtRow(rows[i]-i).getID()); this._itemGroup.ref.removeItem(items[i].getID());
/* Disabled for now (notifier) /* Disabled for now (notifier)
//remove row from tree: //remove row from tree:
@ -125,8 +120,6 @@ Scholar.ItemTreeView.prototype.deleteSelection = function()
this._treebox.rowCountChanged(rows[i]-i, -1); */ this._treebox.rowCountChanged(rows[i]-i, -1); */
} }
this._treebox.endUpdateBatch(); this._treebox.endUpdateBatch();
this._refreshHashMap();
} }
Scholar.ItemTreeView.prototype.searchText = function(search) Scholar.ItemTreeView.prototype.searchText = function(search)

View File

@ -1,12 +1,16 @@
/*
* This object contains the various functions for the interface
*/
var ScholarPane = new function() var ScholarPane = new function()
{ {
var foldersView; var foldersView;
var itemsView; var itemsView;
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
this.init = init; //Privileged methods
this.toggleScholar = toggleScholar; this.onLoad = onLoad;
this.onUnload = onUnload;
this.toggleDisplay = toggleDisplay;
this.newItem = newItem; this.newItem = newItem;
this.newCollection = newCollection; this.newCollection = newCollection;
this.folderSelected = folderSelected; this.folderSelected = folderSelected;
@ -16,12 +20,19 @@ var ScholarPane = new function()
this.search = search; this.search = search;
this.toggleView = toggleView; this.toggleView = toggleView;
function init() /*
* Called when the window is open
*/
function onLoad()
{ {
foldersView = new Scholar.FolderTreeView(); //pass params here? //Initialize folders view
foldersView = new Scholar.FolderTreeView();
document.getElementById('folders-tree').view = foldersView; document.getElementById('folders-tree').view = foldersView;
//select Library
foldersView.selection.select(0); foldersView.selection.select(0);
//Create the add menu with each item type
var addMenu = document.getElementById('tb-add').firstChild; var addMenu = document.getElementById('tb-add').firstChild;
var itemTypes = Scholar.ItemTypes.getTypes(); var itemTypes = Scholar.ItemTypes.getTypes();
for(var i = 0; i<itemTypes.length; i++) for(var i = 0; i<itemTypes.length; i++)
@ -32,10 +43,23 @@ var ScholarPane = new function()
addMenu.appendChild(menuitem); addMenu.appendChild(menuitem);
} }
// Drag.init(document.getElementById('scholar-floater-handle'),document.getElementById('scholar-floater'), 0, 400, 0, 500, true, true); //Drag.init(document.getElementById('scholar-floater-handle'),document.getElementById('scholar-floater'), 0, 400, 0, 500, true, true);
} }
function toggleScholar() /*
* Called when the window closes
*/
function onUnload()
{
foldersView.unregister();
if(itemsView)
itemsView.unregister();
}
/*
* Hides/displays the Scholar interface
*/
function toggleDisplay()
{ {
var visible = document.getElementById('scholar-pane').getAttribute('collapsed') == 'true'; var visible = document.getElementById('scholar-pane').getAttribute('collapsed') == 'true';
@ -43,7 +67,10 @@ var ScholarPane = new function()
document.getElementById('scholar-splitter').setAttribute('collapsed',!visible); document.getElementById('scholar-splitter').setAttribute('collapsed',!visible);
document.getElementById('scholar-floater').hidden = (!visible || itemsView.selection.count != 1); document.getElementById('scholar-floater').hidden = (!visible || itemsView.selection.count != 1);
} }
/*
* Called when the window closes
*/
function newItem(typeID) function newItem(typeID)
{ {
MetadataPane.viewItem(new Scholar.Item(typeID)); MetadataPane.viewItem(new Scholar.Item(typeID));
@ -82,7 +109,7 @@ var ScholarPane = new function()
{ {
var editButton = document.getElementById('metadata-pane-edit-button'); var editButton = document.getElementById('metadata-pane-edit-button');
if(itemsView && itemsView.selection.count == 1) if(itemsView && itemsView.selection.count == 1 && itemsView.selection.currentIndex != -1)
{ {
var item = itemsView._getItemAtRow(itemsView.selection.currentIndex); var item = itemsView._getItemAtRow(itemsView.selection.currentIndex);
@ -164,4 +191,5 @@ var ScholarCollectionsDragObserver =
} }
} }
window.addEventListener("load", function(e) { ScholarPane.init(e); }, false); window.addEventListener("load", function(e) { ScholarPane.onLoad(e); }, false);
window.addEventListener("unload", function(e) { ScholarPane.onUnload(e); }, false);

View File

@ -100,14 +100,14 @@
<spacer flex="1"/> <spacer flex="1"/>
<label value="Search:" control="tb-search"/> <label value="Search:" control="tb-search"/>
<textbox id="tb-search" type="timed" timeout="500" command="cmd_scholar_search"/> <textbox id="tb-search" type="timed" timeout="500" command="cmd_scholar_search"/>
<toolbarbutton class="tabs-closebutton" oncommand="ScholarPane.toggleScholar()"/> <toolbarbutton class="tabs-closebutton" oncommand="ScholarPane.toggleDisplay()"/>
</toolbar> </toolbar>
</vbox> </vbox>
<splitter id="scholar-splitter" resizebefore="closest" resizeafter="closest" position="2" persist="collapsed"/> <splitter id="scholar-splitter" resizebefore="closest" resizeafter="closest" position="2" persist="collapsed"/>
</vbox> </vbox>
<statusbar id="status-bar"> <statusbar id="status-bar">
<statusbarpanel id="scholar-load-status" label="Scholar is NOT loaded" onclick="ScholarPane.toggleScholar();"/> <statusbarpanel id="scholar-load-status" label="Scholar is NOT loaded" onclick="ScholarPane.toggleDisplay();"/>
</statusbar> </statusbar>
<script> <script>
@ -121,7 +121,7 @@
<menupopup id="menu_ToolsPopup"> <menupopup id="menu_ToolsPopup">
<menuseparator id="scholarSeparator" insertbefore="devToolsSeparator"/> <menuseparator id="scholarSeparator" insertbefore="devToolsSeparator"/>
<menuitem id="tools-scholar" insertbefore="devToolsSeparator" <menuitem id="tools-scholar" insertbefore="devToolsSeparator"
oncommand="ScholarPane.toggleScholar();" label="Scholar" oncommand="ScholarPane.toggleDisplay();" label="Scholar"
key="key_openScholar"/> key="key_openScholar"/>
</menupopup> </menupopup>