blob: 5988c915a3fa56f2ad535928963ba63e99a13b70 [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 java.util.Hashtable;
import com.ibm.richtext.textpanel.MTextPanel;
import com.ibm.richtext.uiimpl.resources.MenuData;
public abstract class ChoiceMenuItemSet extends MenuItemSet {
static final String COPYRIGHT =
"(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";
private MItem[] fItems;
private Hashtable fItemToStyleMap;
ChoiceMenuItemSet(Object[] values,
MenuData[] menuData) {
if (values.length != menuData.length) {
throw new IllegalArgumentException(
"Values and names must have equal length");
}
fItems = new MItem[menuData.length];
fItemToStyleMap = new Hashtable(menuData.length);
EventListener listener = new EventListener() {
public void eventOccurred(EventObject event) {
handleValueSelected(fItemToStyleMap.get(event.getSource()));
}
};
for (int i=0; i < menuData.length; i++) {
fItems[i] = MItem.createCheckboxItem(menuData[i]);
if (values[i] != null) {
fItemToStyleMap.put(fItems[i], values[i]);
}
fItems[i].addListener(listener);
fItems[i].setEnabled(false);
}
}
protected abstract void handleValueSelected(Object item);
protected abstract Object getCurrentValue();
protected final void setChecked() {
Object value = getCurrentValue();
for (int i=0; i < fItems.length; i++) {
Object itemVal = fItemToStyleMap.get(fItems[i]);
if (itemVal == null) {
fItems[i].setState(value == null);
}
else {
fItems[i].setState(itemVal.equals(value));
}
}
}
protected final void textPanelChanged() {
MTextPanel textPanel = getTextPanel();
if (textPanel == null) {
for (int i=0; i < fItems.length; i++) {
fItems[i].setEnabled(false);
fItems[i].setState(false);
}
}
else {
for (int i=0; i < fItems.length; i++) {
fItems[i].setEnabled(true);
setChecked();
}
}
}
}