package com.limegroup.gnutella.gui.options.panes; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JSlider; import com.limegroup.gnutella.gui.BoxPanel; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.LabeledComponent; import com.limegroup.gnutella.settings.SearchSettings; import com.limegroup.gnutella.spam.SpamManager; /** * This class gives the user the option of whether or not to enable LimeWire's * internal spam filter */ // 2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| public final class EnableSpamFilterPaneItem extends AbstractPaneItem { /** Display search results in place */ private JRadioButton DISPLAY_IN_PLACE = new JRadioButton(); /** Move spam results to the bottom */ private JRadioButton MOVE_TO_BOTTOM = new JRadioButton(); /** Hide spam results */ private JRadioButton HIDE_SPAM = new JRadioButton(); /** The spam threshold slider */ private JSlider THRESHOLD = new JSlider(0, 50); /** Reset the spam filter */ private JButton RESET = new JButton(); public EnableSpamFilterPaneItem(final String key) { super(key); DISPLAY_IN_PLACE.setText(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_DISPLAY_IN_PLACE")); MOVE_TO_BOTTOM.setText(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_MOVE_TO_BOTTOM")); HIDE_SPAM.setText(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_HIDE_SPAM")); ButtonGroup group = new ButtonGroup(); group.add(DISPLAY_IN_PLACE); group.add(MOVE_TO_BOTTOM); group.add(HIDE_SPAM); BoxPanel buttonPanel = new BoxPanel(); buttonPanel.add(DISPLAY_IN_PLACE); buttonPanel.add(MOVE_TO_BOTTOM); buttonPanel.add(HIDE_SPAM); RESET.setText(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_RESET_LABEL")); RESET.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SpamManager.instance().clearFilterData(); } }); JPanel mainPanel = new JPanel(); mainPanel.setOpaque(false); mainPanel.setLayout(new GridBagLayout()); GridBagConstraints gbc = null; // --- DISPLAY --- gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridwidth = 3; gbc.weightx = 1; gbc.insets = new Insets(10, 0, 3, 0); mainPanel.add(new JLabel(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_DISPLAY")), gbc); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.NONE; gbc.gridwidth = 1; gbc.weightx = 0; mainPanel.add(Box.createHorizontalStrut(10), gbc); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridwidth = 2; gbc.weightx = 1; mainPanel.add(buttonPanel, gbc); // --- THRESHOLD --- gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 2; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridwidth = 3; gbc.weightx = 1; gbc.insets = new Insets(10, 0, 3, 0); mainPanel.add(new JLabel(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_THRESHOLD")), gbc); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 3; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.NONE; gbc.gridwidth = 1; gbc.weightx = 0; mainPanel.add(Box.createHorizontalStrut(10), gbc); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 3; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.NONE; gbc.gridwidth = 1; gbc.weightx = 0; LabeledComponent comp = new LabeledComponent("OPTIONS_SEARCH_JUNK_THRESHOLD_LAX", THRESHOLD); THRESHOLD.setToolTipText(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_THRESHOLD_TOOLTIP")); mainPanel.add(comp.getComponent(), gbc); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 3; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.NONE; gbc.gridwidth = 1; gbc.weightx = 0; mainPanel.add(new JLabel(GUIMediator.getStringResource("OPTIONS_SEARCH_JUNK_THRESHOLD_STRICT")), gbc); // --- RESET --- gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 5; gbc.anchor = GridBagConstraints.SOUTH; gbc.fill = GridBagConstraints.NONE; gbc.gridwidth = 3; gbc.weighty = 1; mainPanel.add(RESET, gbc); add(mainPanel); } public void initOptions() { switch (SearchSettings.DISPLAY_JUNK_MODE.getValue()) { case SearchSettings.DISPLAY_JUNK_IN_PLACE: DISPLAY_IN_PLACE.setSelected(true); break; case SearchSettings.HIDE_JUNK: HIDE_SPAM.setSelected(true); break; default: MOVE_TO_BOTTOM.setSelected(true); break; } THRESHOLD.setValue( (int) (100 - 100 * SearchSettings.FILTER_SPAM_RESULTS.getValue())); } public boolean applyOptions() throws IOException { if (DISPLAY_IN_PLACE.isSelected()) { SearchSettings.DISPLAY_JUNK_MODE.setValue(SearchSettings.DISPLAY_JUNK_IN_PLACE); } else if (HIDE_SPAM.isSelected()) { SearchSettings.DISPLAY_JUNK_MODE.setValue(SearchSettings.HIDE_JUNK); } else { SearchSettings.DISPLAY_JUNK_MODE.setValue(SearchSettings.MOVE_JUNK_TO_BOTTOM); } SearchSettings.FILTER_SPAM_RESULTS.setValue((float) (100 - THRESHOLD.getValue()) / 100f); return false; } public boolean isDirty() { boolean modeChange = false; if (DISPLAY_IN_PLACE.isSelected()) { modeChange = SearchSettings.DISPLAY_JUNK_MODE.getValue() != SearchSettings.DISPLAY_JUNK_IN_PLACE; } else if (HIDE_SPAM.isSelected()) { modeChange = SearchSettings.DISPLAY_JUNK_MODE.getValue() != SearchSettings.HIDE_JUNK; } else { modeChange = SearchSettings.DISPLAY_JUNK_MODE.getValue() != SearchSettings.MOVE_JUNK_TO_BOTTOM; } return modeChange || (SearchSettings.FILTER_SPAM_RESULTS.getValue() != (float) (100 - THRESHOLD.getValue()) / 100f); } }