package com.limegroup.gnutella.gui.options.panes; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ButtonModel; import javax.swing.JButton; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import com.limegroup.gnutella.bugs.LocalClientInfo; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.LabeledComponent; import com.limegroup.gnutella.gui.MessageService; import com.limegroup.gnutella.settings.BugSettings; /** * This class defines the panel in the options window that allows * the user to handle bugs. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| public final class BugsPaneItem extends AbstractPaneItem { /** * The 'Always Send Immediately' string */ private static final String ALWAYS_SEND = "ERROR_INTERNAL_ALWAYS_SEND"; /** * The 'Always Ask For Review' string */ private static final String ALWAYS_REVIEW = "ERROR_INTERNAL_ALWAYS_REVIEW"; /** * The 'Always Discard Bugs' string */ private static final String ALWAYS_DISCARD="ERROR_INTERNAL_ALWAYS_DISCARD"; /** * The 'View Example Bug' string */ private static final String VIEW_EXAMPLE = GUIMediator.getStringResource("OPTIONS_BUGS_VIEW_EXAMPLE"); /** * Radiobutton for sending */ private final JRadioButton SEND_BOX = new JRadioButton(); /** * Radiobutton for reviewing */ private final JRadioButton REVIEW_BOX = new JRadioButton(); /** * Radiobutton for discarding */ private final JRadioButton DISCARD_BOX = new JRadioButton(); /** * Buttongroup for radiobuttons. */ private final ButtonGroup BGROUP = new ButtonGroup(); /** * 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 BugsPaneItem(final String key) { super(key); LabeledComponent comp1 = new LabeledComponent(ALWAYS_SEND, SEND_BOX, LabeledComponent.LEFT_GLUE); LabeledComponent comp2 = new LabeledComponent(ALWAYS_REVIEW, REVIEW_BOX, LabeledComponent.LEFT_GLUE); LabeledComponent comp3 = new LabeledComponent(ALWAYS_DISCARD, DISCARD_BOX, LabeledComponent.LEFT_GLUE); JButton example = new JButton(VIEW_EXAMPLE); example.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { Exception e = new Exception("Example Bug"); LocalClientInfo info = new LocalClientInfo(e, Thread.currentThread().getName(), "Example", false); JTextArea textArea = new JTextArea(info.toBugReport()); textArea.setColumns(50); textArea.setEditable(false); JScrollPane scroller = new JScrollPane(textArea); scroller.setBorder(BorderFactory.createEtchedBorder()); scroller.setPreferredSize( new Dimension(500, 200) ); MessageService.instance().showMessage(scroller); } }); BGROUP.add(SEND_BOX); BGROUP.add(REVIEW_BOX); BGROUP.add(DISCARD_BOX); add(example); add(comp1.getComponent()); add(comp2.getComponent()); add(comp3.getComponent()); } /** * 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() { if( BugSettings.IGNORE_ALL_BUGS.getValue() ) BGROUP.setSelected(DISCARD_BOX.getModel(), true); else if (BugSettings.USE_BUG_SERVLET.getValue() ) BGROUP.setSelected(SEND_BOX.getModel(), true); else BGROUP.setSelected(REVIEW_BOX.getModel(), true); } /** * 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 { ButtonModel bm = BGROUP.getSelection(); if( bm.equals(DISCARD_BOX.getModel()) ) BugSettings.IGNORE_ALL_BUGS.setValue(true); else if ( bm.equals(SEND_BOX.getModel()) ) { BugSettings.IGNORE_ALL_BUGS.setValue(false); BugSettings.USE_BUG_SERVLET.setValue(true); } else { BugSettings.IGNORE_ALL_BUGS.setValue(false); BugSettings.USE_BUG_SERVLET.setValue(false); } return false; } public boolean isDirty() { if(BGROUP.getSelection().equals(DISCARD_BOX.getModel())) return !BugSettings.IGNORE_ALL_BUGS.getValue(); if(BGROUP.getSelection().equals(SEND_BOX.getModel())) return BugSettings.IGNORE_ALL_BUGS.getValue() || !BugSettings.USE_BUG_SERVLET.getValue(); return BugSettings.IGNORE_ALL_BUGS.getValue() || BugSettings.USE_BUG_SERVLET.getValue(); } }