/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2006-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.gui.swing.map.map2d.stream.control;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.border.Border;
import org.geotools.gui.swing.map.map2d.Map2D;
import org.geotools.gui.swing.map.map2d.stream.SelectableMap2D;
import org.geotools.gui.swing.map.map2d.stream.event.SelectionEvent;
import org.geotools.gui.swing.map.map2d.stream.handler.DefaultSelectionHandler;
import org.geotools.gui.swing.map.map2d.stream.handler.LasoSelectionHandler;
import org.geotools.gui.swing.map.map2d.stream.handler.SelectionHandler;
import org.geotools.gui.swing.map.map2d.stream.listener.SelectionListener;
/**
* Handler chooser
*
* @author Johann Sorel
*
* @source $URL$
*/
public class SelectHandlerChooser extends JComboBox {
private Map2D map = null;
private ItemListener listListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (map != null && map instanceof SelectableMap2D) {
SelectableMap2D editmap = (SelectableMap2D) map;
editmap.setSelectionHandler((SelectionHandler) getSelectedItem());
}
}
};
private SelectionListener selectionListener = new SelectionListener() {
public void selectionChanged(SelectionEvent event) {
}
public void selectionFilterChanged(SelectionEvent event) {
}
public void selectionHandlerChanged(SelectionEvent event) {
removeItemListener(listListener);
if (event.getHandler() != getSelectedItem()) {
if (event.getHandler() instanceof DefaultSelectionHandler) {
setSelectedItem(defaultHandler);
} else if (event.getHandler() instanceof LasoSelectionHandler) {
setSelectedItem(lasoHandler);
} else {
}
}
addItemListener(listListener);
}
};
private final DefaultSelectionHandler defaultHandler = new DefaultSelectionHandler();
private final LasoSelectionHandler lasoHandler = new LasoSelectionHandler();
public SelectHandlerChooser() {
setRenderer(new listRenderer());
addItem(defaultHandler);
addItem(lasoHandler);
addItemListener(listListener);
initComboBox();
setOpaque(false);
setBorder(null);
}
private void initComboBox() {
removeItemListener(listListener);
if (map != null && map instanceof SelectableMap2D) {
setEnabled(true);
SelectableMap2D select = (SelectableMap2D) map;
if (select.getSelectionHandler() instanceof DefaultSelectionHandler) {
setSelectedItem(defaultHandler);
} else if (select.getSelectionHandler() instanceof LasoSelectionHandler) {
setSelectedItem(lasoHandler);
} else {
}
} else {
setEnabled(false);
}
addItemListener(listListener);
}
public Map2D getMap() {
return map;
}
public void setMap(Map2D map2d) {
if (map != null) {
if (map instanceof SelectableMap2D) {
((SelectableMap2D) map).removeSelectableMap2DListener(selectionListener);
}
}
map = map2d;
if (map != null) {
if (map instanceof SelectableMap2D) {
((SelectableMap2D) map).addSelectableMap2DListener(selectionListener);
}
}
initComboBox();
}
//----------------private classes-------------------------------------------
private class listRenderer extends DefaultListCellRenderer {
private JLabel lbl = new JLabel();
private final Border border = BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1);
private final Border nullborder = BorderFactory.createEmptyBorder(1, 1, 1, 1);
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof SelectionHandler) {
lbl.setIcon(((SelectionHandler) value).getIcon());
lbl.setText(((SelectionHandler) value).getTitle());
} else {
lbl.setIcon(null);
lbl.setText(value.toString());
}
if (isSelected) {
lbl.setBorder(border);
} else {
lbl.setBorder(nullborder);
}
return lbl;
}
}
}