All Downloads are FREE. Search and download functionalities are using the official Maven repository.

czsem.netgraph.treesource.TreeSourceWithSelectionSupport Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2017 Datlowe and/or its affiliates. All rights reserved.
 ******************************************************************************/
package czsem.netgraph.treesource;

import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.Element;

import czsem.netgraph.batik.BatikTreeBuilder;

public abstract class TreeSourceWithSelectionSupport implements TreeSource {
	public interface SelectionChangeListener { 
		void onSlectionChanged(E node);
	}

	public interface ViewChangedListener { 
		void onViewChanged();
	}
	
	protected E[] nodes; 
	protected Element[] circles;
	
	//change consistently
	private int selectedNodeIndex = -1;
	private E selectedNode;
	
	
	private final List> selectionChangeListeners = new ArrayList<>(); 
	private final List viewChangedListeners = new ArrayList<>(); 
	
	protected void onSlectionChanged(E node) {
		for (SelectionChangeListener l : selectionChangeListeners) {
			l.onSlectionChanged(node);
		}
	}

	public void fireViewChanged() {
		for (ViewChangedListener l : viewChangedListeners) {
			l.onViewChanged();
		}
	}
	
	public void fireSlectionChanged(int nodeIndex) {
		performSlectionChanged(nodeIndex);
		onSlectionChanged(nodes[nodeIndex]);
	}

	public void performSlectionChanged(int nodeIndex) {
		Element sc = getSelectedCicle();
		if (sc != null) {
			BatikTreeBuilder.colorNodeAsNotSelected(sc,
					getNodeType(nodes[selectedNodeIndex]));
		}
		
		selectedNodeIndex = nodeIndex;
		selectedNode = nodes[selectedNodeIndex];
		
		BatikTreeBuilder.colorNodeAsSelected(getSelectedCicle());
	}

	public E[] getNodes() {return nodes;}
	public Element[] getCircles() {return circles;}
	public void setCircles(Element[] circles) {this.circles = circles;}

	public void setNodes(E[] nodes) {
		this.nodes = nodes;
		updateSelectedNodeIndex();
	}

	public List> getSelectionChangeListeners() {
		return selectionChangeListeners;
	}

	public List getViewChangedListeners() {
		return viewChangedListeners;
	}

	public Element getSelectedCicle() {
		if (selectedNodeIndex >= 0 && selectedNodeIndex < circles.length) {
			return circles[selectedNodeIndex];
		}
		
		return null;
	}

	public E getSelectedNode() {
		return selectedNode;
	}

	public void setSelectedNode(E selectedNode) {
		this.selectedNode = selectedNode;
		updateSelectedNodeIndex();
	}

	protected void updateSelectedNodeIndex() {
		selectedNodeIndex = -1;

		if (selectedNode == null) return;
		if (nodes == null) return;
		
		for (int i = 0; i < nodes.length; i++) {
			if (selectedNode.equals(nodes[i])) {
				selectedNodeIndex = i;
				return;
			}
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy