blob: f8af08503067c5a06b8c342693a7b003c923480f [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.uiimpl;
import java.util.EventObject;
import com.ibm.richtext.textlayout.attributes.AttributeMap;
import com.ibm.richtext.textlayout.attributes.AttributeSet;
import com.ibm.richtext.styledtext.StyleModifier;
import com.ibm.richtext.textpanel.MTextPanel;
import com.ibm.richtext.textpanel.TextPanelEvent;
import com.ibm.richtext.uiimpl.resources.MenuData;
public final class SubtractStyleMenuItem extends SingleCheckMenuItem {
static final String COPYRIGHT =
"(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
private final Object[] fKeys;
private final boolean fCharacter;
public SubtractStyleMenuItem(Object[] keys,
MenuData menuData,
boolean character) {
super(menuData);
fKeys = (Object[]) keys.clone();
fCharacter = character;
AttributeSet keySet = new AttributeSet(keys);
final StyleModifier modifier = StyleModifier.createRemoveModifier(keySet);
fItem.addListener(new EventListener() {
public void eventOccurred(EventObject event) {
MTextPanel panel = getTextPanel();
if (panel == null) {
throw new Error("Menu item is enabled when panel is null!");
}
if (fCharacter == CHARACTER) {
panel.modifyCharacterStyleOnSelection(modifier);
}
else {
panel.modifyParagraphStyleOnSelection(modifier);
}
}
});
}
private static boolean objectsAreEqual(Object lhs, Object rhs) {
if (lhs == null) {
return rhs == null;
}
else {
return lhs.equals(rhs);
}
}
protected void setChecked() {
MTextPanel panel = getTextPanel();
AttributeMap defaults = panel.getDefaultValues();
for (int i=0; i < fKeys.length; i++) {
Object defaultV = defaults.get(fKeys[i]);
Object value = (fCharacter == CHARACTER)?
panel.getCharacterStyleOverSelection(fKeys[i]) :
panel.getParagraphStyleOverSelection(fKeys[i]);
if (!objectsAreEqual(defaultV, value)) {
fItem.setState(false);
return;
}
}
fItem.setState(true);
}
public boolean respondsToEventType(int type) {
return type == TextPanelEvent.SELECTION_STYLES_CHANGED;
}
public final void textEventOccurred(TextPanelEvent event) {
setChecked();
}
}