/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2012 Geomatys * * 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.geotoolkit.gui.swing.style; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.LineBorder; import org.geotoolkit.gui.swing.util.WrapLayout; import org.geotoolkit.map.MapLayer; import org.opengis.style.Symbolizer; /** * Component ables to display/select symbol * * @author Fabien Rétif (Geomatys) */ public class JBankView <T> extends StyleElementEditor<T> { private MapLayer layer = null; /** * Selected Mark object */ private T selectedObject = null; /** * HashMap which stores all components of the form */ private final Map<T, JPreview> componentMap = new HashMap<T, JPreview>(); /** * Creates new form JBankView */ public JBankView(Class<T> clazz) { super(clazz); initComponents(); guiCandidates.setLayout(new WrapLayout()); } /** * {@inheritDoc } */ @Override public void setLayer(final MapLayer layer) { this.layer = layer; } /** * {@inheritDoc } */ @Override public MapLayer getLayer() { return layer; } /** * {@inheritDoc } */ @Override public void parse(final T mark) { if (mark != null) { selectedObject = mark; JComponent myJComponent = componentMap.get(mark); if (myJComponent != null) { myJComponent.setBorder(new LineBorder(Color.DARK_GRAY)); } } } /** * Creates mark with default stroke, default fill and the selected form * {@inheritDoc } */ @Override public T create() { return (T) selectedObject; } public void clearSelectedTarget() { for (JComponent c : componentMap.values()) { c.setBorder(null); } selectedObject = null; } public void setCandidates(List<T> candidates) { componentMap.clear(); guiCandidates.removeAll(); MouseListener mouseListener = new MouseListener() { public void mousePressed(MouseEvent me) { } public void mouseReleased(MouseEvent me) { } public void mouseEntered(MouseEvent evt) { JPreview label = (JPreview) evt.getSource(); if(!label.getTarget().equals(selectedObject)) { label.setBorder(new LineBorder(Color.LIGHT_GRAY)); } } public void mouseExited(MouseEvent evt) { JPreview label = (JPreview) evt.getSource(); if(!label.getTarget().equals(selectedObject)) { label.setBorder(null); } } public void mouseClicked(MouseEvent evt) { JPreview label = (JPreview) evt.getSource(); for(JComponent c : componentMap.values()) { c.setBorder(null); } selectedObject = (T) label.getTarget(); label.setBorder(new LineBorder(Color.DARK_GRAY)); } }; for (T m : candidates) { // Creates preview label JPreview previewLabel = new JPreview(); previewLabel.setPreferredSize(new Dimension(40, 40)); previewLabel.parse(m); //Add action listener to button previewLabel.addMouseListener(mouseListener); JPanel pane = new JPanel(new BorderLayout()); pane.add(BorderLayout.CENTER, previewLabel); JLabel label = new JLabel(); if (m instanceof Symbolizer) { Symbolizer symbol = (Symbolizer) m; if (symbol.getName() != null && !symbol.getName().isEmpty()) { label.setText(symbol.getName()); } else if (symbol.getDescription() != null && symbol.getDescription().getTitle() != null && !symbol.getDescription().getTitle().toString().isEmpty()) { label.setText(symbol.getDescription().getTitle().toString()); } else { label.setText("Unnamed"); } } else { label.setText(m.getClass().getSimpleName()); } pane.add(BorderLayout.SOUTH, label); pane.setOpaque(false); guiCandidates.add(pane); componentMap.put(m, previewLabel); } guiCandidates.updateUI(); } @Override protected Object[] getFirstColumnComponents() { return new Object[]{}; } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); guiCandidates = new javax.swing.JPanel(); setLayout(new java.awt.BorderLayout()); jScrollPane1.setViewportView(guiCandidates); add(jScrollPane1, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel guiCandidates; private javax.swing.JScrollPane jScrollPane1; // End of variables declaration//GEN-END:variables }