From 89dbc278bd9b17b7997f61daecf861d112447e3a Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 9 Aug 2009 19:39:32 +0000 Subject: [PATCH] New method Zotero.updateZoteroPaneProgressMeter(percentage) for updating the overlay progress meter --- chrome/content/zotero/fileInterface.js | 2 +- chrome/content/zotero/xpcom/translate.js | 2 +- chrome/content/zotero/xpcom/zotero.js | 36 +++++++++++++++++++++--- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/chrome/content/zotero/fileInterface.js b/chrome/content/zotero/fileInterface.js index 402d571b8..854c09d20 100644 --- a/chrome/content/zotero/fileInterface.js +++ b/chrome/content/zotero/fileInterface.js @@ -569,7 +569,7 @@ Zotero_File_Interface.Progress = new function() { this.close = close; function show(headline) { - Zotero.showZoteroPaneProgressBar(headline) + Zotero.showZoteroPaneProgressMeter(headline) } function close() { diff --git a/chrome/content/zotero/xpcom/translate.js b/chrome/content/zotero/xpcom/translate.js index 531a5a4e9..0a348963f 100644 --- a/chrome/content/zotero/xpcom/translate.js +++ b/chrome/content/zotero/xpcom/translate.js @@ -1682,7 +1682,7 @@ Zotero.Translate.prototype._itemDone = function(item, attachedTo) { delete item; // Allow progress meter to update - Zotero.wait(50); + Zotero.wait(); } /* diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index d7989becc..1e328e6d4 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -142,7 +142,10 @@ var Zotero = new function(){ var _localizedStringBundle; var _localUserKey; var _waiting; + var _locked; + var _progressMeters; + var _lastPercentage; /* * Initialize the extension @@ -1098,9 +1101,9 @@ var Zotero = new function(){ * * @param {String} msg * @param {Boolean} [determinate=false] - * @return {Element[]} Array of XUL elements + * @return void */ - this.showZoteroPaneProgressBar = function (msg, determinate) { + this.showZoteroPaneProgressMeter = function (msg, determinate) { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var enumerator = wm.getEnumerator("navigator:browser"); @@ -1113,7 +1116,7 @@ var Zotero = new function(){ if (determinate) { progressMeter.mode = 'determined'; progressMeter.value = 0; - progressMeter.max = 100; + progressMeter.max = 1000; } else { progressMeter.mode = 'undetermined'; @@ -1125,7 +1128,30 @@ var Zotero = new function(){ progressMeters.push(progressMeter); } _locked = true; - return progressMeters; + _progressMeters = progressMeters; + } + + + /** + * @param {Number} percentage Percentage complete as integer or float + */ + this.updateZoteroPaneProgressMeter = function (percentage) { + if (percentage < 0 || percentage > 100) { + Zotero.debug("Invalid percentage value '" + percentage + "' in Zotero.updateZoteroPaneProgressMeter()"); + return; + } + percentage = Math.round(percentage * 10); + if (percentage == _lastPercentage) { + return; + } + for each(var pm in _progressMeters) { + if (pm.mode == 'undetermined') { + pm.max = 1000; + pm.mode = 'determined'; + } + pm.value = percentage; + } + _lastPercentage = percentage; } @@ -1141,6 +1167,8 @@ var Zotero = new function(){ _hideWindowZoteroPaneOverlay(win); } _locked = false; + _progressMeters = []; + _lastPercentage = null; }