blob: 275523143fa3d6b855010b77bb22539e15e79dae [file] [log] [blame]
/*
* (C) Copyright IBM Corp. 1998-2004. All Rights Reserved.
*
* The program is provided "as is" without any warranty express or
* implied, including the warranty of non-infringement and the implied
* warranties of merchantibility and fitness for a particular purpose.
* IBM will not be liable for any damages suffered by you as a result
* of using the Program. In no event will IBM be liable for any
* special, indirect or consequential damages or lost profits even if
* IBM has been advised of the possibility of their occurrence. IBM
* will not be liable for any third party claims against you.
*/
package com.ibm.richtext.textpanel;
import java.awt.Color;
import java.io.Serializable;
import java.util.Hashtable;
import com.ibm.richtext.textlayout.attributes.AttributeMap;
import com.ibm.richtext.textlayout.attributes.TextAttribute;
import com.ibm.richtext.styledtext.StandardTabRuler;
/**
* This class contains settings used when constructing an MTextPanel.
* The settings controled by this class include:
* <ul>
* <li>whether the text in the MTextPanel can be scrolled</li>
* <li>whether scroll bars in the MTextPanel are visible</li>
* <li>whether the text in the MTextPanel can be selected</li>
* <li>whether the text in the MTextPanel can be edited</li>
* <li>whether lines of text wrap to the MTextPanel's width, or
* only end at paragraph separators</li>
* <li>the default values for unspecified styles</li>
* </ul>
* Some settings are dependent on others. Scroll bars are visible
* only if the text is scrollable. Also, text which is not editable
* if it is not selectable.
* <p>
*
* @see MTextPanel
*/
public final class TextPanelSettings implements Cloneable, Serializable {
static final String COPYRIGHT =
"(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
private static final AttributeMap DEFAULTS;
static {
final Float floatZero = new Float(0.0f);
Hashtable defaults = new Hashtable();
defaults.put(TextAttribute.FAMILY, "Serif");
defaults.put(TextAttribute.WEIGHT, new Float(1.0f));
defaults.put(TextAttribute.POSTURE, floatZero);
defaults.put(TextAttribute.SIZE, new Float(18.0f));
defaults.put(TextAttribute.SUPERSCRIPT, new Integer(0));
defaults.put(TextAttribute.FOREGROUND, Color.black);
defaults.put(TextAttribute.UNDERLINE, new Integer(-1));
defaults.put(TextAttribute.STRIKETHROUGH, Boolean.FALSE);
defaults.put(TextAttribute.EXTRA_LINE_SPACING, floatZero);
defaults.put(TextAttribute.FIRST_LINE_INDENT, floatZero);
defaults.put(TextAttribute.MIN_LINE_SPACING, floatZero);
defaults.put(TextAttribute.LINE_FLUSH, TextAttribute.FLUSH_LEADING);
defaults.put(TextAttribute.LEADING_MARGIN, floatZero);
defaults.put(TextAttribute.TRAILING_MARGIN, floatZero);
defaults.put(TextAttribute.TAB_RULER, new StandardTabRuler());
DEFAULTS = new AttributeMap(defaults);
}
private boolean fScrollable = true;
private boolean fScrollBarsVisible = true;
private boolean fSelectable = true;
private boolean fEditable = true;
private boolean fWraps = true;
private AttributeMap fDefaultValues = DEFAULTS;
/**
* Create a TextPanelSettings instance with all settings
* set to true.
*/
public TextPanelSettings() {
}
/**
* Return a new TextPanelSettings instance with the
* same settings as this.
* @return a new TextPanelSettings instance
*/
public Object clone() {
TextPanelSettings rhs = new TextPanelSettings();
rhs.fScrollable = fScrollable;
rhs.fScrollBarsVisible = fScrollBarsVisible;
rhs.fSelectable = fSelectable;
rhs.fEditable = fEditable;
rhs.fWraps = fWraps;
rhs.fDefaultValues = fDefaultValues;
return rhs;
}
/**
* Return the scrollable setting, which determines whether text
* in an MTextPanel can be scrolled.
* @return the scrollable setting
*/
public boolean getScrollable() {
return fScrollable;
}
/**
* Set the scrollable setting.
* @param scrollable the scrollable setting. If false,
* the scrollBarsVisible setting is also set to false.
*/
public void setScrollable(boolean scrollable) {
fScrollable = scrollable;
fScrollBarsVisible &= scrollable;
}
/**
* Return the scrollBarsVisible setting, which determines whether
* scroll bars in an MTextPanel are visible.
* @return the scrollBarsVisible setting
*/
public boolean getScrollBarsVisible() {
return fScrollBarsVisible;
}
/**
* Set the scrollBarsVisible setting.
* @param vis the scrollBarsVisible setting. If true,
* the scrollable setting is also set to true.
*/
public void setScrollBarsVisible(boolean vis) {
fScrollBarsVisible = vis;
fScrollable |= vis;
}
/**
* Return the selectable setting, which determines whether
* text in an MTextPanel can be selected.
* @return the selectable setting
*/
public boolean getSelectable() {
return fSelectable;
}
/**
* Set the selectable setting.
* @param selectable the selectable setting. If false,
* the editable setting is also set to false.
*/
public void setSelectable(boolean selectable) {
fSelectable = selectable;
fEditable &= selectable;
}
/**
* Return the editable setting, which determines whether
* text in an MTextPanel can be edited.
* @return the editable setting
*/
public boolean getEditable() {
return fEditable;
}
/**
* Set the editable setting.
* @param editable the editable setting. If true,
* the selectable setting is also set to true.
*/
public void setEditable(boolean editable) {
fEditable = editable;
fSelectable |= editable;
}
/**
* Return the wraps setting, which determines whether
* lines of text wrap to the length of the MTextPanel,
* or only at paragraph separators.
* @return the wraps setting
*/
public boolean getWraps() {
return fWraps;
}
/**
* Set the wraps setting.
* @param wraps the wraps setting
*/
public void setWraps(boolean wraps) {
fWraps = wraps;
}
/**
* Return the AttributeMap of default values for certain keys.
* When a key in this AttributeMap is not specified, its value
* is taken from this AttributeMap.
* @return the AttributeMap of default values
* @see MTextPanel#getDefaultValues
*/
public AttributeMap getDefaultValues() {
return fDefaultValues;
}
/**
* Add the key-value pairs in the given AttributeMap to the
* default values. If a key does not appear in the given
* AttributeMap, its value in the default value map is
* unchanged.
* @param map an AttributeMap containing new default values
*/
public void addDefaultValues(AttributeMap map) {
fDefaultValues = fDefaultValues.addAttributes(map);
}
/**
* Compare this to another Object. This is equal
* to another Object if the other Object is a
* TextPanelSettings instance with the same
* settings as this one.
* @param rhs the Object to compare to
*/
public boolean equals(Object rhs) {
if (rhs == this) {
return true;
}
if (rhs == null) {
return false;
}
TextPanelSettings other;
try {
other = (TextPanelSettings) rhs;
}
catch(ClassCastException e) {
return false;
}
return other.fScrollable == this.fScrollable &&
other.fScrollBarsVisible == this.fScrollBarsVisible &&
other.fSelectable == this.fSelectable &&
other.fEditable == this.fEditable &&
other.fWraps == this.fWraps &&
other.fDefaultValues.equals(this.fDefaultValues);
}
/**
* Return the hash code for this Object.
* @return the hash code for this Object
*/
public int hashCode() {
int code = fDefaultValues.hashCode();
code = code*2 + (fScrollable? 1:0);
code = code*2 + (fScrollBarsVisible? 1:0);
code = code*2 + (fSelectable? 1:0);
code = code*2 + (fEditable? 1:0);
code = code*2 + (fWraps? 1:0);
return code;
}
}