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.

179 lines
4.4 KiB

/*
DynAPI Distribution
List Class
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
Requirements:
dynapi.api [dynlayer, dyndocument, nodeitem, events]
dynapi.gui [NodeItem]
*/
function List(){
this.DynLayer=DynLayer;
this.DynLayer();
this.multiMode = false;
this.items = [];
this.listener={
onselect : function(e){
var o=e.getSource().parent;o.select(e.getSource());
},
ondeselect : function(e){
var o=e.getSource().parent;o.deselect(e.getSource());
}
};
this.onCreate(this.PreCreate);
/*default style*/
this.listStyle = {};
this.listStyle.borders = 1;
this.listStyle.spacing = 1;
this.listStyle.padding = 4;
this.listStyle.bos = false;
this.listStyle.ios = false;
this.listStyle.bg = "#eeeeee";
this.listStyle.bgRoll = "#cccccc";
this.listStyle.bgSelect = "lightblue";
this.totalHeight = this.listStyle.borders;
}
var p = dynapi.setPrototype('List','DynLayer');
p.PreCreate=function()
{
if(this._created)
{
this.arrangeItems();
}
}
p.add = function(){
if((arguments.length>1) || (arguments.length<5))
{
var ls = this.listStyle;
switch(arguments.length)
{
case 2:
var content=arguments[0];
var selectedcontent=arguments[0];
var i = new NodeItem(content,arguments[1]);
if (ls.bos) selectedcontent="<b>"+selectedcontent+"</b>";
if (ls.ios) selectedcontent="<i>"+selectedcontent+"</i>";
i.setSelectedContent(selectedcontent);
break;
case 3:
var i = new NodeItem(arguments[0],arguments[2]);
i.setSelectedContent(arguments[1]);
break;
case 4:
var i = new NodeItem(arguments[0],arguments[3]);
i.setSelectedContent(arguments[1]);
i.setRolloverContent(arguments[2]);
break;
}
i.setColors(ls.bg,ls.bgRoll,ls.bgSelect);
i.addEventListener(this.listener);
i.setAutoResize(false,true);
this.items[this.items.length] = i;
this.addChild(i);
if(dynapi.loaded) this.arrangeItems();
}
};
p.arrangeItems = function(){
this.totalHeight = this.listStyle.borders;
for (var i=0;i<this.items.length;i++){
this.items[i].setLocation(this.listStyle.borders,this.totalHeight);
this.items[i].setWidth(this.w-this.listStyle.borders*2);
this.totalHeight = this.totalHeight+this.items[i].h+this.listStyle.spacing;
}
this.setHeight(this.totalHeight-this.listStyle.spacing+this.listStyle.borders);
};
p.remove = function(item){
var i = this.getIndexOf(item);
if (i==-1) return;
this.items[i].deleteFromParent();
dynapi.functions.removeFromArray(this.items,item);
if (this.selectedIndex==i){
this.selectedIndex=-1;
this.selectedItem=null;
}
this.arrangeItems();
};
p.origSetWidth = DynLayer.prototype.setWidth;
p.setWidth = function(w){
this.origSetWidth(w);
for (var i=0;i<this.items.length;i++){
this.items[i].setWidth(w-this.listStyle.borders*2);
}
this.arrangeItems();
};
p.getIndexOf = function(item){
for (var i=0;i<this.items.length;i++){
if (this.items[i]==item) return i;
}
return -1;
};
p.select = function(item){
this.selectedIndex = this.getIndexOf(item);
this.selectedItem = item;
this.selectedItem.setSelected(true);
if (this.multiMode) return;
for (var i=0;i<this.items.length;i++){
if (this.items[i] != item) this.items[i].setSelected(false);
}
this.invokeEvent("select");
};
p.deselect = function(item){
if (this.selectedItem == item){
this.selectedItem = null;
this.selectedIndex = -1;
}
};
p.deselectAll = function(){
for (var i=0;i<this.items.length;i++) {
if (this.items[i].selected) this.items[i].setSelected(false);
}
};
p.setSelectionMode = function(mode) {
this.deselectAll();
this.multiMode = mode;
};
p.setColors = function(bg,bgRoll,bgSelect){
var ls = this.listStyle;
ls.bg = bg||ls.bg;
ls.bgRoll = bgRoll||ls.bgRoll;
ls.bgSelect = bgSelect||ls.bgSelect;
if (this.items.length == 0) return;
for (var i=0;i<this.items.length;i++) {
this.items[i].setColors(bg,bgRoll,bgSelect);
}
};
p.boldOnSelect = function(b) {
this.listStyle.bos = b;
};
p.italicOnSelect = function(b) {
this.listStyle.ios = b;
};
p.getSelectedIndex = function() {
return this.selectedIndex;
};
p.getSelectedItem = function() {
return this.selectedItem;
};
p.getSelectedIndexes = function() {
var a = [];
for (var i=0;i<this.items.length;i++) if (this.items[i].selected) a[a.length] = i;
return a;
};
p.setBorders = function(b){
this.listStyle.borders = b;
if (this._created) this.arrangeItems();
};
p.setSpacing = function(b){
this.listStyle.spacing = b;
if (this._created) this.arrangeItems();
};