315940 - hack in dynamic updating for tree views. NPOB

This commit is contained in:
beng%bengoodger.com 2005-11-27 22:04:02 +00:00
parent 424cabce67
commit ae320f0df3
4 changed files with 72 additions and 7 deletions

View File

@ -2,3 +2,6 @@
-moz-binding: url("chrome://browser/content/places/toolbar.xml#places-bar");
}
menupopup[type="places"] {
-moz-binding: url("chrome://browser/content/places/menu.xml#places-menupopup");
}

View File

@ -37,8 +37,17 @@
item = item.parent;
item.QueryInterface(Ci.nsIInterfaceRequestor);
this._browserWindow = item.getInterface(Ci.nsIDOMWindowInternal);
this._bms =
Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
this._bms.addObserver(this._bookmarkObserver);
]]></constructor>
<destructor><![CDATA[
this._bms.removeObserver(this._bookmarkObserver);
]]></destructor>
<method name="_fireEvent">
<parameter name="name"/>
<body><![CDATA[
@ -151,13 +160,11 @@
<parameter name="folderId"/>
<parameter name="filterOptions"/>
<body><![CDATA[
var bms =
Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
var filterOptions = filterOptions || bms.ALL_CHILDREN;
var result = bms.getFolderChildren(folderId, filterOptions);
var filterOptions = filterOptions || this._bms.ALL_CHILDREN;
var result = this._bms.getFolderChildren(folderId, filterOptions);
result.QueryInterface(Ci.nsITreeView);
this.view = result;
this._lastFilterOptions = filterOptions;
this._fireEvent("reloaded");
]]></body>
</method>
@ -412,6 +419,56 @@
})
]]></field>
<method name="_reloadView">
<body><![CDATA[
var result = this.getResult();
if (PlacesController.nodeIsFolder(result))
this.loadFolder(result.folderId, this._lastFilterOptions);
else
this.load(result.getSourceQueries({ }), result.sourceQueryOptions);
]]></body>
</method>
<!-- nsINavBookmarkObserver -->
<field name="_bookmarkObserver"><![CDATA[({
_numBatches: 0,
_self: this,
onBeginUpdateBatch: function PT_O_onBeginUpdateBatch() {
++this._numBatches;
},
onEndUpdateBatch: function PT_O_onEndUpdateBatch() {
if (!--this._numBatches)
this._self._reloadView();
},
get wantAllDetails() {
return false;
},
onItemAdded: function PT_O_onItemAdded(bookmark, folder, index) {
this._self._reloadView();
},
onItemRemoved: function PT_O_onItemRemoved(bookmark, folder, index) {
this._self._reloadView();
},
onItemMoved: function PT_O_onItemMoved(bookmark, folder, oldIndex, newIndex) {
this._self._reloadView();
},
onItemChanged: function PT_O_onItemChanged(bookmark, property) {
this._self._reloadView();
},
onFolderAdded: function PT_O_onFolderAdded(folder, parent, index) {
this._self._reloadView();
},
onFolderRemoved: function PT_O_onFolderRemoved(folder, parent, index) {
this._self._reloadView();
},
onFolderMoved: function PT_O_onFolderMoved(folder, oldParent, oldIndex, newParent, newIndex) {
this._self._reloadView();
},
onFolderChanged: function PT_O_onFolderChanged(folder, property) {
this._self._reloadView();
},
})]]></field>
</implementation>
<handlers>
<handler event="focus"><![CDATA[

View File

@ -7,7 +7,7 @@
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<binding id="places-bar">
<implementation implements="nsINavBookmarkObserver">
<implementation>
<constructor><![CDATA[
this._places =
Cc["@mozilla.org/browser/nav-history;1"].
@ -55,8 +55,12 @@
if (PlacesController.nodeIsURL(child))
button.setAttribute("url", child.url)
else if (PlacesController.nodeIsFolder(child)) {
button.setAttribute("folder-id", child.folderId);
button.setAttribute("type", "menu");
button.setAttribute("container", "true");
var popup = document.createElementNS(XULNS, "menupopup");
popup.setAttribute("type", "places");
button.appendChild(popup);
popup.folderId = child.folderId;
}
button.className = "bookmark-item";
button.node = child;

View File

@ -5,6 +5,7 @@ browser.jar:
content/browser/places/places.xml (content/places.xml)
content/browser/places/places.css (content/places.css)
content/browser/places/toolbar.xml (content/toolbar.xml)
content/browser/places/menu.xml (content/menu.xml)
content/browser/places/controller.js (content/controller.js)
content/browser/places/browserShim.js (content-shim/browserShim.js)
* content/browser/places/browserShim.xul (content-shim/browserShim.xul)