package com.limegroup.gnutella.gui.statistics;
import java.awt.Component;
import java.awt.event.ComponentEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import com.limegroup.gnutella.gui.BoxPanel;
import com.limegroup.gnutella.gui.RefreshListener;
import com.limegroup.gnutella.gui.statistics.panes.PaneItem;
/**
* This class provides a skeletal implementation of the <tt>StatisticsPane</tt>
* interface, providing common functionality to its subclasses.<p>
*
* It contains an <tt>ArrayList</tt> of <tt>PaneItem</tt> instances that
* are inside it.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
final class StatisticsPaneImpl implements StatisticsPane {
/**
* Constant for the <tt>Container</tt> that elements are added to. This
* is implemented as a <tt>BoxPanel</tt>.
*/
private final JComponent CONTAINER = new BoxPanel();
/**
* Constant for the <tt>List</tt> that contains all of the
* <tt>PaneItem</tt> instances associated with this panel.
*/
private final List PANE_ITEMS_LIST = new ArrayList();
/**
* <tt>String</tt> for the name of this panel. This name is used as the
* key for identifying this panel in the <tt>CardLayout</tt>.
*/
private String _name;
/**
* This sole constructor overrides the the public accessibility of the
* default constructor and is usually called implicitly by subclasses.
*
* @param name the unique identifying name of this
* <tt>AbstractStatisticsPane</tt>
*/
StatisticsPaneImpl(final String name) {
_name = name;
}
// inherit doc comment
public String getName() {
return _name;
}
// inherit doc comment
public JComponent getComponent() {
return CONTAINER;
}
/**
* Add the <tt>Container</tt>s of the <tt>PaneItem</tt> object to the
* <tt>StatisticsPane</tt> and also <i>registers</i> that pane
* with this class, which means that it is added to the <tt>ArrayList</tt>
* of contained <tt>PaneItem</tt> instances.
*
* @param item the <tt>PaneItem</tt> instance to add
*/
public void add(PaneItem item) {
PANE_ITEMS_LIST.add(item);
CONTAINER.add(item.getContainer());
}
// inherit doc comment
public void refresh() {
for(int i=0, size = PANE_ITEMS_LIST.size(); i<size; i++) {
((RefreshListener)PANE_ITEMS_LIST.get(i)).refresh();
}
}
// inherit doc comment
public PaneItem getFirstPaneItem() {
return (PaneItem)PANE_ITEMS_LIST.get(0);
}
/**
* Returns <tt>true</tt>, as all <tt>StatisticsPaneImpl</tt>s are displayed.
*/
public boolean display() {return true;}
// inherit doc comment
public void componentResized(ComponentEvent e, Component comp) {
for(int i=0, size = PANE_ITEMS_LIST.size(); i<size; i++) {
((PaneItem)PANE_ITEMS_LIST.get(i)).componentResized(e, comp);
}
}
}