/*
* The Unified Mapping Platform (JUMP) is an extensible, interactive GUI for
* visualizing and manipulating spatial features with geometry and attributes.
*
* Copyright (C) 2003 Vivid Solutions
*
* 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; either version 2 of the License, or (at your option)
* any later version.
*
* This program 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 General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
*
* For more information, contact:
*
* Vivid Solutions Suite #1A 2328 Government Street Victoria BC V8T 5G5 Canada
*
* (250)385-6040 www.vividsolutions.com
*/
package com.vividsolutions.jump.workbench.ui.plugin;
import com.vividsolutions.jts.util.Assert;
import com.vividsolutions.jump.I18N;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.model.*;
import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.ui.*;
import com.vividsolutions.jump.workbench.ui.images.IconLoader;
import com.vividsolutions.jump.workbench.ui.images.famfam.IconLoaderFamFam;
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
public class ViewAttributesPlugIn extends AbstractPlugIn {
public ViewAttributesPlugIn() {
}
public String getName() {
return I18N.get("ui.plugin.ViewAttributesPlugIn.view-edit-attributes");
}
public boolean execute(final PlugInContext context) throws Exception {
reportNothingToUndoYet(context);
//Don't add GeometryInfoFrame because the HTML will probably be too
// much for the editor pane (too many features). [Jon Aquino]
final ViewAttributesFrame frame = new ViewAttributesFrame(context
.getSelectedLayer(0), context);
context.getWorkbenchFrame().addInternalFrame(frame);
return true;
}
public MultiEnableCheck createEnableCheck(
final WorkbenchContext workbenchContext) {
EnableCheckFactory checkFactory = new EnableCheckFactory(
workbenchContext);
return new MultiEnableCheck().add(
checkFactory.createTaskWindowMustBeActiveCheck()).add(
checkFactory.createExactlyNLayersMustBeSelectedCheck(1));
}
public ImageIcon getIcon() {
//return IconLoaderFamFam.icon("table.png");
return IconLoader.icon("Row.gif");
}
public static class ViewAttributesFrame extends JInternalFrame
implements
LayerManagerProxy,
SelectionManagerProxy,
LayerNamePanelProxy,
TaskFrameProxy,
LayerViewPanelProxy {
private LayerManager layerManager;
private OneLayerAttributeTab attributeTab;
public ViewAttributesFrame(Layer layer, PlugInContext context) {
this.layerManager = context.getLayerManager();
addInternalFrameListener(new InternalFrameAdapter() {
public void internalFrameClosed(InternalFrameEvent e) {
//Assume that there are no other views on the model [Jon
// Aquino]
attributeTab.getModel().dispose();
}
});
setResizable(true);
setClosable(true);
setMaximizable(true);
setIconifiable(true);
getContentPane().setLayout(new BorderLayout());
attributeTab = new OneLayerAttributeTab(context
.getWorkbenchContext(), ((TaskFrameProxy) context
.getActiveInternalFrame()).getTaskFrame(), this).setLayer(layer);
addInternalFrameListener(new InternalFrameAdapter() {
public void internalFrameOpened(InternalFrameEvent e) {
attributeTab.getToolBar().updateEnabledState();
}
});
getContentPane().add(attributeTab, BorderLayout.CENTER);
setSize(500, 300);
updateTitle(attributeTab.getLayer());
context.getLayerManager().addLayerListener(new LayerListener() {
public void layerChanged(LayerEvent e) {
if (attributeTab.getLayer() != null) {
updateTitle(attributeTab.getLayer());
}
}
public void categoryChanged(CategoryEvent e) {
}
public void featuresChanged(FeatureEvent e) {
}
});
Assert.isTrue(!(this instanceof CloneableInternalFrame),
I18N.get("ui.plugin.ViewAttributesPlugIn.there-can-be-no-other-views-on-the-InfoModels"));
}
public LayerViewPanel getLayerViewPanel() {
return getTaskFrame().getLayerViewPanel();
}
public LayerManager getLayerManager() {
return layerManager;
}
private void updateTitle(Layer layer) {
String editView;
if (layer.isEditable()) {
editView = I18N.get("ui.plugin.ViewAttributesPlugIn.edit");
} else {
editView = I18N.get("ui.plugin.ViewAttributesPlugIn.view");
}
setTitle(" "+I18N.get("ui.plugin.ViewAttributesPlugIn.attributes")
+": "+ layer.getName());
}
public TaskFrame getTaskFrame() {
return attributeTab.getTaskFrame();
}
public SelectionManager getSelectionManager() {
return attributeTab.getPanel().getSelectionManager();
}
public LayerNamePanel getLayerNamePanel() {
return attributeTab;
}
}
}