Merge branch 'master_13.3.1' into omaha_13.4.1

Former-commit-id: bdefa9f20f [formerly cb0c44c44331d64e566905a166abf132f6a5817b]
Former-commit-id: 6dc19411c1
This commit is contained in:
Steve Harris 2013-04-15 09:37:29 -05:00
commit 97790b0d3e
14 changed files with 413 additions and 201 deletions

View file

@ -261,8 +261,7 @@ class Procedure (SmartScript.SmartScript):
if checkOnly:
self.createGrid(MODEL, "MaxLessThanMin", "SCALAR", mask.astype('float32'),
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0,
units="", descriptiveName="")
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0)
else: # force the change
if maxTR in maxTLocks:
msg = "Can't modify MaxT grid at " + str(maxTR) + \

View file

@ -21,6 +21,8 @@ package com.raytheon.uf.viz.gisdatastore.ui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
@ -47,6 +49,7 @@ import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 27, 2012 randerso Initial creation
* Apr 9, 2013 #1860 randerso Fix image disposed issued on Windows
*
* </pre>
*
@ -87,7 +90,7 @@ public class LineStyleDialog extends Dialog {
continue;
}
TableItem item = new TableItem(table, SWT.NONE);
Image image = new Image(d, 128, 10);
final Image image = new Image(d, 128, 10);
Rectangle bounds = image.getBounds();
int[] dashes = ls.getSWTLineStyle();
GC gc = new GC(image);
@ -98,7 +101,14 @@ public class LineStyleDialog extends Dialog {
gc.dispose();
item.setImage(image);
image.dispose();
item.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
image.dispose();
}
});
item.setData(ls);
if (ls.equals(this.style)) {

View file

@ -21,6 +21,8 @@ package com.raytheon.uf.viz.gisdatastore.ui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
@ -45,6 +47,7 @@ import org.eclipse.swt.widgets.TableItem;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 27, 2012 randerso Initial creation
* Apr 9, 2013 #1860 randerso Fix image disposed issued on Windows
*
* </pre>
*
@ -88,7 +91,7 @@ public class LineWidthDialog extends Dialog {
for (int w = min; w <= max; w++) {
TableItem item = new TableItem(table, SWT.NONE);
Image image = new Image(d, 128, 10);
final Image image = new Image(d, 128, 10);
Rectangle bounds = image.getBounds();
GC gc = new GC(image);
gc.fillRectangle(bounds);
@ -98,7 +101,13 @@ public class LineWidthDialog extends Dialog {
gc.dispose();
item.setImage(image);
image.dispose();
item.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
image.dispose();
}
});
item.setData(w);
if (w == this.width) {

View file

@ -24,8 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MenuListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackAdapter;
@ -46,6 +44,8 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuDialog.MenuPathElement;
/**
* Holds the information for all the menu items in the dialog
*
@ -56,6 +56,7 @@ import org.eclipse.swt.widgets.MenuItem;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 15, 2011 mnash Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
*
* </pre>
*
@ -63,7 +64,7 @@ import org.eclipse.swt.widgets.MenuItem;
* @version 1.0
*/
public class MenuItemComposite extends Composite implements MenuListener {
public class MenuItemComposite extends Composite {
private boolean separator = false;
@ -74,6 +75,8 @@ public class MenuItemComposite extends Composite implements MenuListener {
// backing data for executing listeners
private MenuItem item;
private MenuPathElement itemPath;
private Image arrow = null;
private Image highlightedArrow = null;
@ -84,8 +87,6 @@ public class MenuItemComposite extends Composite implements MenuListener {
private List<String> myPath;
private Menu topMostParent;
/**
* @param parent
* @param style
@ -108,14 +109,13 @@ public class MenuItemComposite extends Composite implements MenuListener {
do {
myPath.add(toAdd.getText());
toAdd = parent.getParentItem();
topMostParent = parent;
parent = parent.getParentMenu();
} while (parent.getParentMenu() != null);
Collections.reverse(myPath);
topMostParent.addMenuListener(this);
item = it;
itemPath = new MenuPathElement(it);
String[] labels = item.getText().split("\t");
// handle for a separator menu item
@ -189,6 +189,8 @@ public class MenuItemComposite extends Composite implements MenuListener {
*
*/
private void addItemListeners() {
if (item == null)
return;
if (updateListener != null) {
item.addListener(SWT.Modify, updateListener);
}
@ -209,11 +211,11 @@ public class MenuItemComposite extends Composite implements MenuListener {
for (Control comp : firstItem.getParent().getParent()
.getChildren()) {
MenuItemComposite composite = (MenuItemComposite) comp;
if (composite.item.getText().equals(
if (composite.getItem().getText().equals(
((MenuItem) e.widget).getText())) {
if (composite.firstItem instanceof Button) {
((Button) composite.firstItem)
.setSelection(composite.item
.setSelection(composite.getItem()
.getSelection());
}
} else {
@ -233,7 +235,7 @@ public class MenuItemComposite extends Composite implements MenuListener {
@Override
public void handleEvent(Event event) {
if (secondItem != null && !secondItem.isDisposed()) {
if (item == event.data) {
if (getItem() == event.data) {
if (((MenuItem) event.data).getText().split("\t").length > 1) {
((Label) secondItem)
.setText(((MenuItem) event.data).getText()
@ -377,6 +379,8 @@ public class MenuItemComposite extends Composite implements MenuListener {
MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
MenuItem item = getItem();
if (item.getMenu() != null) {
// This is item opens a submenu, get the y offset based on
// the location of the click
@ -420,7 +424,7 @@ public class MenuItemComposite extends Composite implements MenuListener {
for (int i = 0; i < siblings.length; i++) {
final MenuItemComposite mic = (MenuItemComposite) siblings[i];
if (mic.separator == false
&& mic.item.getStyle() == SWT.RADIO) {
&& mic.getItem().getStyle() == SWT.RADIO) {
try {
MenuItemComposite parent = null;
// check whether a Label is clicked or a
@ -434,16 +438,16 @@ public class MenuItemComposite extends Composite implements MenuListener {
// check that the radio groups match
if (mic.getData("radioGroup").equals(
parent.getData("radioGroup"))) {
if (!parent.item
if (!parent.getItem()
.getText()
.replaceAll("&", "")
.equals(mic.item.getText().replaceAll(
.equals(mic.getItem().getText().replaceAll(
"&", ""))) {
mic.item.setSelection(false);
mic.getItem().setSelection(false);
((Button) mic.firstItem)
.setSelection(false);
} else {
mic.item.setSelection(true);
mic.getItem().setSelection(true);
((Button) mic.firstItem).setSelection(true);
}
}
@ -476,10 +480,6 @@ public class MenuItemComposite extends Composite implements MenuListener {
}
}
if (topMostParent != null) {
topMostParent.removeMenuListener(this);
}
super.dispose();
}
@ -489,67 +489,40 @@ public class MenuItemComposite extends Composite implements MenuListener {
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.swt.events.MenuListener#menuHidden(org.eclipse.swt.events
* .MenuEvent)
*/
@Override
public void menuHidden(MenuEvent e) {
if (item.isDisposed() == false) {
return;
}
private MenuItem getItem() {
MenuItem item = getItemIfAvailable();
if (item == null)
throw new IllegalStateException(
String.format("Could not find target of tear-off menu item \"%s\"",
itemPath.getName()));
return item;
}
// At some point we may need to check against the index as well but that
// is difficult because we don't know if the tear off menu item will/was
// in the menu when we were created/now so our index could be off by one
// very easily making it unreliable
Menu menu = topMostParent;
MenuItem myItem = null;
String last = myPath.get(myPath.size() - 1);
for (String path : myPath) {
if (menu != null) {
MenuItem[] items = menu.getItems();
for (int i = 0; i < items.length; ++i) {
MenuItem item = items[i];
if (path.equals(item.getText())) {
if (path == last) {
myItem = item;
} else {
menu = item.getMenu();
if (menu != null && menu.getItemCount() == 0) {
// Have to manually fill menu
for (Listener listener : menu
.getListeners(SWT.Show)) {
Event event = new Event();
event.type = SWT.Show;
event.widget = menu;
listener.handleEvent(event);
}
}
}
break;
}
}
}
}
if (myItem != null && myItem.isDisposed() == false) {
item = myItem;
private MenuItem getItemIfAvailable() {
if (item == null || item.isDisposed()) {
item = findItem();
addItemListeners();
}
return item;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.swt.events.MenuListener#menuShown(org.eclipse.swt.events.
* MenuEvent)
*/
@Override
public void menuShown(MenuEvent e) {
private MenuItem findItem() {
Menu menu = getTargetMenu();
if (menu != null)
return TearOffMenuDialog.findItem(menu, itemPath);
else
return null;
}
private Menu getTargetMenu() {
return getDialog().getTargetMenu();
}
private TearOffMenuDialog getDialog() {
return (TearOffMenuDialog) getShell().getData();
}
public void reconnect() {
getItemIfAvailable();
}
}

View file

@ -27,6 +27,7 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import com.raytheon.viz.ui.EditorUtil;
import com.raytheon.viz.ui.editor.AbstractEditor;
@ -41,6 +42,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 5, 2011 mnash Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Do not assume there is an active editor.
*
* </pre>
*
@ -88,7 +90,10 @@ public class PopupMenu {
mItem.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
((AbstractEditor) EditorUtil.getActiveEditor()).refresh();
IEditorPart editor = EditorUtil.getActiveEditor();
if (editor instanceof AbstractEditor) {
((AbstractEditor) editor).refresh();
}
}
});

View file

@ -19,6 +19,12 @@
**/
package com.raytheon.uf.viz.ui.menus.widgets.tearoff;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Point;
@ -53,6 +59,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* ------------ ---------- ----------- --------------------------
* Sep 14, 2011 mnash Initial creation
* Jan 09, 2013 1442 rferrel Add Simulated Time Change Listener.
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
*
* </pre>
*
@ -62,7 +69,9 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
public class TearOffMenuDialog extends CaveSWTDialog {
private MenuItem[] items;
private MenuPathElement[] menuPath;
private Menu menu;
private ScrolledComposite scrolledComp;
@ -80,8 +89,9 @@ public class TearOffMenuDialog extends CaveSWTDialog {
public TearOffMenuDialog(Menu menu) {
super(VizWorkbenchManager.getInstance().getCurrentWindow().getShell(),
SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.DO_NOT_BLOCK);
this.menuPath = getMenuPath(menu);
this.menu = menu;
String text = menu.getParentItem().getText();
this.items = menu.getItems();
// handle for the & that makes key bindings
setText(text.replace("&", ""));
@ -89,6 +99,7 @@ public class TearOffMenuDialog extends CaveSWTDialog {
@Override
protected void initializeComponents(final Shell shell) {
shell.setData(this);
// allow for scrolling if necessary
scrolledComp = new ScrolledComposite(shell, SWT.V_SCROLL);
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
@ -106,6 +117,7 @@ public class TearOffMenuDialog extends CaveSWTDialog {
// go through menu items and build MenuItemComposite for each item,
// which handles all the selection and color of the "MenuItem" in the
// dialog
MenuItem[] items = getTargetMenu().getItems();
int radioGroup = 0;
for (int i = 1; i < items.length; i++) {
MenuItem item = items[i];
@ -140,11 +152,10 @@ public class TearOffMenuDialog extends CaveSWTDialog {
int y = point.y;
shell.setLocation(x, y);
// close the dialog on perspective change
shell.addListener(SWT.Hide, new Listener() {
shell.addListener(SWT.Show, new Listener() {
@Override
public void handleEvent(Event event) {
close();
updateItems();
}
});
}
@ -204,12 +215,156 @@ public class TearOffMenuDialog extends CaveSWTDialog {
* Force update of item's display.
*/
private void updateItems() {
// items[0] is the tear off object and is not in the dialog's display.
for (int index = 1; index < items.length; ++index) {
MenuItem item = items[index];
Menu menu = getMenuIfAvailable();
if (menu == null)
return;
for (MenuItemComposite mic : getMenuItemComposites())
mic.reconnect();
for (MenuItem item : menu.getItems()) {
if (item.getData() instanceof BundleContributionItem) {
((BundleContributionItem) item.getData()).refreshText();
}
}
}
private List<MenuItemComposite> getMenuItemComposites() {
List<MenuItemComposite> result = new ArrayList<MenuItemComposite>();
for (Control c : fullComp.getChildren()) {
if (c instanceof MenuItemComposite)
result.add((MenuItemComposite) c);
}
return result;
}
/**
* Return the portion of a menu item's title that should not change over
* time
*
*/
private static String getCleanMenuItemText(String text) {
int pos = text.indexOf('\t');
if (pos >= 0)
return text.substring(0, pos);
else
return text;
}
private Menu getMenuIfAvailable() {
if (menu == null || menu.isDisposed()) {
menu = findMenu();
}
return menu;
}
/*package*/ Menu getTargetMenu() {
Menu menu = getMenuIfAvailable();
if (menu == null) {
throw new IllegalStateException(
String.format("Tear-off menu %s is not available", shell.getText()));
}
if (menu.getItems().length == 0)
tryToFillMenu(menu);
return menu;
}
private void tryToFillMenu(Menu menu) {
/*
* Menu may not have been created so call listeners. This still does
* not work if all of the menu items need the workbench window to be
* active in order to be enabled.
*/
Shell shell = this.shell.getParent().getShell();
shell.setActive();
while (shell.getDisplay().readAndDispatch()) {
// nothing
}
Event event = new Event();
event.type = SWT.Show;
menu.notifyListeners(SWT.Show, event);
event = new Event();
event.type = SWT.Hide;
menu.notifyListeners(SWT.Hide, event);
}
private Menu findMenu() {
/* NOTE: Assuming shell.getParent().getShell() is the workbench window. */
Menu container = shell.getParent().getShell().getMenuBar();
MenuPathElement lastPathElement = null;
for (int i = 0; i < menuPath.length; ++i) {
MenuItem mi = findItem(container, menuPath[i]);
if (mi == null)
return null;
Menu mim = mi.getMenu();
if (mim == null)
throw new IllegalStateException(String.format(
"Could not get target menu \"%s\" in %s",
menuPath[i].getName(), lastPathElement != null ?
'"' + lastPathElement.getName() + '"' : "menu bar"));
tryToFillMenu(mim);
container = mim;
lastPathElement = menuPath[i];
}
return container;
}
/**
* Identifies a specific item in an SWT menu. It has been observed that
* associated data of a menu item maintains the same identity during a CAVE
* session even if the MenuItem is recreated. However, the associated
* data is not always unique. Menu item text is used to differentiate.
*/
static class MenuPathElement {
Object data;
String cleanText;
public MenuPathElement(MenuItem item) {
data = item.getData();
cleanText = getCleanMenuItemText(item.getText());
}
public int getMatchLevel(MenuItem item) {
int level = 0;
if (item.getData() == data)
++level;
if (cleanText.equals(item.getText()))
++level;
return level;
}
public String getName() {
if (cleanText != null && cleanText.length() > 0)
return cleanText;
Object value = data;
if (value instanceof MenuManager)
value = ((MenuManager) value).getId();
else if (value instanceof ContributionItem)
value = ((ContributionItem) value).getId();
return String.valueOf(value);
}
}
/*package*/ static MenuItem findItem(Menu menu, MenuPathElement pe) {
MenuItem best = null;
int bestLevel = 0;
for (MenuItem item : menu.getItems()) {
int matchLevel = pe.getMatchLevel(item);
if (matchLevel > bestLevel) {
bestLevel = matchLevel;
best = item;
}
}
return best;
}
private static MenuPathElement[] getMenuPath(Menu menu) {
ArrayList<MenuPathElement> data = new ArrayList<MenuPathElement>();
while (menu != null) {
MenuItem mi = menu.getParentItem();
if (mi == null)
break;
data.add(new MenuPathElement(mi));
menu = menu.getParentMenu();
}
Collections.reverse(data);
return data.toArray(new MenuPathElement[data.size()]);
}
}

View file

@ -39,6 +39,11 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.viz.ui.VizWorkbenchManager;
/**
* Menu listener that adds item to menu which will open dialog which is the menu
*
@ -49,6 +54,7 @@ import org.eclipse.swt.widgets.MenuItem;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 14, 2011 mschenke Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
*
* </pre>
*
@ -66,6 +72,9 @@ public class TearOffMenuListener implements IMenuListener2 {
public static final String TEAROFF_PREFERENCE_ID = "tearoffmenus";
private static final IUFStatusHandler statusHandler = UFStatus
.getHandler(TearOffMenuListener.class);
private static boolean enabled;
static {
final IPreferenceStore store = com.raytheon.uf.viz.core.Activator
@ -94,7 +103,7 @@ public class TearOffMenuListener implements IMenuListener2 {
@Override
public void menuAboutToShow(final IMenuManager manager) {
register(manager.getItems(), this);
if (openDialogs.contains(getKey(manager)) == false) {
if (openDialogs.contains(getPerspectiveKey(manager)) == false) {
// We need to add our item to be first so we need to remove others
// then add ourself
IContributionItem[] items = manager.getItems();
@ -112,7 +121,7 @@ public class TearOffMenuListener implements IMenuListener2 {
*/
@Override
public void menuAboutToHide(IMenuManager manager) {
if (openDialogs.contains(getKey(manager)) == false) {
if (openDialogs.contains(getPerspectiveKey(manager)) == false) {
manager.remove(ID);
manager.remove(ACTION_ID);
unregister(manager.getItems(), this);
@ -137,6 +146,16 @@ public class TearOffMenuListener implements IMenuListener2 {
}
}
private Object getPerspectiveKey(IMenuManager manager) {
String perspectiveId = "";
try {
perspectiveId = VizWorkbenchManager.getInstance().getCurrentWindow().getActivePage().getPerspective().getId();
} catch (Exception e) {
statusHandler.handle(Priority.EVENTA, "Failed to get current perspective ID", e);
}
return perspectiveId + "::" + getKey(manager);
}
private static Object getKey(IMenuManager manager) {
Object key = manager;
if (manager.getId() != null) {
@ -215,17 +234,18 @@ public class TearOffMenuListener implements IMenuListener2 {
*/
@Override
public void run() {
final Object key = getPerspectiveKey(manager);
TearOffMenuDialog dialog = new TearOffMenuDialog(menu);
dialog.addListener(SWT.Dispose, new Listener() {
@Override
public void handleEvent(Event event) {
openDialogs.remove(getKey(manager));
openDialogs.remove(key);
manager.remove(ID);
manager.remove(ACTION_ID);
unregister(manager.getItems(), TearOffMenuListener.this);
}
});
openDialogs.add(getKey(manager));
openDialogs.add(key);
register(manager.getItems(), TearOffMenuListener.this);
dialog.open();
}

View file

@ -19,9 +19,12 @@
**/
package com.raytheon.viz.awipstools.ui.action;
import java.util.List;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.VizApp;
import com.raytheon.uf.viz.core.drawables.IDescriptor;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource.ResourceStatus;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.tools.AwipsToolsResourceData;
import com.raytheon.uf.viz.core.rsc.tools.action.AbstractMapToolAction;
@ -35,6 +38,7 @@ import com.raytheon.viz.awipstools.ui.layer.TimeOfArrivalLayer;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 07DEC2007 #496 Eric Babin Initial Creation.
* Apr 12 2013 DR 16032 D. Friedman Make it work in multiple panes.
*
* </pre>
*
@ -45,10 +49,6 @@ import com.raytheon.viz.awipstools.ui.layer.TimeOfArrivalLayer;
public class TimeOfArrivalAction extends
AbstractMapToolAction<TimeOfArrivalLayer> {
private TimeOfArrivalLayer layer = null;
private AwipsToolsResourceData<TimeOfArrivalLayer> data = null;
/*
* (non-Javadoc)
*
@ -57,22 +57,40 @@ public class TimeOfArrivalAction extends
*/
@Override
protected AwipsToolsResourceData<TimeOfArrivalLayer> getResourceData() {
if (data == null) {
data = new AwipsToolsResourceData<TimeOfArrivalLayer>(
return new AwipsToolsResourceData<TimeOfArrivalLayer>(
TimeOfArrivalLayer.NAME, TimeOfArrivalLayer.class);
}
return data;
}
@Override
protected TimeOfArrivalLayer getResource(LoadProperties loadProperties,
IDescriptor descriptor) throws VizException {
if (layer == null || layer.getStatus() == ResourceStatus.DISPOSED) {
layer = super.getResource(loadProperties, descriptor);
} else {
layer.reopenDialog();
}
TimeOfArrivalLayer layer = getExistingResource();
if (layer == null)
return super.getResource(loadProperties, descriptor);
VizApp.runAsync( new Runnable() {
@Override
public void run() {
TimeOfArrivalLayer layer = getExistingResource();
if (layer != null) {
layer.makeEditableAndReopenDialog();
}
}
});
return layer;
}
private TimeOfArrivalLayer getExistingResource() {
IDisplayPane[] panes = getSelectedPanes();
if (panes != null && panes.length > 0) {
List<TimeOfArrivalLayer> layers = null;
layers = panes[0].getDescriptor().getResourceList()
.getResourcesByTypeAsType(TimeOfArrivalLayer.class);
if (layers.size() > 0) {
return layers.get(0);
}
}
return null;
}
}

View file

@ -71,6 +71,7 @@ import com.raytheon.viz.awipstools.common.stormtrack.StormTrackUIManager;
import com.raytheon.viz.awipstools.ui.dialog.TimeOfArrivalDialog;
import com.raytheon.viz.core.rsc.jts.JTSCompiler;
import com.raytheon.viz.ui.VizWorkbenchManager;
import com.raytheon.viz.ui.input.EditableManager;
import com.raytheon.viz.ui.input.InputAdapter;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
@ -98,6 +99,7 @@ import com.vividsolutions.jts.geom.GeometryFactory;
* left-to-right if there is not enough room
* for the text to the left of the point.
* 15Mar2013 15693 mgamazaychikov Added magnification capability.
* Apr 12 2013 DR 16032 D. Friedman Make it work in multiple panes.
* </pre>
*
* @author mschenke
@ -256,7 +258,6 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
this.pdProps.setMaxDisplayWidth(TimeOfArrivalLayer.PD_MAX_WIDTH);
timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
reopenDialog();
leadState = new LeadTimeState();
shell = VizWorkbenchManager.getInstance().getCurrentWindow().getShell();
@ -272,6 +273,7 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
if (container != null) {
container.registerMouseHandler(adapter);
}
reopenDialog();
}
@Override
@ -565,20 +567,20 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
*/
public void reopenDialog() {
// Open the dialog
if (dialog == null || dialog.getShell() == null
|| dialog.getShell().isDisposed()) {
VizApp.runAsync(new Runnable() {
VizApp.runAsync(new Runnable() {
@Override
public void run() {
@Override
public void run() {
if (dialog == null || dialog.getShell() == null
|| dialog.getShell().isDisposed()) {
dialog = new TimeOfArrivalDialog(VizWorkbenchManager
.getInstance().getCurrentWindow().getShell(),
TimeOfArrivalLayer.this);
dialog.setBlockOnOpen(false);
dialog.open();
}
});
}
}
});
}
private void updateLeadTimeState() {
@ -678,4 +680,9 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
}
leadState.changed = false;
}
public void makeEditableAndReopenDialog() {
EditableManager.makeEditable(this, true);
reopenDialog();
}
}

View file

@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@ -80,13 +80,13 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
/**
* Implements common parm manager functionality shared between concrete and mock
* implementations.
*
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 03/26/2008 chammack Split non-mock code from MockParmManager
* 02/23/2012 #346 dgilling Dispose of VCParms from this class's
* 02/23/2012 #346 dgilling Dispose of VCParms from this class's
* dispose method.
* 02/23/2012 #346 dgilling Ensure all Parms are disposed when calling
* dispose method.
@ -101,9 +101,11 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
* 01/22/2013 #1515 dgilling Increase default size of VCModule thread pool
* to decrease UI hang-ups waiting for results.
* 03/20/2013 #1774 randerso Code cleanup
*
* 04/11/2013 16028 ryu Fixed setParmsRemoveISCDeps() to not remove
* modified parms.
*
* </pre>
*
*
* @author chammack
* @version 1.0
*/
@ -419,7 +421,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#dispose()
*/
@Override
@ -491,14 +493,14 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Return the DataManager
*
*
* @return the dataManager
*/
protected abstract DataManager getDataManager();
/*
* (non-Javadoc)
*
*
* @see java.lang.Object#finalize()
*/
@Override
@ -509,7 +511,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Recalculate the system time range using the total time span of all
* displayed parms and their locks
*
*
* @return the system time range
*/
protected TimeRange recalcSystemTimeRange() {
@ -571,7 +573,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.parm.IParmManager#getLockedParms()
*/
@Override
@ -593,7 +595,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.parm.IParmManager#getParm(com.raytheon.viz.
* gfe.core.parm.ParmID)
@ -615,7 +617,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.parm.IParmManager#getUndisplayedParms()
*/
@Override
@ -630,7 +632,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getSelectedParms()
*/
@Override
@ -653,7 +655,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getModifiedParms()
*/
@Override
@ -676,7 +678,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Returns a matching parm * (creates if necessary) for the given expression
* and database id.
*
*
* @param dbid
* the database
* @param exprName
@ -810,7 +812,7 @@ public abstract class AbstractParmManager implements IParmManager {
* Helper function for <code>setParms</code>. Takes the toBeLoaded and
* removeParms lists, calculates non-visible ISC dependencies, and then
* returns the updated lists through the calling arguments.
*
*
* @param toBeLoaded
* @param removeParms
*/
@ -822,7 +824,8 @@ public abstract class AbstractParmManager implements IParmManager {
List<ParmID> depParms = dependentParms(removeList.get(i), true);
for (ParmID pid : depParms) {
int index = pivdIndex(toBeLoaded, pid);
if ((index != -1) && (!toBeLoaded.get(index).isVisible())) {
if ((index != -1) && (!toBeLoaded.get(index).isVisible())
&& (!getParm(toBeLoaded.get(index).getParmID()).isModified())) {
removeList.add(toBeLoaded.get(index).getParmID());
toBeLoaded.remove(index);
}
@ -840,7 +843,7 @@ public abstract class AbstractParmManager implements IParmManager {
* Helper function for <code>setParms</code>. Takes the toBeLoaded,
* addedParms, removeParms, and modParms lists, calculates dependencies, and
* then returns the updated lists through the calling arguments.
*
*
* @param toBeLoaded
* @param addParms
* @param removeParms
@ -935,7 +938,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Actual parm creation mechanism
*
*
* @param pid
* parm id
* @param mutableParm
@ -948,20 +951,20 @@ public abstract class AbstractParmManager implements IParmManager {
boolean mutableParm, boolean displayable) throws GFEServerException;
/**
*
*
* Command to create/remove parms based on ParmID. For additions, the Map
* contains the ParmID and visibility.
*
*
* implementation ---------------------------------------------------------
* Note: addParms, removeParms is modified within this routine, thus they
* are not passed in as const references.
*
*
* Routine converts the ParmIDs into Parms*. Special cases for VCParms,
* since they need to load other parms possibly. Thus the input add and
* remove may not result in the same parms being created and destroyed.
* ------
* ---------------------------------------------------------------------
*
*
* @param addParms
* @param removeParms
*/
@ -1084,7 +1087,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Command to create/remove parms based on ParmID.
*
*
* @param addParms
* the parms to add
* @param removeParms
@ -1098,7 +1101,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#getParmInExpr(java.lang.String,
* boolean, com.raytheon.viz.gfe.core.parm.Parm)
@ -1150,7 +1153,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.parm.IParmManager#getDisplayedParms()
*/
@Override
@ -1171,7 +1174,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#setDisplayedParms(com.raytheon
* .edex.plugin.gfe.db.objects.ParmID[])
@ -1275,7 +1278,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.msgs.IParmIDChangedListener#parmIDChanged(com
* .raytheon.viz.gfe.core.parm.Parm,
@ -1291,7 +1294,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @seecom.raytheon.viz.gfe.core.msgs.IParmInventoryChangedListener#
* parmInventoryChanged(com.raytheon.viz.gfe.core.parm.Parm,
* com.raytheon.uf.common.time.TimeRange)
@ -1315,7 +1318,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.msgs.ILockTableChangedListener#lockTableChanged
* (com.raytheon.viz.gfe.core.parm.Parm,
@ -1333,7 +1336,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addDisplayedParmListChangedListener
* (com.raytheon.viz.gfe.core.msgs.IDisplayedParmListChangedListener)
@ -1346,7 +1349,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeDisplayedParmListChangedListener
* (com.raytheon.viz.gfe.core.msgs.IDisplayedParmListChangedListener)
@ -1359,7 +1362,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addParmListChangedListener(com
* .raytheon.viz.gfe.core.msgs.IParmListChangedListener)
@ -1372,7 +1375,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeParmListChangedListener(
* com.raytheon.viz.gfe.core.msgs.IParmListChangedListener)
@ -1384,7 +1387,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addParmIDChangedListener(com.raytheon
* .viz.gfe.core.msgs.IParmIDChangedListener)
@ -1396,7 +1399,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeParmIDChangedListener(com
* .raytheon.viz.gfe.core.msgs.IParmIDChangedListener)
@ -1408,7 +1411,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addSystemTimeRangeChangedListener
* (com.raytheon.viz.gfe.core.msgs.ISystemTimeRangeChangedListener)
@ -1421,7 +1424,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeSystemTimeRangeChangedListener
* (com.raytheon.viz.gfe.core.msgs.ISystemTimeRangeChangedListener)
@ -1434,7 +1437,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addAvailableSourcesChangedListener
* (com.raytheon.viz.gfe.core.msgs.IAvailableSourcesChangedListener)
@ -1447,7 +1450,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addNewModelAvailableListener(com
* .raytheon.viz.gfe.core.msgs.INewModelAvailableListener)
@ -1459,7 +1462,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeAvailableSourcesChangedListener
* (com.raytheon.viz.gfe.core.msgs.IAvailableSourcesChangedListener)
@ -1472,7 +1475,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeNewModelAvailableListener
* (com.raytheon.viz.gfe.core.msgs.INewModelAvailableListener)
@ -1485,7 +1488,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the displayed parm list changed listener
*
*
* @param parms
* complete list of parms
* @param adds
@ -1512,7 +1515,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the ParmID changed event.
*
*
* @param parm
* The parm which had its ParmID change
* @param newParmId
@ -1535,7 +1538,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the parm list changed listener
*
*
* @param parms
* complete list of parms
* @param adds
@ -1561,7 +1564,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the system time range changed listener
*
*
* @param systemTimeRange
* new system time range
*/
@ -1583,7 +1586,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the available sources changed event.
*
*
* @param inventory
* The complete inventory
* @param deletions
@ -1612,7 +1615,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the new model available event.
*
*
* @param additions
* The DatabaseID of the newly-available model
*/
@ -1633,7 +1636,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Return a list of ParmIDs for a list of Parms
*
*
* @param parms
* @return
*/
@ -1649,7 +1652,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#getParms(com.raytheon.uf.common
* .dataplugin.gfe.db.objects.ParmID[])
@ -1667,7 +1670,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Return a list of Parms for a list of ParmIDs with nulls in place of parms
* that are not loaded.
*
*
* @param parmIDs
* @return
*/
@ -1685,7 +1688,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getAllAvailableParms()
*/
@Override
@ -1701,7 +1704,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#setParmDisplayable(com.raytheon
* .viz.gfe.core.parm.Parm, boolean)
@ -1727,7 +1730,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#deallocateUnusedGrids(int)
*/
@Override
@ -1794,7 +1797,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getProductDB()
*/
@Override
@ -1805,7 +1808,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Filters out a complete list of databaseIDs to those only allowed by the
* dbCatagories in the gfeConfig. Sorts the final list.
*
*
* @param dbIds
* The list of DatabaseIDs to filter
* @return A sorted list of DatabseIDs that are GRID types and match the
@ -1832,7 +1835,7 @@ public abstract class AbstractParmManager implements IParmManager {
* mutable model, plus all other databases identified by the database
* categories specified in the gfeConfig. The databases are filtered by
* projection also, since the GFE can only handle one projection.
*
*
* @return A filtered list of available databases.
*/
private List<DatabaseID> getDatabaseInventory() {
@ -1852,7 +1855,7 @@ public abstract class AbstractParmManager implements IParmManager {
* This function is called when the list of available database has changed.
* The list of available parms is updated based on the list of additions and
* deletions.
*
*
* @param deletions
* The items being removed from the inventory
* @param additions
@ -1886,7 +1889,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#updateModel(com.raytheon.uf.common
* .dataplugin.gfe.db.objects.DatabaseID)
@ -1996,7 +1999,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#deleteTemporaryParms()
*/
@Override
@ -2069,7 +2072,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Returns the Virtual Parm index into vcModules for the given ParmID.
*
*
* @param pid
* ParmID to search for.
* @return The index of the ParmID if it is in vcModules. Else, -1.

View file

@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@ -62,7 +62,7 @@ import com.raytheon.viz.gfe.smarttool.script.SmartToolController;
/**
* Ported from Tool.py
*
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
@ -71,9 +71,10 @@ import com.raytheon.viz.gfe.smarttool.script.SmartToolController;
* Jan 08, 2013 1486 dgilling Support changes to BaseGfePyController.
* 02/14/2013 mnash Change QueryScript to use new Python concurrency
* 02/20/2013 #1597 randerso Added logging to support GFE Performance metrics
*
* 04/10/2013 16028 ryu Check for null seTime in execute()
*
* </pre>
*
*
* @author njensen
* @version 1.0
*/
@ -109,7 +110,7 @@ public class Tool {
/**
* Constructor
*
*
* @param aParmMgr
* the parm manager
* @param aToolName
@ -142,7 +143,7 @@ public class Tool {
/**
* Returns the objects that should be passed to the smart tool in python
*
*
* @param args
* the names of the arguments
* @param gridTimeRange
@ -225,7 +226,7 @@ public class Tool {
/**
* Returns the attribute for a particular parm's name
*
*
* @param arg
* the name of the parm
* @param attrStr
@ -260,7 +261,7 @@ public class Tool {
/**
* Returns the grid data for the specified parameters
*
*
* @param arg
* the name of the parm
* @param mode
@ -309,7 +310,7 @@ public class Tool {
/**
* Returns the grid history corresponding to the parm name and time range
*
*
* @param arg
* the name of the parm
* @param gridTimeRange
@ -349,7 +350,7 @@ public class Tool {
/**
* Returns the grid info corresponding to the parm name and time range
*
*
* @param arg
* the name of the parm
* @param gridTimeRange
@ -383,7 +384,7 @@ public class Tool {
/**
* Executes a smart tool
*
*
* @param toolName
* the name of the tool
* @param inputParm
@ -490,7 +491,8 @@ public class Tool {
final Date timeInfluence;
Date seTime = DataManagerUIFactory.getCurrentInstance()
.getSpatialDisplayManager().getSpatialEditorTime();
if (grids.length == 1 && grid.getGridTime().contains(seTime)) {
if (seTime != null &&
grids.length == 1 && grid.getGridTime().contains(seTime)) {
timeInfluence = seTime;
} else {
timeInfluence = grid.getGridTime().getStart();
@ -579,7 +581,7 @@ public class Tool {
/**
* Executes the numeric smart tool
*
*
* @param parmToEdit
* the parm to edit
* @param first
@ -651,7 +653,7 @@ public class Tool {
/**
* Cleans up a smart tool execution or failure and displays any missing data
* message
*
*
* @param parmToEdit
* the parm to edit
* @param save

View file

@ -78,6 +78,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* ------------ ---------- ----------- --------------------------
* Aug 03, 2010 mnash Initial creation
* MAR 05, 2013 15313 kshresth Added sampling for DMD
* Apr 11, 2013 DR 16030 D. Friedman Fix NPE.
*
* </pre>
*
@ -414,7 +415,7 @@ public class AbstractRadarResource<D extends IDescriptor> extends
displayedData.append("@" + dataMap.get("Azimuth"));
}
if (!dataMap.get("Mnemonic").equalsIgnoreCase("DMD"))
if (!"DMD".equalsIgnoreCase(dataMap.get("Mnemonic")))
{
if (labels.contains(InspectLabels.ICAO)) {
displayedData.append(' ').append(dataMap.get("ICAO"));

View file

@ -27,6 +27,8 @@ import java.util.TimeZone;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
@ -50,7 +52,8 @@ import com.raytheon.viz.ui.dialogs.AwipsCalendar;
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 6, 2012 randerso Initial creation
* Dec 6, 2012 randerso Initial creation
* Apr 9, 2013 #1860 randerso Fix image disposed issued on Windows
*
* </pre>
*
@ -110,9 +113,15 @@ public class DateTimeEntry extends Composite {
Button button = new Button(this, SWT.PUSH);
ImageDescriptor imageDesc = UiPlugin
.getImageDescriptor("icons/calendar.gif");
Image image = imageDesc.createImage();
final Image image = imageDesc.createImage();
button.setImage(image);
image.dispose();
button.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
image.dispose();
}
});
button.addSelectionListener(new SelectionAdapter() {
@Override

View file

@ -167,6 +167,7 @@ import com.vividsolutions.jts.io.WKTReader;
* 04/03/2013 1858 jsanchez Handled creating follow up warnings when created before 0z but issued after 0z.
* 03/13/2013 DR 15942 Qinglu Lin Added code to prevent small area from being toggled on that
* does not meet inclusionPercent/inclusionArea criteria.
* 04/10/2013 DR 16044 D. Friedman Fix NPE in getAllFipsInArea.
* </pre>
*
* @author mschenke
@ -2600,7 +2601,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
Set<String> fipsIds = new HashSet<String>();
for (int n = 0; n < warningArea.getNumGeometries(); ++n) {
Geometry area = warningArea.getGeometryN(n);
fipsIds.add(getFips(((CountyUserData) area.getUserData()).entry));
fipsIds.add(getFips(area));
}
return fipsIds;
}