package com.limegroup.gnutella.gui; import java.awt.Dimension; import java.awt.FontMetrics; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import com.limegroup.gnutella.gui.themes.ThemeFileHandler; import com.limegroup.gnutella.util.CommonUtils; /** * Displays a status update in various ways, depending on the * operating system & JDK. * * Below JDK 1.4: * - Displays a status label (center, left, or right justified) * JDK 1.4 w/ OSX: * - Displays an indeterminate JProgressBar with a JLabel * left justified above it. * JDK 1.4 w/o OSX: * - Displays an indeterminate JProgressBar with the status text * inside the progressbar. */ public class StatusComponent extends JPanel { public static final int LEFT = 0; public static final int RIGHT = 1; public static final int CENTER = 2; /** * The position to display the status label. * Only used if running below JDK 1.4. */ private final int POSITION; /** * The JProgressBar whose text is updated, if running * on Java 1.4+ (and not OSX). */ private final JProgressBar BAR; /** * The JLabel being updated if this is running on * below Java 1.4 or on Java 1.4 w/ OSX. */ private final JLabel LABEL; /** * Creates a new StatusComponent. */ public StatusComponent(int orientation) { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); POSITION = orientation; LABEL = new JLabel(); BAR = new JProgressBar(); BAR.setIndeterminate(true); construct(); GUIUtils.setOpaque(false, this); if(BAR != null && !CommonUtils.isMacOSX()) BAR.setOpaque(true); if(LABEL != null) LABEL.setForeground(ThemeFileHandler.WINDOW4_COLOR.getValue()); } /** * Sets the preferred size of the progressbar. */ public void setProgressPreferredSize(Dimension dim) { setMinimumSize(dim); setMaximumSize(dim); setPreferredSize(dim); if(BAR != null) { BAR.setMinimumSize(dim); BAR.setMaximumSize(dim); BAR.setPreferredSize(dim); } } /** * Updates the status of this component. */ public void setText(String text) { if(!CommonUtils.isMacOSX()) { BAR.setString(text); } else { FontMetrics fm = LABEL.getFontMetrics(LABEL.getFont()); LABEL.setPreferredSize(new Dimension(fm.stringWidth(text), fm.getHeight())); LABEL.setText(text); } } /** * Constructs the panel. */ private void construct() { if(CommonUtils.isMacOSX()) { JPanel textPanel = new BoxPanel(BoxPanel.X_AXIS); textPanel.add(LABEL); textPanel.add(Box.createHorizontalGlue()); add(textPanel); } else { BAR.setStringPainted(true); } add(BAR); } }