package com.limegroup.gnutella.gui.options.panes;
import java.io.IOException;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;
import com.limegroup.gnutella.SpeedConstants;
import com.limegroup.gnutella.gui.BoxPanel;
import com.limegroup.gnutella.gui.GUIMediator;
import com.limegroup.gnutella.settings.SearchSettings;
/**
* This class defines the panel in the options window that allows the user
* to only allow search results of specific speeds.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
public final class SearchSpeedPaneItem extends AbstractPaneItem {
/**
* Constant handle to the radio button for only showing T3 and higher
*/
private final JRadioButton T3_BUTTON = new JRadioButton();
/**
* Constant handle to the radio button for only showing T1 and higher
*/
private final JRadioButton T1_BUTTON = new JRadioButton();
/**
* Constant handle to the radio button for only showing cable/dsl
* and higher
*/
private final JRadioButton CABLE_BUTTON = new JRadioButton();
/**
* Constant handle to the radio button for showing all results.
*/
private final JRadioButton ALL_BUTTON = new JRadioButton();
/**
* The constructor constructs all of the elements of this
* <tt>AbstractPaneItem</tt>.
*
* @param key the key for this <tt>AbstractPaneItem</tt> that the
* superclass uses to generate locale-specific keys
*/
public SearchSpeedPaneItem(final String key) {
super(key);
String t3LabelKey = "OPTIONS_SEARCH_SPEED_T3_LABEL";
String t1LabelKey = "OPTIONS_SEARCH_SPEED_T1_LABEL";
String cableLabelKey = "OPTIONS_SEARCH_SPEED_CABLE_LABEL";
String allLabelKey = "OPTIONS_SEARCH_SPEED_ALL_LABEL";
String t3Label = GUIMediator.getStringResource(t3LabelKey);
String t1Label = GUIMediator.getStringResource(t1LabelKey);
String cableLabel = GUIMediator.getStringResource(cableLabelKey);
String allLabel = GUIMediator.getStringResource(allLabelKey);
T3_BUTTON.setText(t3Label);
T1_BUTTON.setText(t1Label);
CABLE_BUTTON.setText(cableLabel);
ALL_BUTTON.setText(allLabel);
// Group the radio buttons.
ButtonGroup group = new ButtonGroup();
group.add(T3_BUTTON);
group.add(T1_BUTTON);
group.add(CABLE_BUTTON);
group.add(ALL_BUTTON);
BoxPanel buttonPanel = new BoxPanel();
buttonPanel.add(T3_BUTTON);
buttonPanel.add(T1_BUTTON);
buttonPanel.add(CABLE_BUTTON);
buttonPanel.add(ALL_BUTTON);
BoxPanel mainPanel = new BoxPanel(BoxPanel.X_AXIS);
mainPanel.add(Box.createHorizontalGlue());
mainPanel.add(buttonPanel);
mainPanel.add(Box.createHorizontalGlue());
add(mainPanel);
}
/**
* Defines the abstract method in <tt>AbstractPaneItem</tt>.<p>
*
* Sets the options for the fields in this <tt>PaneItem</tt> when the
* window is shown.
*/
public void initOptions() {
int minSpeed = SearchSettings.MINIMUM_SEARCH_SPEED.getValue();
switch(minSpeed) {
case SpeedConstants.T3_SPEED_INT:
T3_BUTTON.setSelected(true);
break;
case SpeedConstants.T1_SPEED_INT:
T1_BUTTON.setSelected(true);
break;
case SpeedConstants.CABLE_SPEED_INT:
CABLE_BUTTON.setSelected(true);
break;
default:
ALL_BUTTON.setSelected(true);
break;
}
}
/**
* Defines the abstract method in <tt>AbstractPaneItem</tt>.<p>
*
* Applies the options currently set in this window, displaying an
* error message to the user if a setting could not be applied.
*
* @throws IOException if the options could not be applied for some reason
*/
public boolean applyOptions() throws IOException {
int speed = 3;
if(T3_BUTTON.isSelected()) {
speed = SpeedConstants.T3_SPEED_INT;
} else if(T1_BUTTON.isSelected()) {
speed = SpeedConstants.T1_SPEED_INT;
} else if(CABLE_BUTTON.isSelected()) {
speed = SpeedConstants.CABLE_SPEED_INT;
} else {
speed = 0;
}
SearchSettings.MINIMUM_SEARCH_SPEED.setValue(speed);
return false;
}
public boolean isDirty() {
switch(SearchSettings.MINIMUM_SEARCH_SPEED.getValue()) {
case SpeedConstants.T3_SPEED_INT:
return !T3_BUTTON.isSelected();
case SpeedConstants.T1_SPEED_INT:
return !T1_BUTTON.isSelected();
case SpeedConstants.CABLE_SPEED_INT:
return !CABLE_BUTTON.isSelected();
case 0:
return !ALL_BUTTON.isSelected();
default:
return true;
}
}
}