Update Zotero.ProgressWindow to properly handle and stack multiple progress windows, stored in Zotero.ProgressWindowSet

Refresher:

var progress = new Zotero.ProgressWindow();
progress.changeHeadline('Indexing item...');
progress.addLines("My First Book", "chrome://zotero/skin/treeitem-book.png");
progress.addDescription('This is my first book.');
progress.show();
progress.fade();

var progress2 = new Zotero.ProgressWindow();
progress2.changeHeadline('Indexing item 2...');
progress2.addLines("My Second Book", "chrome://zotero/skin/treeitem-book.png");
progress2.addDescription('This is my second book.');
progress2.show();
progress2.fade();
This commit is contained in:
Dan Stillman 2007-03-06 15:38:29 +00:00
parent 5f37a75804
commit f6d9a42644

View File

@ -20,6 +20,57 @@
***** END LICENSE BLOCK *****
*/
Zotero.ProgressWindowSet = new function() {
this.add = add;
this.tile = tile;
this.remove = remove;
var _numWindows = 0;
var _progressWindows = [];
const X_OFFSET = 30;
const Y_OFFSET = 10;
function add(progressWin) {
_progressWindows.push(progressWin);
_numWindows++;
}
function tile(progressWin) {
var parent = progressWin.opener;
var sum = 0;
for (var i=0; i<_progressWindows.length; i++) {
var p = _progressWindows[i];
// Skip progress windows from other windows
if (p.opener != parent) {
continue;
}
sum += Y_OFFSET + p.outerHeight;
p.moveTo(
parent.screenX + parent.innerWidth - p.outerWidth - X_OFFSET,
parent.screenY + parent.innerHeight - sum
);
}
}
function remove(progressWin) {
_numWindows--;
for (var i=0; i<_progressWindows.length; i++) {
if (_progressWindows[i] == progressWin) {
_progressWindows.splice(i, 1);
}
}
}
}
/*
* Handles the display of a div showing progress in scraping, indexing, etc.
*
@ -55,11 +106,14 @@ Zotero.ProgressWindow = function(_window){
if(_windowLoading || _windowLoaded) { // already loading or loaded
return false;
}
_progressWindow = _window.openDialog("chrome://zotero/chrome/progressWindow.xul",
"", "chrome,dialog=no,titlebar=no,popup=yes");
_progressWindow.addEventListener("load", _onWindowLoaded, false);
_progressWindow.addEventListener("pageshow", _onWindowLoaded, false);
_windowLoading = true;
Zotero.ProgressWindowSet.add(_progressWindow);
return true;
}
@ -126,6 +180,7 @@ Zotero.ProgressWindow = function(_window){
function kill() {
_windowLoaded = false;
_windowLoading = false;
Zotero.ProgressWindowSet.remove(_progressWindow);
try {
_progressWindow.close();
} catch(ex) {}
@ -152,10 +207,7 @@ Zotero.ProgressWindow = function(_window){
function _move() {
_progressWindow.sizeToContent();
_progressWindow.moveTo(
_window.screenX + _window.innerWidth - _progressWindow.outerWidth - 30,
_window.screenY + _window.innerHeight - _progressWindow.outerHeight - 10
);
Zotero.ProgressWindowSet.tile(_progressWindow);
}
function _timeout() {