Add multiple marking (multiselection) to folder widget, and dhtmlxtree:

- Attribute name: multimarking, default value: false
This commit is contained in:
Hadi Nategh 2015-08-10 15:35:44 +00:00
parent a9a246c727
commit ae95e934a8
2 changed files with 3842 additions and 3799 deletions

View File

@ -101,7 +101,13 @@ var et2_tree = et2_inputWidget.extend(
"type": "string", "type": "string",
"default": "", "default": "",
"description": "comma-separated names of icons for a leaf, closed and opend folder (default: leaf.gif,folderClosed.gif,folderOpen.gif), images with extension get loaded from image_path, just 'image' or 'appname/image' are allowed too" "description": "comma-separated names of icons for a leaf, closed and opend folder (default: leaf.gif,folderClosed.gif,folderOpen.gif), images with extension get loaded from image_path, just 'image' or 'appname/image' are allowed too"
} },
"multimarking": {
"name": "multimarking",
"type": "any",
"default": false,
"description": "Allow marking multiple nodes, default is false which means disabled multiselection, true or 'strict' activates it and 'strict' makes it strick to only same level marking"
},
}, },
/** /**
@ -218,6 +224,11 @@ var et2_tree = et2_inputWidget.extend(
widget.input.setXMLAutoLoading(egw.link(url)); widget.input.setXMLAutoLoading(egw.link(url));
widget.input.setDataMode('JSON'); widget.input.setDataMode('JSON');
} }
if (widget.options.multimarking)
{
widget.input.enableMultiselection(!!widget.options.multimarking, widget.options.multimarking === 'strict');
}
}, },
/** /**

View File

@ -1240,9 +1240,31 @@ SELECTION
if (typeof mode == 'undefined') mode=false; if (typeof mode == 'undefined') mode=false;
if (!mode && this.checkEvent("onSelect")) this._onSSCFold=this.getSelectedItemId(); if (!mode && this.checkEvent("onSelect")) this._onSSCFold=this.getSelectedItemId();
this._unselectItems(); if ((!this._amsel) || (!e) || ((!e.ctrlKey) && (!e.metaKey) && (!e.shiftKey))) {
this._unselectItems()
this._markItem(node); }
if ((node.i_sel) && (this._amsel) && (e) && (e.ctrlKey || e.metaKey)) {
this._unselectItem(node)
} else {
if ((!node.i_sel) && ((!this._amselS) || (this._selected.length == 0) || (this._selected[0].parentObject == node.parentObject))) {
if ((this._amsel) && (e) && (e.shiftKey) && (this._selected.length != 0) && (this._selected[this._selected.length - 1].parentObject == node.parentObject)) {
var f = this._getIndex(this._selected[this._selected.length - 1]);
var d = this._getIndex(node);
if (d < f) {
var l = f;
f = d;
d = l
}
for (var g = f; g <= d; g++) {
if (!node.parentObject.childNodes[g].i_sel) {
this._markItem(node.parentObject.childNodes[g])
}
}
} else {
this._markItem(node)
}
}
}
if (!mode && this.checkEvent("onSelect")) { if (!mode && this.checkEvent("onSelect")) {
var z=this.getSelectedItemId(); var z=this.getSelectedItemId();
if (z!=this._onSSCFold) if (z!=this._onSSCFold)
@ -2263,6 +2285,16 @@ dhtmlXTreeObject.prototype._recreateBranch=function(itemObject,targetObject,befo
*/ */
dhtmlXTreeObject.prototype.enableCheckBoxes=function(mode, hidden){ this.checkBoxOff=convertStringToBoolean(mode); this.cBROf=(!(this.checkBoxOff||convertStringToBoolean(hidden))); dhtmlXTreeObject.prototype.enableCheckBoxes=function(mode, hidden){ this.checkBoxOff=convertStringToBoolean(mode); this.cBROf=(!(this.checkBoxOff||convertStringToBoolean(hidden)));
}; };
/**
* @desc: enable/disable multiple selection
* @param: mode - true/false
* @param: strict - true/false
*/
dhtmlXTreeObject.prototype.enableMultiselection = function(mode, strict) {
this._amsel = convertStringToBoolean(mode);
this._amselS = convertStringToBoolean(strict);
};
/** /**
* @desc: set default images for nodes (must be called before XML loading) * @desc: set default images for nodes (must be called before XML loading)
* @type: public * @type: public