/*
* Freeplane - mind map editor
* Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
*
* This file is modified by Dimitry Polivaev in 2008.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.core.resources;
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import org.freeplane.core.util.TextUtils;
/**
* Utility Class for displaying local object names in GUI components.
*
* @author Dimitry Polivaev
*/
public class NamedObject {
static public NamedObject literal(final String literal) {
final NamedObject result = new NamedObject();
result.object = literal;
result.name = literal;
return result;
}
private String name;
private Object object;
private Icon icon;
private static ListCellRenderer listCellRenderer;
private NamedObject() {
}
public NamedObject(final Object object, final String name) {
this.object = object;
this.name = name;
}
public NamedObject(final String object) {
this.object = object;
name = TextUtils.getText(object);
}
public Object getObject() {
return object;
}
public boolean objectEquals(final Object o) {
return getObject().equals(o);
}
@Override
public String toString() {
return name;
}
@Override
public boolean equals(final Object obj) {
if (!(obj instanceof NamedObject)) {
return false;
}
final NamedObject nobj = (NamedObject) obj;
return object.equals(nobj.object) && name.equals(nobj.name);
}
@Override
public int hashCode() {
return 37 * object.hashCode() + name.hashCode();
}
static public String toKeyString(final Object obj) {
if (obj instanceof NamedObject) {
return ((NamedObject) obj).getObject().toString();
}
return obj.toString();
}
public static NamedObject format(final String value) {
final int separatorPos = value.indexOf(',');
if (separatorPos == -1) {
return new NamedObject(value);
}
final String key = value.substring(0, separatorPos);
final String s1 = value.substring(separatorPos + 1);
final String text = TextUtils.format(key, s1);
return new NamedObject(value, text);
}
public Icon getIcon() {
return icon;
}
public void setIcon(Icon icon) {
this.icon = icon;
}
public static ListCellRenderer getIconRenderer() {
if(listCellRenderer == null)
listCellRenderer = new ListCellRenderer() {
private ListCellRenderer delegate = new DefaultListCellRenderer();
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
final Object renderedValue;
if(value instanceof NamedObject){
final Icon icon = ((NamedObject)value).getIcon();
if(icon != null)
renderedValue = icon;
else
renderedValue = value;
}
else
renderedValue = value;
return delegate.getListCellRendererComponent(list, renderedValue, index, isSelected, cellHasFocus);
}
};
return listCellRenderer;
}
public static NamedObject[] fromEnum(Class<? extends Enum<?>> enumeration) {
return fromEnum(enumeration.getSimpleName() + "." , enumeration);
}
public static NamedObject[] fromEnum(final String prefix, Class<? extends Enum<?>> enumeration) {
final Enum<?>[] enumConstants=enumeration.getEnumConstants();
NamedObject[] objs = new NamedObject[enumConstants.length];
int i = 0;
for(Enum<?> value : enumConstants){
objs[i++] = new NamedObject(value, TextUtils.getText(prefix + value.toString()));
}
return objs;
}
}