blob: 68a8ce7ca25fe7642988feee67703b3c00a90159 [file] [log] [blame]
/*
* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
dojo.provide("struts.widget.StrutsTreeSelector");
dojo.require("dojo.widget.TreeSelector");
dojo.widget.defineWidget(
"struts.widget.StrutsTreeSelector",
dojo.widget.TreeSelector, {
widgetType : "StrutsTreeSelector",
selectedNotifyTopics : "",
collapsedNotifyTopics : "",
expandedNotifyTopics : "",
selectedNotifyTopicsArray : null,
collapsedNotifyTopicsArray : null,
expandedNotifyTopicsArray : null,
eventNamesDefault: {
select : "select",
destroy : "destroy",
deselect : "deselect",
dblselect: "dblselect", // select already selected node.. Edit or whatever
expand: "expand",
collapse: "collapse"
},
initialize: function () {
struts.widget.StrutsTreeSelector.superclass.initialize.apply(this);
if(!dojo.string.isBlank(this.selectedNotifyTopics)) {
this.selectedNotifyTopicsArray = this.selectedNotifyTopics.split(",");
}
if(!dojo.string.isBlank(this.selectedNotifyTopics)) {
this.collapsedNotifyTopicsArray = this.collapsedNotifyTopics.split(",");
}
if(!dojo.string.isBlank(this.selectedNotifyTopics)) {
this.expandedNotifyTopicsArray = this.expandedNotifyTopics.split(",");
}
},
listenTree: function(tree) {
dojo.event.topic.subscribe(tree.eventNames.collapse, this, "collapse");
dojo.event.topic.subscribe(tree.eventNames.expand, this, "expand");
struts.widget.StrutsTreeSelector.superclass.listenTree.apply(this, [tree]);
},
unlistenTree: function(tree) {
dojo.event.topic.unsubscribe(tree.eventNames.collapse, this, "collapse");
dojo.event.topic.unsubscribe(tree.eventNames.expand, this, "expand");
struts.widget.StrutsTreeSelector.superclass.unlistenTree.apply(this, [tree]);
},
publishTopics : function(topics, node) {
if(topics != null) {
for(var i = 0; i < topics.length; i++) {
var topic = topics[i];
if(!dojo.string.isBlank(topic)) {
try {
dojo.event.topic.publish(topic, node);
} catch(ex) {
dojo.debug(ex);
}
}
}
}
},
select:function (message) {
var node = message.source;
var e = message.event;
if (this.selectedNode === node) {
if (e.ctrlKey || e.shiftKey || e.metaKey) {
this.deselect();
return;
}
dojo.event.topic.publish(this.eventNames.dblselect, {node:node});
return;
}
if (this.selectedNode) {
this.deselect();
}
this.doSelect(node);
this.publishTopics(this.selectedNotifyTopicsArray, {node: node});
},
expand: function(message) {
var node = message.source;
this.publishTopics(this.expandedNotifyTopicsArray, {node: node});
},
collapse: function(message) {
var node = message.source;
this.publishTopics(this.collapsedNotifyTopicsArray, {node: node});
}
});