fineui是帆软报表和BI产品线所使用的前端框架。
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.
 
 
 

203 lines
5.1 KiB

/**
* Created by GUY on 2015/8/10.
* @class BI.ButtonTree
* @extends BI.ButtonGroup
*/
import { shortcut, Widget, extend, isArray, each, isFunction, deepContains, concat, any, contains } from "../../core";
import { ButtonGroup } from "./group.button";
@shortcut()
export class ButtonTree extends ButtonGroup {
static xtype = "bi.button_tree";
static EVENT_CHANGE = "EVENT_CHANGE";
_defaultConfig() {
return extend(super._defaultConfig(arguments), {
baseCls: "bi-button-tree",
});
}
setNotSelectedValue(v) {
v = isArray(v) ? v : [v];
each(this.buttons, (i, item) => {
if (!isFunction(item.setSelected)) {
item.setNotSelectedValue(v);
return;
}
if (deepContains(v, item.getValue())) {
item.setSelected(false);
} else {
item.setSelected(true);
}
});
}
setEnabledValue(v) {
v = isArray(v) ? v : [v];
each(this.buttons, (i, item) => {
if (isFunction(item.setEnabledValue)) {
item.setEnabledValue(v);
return;
}
if (deepContains(v, item.getValue())) {
item.setEnable(true);
} else {
item.setEnable(false);
}
});
}
setValue(v) {
v = isArray(v) ? v : [v];
each(this.buttons, (i, item) => {
if (!isFunction(item.setSelected)) {
item.setValue(v);
return;
}
if (deepContains(v, item.getValue())) {
item.setSelected(true);
} else {
item.setSelected(false);
}
});
}
getNotSelectedValue() {
let v = [];
each(this.buttons, (i, item) => {
if (item.isEnabled() && !isFunction(item.setSelected)) {
v = concat(v, item.getNotSelectedValue());
return;
}
if (item.isEnabled() && item.isSelected && !item.isSelected()) {
v.push(item.getValue());
}
});
return v;
}
getValue() {
let v = [];
each(this.buttons, (i, item) => {
if (item.isEnabled() && !isFunction(item.setSelected)) {
v = concat(v, item.getValue());
return;
}
if (item.isEnabled() && item.isSelected && item.isSelected()) {
v.push(item.getValue());
}
});
return v;
}
getSelectedButtons() {
let btns = [];
each(this.buttons, (i, item) => {
if (item.isEnabled() && !isFunction(item.setSelected)) {
btns = btns.concat(item.getSelectedButtons());
return;
}
if (item.isSelected && item.isSelected()) {
btns.push(item);
}
});
return btns;
}
getNotSelectedButtons() {
let btns = [];
each(this.buttons, (i, item) => {
if (item.isEnabled() && !isFunction(item.setSelected)) {
btns = btns.concat(item.getNotSelectedButtons());
return;
}
if (item.isSelected && !item.isSelected()) {
btns.push(item);
}
});
return btns;
}
// 获取所有的叶子节点
getAllLeaves() {
let leaves = [];
each(this.buttons, (i, item) => {
if (item.isEnabled() && !isFunction(item.setSelected)) {
leaves = leaves.concat(item.getAllLeaves());
return;
}
if (item.isEnabled()) {
leaves.push(item);
}
});
return leaves;
}
getIndexByValue(value) {
let index = -1;
any(this.buttons, (i, item) => {
const vs = item.getValue();
if (item.isEnabled() && (vs === value || contains(vs, value))) {
index = i;
return true;
}
});
return index;
}
getNodeById(id) {
let node;
any(this.buttons, (i, item) => {
if (item.isEnabled()) {
if (item.attr("id") === id) {
node = item;
return true;
} else if (isFunction(item.getNodeById)) {
node = item.getNodeById(id);
if (node) {
return true;
}
}
}
});
return node;
}
getNodeByValue(value) {
let node;
any(this.buttons, (i, item) => {
if (item.isEnabled()) {
if (isFunction(item.getNodeByValue)) {
node = item.getNodeByValue(value);
if (node) {
return true;
}
} else if (item.attr("value") === value) {
node = item;
return true;
}
}
});
return node;
}
}