Package com.eagerlogic.cubee.client.components

Source Code of com.eagerlogic.cubee.client.components.AbstractTreeViewItem$ItemClickedEventArgs

package com.eagerlogic.cubee.client.components;

import com.eagerlogic.cubee.client.components.AComponent;
import com.eagerlogic.cubee.client.components.AUserControl;
import com.eagerlogic.cubee.client.components.LayoutChildren;
import com.eagerlogic.cubee.client.components.Panel;
import com.eagerlogic.cubee.client.components.VBox;
import com.eagerlogic.cubee.client.events.Event;
import com.eagerlogic.cubee.client.events.EventArgs;
import com.eagerlogic.cubee.client.events.IEventListener;
import com.eagerlogic.cubee.client.properties.BooleanProperty;
import com.eagerlogic.cubee.client.properties.IChangeListener;
import com.eagerlogic.cubee.client.properties.KeyFrame;
import com.eagerlogic.cubee.client.properties.Property;
import com.eagerlogic.cubee.client.properties.Timeline;
import java.util.ArrayList;
import java.util.List;

/**
*
* @author dipacs
*/
public abstract class AbstractTreeViewItem<T> extends AUserControl {
   
    static final class ItemClickedEventArgs extends EventArgs {

        public ItemClickedEventArgs(AbstractTreeViewItem<?> sender) {
            super(sender);
        }
       
        public final AbstractTreeViewItem<?> getItem() {
            return (AbstractTreeViewItem<?>) getSender();
        }
       
    }
   
    private final Event<ItemClickedEventArgs> onItemClicked = new Event<ItemClickedEventArgs>();
    private final Event<EventArgs> onChildrenChanged = new Event<EventArgs>();

    private final BooleanProperty selected = new BooleanProperty(false, false, true);
    private final BooleanProperty selectedWriter = new BooleanProperty(false, false, false);
    private final BooleanProperty expanded = new BooleanProperty(false, false, false);
    private final BooleanProperty leaf = new BooleanProperty(true, false, true);
    private final BooleanProperty leafWriter = new BooleanProperty(true, false, false);
    private final List<AbstractTreeViewItem<?>> items = new ArrayList<AbstractTreeViewItem<?>>();
    private final T value;
   
    private VBox root;
    private Panel rootComponentHolder;
    private Panel childrenPanel;
    private VBox childrenHolder;
    private AComponent rootComponent;
   
    private Timeline timeline;
   
   
    private final IEventListener<ItemClickedEventArgs> onItemClickedEventListener = new IEventListener<ItemClickedEventArgs>() {

        @Override
        public void onFired(ItemClickedEventArgs args) {
            onItemClicked.fireEvent(args);
        }
    };

    public AbstractTreeViewItem(T value) {
        this.value = value;
       
        selected.initReadonlyBind(selectedWriter);
        leaf.initReadonlyBind(leafWriter);
       
        root = new VBox();
        root.pointerTransparentProperty().set(true);
        super.getChildren().add(root);
       
        rootComponentHolder = new Panel();
        rootComponentHolder.pointerTransparentProperty().set(Boolean.TRUE);
        root.getChildren().add(rootComponentHolder);
       
        childrenPanel = new Panel();
        childrenPanel.transformCenterYProperty().set(0.0);
        childrenPanel.scaleYProperty().set(0.0);
        childrenPanel.pointerTransparentProperty().set(true);
        root.getChildren().add(childrenPanel);
       
        childrenHolder = new VBox();
        childrenHolder.translateXProperty().set(20);
        childrenHolder.pointerTransparentProperty().set(true);
        childrenPanel.getChildren().add(childrenHolder);
       
        expanded.addChangeListener(new IChangeListener() {

            @Override
            public void onChanged(Object sender) {
                startAnimation();
            }
        });
    }
   
