components/visual-panels/core/src/java/util/com/oracle/solaris/vp/util/swing/BreadCrumbs.java
changeset 3553 f1d133b09a8c
parent 3552 077ebe3d0d24
child 3554 ef58713bafc4
--- a/components/visual-panels/core/src/java/util/com/oracle/solaris/vp/util/swing/BreadCrumbs.java	Tue Dec 16 05:53:51 2014 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,353 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- */
-
-package com.oracle.solaris.vp.util.swing;
-
-import java.awt.*;
-import java.util.NoSuchElementException;
-import javax.swing.*;
-import javax.swing.event.*;
-import com.oracle.solaris.vp.util.misc.Stackable;
-import com.oracle.solaris.vp.util.misc.finder.Finder;
-import com.oracle.solaris.vp.util.swing.layout.*;
-
-@SuppressWarnings({"serial"})
-public class BreadCrumbs<T> extends JPanel implements ListDataListener,
-    Stackable<T> {
-
-    //
-    // Instance data
-    //
-
-    private DefaultListModel model;
-    private Component indicator;
-    private int firstVisibleIndex;
-
-    //
-    // Constructors
-    //
-
-    public BreadCrumbs(int gap) {
-	indicator = createHiddenBreadCrumbIndicator();
-	setOpaque(false);
-
-	setModel(new DefaultListModel());
-
-	ConstrainedLayout<RowLayoutConstraint> layout =
-	    new RowLayout(HorizontalAnchor.LEFT);
-
-	layout.setDefaultConstraint(
-	    new RowLayoutConstraint(VerticalAnchor.FILL, gap));
-
-	setLayout(layout);
-
-	addAll();
-    }
-
-    public BreadCrumbs() {
-	this(0);
-    }
-
-    //
-    // ListDataListener methods
-    //
-
-    @Override
-    public void contentsChanged(ListDataEvent e) {
-	addAll();
-    }
-
-    @Override
-    public void intervalAdded(ListDataEvent e) {
-	contentsChanged(e);
-    }
-
-    @Override
-    public void intervalRemoved(ListDataEvent e) {
-	contentsChanged(e);
-    }
-
-    //
-    // Stackable methods
-    //
-
-    /**
-     * Clears the model.
-     */
-    @Override
-    public void clear() {
-	getModel().clear();
-    }
-
-    @Override
-    public int getCount() {
-	return getModel().getSize();
-    }
-
-    /**
-     * Gets the last element of the model.
-     *
-     * @return	    the last element, or {@code null} if the model contains no
-     *		    elements
-     */
-    @Override
-    public T peek() {
-	try {
-	    return peekOrErr();
-	} catch (NoSuchElementException e) {
-	    return null;
-	}
-    }
-
-    /**
-     * Gets the last element of the model.
-     *
-     * @return	    the last element
-     *
-     * @exception   NoSuchElementException
-     *		    if the model contains no elements
-     */
-    @Override
-    public T peekOrErr() {
-	return peekOrErr(0);
-    }
-
-    @Override
-    public T peekOrErr(int n) {
-	DefaultListModel model = getModel();
-	int size = model.getSize();
-
-	@SuppressWarnings({"unchecked"})
-	T element = (T)model.get(size - 1 - n);
-
-	return element;
-    }
-
-    /**
-     * Removes the last element of the model.
-     *
-     * @return	    the removed element
-     *
-     * @exception   NoSuchElementException
-     *		    if the model contains no elements
-     */
-    @Override
-    public T pop() {
-	int size = getModel().getSize();
-	if (size == 0) {
-	    throw new NoSuchElementException();
-	}
-
-	DefaultListModel model = getModel();
-
-	@SuppressWarnings({"unchecked"})
-	T element = (T)model.remove(size - 1);
-
-	return element;
-    }
-
-    /**
-     * Adds the given element to the model as the last element.
-     */
-    @Override
-    public void push(T element) {
-	getModel().addElement(element);
-    }
-
-    //
-    // Component methods
-    //
-
-    @Override
-    public synchronized Dimension getPreferredSize() {
-	int width = 0;
-	int height = 0;
-
-	// Preferred width is the sum of the preferred widths of each
-	// breadcrumb separator
-	for (Component c : getComponents()) {
-	    if (c != indicator) {
-		Dimension d = c.getPreferredSize();
-		width += d.width;
-		height = d.height > height ? d.height : height;
-	    }
-	}
-
-	return new Dimension(width, height);
-    }
-
-    @Override
-    public synchronized void setBounds(int x, int y, int width, int height) {
-	super.setBounds(x, y, width, height);
-
-	int pWidth = getPreferredSize().width;
-
-	// Whether to show hidden breadcrumb indicator
-	boolean visible = pWidth > width;
-	indicator.setVisible(visible);
-
-	if (visible) {
-	    pWidth += indicator.getPreferredSize().width;
-	}
-
-	// Components have the following order:
-	// 0: Hidden breadcrumb indicator
-	// 1: 1st breadcrumb
-	// 2: separator
-	// 3: 2nd breadcrumb
-	// 4: separator
-	// ...
-	// 2n - 1: nth breadcrumb
-	Component[] components = getComponents();
-
-	int firstVisibleIndex = -1;
-
-	for (int i = 0, n = model.getSize(); i < n; i++) {
-
-	    // Whether to show this breadcrumb and following separator
-	    // (always show the last breadcrumb)
-	    visible = pWidth <= width || i == n - 1;
-
-	    if (visible && firstVisibleIndex == -1) {
-		firstVisibleIndex = i;
-	    }
-
-	    Component breadCrumb = components[1 + 2 * i];
-	    breadCrumb.setVisible(visible);
-	    if (!visible) {
-		pWidth -= breadCrumb.getPreferredSize().width;
-	    }
-
-	    if (i != n - 1) {
-		Component separator = components[2 + 2 * i];
-		separator.setVisible(visible);
-		if (!visible) {
-		    pWidth -= separator.getPreferredSize().width;
-		}
-	    }
-	}
-
-	setFirstVisibleIndex(firstVisibleIndex);
-
-	super.setBounds(x, y, width, height);
-    }
-
-    //
-    // BreadCrumbs methods
-    //
-
-    protected Component createBreadCrumb(int index) {
-	T element = getElementAt(index);
-	return new JLabel(toString(element));
-    }
-
-    protected Component createHiddenBreadCrumbIndicator() {
-	JLabel indicator = new JLabel(
-	    Finder.getString("breadcrumb.hidden.text"));
-
-	indicator.setIcon(ArrowIcon.LEFT);
-	indicator.setHorizontalTextPosition(SwingConstants.LEFT);
-	return indicator;
-    }
-
-    protected Component createSeparator(int index) {
-	return new JLabel(ArrowIcon.RIGHT);
-    }
-
-    public T getElementAt(int index) {
-	@SuppressWarnings({"unchecked"})
-	T element = (T)model.getElementAt(index);
-
-	return element;
-    }
-
-    protected synchronized int getFirstVisibleIndex() {
-	return firstVisibleIndex;
-    }
-
-    protected void setFirstVisibleIndex(int firstVisibleIndex) {
-	this.firstVisibleIndex = firstVisibleIndex;
-    }
-
-    /**
-     * Returns the underlying model.
-     */
-    public DefaultListModel getModel() {
-	return model;
-    }
-
-    public void setModel(DefaultListModel model) {
-	if (this.model != model) {
-	    if (this.model != null) {
-		ListDataEvent removeEvent = new ListDataEvent(
-		    this.model, ListDataEvent.INTERVAL_REMOVED, 0,
-		    this.model.getSize() - 1);
-		intervalRemoved(removeEvent);
-
-		this.model.removeListDataListener(this);
-	    }
-
-	    this.model = model;
-
-	    ListDataEvent addEvent = new ListDataEvent(
-		model, ListDataEvent.INTERVAL_ADDED, 0, model.getSize() - 1);
-	    intervalAdded(addEvent);
-
-	    model.removeListDataListener(this);
-	    model.addListDataListener(this);
-	}
-    }
-
-    /**
-     * Converts the given element to a {@code String} to be displayed as a label
-     * This default implementation calls {@code element.toString()}.
-     */
-    public String toString(T element) {
-	return element.toString();
-    }
-
-    //
-    // Private methods
-    //
-
-    private synchronized void addAll() {
-	removeAll();
-	add(indicator);
-	indicator.setVisible(false);
-
-	for (int i = 0, n = model.getSize(); i < n; i++) {
-	    if (i != 0) {
-		Component separator = createSeparator(i);
-		add(separator);
-	    }
-
-	    Component breadCrumb = createBreadCrumb(i);
-	    add(breadCrumb);
-	}
-
-	revalidate();
-	repaint();
-    }
-}