it.tidalwave.geo.viewer.impl.role.DefaultGeoViewerUI Maven / Gradle / Ivy
/***********************************************************************************************************************
*
* forceTen - open source geography
* Copyright (C) 2007-2012 by Tidalwave s.a.s. (http://www.tidalwave.it)
*
***********************************************************************************************************************
*
* 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.
*
***********************************************************************************************************************
*
* WWW: http://forceten.tidalwave.it
* SCM: https://bitbucket.org/tidalwave/forceten-src
*
**********************************************************************************************************************/
package it.tidalwave.geo.viewer.impl.role;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.List;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPopupMenu;
import org.jdesktop.observablecollections.ObservableList;
import org.jdesktop.observablecollections.ObservableListListener;
import org.openide.util.Lookup;
import it.tidalwave.util.logging.Logger;
import it.tidalwave.swing.FadingPanel;
import it.tidalwave.netbeans.swing.ToolBarFactory;
import it.tidalwave.geo.Coordinate;
import it.tidalwave.geo.CoordinateFormat;
import it.tidalwave.geo.viewer.GeoViewerPresentation;
import it.tidalwave.geo.viewer.spi.GeoViewProvider;
import it.tidalwave.geo.viewer.role.GeoViewerUI;
import it.tidalwave.geo.viewer.impl.GeoViewProviderListCellRenderer;
/***********************************************************************************************************************
*
* The default implementation of {@link GeoViewerUI}.
*
* @stereotype Role
*
* @author Fabrizio Giudici
* @version $Id$
*
**********************************************************************************************************************/
public final class DefaultGeoViewerUI extends GeoViewerUI
{
private static final String CLASS = DefaultGeoViewerUI.class.getName();
private static final Logger logger = Logger.getLogger(CLASS);
@Nonnull
private FadingPanel fadingPanel;
@CheckForNull
private JPopupMenu currentOptionsMenu;
@Inject
private Lookup lookup;
/*******************************************************************************************************************
*
*
*
******************************************************************************************************************/
public DefaultGeoViewerUI()
{
initComponents();
lbCoordinates.setText("");
pnMapRenderer.setLayout(new BorderLayout());
cbGeoViewProvider.setRenderer(new GeoViewProviderListCellRenderer());
pnToolBar.setLayout(new FlowLayout(FlowLayout.RIGHT));
pnToolBar.add(ToolBarFactory.createToolBar(GeoViewerPresentation.ID, lookup), BorderLayout.CENTER);
// TODO: use Bindings, if possible
getGeoViewProviders().addObservableListListener(new ObservableListListener()
{
@Override
public void listElementsAdded(ObservableList ol, int i, int i1)
{
cbGeoViewProvider.setEnabled(ol.size() > 1);
}
@Override
public void listElementsRemoved(ObservableList ol, int i, List list)
{
cbGeoViewProvider.setEnabled(ol.size() > 1);
}
@Override
public void listElementReplaced(ObservableList ol, int i, Object o)
{
}
@Override
public void listElementPropertyChanged(ObservableList ol, int i)
{
}
});
}
/*******************************************************************************************************************
*
*
*
******************************************************************************************************************/
@Override
public void setSelectedGeoViewProvider (final @Nullable GeoViewProvider selectedGeoViewProvider)
{
if (selectedGeoViewProvider != null)
{
selectedGeoViewProvider.setCoordinatesTracker(this);
currentOptionsMenu = selectedGeoViewProvider.getOptionsMenu();
btOptions.setEnabled(currentOptionsMenu != null);
}
else
{
btOptions.setEnabled(false);
}
super.setSelectedGeoViewProvider(selectedGeoViewProvider);
}
/*******************************************************************************************************************
*
* {@inheritDoc}
*
******************************************************************************************************************/
@Override
public void lock (final @Nonnull String message)
{
logger.info("lock(%s)", message);
// if ((currentGeoProvider == null) || (currentGeoProvider.getClass().getName().indexOf("NASA") < 0))
// {
// fadingPanel.lock(message);
// }
}
/*******************************************************************************************************************
*
* {@inheritDoc}
*
******************************************************************************************************************/
@Override
public void unlock()
{
logger.info("unlock()");
final GeoViewProvider selectedGeoViewProvider = getSelectedGeoViewProvider();
if ((selectedGeoViewProvider != null) && (selectedGeoViewProvider.getClass().getName().indexOf("NASA") >= 0))
{
logger.info(">>>> extra repaint");
selectedGeoViewProvider.getRendererComponent().repaint();
}
// if ((currentGeoProvider == null) || (currentGeoProvider.getClass().getName().indexOf("NASA") < 0))
// {
// fadingPanel.unlock();
// }
}
/*******************************************************************************************************************
*
* {@inheritDoc}
*
******************************************************************************************************************/
@Override
public void coordinatesChanged (final @CheckForNull Coordinate coordinates)
{
lbCoordinates.setText((coordinates == null) ? " " : CoordinateFormat.formatLatitude(coordinates.getLatitude()) +
" " + CoordinateFormat.formatLongitude(coordinates.getLongitude()));
}
/*******************************************************************************************************************
*
*
*
******************************************************************************************************************/
@PostConstruct
@SuppressWarnings("PMD.UnusedPrivateMethod") @edu.umd.cs.findbugs.annotations.SuppressWarnings("UPM_UNCALLED_PRIVATE_METHOD")
private void initialize()
{
fadingPanel = new FadingPanel(getRendererComponent());
pnMapRenderer.add(fadingPanel, BorderLayout.CENTER);
btOptions.addActionListener(new ActionListener()
{
@Override
public void actionPerformed (final @Nonnull ActionEvent event)
{
if (currentOptionsMenu != null)
{
currentOptionsMenu.show(btOptions, 0, -currentOptionsMenu.getHeight());
}
}
});
}
/*******************************************************************************************************************
*
* 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")
// //GEN-BEGIN:initComponents
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
pnMapRenderer = new javax.swing.JPanel();
pnHeader = new javax.swing.JPanel();
cbGeoViewProvider = new javax.swing.JComboBox();
lbCoordinates = new javax.swing.JLabel();
btOptions = new javax.swing.JButton();
pnToolBar = new javax.swing.JPanel();
javax.swing.GroupLayout pnMapRendererLayout = new javax.swing.GroupLayout(pnMapRenderer);
pnMapRenderer.setLayout(pnMapRendererLayout);
pnMapRendererLayout.setHorizontalGroup(
pnMapRendererLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 697, Short.MAX_VALUE)
);
pnMapRendererLayout.setVerticalGroup(
pnMapRendererLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 335, Short.MAX_VALUE)
);
pnHeader.setPreferredSize(new java.awt.Dimension(697, 32));
pnHeader.setSize(new java.awt.Dimension(100, 32));
cbGeoViewProvider.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${geoViewProviders}");
org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, cbGeoViewProvider);
bindingGroup.addBinding(jComboBoxBinding);
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${selectedGeoViewProvider}"), cbGeoViewProvider, org.jdesktop.beansbinding.BeanProperty.create("selectedItem"));
binding.setSourceNullValue(null);
binding.setSourceUnreadableValue(null);
bindingGroup.addBinding(binding);
lbCoordinates.setText(org.openide.util.NbBundle.getMessage(DefaultGeoViewerUI.class, "DefaultGeoViewerUI.lbCoordinates.text")); // NOI18N
btOptions.setText(org.openide.util.NbBundle.getMessage(DefaultGeoViewerUI.class, "DefaultGeoViewerUI.btOptions.text")); // NOI18N
btOptions.setIconTextGap(0);
btOptions.setMargin(new java.awt.Insets(0, 0, 0, 0));
btOptions.setMaximumSize(new java.awt.Dimension(24, 24));
btOptions.setMinimumSize(new java.awt.Dimension(24, 24));
btOptions.setPreferredSize(new java.awt.Dimension(24, 24));
javax.swing.GroupLayout pnToolBarLayout = new javax.swing.GroupLayout(pnToolBar);
pnToolBar.setLayout(pnToolBarLayout);
pnToolBarLayout.setHorizontalGroup(
pnToolBarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 346, Short.MAX_VALUE)
);
pnToolBarLayout.setVerticalGroup(
pnToolBarLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 32, Short.MAX_VALUE)
);
javax.swing.GroupLayout pnHeaderLayout = new javax.swing.GroupLayout(pnHeader);
pnHeader.setLayout(pnHeaderLayout);
pnHeaderLayout.setHorizontalGroup(
pnHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnHeaderLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lbCoordinates, javax.swing.GroupLayout.DEFAULT_SIZE, 175, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnToolBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbGeoViewProvider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btOptions, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pnHeaderLayout.setVerticalGroup(
pnHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnToolBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnHeaderLayout.createSequentialGroup()
.addGap(0, 0, 0)
.addGroup(pnHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbCoordinates, javax.swing.GroupLayout.DEFAULT_SIZE, 32, Short.MAX_VALUE)
.addComponent(btOptions, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cbGeoViewProvider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnMapRenderer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnHeader, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(pnMapRenderer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnHeader, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
bindingGroup.bind();
}// //GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btOptions;
private javax.swing.JComboBox cbGeoViewProvider;
private javax.swing.JLabel lbCoordinates;
private javax.swing.JPanel pnHeader;
private javax.swing.JPanel pnMapRenderer;
private javax.swing.JPanel pnToolBar;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy