package com.limegroup.gnutella.gui.init; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JPanel; import javax.swing.JRadioButton; import com.limegroup.gnutella.SpeedConstants; import com.limegroup.gnutella.gui.BoxPanel; import com.limegroup.gnutella.gui.GUIConstants; import com.limegroup.gnutella.settings.ConnectionSettings; import com.limegroup.gnutella.settings.DownloadSettings; /** * This class displays a window to the user allowing them to specify * their connection speed. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| final class SpeedWindow extends SetupWindow { /** * The four buttons that represent the speeds, and their button group. */ private ButtonGroup _speedGroup; private JRadioButton _modem; private JRadioButton _cable; private JRadioButton _t1; private JRadioButton _t3; /** * Creates the window and its components. */ SpeedWindow(SetupManager manager) { super(manager, "SETUP_SPEED_TITLE", "SETUP_SPEED_LABEL"); } protected void createWindow() { super.createWindow(); JPanel mainPanel = new BoxPanel(BoxLayout.X_AXIS); JPanel buttonPanel = new BoxPanel(BoxLayout.Y_AXIS); _speedGroup = new ButtonGroup(); _modem = new JRadioButton(GUIConstants.MODEM_SPEED); _cable = new JRadioButton(GUIConstants.CABLE_SPEED); _t1 = new JRadioButton(GUIConstants.T1_SPEED); _t3 = new JRadioButton(GUIConstants.T3_SPEED); _cable.setSelected(true); _speedGroup.add(_modem); _speedGroup.add(_cable); _speedGroup.add(_t1); _speedGroup.add(_t3); buttonPanel.add(_modem); buttonPanel.add(_cable); buttonPanel.add(_t1); buttonPanel.add(_t3); mainPanel.add(buttonPanel); mainPanel.add(Box.createHorizontalGlue()); addSetupComponent(mainPanel); } /** * Overrides applySettings in SetupWindow superclass. * Applies the settings handled in this window. */ public void applySettings() throws ApplySettingsException { int speed = getSpeed(); setDownloadSlots(speed); if (speed < SpeedConstants.MIN_SPEED_INT || SpeedConstants.MAX_SPEED_INT < speed) { throw (new IllegalArgumentException()); } ConnectionSettings.CONNECTION_SPEED.setValue(speed); } /** * Returns the selected speed value. If no speed was selected, * it returns the MODEM_SPEED. * * @return the selected speed value. If no speed was selected, * it returns the MODEM_SPEED */ private int getSpeed() { if (_cable.isSelected()) return SpeedConstants.CABLE_SPEED_INT; else if (_t1.isSelected()) return SpeedConstants.T1_SPEED_INT; else if (_t3.isSelected()) return SpeedConstants.T3_SPEED_INT; else return SpeedConstants.MODEM_SPEED_INT; } /** * Sets the number of download slots based on the connection * speed the user entered. * * @param speed the speed of the connection to use for setting * the download slots */ private void setDownloadSlots(int speed) { if(speed == SpeedConstants.MODEM_SPEED_INT) { DownloadSettings.MAX_SIM_DOWNLOAD.setValue(3); } else if(speed == SpeedConstants.CABLE_SPEED_INT) { DownloadSettings.MAX_SIM_DOWNLOAD.setValue(8); } else if(speed == SpeedConstants.T1_SPEED_INT) { DownloadSettings.MAX_SIM_DOWNLOAD.setValue(12); } else if(speed == SpeedConstants.T3_SPEED_INT) { DownloadSettings.MAX_SIM_DOWNLOAD.setValue(14); } else { DownloadSettings.MAX_SIM_DOWNLOAD.setValue(3); } } }