Package com.ponysdk.ui.server.breadcrumbs

Source Code of com.ponysdk.ui.server.breadcrumbs.PBreadCrumbs$ItemLevel

package com.ponysdk.ui.server.breadcrumbs;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import com.ponysdk.impl.theme.PonySDKTheme;
import com.ponysdk.ui.server.basic.PAnchor;
import com.ponysdk.ui.server.basic.PElement;
import com.ponysdk.ui.server.basic.event.PClickEvent;
import com.ponysdk.ui.server.basic.event.PClickHandler;
import com.ponysdk.ui.server.basic.event.PSelectionEvent;
import com.ponysdk.ui.server.basic.event.PSelectionHandler;

public class PBreadCrumbs extends PElement {

    private final Map<String, ItemLevel> elementsByItems = new HashMap<String, ItemLevel>();

    private final Set<PSelectionHandler<ItemLevel>> handlers = new HashSet<PSelectionHandler<ItemLevel>>();

    private ItemLevel current;

    public PBreadCrumbs() {
        super("ul");
        addStyleName(PonySDKTheme.BREADCRUMBS);
    }

    public void addItem(final String item) {
        if (elementsByItems.containsKey(item)) return;

        final ItemLevel itemLevel = new ItemLevel(item, current);

        if (current != null) current.unselect();

        current = itemLevel;

        add(itemLevel);

        elementsByItems.put(item, itemLevel);
    }

    public void selectItem(final String item) {
        if (!elementsByItems.containsKey(item)) return;
        if (elementsByItems.size() == 1) return;

        ItemLevel itemLevel = elementsByItems.get(item);

        if (current == itemLevel) return;

        itemLevel.select();

        while (itemLevel.hasNext()) {
            itemLevel = itemLevel.next;
            elementsByItems.remove(itemLevel.item);
            itemLevel.removeFromParent();
        }
    }

    public void addSelectionHandler(final PSelectionHandler<ItemLevel> handler) {
        handlers.add(handler);
    }

    void fireOnClick(final ItemLevel itemLevel) {
        final PSelectionEvent<ItemLevel> event = new PSelectionEvent<PBreadCrumbs.ItemLevel>(this, itemLevel);

        for (final PSelectionHandler<ItemLevel> handler : handlers) {
            handler.onSelection(event);
        }
    }

    public class ItemLevel extends PElement implements PClickHandler {

        int level = 1;

        String item;
        PAnchor anchor;

        ItemLevel previous;
        ItemLevel next;

        public ItemLevel(final String item, final ItemLevel previous) {
            super("li");
            this.item = item;
            if (previous != null) {
                this.previous = previous;
                this.previous.next = this;
                this.level = previous.level + 1;
            }

            setInnerText(item);
        }

        void select() {
            current = this;
            setInnerText(item);
        }

        void unselect() {
            setInnerText(null);

            anchor = new PAnchor(item);
            anchor.addClickHandler(this);

            add(anchor);
        }

        @Override
        public void onClick(final PClickEvent event) {
            selectItem(item);
            fireOnClick(this);
        }

        public boolean hasNext() {
            return next != null;
        }

        public boolean hasPrevious() {
            return previous != null;
        }

        public int getLevel() {
            return level;
        }

        public String getItem() {
            return item;
        }

        public ItemLevel getPrevious() {
            return previous;
        }

        public ItemLevel getNext() {
            return next;
        }
    }
}
TOP

Related Classes of com.ponysdk.ui.server.breadcrumbs.PBreadCrumbs$ItemLevel

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.