/*
Copyright (C) 2016 maik.jablonski@jease.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package jfix.zk;
import java.util.ArrayList;
import java.util.List;
import org.zkoss.zul.Box;
import org.zkoss.zul.Checkbox;
public class Checklist extends Box {
private ItemRenderer itemRenderer;
public void setItemRenderer(ItemRenderer renderer) {
this.itemRenderer = renderer;
}
public Checklist orientVertical() {
setOrient("vertical");
return this;
}
public Checklist orientHorizontal() {
setOrient("horizontal");
return this;
}
public void clearSelection() {
for (int i = 0; i < getChildren().size(); i++) {
if (getChildren().get(i) instanceof ChecklistBox) {
ChecklistBox checkBox = (ChecklistBox) getChildren().get(i);
checkBox.setChecked(false);
}
}
}
public Object[] getChoices() {
List<Object> result = new ArrayList<>();
for (int i = 0; i < getChildren().size(); i++) {
if (getChildren().get(i) instanceof ChecklistBox) {
ChecklistBox checkBox = (ChecklistBox) getChildren().get(i);
result.add(checkBox.getObject());
}
}
return result.toArray();
}
public Object[] getSelected() {
List<Object> result = new ArrayList<>();
for (int i = 0; i < getChildren().size(); i++) {
if (getChildren().get(i) instanceof ChecklistBox) {
ChecklistBox checkBox = (ChecklistBox) getChildren().get(i);
if (checkBox.isChecked()) {
result.add(checkBox.getObject());
}
}
}
return result.toArray();
}
public void setChoices(List<Object> elements) {
setChoices(elements.toArray());
}
public void setChoices(Object[] elements) {
reset();
if (elements != null) {
for (int i = 0; i < elements.length; i++) {
ChecklistBox cb = new ChecklistBox(elements[i]);
if (itemRenderer != null) {
cb.setLabel(itemRenderer.render(cb.getObject()));
}
appendChild(cb);
}
}
}
public void setSelected(List<Object> elements) {
setSelected(elements.toArray());
}
public void setSelected(Object[] elements) {
clearSelection();
if (elements == null) {
return;
}
for (int i = 0; i < getChildren().size(); i++) {
if (getChildren().get(i) instanceof ChecklistBox) {
ChecklistBox checkBox = (ChecklistBox) getChildren().get(i);
for (int j = 0; j < elements.length; j++) {
if (checkBox.getObject().equals(elements[j])) {
checkBox.setChecked(true);
break;
}
}
}
}
}
public void setSelection(Object[] choices, Object[] elements) {
setChoices(choices);
setSelected(elements);
}
public void setSelection(List<Object> choices, Object[] elements) {
setChoices(choices);
setSelected(elements);
}
public void setSelection(Object[] choices, List<Object> elements) {
setChoices(choices);
setSelected(elements);
}
public void setSelection(List<Object> choices, List<Object> elements) {
setChoices(choices);
setSelected(elements);
}
public void reset() {
getChildren().clear();
}
public boolean isEmpty() {
if (getSelected() == null || getSelected().length == 0) {
return true;
}
return false;
}
public void setDisabled(boolean flag) {
for (int i = 0; i < getChildren().size(); i++) {
if (getChildren().get(i) instanceof ChecklistBox) {
ChecklistBox checkBox = (ChecklistBox) getChildren().get(i);
checkBox.setDisabled(flag);
}
}
}
}
class ChecklistBox extends Checkbox {
private Object object;
public ChecklistBox(Object object) {
super(String.valueOf(object));
setObject(object);
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}