package com.limegroup.gnutella.gui.options.panes;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.io.IOException;
import javax.swing.Box;
import com.limegroup.gnutella.gui.GUIMediator;
import com.limegroup.gnutella.gui.TitledPaddedPanel;
import com.limegroup.gnutella.gui.options.OptionsMediator;
/**
* This class provides a skeletal implementation of the <tt>PaneItem</tt>
* interface.<p>
*
* It provides the basic implementation for displaying one option within
* a larger window of options. Each <tt>AbstractPaneItem</tt> has a titled
* border and a label describing the option. The label is followed by
* standardized spacing.<p>
*
* It includes several convenience methods that subclasses may us to
* simplify panel construction.<p>
*
* Subclasses only need to override the applyOptions() method for storing
* options to disk.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
public abstract class AbstractPaneItem implements PaneItem {
/**
* Handle to the mediator class for use of constants and for necessary
* notifications of changes to other classes.
*/
protected static final OptionsMediator MEDIATOR =
OptionsMediator.instance();
/**
* The container that elements in the pane are added to.
*/
private final TitledPaddedPanel CONTAINER = new TitledPaddedPanel();
/**
* Constant <tt>Component</tt> for use as a standard horizontal
* separator.
*/
private static final Component HORIZONTAL_SEPARATOR =
Box.createRigidArea(new Dimension(6,0));
/**
* Constant <tt>Component</tt> for use as a standard horizontal
* separator.
*/
private static final Component VERTICAL_SEPARATOR =
Box.createRigidArea(new Dimension(0,6));
/**
* This sole constructor overrides the the public accessibility of the
* default constructor and is usually called implicitly.
*
* @param key the key for obtaining the locale-specific values for
* displayed strings
*/
protected AbstractPaneItem(final String key) {
this(key, null);
}
protected AbstractPaneItem(String key, String url) {
String title = "OPTIONS_"+key+"_TITLE";
String label = "OPTIONS_"+key+"_LABEL";
CONTAINER.setTitle(GUIMediator.getStringResource(title));
add(new PaneItemMainLabel(GUIMediator.getStringResource(label), url).getLabel());
}
/**
* Implements the <tt>PaneItem</tt> interface. <p>
*
* Returns the <tt>Container</tt> for this set of options.
*
* @return the <tt>Container</tt> for this set of options
*/
public Container getContainer() {
return CONTAINER;
}
/**
* Implements the <tt>PaneItem</tt> interface. <p>
*
* Sets the options for the fields in this <tt>PaneItem</tt> when the
* window is shown.
*
* Subclasses must define this method to set their initial options
* when the options window is shown.
*/
public abstract void initOptions();
/**
* Implements the <tt>PaneItem</tt> interface. <p>
*
* Applies the options currently set in this <tt>PaneItem</tt>.<p>
*
* Subclasses must define this method to apply their specific options.
*
* @throws IOException if the options could not be fully applied
*/
public abstract boolean applyOptions() throws IOException;
/**
* Adds the specified <tt>Component</tt> to the enclosed <tt>Container</tt>
* instance.
*
* @param comp the <tt>Component</tt> to add
*/
protected final void add(Component comp) {
CONTAINER.add(comp);
}
/**
* Returns a <tt>Component</tt> standardly sized for horizontal separators.
*
* @return the constant <tt>Component</tt> used as a standard horizontal
* separator
*/
protected final Component getHorizontalSeparator() {
return HORIZONTAL_SEPARATOR;
}
/**
* Returns a <tt>Component</tt> standardly sized for vertical separators.
*
* @return the constant <tt>Component</tt> used as a standard vertical
* separator
*/
protected final Component getVerticalSeparator() {
return VERTICAL_SEPARATOR;
}
}