SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.6 KiB

/*
DynAPI Distribution
Explorer Component
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
Requires: StyleManager, ExplorerStyle (Optional)
*/
function Explorer(x,y,w,h,style) { // Explorer Tree object
this.DynLayer = DynLayer;
this.DynLayer(null,x,y,w,h);
this.allLeaves = [];
this.root = new Explorer.Leave(this,this+"Root");
this.currentPos = 0;
this.currentUrl = "";
this.onCreate(Explorer.CreateEvent);
this.setStyle(style||'Explorer');
};
// Create Event
Explorer.CreateEvent = function() {
this.init();
this.renderStyle();
};
// Prototype
var p = dynapi.setPrototype('Explorer','DynLayer');
p.addLeave = function(id,text,parent,icon,icon_sel,url,css,cssSel) {
parent=(parent&&(parent!="0"))? parent:this.root.toString();
new Explorer.Leave(this,id,text,parent,icon,icon_sel,url,css,cssSel);
};
p.fold = function(id) {
this.allLeaves[id].open = false;
this.renderStyle();
return false;
};
p.unfold = function(id) {
this.allLeaves[id].open = true;
this.renderStyle();
return false;
};
p.setCurrent = function(id) {
this.lastPos = this.currentPos; // set last position
this.currentPos = id;
this.currentUrl = this.allLeaves[id].url;
this.renderStyle();
this.invokeEvent("select");
return false;
};
p.unfoldTo = function(id) {
this.allLeaves[this.firstOne].unfoldTo(id);
this.currentPos = id;
};
p.getHierarchy = function(leave){
var h = {};
h[leave.id]=b;
while (leave.parent) {
h[leave.parent]=true;
leave = this.allLeaves[leave.parent];
}
return h;
};
p.init = function() {
var i,el,pat;
for(i in this.allLeaves) {
el = this.allLeaves[i];
pat = el.parent;
//DQ Änderung: wenn parent nicht existiert
//vorher: if(pat) {
if(pat && this.allLeaves[pat]) {
this.allLeaves[pat].children[this.allLeaves[pat].children.length] = el;
this.allLeaves[pat].count++;
}
}
this.initiated = true;
};
// This object represents a leave in our content tree. Notice that it is not dynlayer-inherited
Explorer.Leave = function(tree,id,text,parent,icon,icon_sel,url,css,cssSel) {
var style = tree.style;
// internal
this.id = id;
this.tree = tree;
this.icon = icon;
this.icon_sel = icon_sel||icon;
this.url = url;
this.text = text||"";
this.parent = parent;
this.children = [];
this.count = 0;
this.css = css;
this.cssSel = cssSel;
// state
this.open = false;
// init
this.tree.allLeaves[this.id] = this;
};
p = Explorer.Leave.prototype;
p.unfoldTo = function(c) {
this.open = false;
for(var i in this.children) if(this.children[i].unfoldTo(c)) this.open = true;
return this.open || (this.id == c);
};
p.toString = function() {
return this.id
};