/*
GeoGebra - Dynamic Mathematics for Everyone
http://www.geogebra.org
This file is part of GeoGebra.
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.
*/
package org.geogebra.desktop.gui.toolbar;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JList;
import javax.swing.JTree;
import javax.swing.ListCellRenderer;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import org.geogebra.desktop.main.AppD;
/**
* Renderer for tools tree
*
*/
public class ModeCellRenderer extends DefaultTreeCellRenderer
implements ListCellRenderer {
private static final long serialVersionUID = 1L;
private AppD app;
/**
* Creates new cell renderer
*
* @param app
* application
*/
public ModeCellRenderer(AppD app) {
setOpaque(true);
setBackgroundNonSelectionColor(Color.white);
this.app = app;
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean componentSelected, boolean expanded, boolean leaf, int row,
boolean componentHasFocus) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
// mode number
if (leaf) {
Object ob = node.getUserObject();
if (ob instanceof Integer) {
// mode node
int mode = ((Integer) ob).intValue();
handleModeNode(mode);
} else {
// root node
handleRootNode(node);
}
}
// folder
else {
if (row == 0) {
handleRootNode(node);
} else {
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) node
.getFirstChild();
Object ob = childNode.getUserObject();
handleModeNode(((Integer) ob).intValue());
}
}
handleSelection(componentSelected);
return this;
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
handleModeNode(((Integer) value).intValue());
handleSelection(isSelected);
return this;
}
private void handleRootNode(DefaultMutableTreeNode node) {
setIcon(null);
Object ob = node.getUserObject();
if (ob != null) {
setText(ob.toString());
} else {
setText(app.getLocalization().getMenu("Toolbar"));
}
}
private void handleModeNode(int mode) {
if (mode == -1) {
setText("\u2500\u2500\u2500 "
+ app.getLocalization().getMenu("Separator"));
setIcon(null);
} else {
setText(app.getToolName(mode));
setIcon(app.getModeIcon(mode));
}
}
private void handleSelection(boolean select) {
if (select) {
setBackground(AppD.COLOR_SELECTION);
} else {
setBackground(getBackgroundNonSelectionColor());
}
}
}