Issue #1222 Fixed MapResourceGroup to manage keeping capabilties in sync with underlying resources by using listeners. Also fixed issue where you can set map resources to be time match basis to avoid errors. Fixed build when merging in 12.10

Change-Id: Iec0389be3a563df2d14f079cdd127a32ba552237

Former-commit-id: ac247423f66f1b29b2235595f08b8cee03962842
This commit is contained in:
Max Schenkelberg 2012-09-27 17:40:43 -05:00
parent 8880f378c2
commit d63f741ab5
4 changed files with 53 additions and 13 deletions

View file

@ -31,10 +31,12 @@ import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.map.MapDescriptor;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.IResourceDataChanged;
import com.raytheon.uf.viz.core.rsc.IResourceGroup;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.ResourceList;
import com.raytheon.uf.viz.core.rsc.ResourceProperties;
import com.raytheon.uf.viz.core.rsc.capabilities.AbstractCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.ImagingCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability;
@ -79,7 +81,20 @@ public class MapResourceGroup extends
}
});
this.resourceData.addChangeListener(new IResourceDataChanged() {
@Override
public void resourceChanged(ChangeType type, Object object) {
if (type == ChangeType.CAPABILITY
&& object instanceof AbstractCapability) {
for (ResourcePair rp : resourceData.getResourceList()) {
rp.getLoadProperties()
.getCapabilities()
.addCapability(
((AbstractCapability) object).clone());
}
}
}
});
}
protected void addListener(AbstractVizResource<?, MapDescriptor> rsc)
@ -129,6 +144,10 @@ public class MapResourceGroup extends
for (ResourcePair rp : this.resourceData.getResourceList()) {
AbstractVizResource<?, ?> rsc = rp.getResource();
if (rsc != null) {
rsc.getCapabilities().addCapability(
getCapability(ColorableCapability.class).clone());
rsc.getCapabilities().addCapability(
getCapability(OutlineCapability.class).clone());
rsc.init(target);
}
}
@ -154,13 +173,6 @@ public class MapResourceGroup extends
if (properties.isDisplayable(displayWidth)) {
PaintProperties newProps = new PaintProperties(paintProps);
// keep these in sync
resource.getCapabilities().addCapability(
getCapability(ColorableCapability.class));
resource.getCapabilities().addCapability(
getCapability(OutlineCapability.class));
if (resource.hasCapability(ImagingCapability.class)) {
paintProps.setAlpha(resource.getCapability(
ImagingCapability.class).getAlpha());

View file

@ -579,11 +579,13 @@ public class D2DLegendResource extends
String name = selectedResource.getResource().getName();
if (name != null && name.isEmpty() == false) {
menuManager.add(new DummyAction(name));
}
TMB_ACTION.setSelectedRsc(selectedResource);
TMB_ACTION.setContainer(getResourceContainer());
if (TMB_ACTION.isHidden() == false) {
menuManager.add(TMB_ACTION);
menuManager.add(new Separator());
}
menuManager.add(new Separator());
super.fillContextMenu(menuManager, selectedResource);
}
}

View file

@ -32,6 +32,7 @@ import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.IResourceGroup;
import com.raytheon.uf.viz.core.rsc.ResourceList;
import com.raytheon.uf.viz.core.rsc.capabilities.BlendableCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.TimeMatchBasisCapability;
/**
* Time match basis action, sets the selected resource as the time match basis
@ -133,4 +134,29 @@ public class SetTimeMatchBasisAction extends AbstractRightClickAction {
return tmb;
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.cmenu.AbstractRightClickAction#isHidden()
*/
@Override
public boolean isHidden() {
AbstractVizResource<?, ?> rsc = getTopMostSelectedResource();
if (rsc.hasCapability(TimeMatchBasisCapability.class) == false) {
if (rsc.hasCapability(BlendableCapability.class)) {
ResourceList list = rsc
.getCapability(BlendableCapability.class)
.getResourceList();
for (ResourcePair rp : list) {
if (rp.getResource().hasCapability(
TimeMatchBasisCapability.class)) {
return false;
}
}
}
return true;
}
return false;
}
}