    private void startAnimation() {
        if (timeline != null) {
            timeline.stop();
        }
       
        if (expanded.get()) {
            timeline = new Timeline(new KeyFrame(0, childrenPanel.scaleYProperty(), 0.0)
                    , new KeyFrame(200, childrenPanel.scaleYProperty(), 1.0));
        } else {
            timeline = new Timeline(new KeyFrame(0, childrenPanel.scaleYProperty(), 1.0)
                    , new KeyFrame(200, childrenPanel.scaleYProperty(), 0.0));
        }
        timeline.start();
    }
   
    private void refreshChildren() {
        childrenHolder.getChildren().clear();
        if (getItems() != null) {
            for (AbstractTreeViewItem<?> item : items) {
                childrenHolder.addEmptyCell(2);
                childrenHolder.getChildren().add(item);
            }
            leafWriter.set(items.size() < 1);
        }
    }

    public AComponent getRootComponent() {
        return rootComponent;
    }

    public void setRootComponent(AComponent rootComponent) {
        rootComponentHolder.getChildren().clear();
        this.rootComponent = rootComponent;
        rootComponentHolder.getChildren().add(rootComponent);
    }

    @Override
    @Deprecated
    protected LayoutChildren getChildren() {
        return super.getChildren();
    }

    public final BooleanProperty selectedProperty() {
        return selected;
    }
   
    final BooleanProperty selectedWriterProperty() {
        return selectedWriter;
    }

    public final BooleanProperty expandedProperty() {
        return expanded;
    }

    public final List<AbstractTreeViewItem<?>> getItems() {
        if (items == null) {
            return null;
        }
        return new ArrayList<AbstractTreeViewItem<?>>(items);
    }

//    public final void setItems(List<AbstractTreeViewItem> items) {
//        this.items = items;
//        leaf.set(items == null || items.size() < 1);
//        refreshChildren();
//    }

    public final BooleanProperty leafProperty() {
        return leaf;
    }

    final Event<ItemClickedEventArgs> onItemClickedEvent() {
        return onItemClicked;
    }
   
    protected final void fireItemClickedEvent(AbstractTreeViewItem item) {
        this.onItemClicked.fireEvent(new ItemClickedEventArgs(item));
    }
   
    public final void addChildren(AbstractTreeViewItem item) {
        if (item == null) {
            throw new NullPointerException("The item property can not be null.");
        }
        this.items.add(item);
        item.onItemClicked.addListener(onItemClickedEventListener);
        refreshChildren();
        onChildrenChanged.fireEvent(new EventArgs(this));
    }
   
    public final AbstractTreeViewItem<?> removeChildren(int index) {
        AbstractTreeViewItem<?> res = items.remove(index);
        res.onItemClicked.removeListener(onItemClickedEventListener);
        refreshChildren();
        onChildrenChanged.fireEvent(new EventArgs(this));
        return res;
    }
   
    public final void removeChildren(AbstractTreeViewItem<?> item) {
        item.onItemClicked.removeListener(onItemClickedEventListener);
        items.remove(item);
        refreshChildren();
        onChildrenChanged.fireEvent(new EventArgs(this));
    }
   
    public final void insertChildren(AbstractTreeViewItem<?> item, int index) {
        if (item == null) {
            throw new NullPointerException("The item property can not be null.");
        }
        this.items.add(index, item);
        item.onItemClicked.addListener(onItemClickedEventListener);
        refreshChildren();
        onChildrenChanged.fireEvent(new EventArgs(this));
    }
   
    public final void clearChildren() {
        for (AbstractTreeViewItem item : items) {
            item.onItemClicked.removeListener(onItemClickedEventListener);
        }
        this.items.clear();
        refreshChildren();
        onChildrenChanged.fireEvent(new EventArgs(this));
    }
   
    public final int getChildrenCount() {
        return items.size();
    }

    public Event<EventArgs> onChildrenChangedEvent() {
        return onChildrenChanged;
    }
   
    void deselect() {
        this.selectedWriter.set(false);
        for (AbstractTreeViewItem item : items) {
            item.deselect();
        }
    }

    public final T getValue() {
        return value;
    }

}
TOP

Related Classes of com.eagerlogic.cubee.client.components.AbstractTreeViewItem$ItemClickedEventArgs

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.