package org.zkoss.zktest.zats.zuti.vm; import java.util.LinkedList; import java.util.List; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.impl.BinderUtil; public class NavigationViewModel { private List<Item> data = new LinkedList<Item>(); private boolean multiple; private boolean verticle; @Init public void init() { data.add(new Item("Home")); data.add(new Item("Services")); data.add(new Item("About")); data.add(new Item("Contact us")); multiple = true; } public void setMultiple(boolean multiple) { this.multiple = multiple; } public boolean isMultiple() { return multiple; } public void setVerticle(boolean verticle) { this.verticle = verticle; } public boolean isVerticle() { return verticle; } public void setData(List<Item> data) { this.data = data; } public List<Item> getData() { return this.data; } public void setSelectedItems(List<Item> items) {} public List<Item> getSelectedItems() { List<Item> selected = new LinkedList<Item>(); for (Item item : data) { if (item.isActive()) selected.add(item); } return selected; } @Command @NotifyChange({"multiple", "selectedItems"}) public void changeMultiple() { multiple = !multiple; // reset for (Item i : data) { i.setActive(false); } BindUtils.postNotifyChange(null, null, data, "."); } @Command @NotifyChange("verticle") public void changeOrient() { verticle = !verticle; } @Command @NotifyChange("selectedItems") public void doActive(@BindingParam("item") Item item) { if (multiple) { item.setActive(!item.isActive()); BindUtils.postNotifyChange(null, null, item, "."); } else { if (!item.isActive()) { for (Item i : data) { i.setActive(false); } } item.setActive(!item.isActive()); BindUtils.postNotifyChange(null, null, data, "."); } } public static class Item { private String label; private boolean active; public Item(String label) { this.label = label; } public void setLabel(String label) { this.label = label; } public String getLabel() { return label; } public void setActive(boolean isActive) { this.active = isActive; } public boolean isActive() { return this.active; } } }