package com.limegroup.gnutella.gui.statistics; import java.awt.CardLayout; import java.awt.event.ComponentEvent; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.swing.JComponent; import javax.swing.JPanel; import com.limegroup.gnutella.gui.RefreshListener; import com.limegroup.gnutella.gui.statistics.panes.PaneItem; /** * Manages the main statistics window that displays the various statistics * windows.<p> * * This class also stores all of the main statistics panels to access * all of them regardless of how many there are or what their * specific type is. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| public final class StatisticsPaneManager implements RefreshListener { /** * Constant for the main panel of the statistics window. */ private final JPanel MAIN_PANEL = new JPanel(); /** * Constant for the <tt>CardLayout</tt> used in the main panel. */ private final CardLayout CARD_LAYOUT = new CardLayout(); /** * Constant for the <tt>ArrayList</tt> containing all of the visible * <tt>StatisticsPane</tt> instances. */ private final Map STATISTICS_PANE_MAP = new HashMap(); private String _selectedPaneKey; /** * The constructor sets the layout and adds all of the * <tt>StatisticsPane</tt> instances. */ public StatisticsPaneManager() { MAIN_PANEL.setLayout(CARD_LAYOUT); } /** * Shows the window speficied by its title. * * @param name the name of the <code>Component</code> to show */ public void show(final String name) { CARD_LAYOUT.show(MAIN_PANEL, name); _selectedPaneKey = name; } /** * Returns the main <code>JComponent</code> for this class. * * @return a <code>JComponent</code> instance that is the main component * for this class. */ public JComponent getComponent() { return MAIN_PANEL; } public PaneItem getFirstDisplayedPaneItem() { StatisticsPane pane = (StatisticsPane)STATISTICS_PANE_MAP.get(_selectedPaneKey); return pane.getFirstPaneItem(); } /** * Adds the speficied window to the CardLayout based on its title. * * @param window the <code>StatisticsPane</code> to add */ public void addPane(final StatisticsPane pane) { MAIN_PANEL.add(pane.getComponent(), pane.getName()); STATISTICS_PANE_MAP.put(pane.getName(), pane); } /** * Refreshes all statistics panes. */ public void refresh() { Iterator iter = STATISTICS_PANE_MAP.values().iterator(); while(iter.hasNext()) { ((StatisticsPane)iter.next()).refresh(); } } public void componentResized(ComponentEvent e) { Iterator iter = STATISTICS_PANE_MAP.values().iterator(); while(iter.hasNext()) { // notify all panes, as they all need to layout their // labels again ((StatisticsPane)iter.next()).componentResized(e, MAIN_PANEL); } } }