From 8e03cf0bd930340167d053f9a12f872e873c1325 Mon Sep 17 00:00:00 2001 From: Roger Ferrel Date: Mon, 8 Oct 2012 14:08:00 -0500 Subject: [PATCH] Issue #1248 Added PointChangeListener to BaseadarProductUI. Change-Id: Idf56e60d8544f0f5dc3c3aed7d8a46f10f397f18 Former-commit-id: 20ba59e8f25559dd59cacf3661c55adcdced85e6 [formerly 3ae3a55292c7dc6be84307c2a3e0c8ab93d16e3a] [formerly 20ba59e8f25559dd59cacf3661c55adcdced85e6 [formerly 3ae3a55292c7dc6be84307c2a3e0c8ab93d16e3a] [formerly f3acb4798d5baa1ef018fc0d0728065b6defd5aa [formerly 3f883c0cdad8e9219c10e83cacf1a5ca0000d25d]]] Former-commit-id: f3acb4798d5baa1ef018fc0d0728065b6defd5aa Former-commit-id: f695425f85ffdaeb6b6b5ed1428ac52df1c25b28 [formerly 6a2ad5c59ad700b64443d469ff5e58faa25c3e3e] Former-commit-id: 4b6b6cc851e959d0d00fe40ac0de6021895fd7b9 --- .../products/ui/BaseRadarProductUI.java | 64 +++++++++++++++++-- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java b/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java index f1d0dea438..78dc2deaef 100644 --- a/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java +++ b/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java @@ -70,6 +70,8 @@ import com.raytheon.rcm.products.RadarProduct; import com.raytheon.rcm.products.RadarProduct.Param; import com.raytheon.rcm.products.Usage; import com.raytheon.rcm.request.Request; +import com.raytheon.uf.viz.core.VizApp; +import com.raytheon.uf.viz.points.IPointChangedListener; import com.raytheon.uf.viz.points.PointsDataManager; import com.raytheon.uf.viz.points.data.IPointNode; import com.raytheon.uf.viz.radarapps.core.RadarApps; @@ -95,6 +97,7 @@ import com.raytheon.viz.ui.widgets.MinimumSizeComposite; * converted to abstract class making the * needed methods abstract. * Jul 31, 2012 #875 rferrel Points now group in menu items. + * Oct 04, 2012 #1248 rferrel Added Point change listener. * * * @@ -1176,7 +1179,7 @@ public abstract class BaseRadarProductUI { }); geomCombo = c; } else { - MenuButton mb = new MenuButton(r2); + final MenuButton mb = new MenuButton(r2); mb.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem) e.data; @@ -1186,9 +1189,43 @@ public abstract class BaseRadarProductUI { mb.setMinimumSize(SWT.DEFAULT, SWT.DEFAULT); Menu menu = new Menu(mb); - createMenuItems(menu, null); + MenuItem firstItem = createMenuItems(menu, null); mb.setMenu(menu); + mb.setSelectedItem(firstItem); + + final IPointChangedListener pointChangeListener = new IPointChangedListener() { + + @Override + public void pointChanged() { + VizApp.runAsync(new Runnable() { + + @Override + public void run() { + String name = mb.getSelectedItem().getText(); + Menu menu = new Menu(mb); + MenuItem firstItem = createMenuItems(menu, null); + mb.setMenu(menu); + mb.setSelectedItem(name); + if (mb.getSelectedItem() == null) { + mb.setSelectedItem(firstItem); + onGeomSelected(firstItem.getText()); + } + } + }); + } + }; + + PointsDataManager.getInstance().addPointsChangedListener( + pointChangeListener); geomCombo = mb; + mb.addDisposeListener(new DisposeListener() { + + @Override + public void widgetDisposed(DisposeEvent e) { + PointsDataManager.getInstance() + .removePointsChangedListener(pointChangeListener); + } + }); } azRanLabel = new Label(r2, SWT.LEFT); @@ -1220,10 +1257,11 @@ public abstract class BaseRadarProductUI { setupRow(r, r2, b); } - private void createMenuItems(Menu menu, IPointNode root) { + private MenuItem createMenuItems(Menu menu, IPointNode root) { MenuItem item = null; - for (IPointNode node : PointsDataManager.getInstance().getChildren( - root)) { + MenuItem firstItem = null; + for (IPointNode node : PointsDataManager.getInstance() + .getChildren(root)) { if (node.isGroup()) { if (PointsDataManager.getInstance().getChildren(node).size() == 0) { continue; @@ -1231,13 +1269,20 @@ public abstract class BaseRadarProductUI { Menu childMenu = new Menu(menu); item = new MenuItem(menu, SWT.CASCADE); item.setMenu(childMenu); - createMenuItems(childMenu, node); + MenuItem it = createMenuItems(childMenu, node); + if (firstItem == null) { + firstItem = it; + } } else { item = new MenuItem(menu, SWT.PUSH); + if (firstItem == null) { + firstItem = item; + } } item.setText(node.getName()); item.setData(node); } + return firstItem; } protected void onLoadBaselines() { @@ -2003,7 +2048,14 @@ public abstract class BaseRadarProductUI { } } else { MenuButton mb = (MenuButton) geomCombo; + + // Check to see if desired point still exists. + MenuItem item = mb.getSelectedItem(); mb.setSelectedItem(desiredGeom); + if (mb.getSelectedItem() == null) { + mb.setSelectedItem(item); + onGeomSelected(item.getText()); + } } }