/* * Copyright 2013 Serdar. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.fub.agg2graphui; import de.fub.agg2graph.ui.gui.RenderingOptions; import de.fub.agg2graphui.controller.AbstractLayer; import de.fub.agg2graphui.controller.LayerManager; import de.fub.agg2graphui.layers.LayerEvent; import de.fub.agg2graphui.layers.LayerListener; import de.fub.mapviewer.ui.MapViewer; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.openide.explorer.ExplorerManager; /** * * @author Serdar */ public class AggContentPanel extends MapViewer implements LayerManager.Provider, ExplorerManager.Provider, ChangeListener, LayerListener { private static final Logger LOG = Logger.getLogger(AggContentPanel.class.getName()); private static final long serialVersionUID = 1L; private final ExplorerManager explorerManager = new ExplorerManager(); private transient final LayerManager layerManager = new LayerManager(this); private boolean labelsVisible = true; private int highlightIndex = 0; private int savedZIndex = Integer.MAX_VALUE; private boolean transparentHighlighting = true; /** * Creates new form AggContentPanel */ public AggContentPanel() { initComponents(); setHorizontalWrapped(true); setRestrictOutsidePanning(true); layerManager.addChangeListener(AggContentPanel.this); layerManager.addLayerListener(AggContentPanel.this); for (MouseWheelListener listener : getMouseWheelListeners()) { removeMouseWheelListener(listener); } addMouseWheelListener(new MouseWheelListenerImpl()); } /** * 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() { setLayout(new java.awt.BorderLayout()); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables public boolean isLabelsVisible() { return labelsVisible; } public void setLabelsVisible(boolean labelsVisible) { if (this.labelsVisible != labelsVisible) { this.labelsVisible = labelsVisible; for (AbstractLayer<?> layer : getLayerManager().getLayers()) { if (labelsVisible) { layer.getRenderingOptions().setLabelRenderingType(RenderingOptions.LabelRenderingType.ALWAYS); } else { layer.getRenderingOptions().setLabelRenderingType(RenderingOptions.LabelRenderingType.NEVER); } } repaint(); } } @Override public LayerManager getLayerManager() { return layerManager; } public void addLayer(AbstractLayer<?> layer) { assert layer != null; getLayerManager().addLayer(layer); repaint(); } public void removeLayer(AbstractLayer<?> layer) { assert layer != null; getLayerManager().remove(layer); repaint(); } private void highlightLayer(int wheelRotation) { ArrayList<AbstractLayer<?>> layers = new ArrayList<AbstractLayer<?>>(getLayerManager().getLayers()); if (savedZIndex != Integer.MAX_VALUE) { layers.get(highlightIndex).getRenderingOptions().setzIndex(savedZIndex); } highlightIndex = (highlightIndex + wheelRotation + getLayerManager().getLayers().size()) % getLayerManager().getLayers().size(); savedZIndex = layers.get(highlightIndex).getRenderingOptions().getzIndex(); layers.get(highlightIndex).getRenderingOptions().setzIndex(999); if (transparentHighlighting) { for (AbstractLayer<?> layer : getLayerManager().getLayers()) { layer.getRenderingOptions().setOpacity(0.3); } layers.get(highlightIndex).getRenderingOptions().setOpacity(1); } repaint(); } @Override public ExplorerManager getExplorerManager() { return explorerManager; } @Override public void stateChanged(ChangeEvent e) { refreshView(); } @Override public void requestRender(LayerEvent layerEvent) { refreshView(); } private void refreshView() { if (SwingUtilities.isEventDispatchThread()) { repaint(); } else { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { repaint(); } }); } } void removeAllLayers() { layerManager.removeAllLayers(); } private class MouseWheelListenerImpl implements MouseWheelListener { public MouseWheelListenerImpl() { } @Override public void mouseWheelMoved(MouseWheelEvent e) { if (e.isControlDown()) { highlightLayer(e.getWheelRotation()); e.consume(); } else { // push down if (getZoom() <= getTileFactory().getInfo().getMaximumZoomLevel() || e.getWheelRotation() > 0) { setZoom(getZoom() - e.getWheelRotation()); LOG.log(Level.FINEST, "zoom level: {0}, Maxzoom: {1}", new Object[]{getZoom(), getTileFactory().getInfo().getMaximumZoomLevel()}); } } layerManager.requestUpdate(); } } }