diff --git a/cave/com.raytheon.viz.shapefile/plugin.xml b/cave/com.raytheon.viz.shapefile/plugin.xml index 0412af2082..5b4b2c3543 100644 --- a/cave/com.raytheon.viz.shapefile/plugin.xml +++ b/cave/com.raytheon.viz.shapefile/plugin.xml @@ -45,6 +45,7 @@ commandId="com.raytheon.viz.shapefile.shapefileImport"> + diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/cmenu/ShadedAction.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/cmenu/ShadedAction.java index 3710659d52..90e6a45f3f 100644 --- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/cmenu/ShadedAction.java +++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/cmenu/ShadedAction.java @@ -24,14 +24,17 @@ import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.Separator; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import com.raytheon.uf.viz.core.rsc.AbstractVizResource; +import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; import com.raytheon.uf.viz.core.rsc.capabilities.ShadeableCapability; import com.raytheon.viz.ui.dialogs.SetOpacityDialog; +import com.raytheon.viz.ui.dialogs.SetOpacityDialog.IOpacityChangedListener; /** * Action to set the shading field for a resource @@ -217,10 +220,25 @@ public class ShadedAction extends AbstractRightClickAction implements */ @Override public void run() { - AbstractVizResource rsc = getTopMostSelectedResource(); + final AbstractVizResource rsc = getTopMostSelectedResource(); Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getShell(); - SetOpacityDialog dlg = new SetOpacityDialog(shell, rsc); + float opacity = rsc.getCapability(ShadeableCapability.class) + .getOpacity(); + RGB rgb; + if (rsc.hasCapability(ColorableCapability.class)) { + rgb = rsc.getCapability(ColorableCapability.class).getColor(); + } else { + rgb = new RGB(0, 255, 255); + } + SetOpacityDialog dlg = new SetOpacityDialog(shell, opacity, rgb); + dlg.addOpacityChangedListener(new IOpacityChangedListener() { + @Override + public void opacityChanged(float opacity) { + rsc.getCapability(ShadeableCapability.class).setOpacity( + opacity); + } + }); dlg.open(); } } diff --git a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/dialogs/SetOpacityDialog.java b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/dialogs/SetOpacityDialog.java index e987334535..3dc7b2df0f 100644 --- a/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/dialogs/SetOpacityDialog.java +++ b/cave/com.raytheon.viz.ui/src/com/raytheon/viz/ui/dialogs/SetOpacityDialog.java @@ -19,6 +19,7 @@ **/ package com.raytheon.viz.ui.dialogs; +import org.eclipse.core.runtime.ListenerList; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; @@ -37,10 +38,6 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Scale; import org.eclipse.swt.widgets.Shell; -import com.raytheon.uf.viz.core.rsc.AbstractVizResource; -import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability; -import com.raytheon.uf.viz.core.rsc.capabilities.ShadeableCapability; - /** * TODO Add Description * @@ -60,15 +57,23 @@ import com.raytheon.uf.viz.core.rsc.capabilities.ShadeableCapability; public class SetOpacityDialog extends CaveJFACEDialog { - private AbstractVizResource resource; + public static interface IOpacityChangedListener { + public void opacityChanged(float opacity); + } + + private ListenerList listenerList; private float originalOpacity; private float opacity; - public SetOpacityDialog(Shell parentShell, AbstractVizResource rsc) { + private RGB color; + + public SetOpacityDialog(Shell parentShell, float originalOpacity, RGB color) { super(parentShell); - this.resource = rsc; + this.opacity = this.originalOpacity = originalOpacity; + this.color = color; + this.listenerList = new ListenerList(); } @Override @@ -103,8 +108,6 @@ public class SetOpacityDialog extends CaveJFACEDialog { scale.setLayoutData(layoutData); scale.setMinimum(0); scale.setMaximum(100); - opacity = originalOpacity = resource.getCapability( - ShadeableCapability.class).getOpacity(); scale.setSelection((int) (originalOpacity * 100)); @@ -124,10 +127,9 @@ public class SetOpacityDialog extends CaveJFACEDialog { Scale scale = (Scale) e.widget; label.setText(scale.getSelection() + "%"); opacity = scale.getSelection() / 100.0f; - resource.getCapability(ShadeableCapability.class).setOpacity( - opacity); - resource.issueRefresh(); canvas.redraw(); + + fireListeners(opacity); } }); @@ -141,19 +143,15 @@ public class SetOpacityDialog extends CaveJFACEDialog { gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_BLACK)); gc.fillRectangle(rect1); - Rectangle rect2 = new Rectangle(rect1.x + rect1.width / 2, rect1.y, - rect1.width / 2, rect1.height); - gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_WHITE)); - gc.fillRectangle(rect2); + int dx = rect1.width / 5; + int dy = rect1.height / 5; - RGB rgb; - if (resource.hasCapability(ColorableCapability.class)) { - rgb = resource.getCapability(ColorableCapability.class).getColor(); - } else { - rgb = new RGB(0, 255, 255); - } + Rectangle rect2 = new Rectangle(rect1.x + dx, rect1.y + dy, rect1.width + - 2 * dx, rect1.height - 2 * dy); + gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_WHITE)); + gc.drawRectangle(rect2); - Color color = new Color(gc.getDevice(), rgb); + Color color = new Color(gc.getDevice(), this.color); gc.setBackground(color); gc.setAlpha((int) (opacity * 255)); gc.fillRectangle(rect1); @@ -162,9 +160,41 @@ public class SetOpacityDialog extends CaveJFACEDialog { @Override protected void cancelPressed() { - resource.getCapability(ShadeableCapability.class).setOpacity( - originalOpacity); - resource.issueRefresh(); + opacity = originalOpacity; + fireListeners(opacity); super.cancelPressed(); } + + /** + * Add listener to be notified when opacity is changed + * + * @param listener + */ + public void addOpacityChangedListener(IOpacityChangedListener listener) { + this.listenerList.add(listener); + } + + /** + * Remove opacity changed listener + * + * @param listener + */ + public void removeOpacityChangedListener(IOpacityChangedListener listener) { + this.listenerList.remove(listener); + } + + private void fireListeners(float opacity) { + for (Object listener : listenerList.getListeners()) { + ((IOpacityChangedListener) listener).opacityChanged(opacity); + } + } + + /** + * Get selected opacity + * + * @return the opacity + */ + public float getOpacity() { + return opacity; + } } diff --git a/cots/org.geotools/.classpath b/cots/org.geotools/.classpath index 337796645c..f0518aa1ff 100644 --- a/cots/org.geotools/.classpath +++ b/cots/org.geotools/.classpath @@ -9,13 +9,13 @@ - - + + - - + +