Package jfix.zk

Source Code of jfix.zk.Tree

/*
    Copyright (C) 2010 maik.jablonski@gmail.com

    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.HashSet;
import java.util.Set;

import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.TreeModel;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;

public class Tree extends org.zkoss.zul.Tree implements Refreshable {

  public Tree() {
    setMold("paging");
    setPageSize(30);
  }

  public void addSelectListener(final ActionListener actionListener) {
    addEventListener(Events.ON_SELECT, new EventListener() {
      public void onEvent(Event e) throws Exception {
        actionListener.actionPerformed(e);
      }
    });
  }

  public void addChangeListener(final ActionListener actionListener) {
    addEventListener(Events.ON_CHANGE, new EventListener() {
      public void onEvent(Event e) throws Exception {
        actionListener.actionPerformed(e);
      }
    });
  }

  public void fireChangeEvent() {
    Events.sendEvent(new Event(Events.ON_CHANGE, this));
  }

  public void refresh() {
    int activePage = getActivePage();
    Set openedValues = new HashSet();
    Object selectedValue = getSelectedValue();
    for (Treeitem treeitem : getTreeitems(getTreechildren(), false)) {
      if (treeitem.isOpen()) {
        openedValues.add(treeitem.getValue());
      }
    }
    TreeModel model = getModel();
    setModel(null);
    setModel(model);
    Treeitem selectedItem = null;
    for (Treeitem treeitem : getTreeitems(getTreechildren(), true)) {
      if (treeitem.getValue() == selectedValue) {
        treeitem.setSelected(true);
        selectedItem = treeitem;
      } else {
        treeitem.setOpen(openedValues.contains(treeitem.getValue()));
      }
    }
    while (selectedItem != null) {
      selectedItem.setOpen(true);
      selectedItem = selectedItem.getParentItem();
    }
    setActivePage(activePage);
  }

  private Set<Treeitem> getTreeitems(Treechildren treeChildren,
      boolean openItems) {
    Set<Treeitem> result = new HashSet<Treeitem>();
    if (treeChildren != null) {
      for (Object child : treeChildren.getItems().toArray(
          new Treeitem[] {})) {
        if (child instanceof Treeitem) {
          Treeitem treeitem = (Treeitem) child;
          if (openItems) {
            treeitem.setOpen(true);
          }
          result.add(treeitem);
          result.addAll(getTreeitems(treeitem.getTreechildren(),
              openItems));
        }
      }
    }
    return result;
  }

  public Object getSelectedValue() {
    return getSelectedItem() != null ? getSelectedItem().getValue() : null;
  }

  public void resetSelectedValue() {
    setSelectedItem(null);
  }

}
TOP

Related Classes of jfix.zk.Tree

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.