From b151a868963c1a6956e0cc4f4cd91b62451223ed Mon Sep 17 00:00:00 2001 From: David Gillingham Date: Fri, 6 May 2016 16:32:29 -0500 Subject: [PATCH] Omaha #5483 - Fix layout of hydro Toggle Time Series dialog. Change-Id: I1e3af9de34dc85c3671935787f25d8a9d84ec2d3 Former-commit-id: 0c3c30902be5dd0c3da093b87de97b0539e806ad --- .../timeseries/TimeSeriesDisplayCanvas.java | 231 ++++++++++-------- .../hydro/timeseries/ToggleTimeSeriesDlg.java | 165 +++++++------ 2 files changed, 214 insertions(+), 182 deletions(-) diff --git a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDisplayCanvas.java b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDisplayCanvas.java index 132d3432a5..9a63559b5c 100644 --- a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDisplayCanvas.java +++ b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDisplayCanvas.java @@ -42,6 +42,7 @@ import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; @@ -142,6 +143,7 @@ import com.raytheon.viz.hydrocommon.util.DbUtils; * 05 Sep 2013 #2332 lvenable Fixed memory leaks. * 24 Jan 2013 15959 lbousaidi Swap the corner points of the bounding box when zooming. * 22 Oct 2015 13736 xwei Fixed missing data after zoom, edit, & reset problem + * 06 May 2016 5483 dgilling Change parameter type for handleSelection. * @author lvenable * @version 1.0 * @@ -536,9 +538,9 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements if (td.isForecast()) { String traceKey = td.getLid() + td.getPe() + td.getTs() + td.getDur() + td.getExtremum(); - if (uniqueList.contains(traceKey)) + if (uniqueList.contains(traceKey)) { continue; - else { + } else { uniqueList.add(traceKey); } @@ -976,7 +978,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements GRAPHBORDER - fontHeight); } } else { - if (td.isTraceOn()) + if (td.isTraceOn()) { gc.drawString(dataString + " min=" + twoDecimalFormat.format(min) + " " + graphFormat.format(dateMin) + " max=" @@ -986,6 +988,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements + (dataString.length() * fontAveWidth * j), GRAPHBORDER - fontHeight); + } } } else { if (td.isTraceOn()) { @@ -997,7 +1000,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements index += (dataString.length() + 2) * fontAveWidth; - } else + } else { gc.drawString(dataString + " min=" + twoDecimalFormat.format(min) + " " + graphFormat.format(dateMin) + " max=" @@ -1007,6 +1010,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements + (dataString.length() * fontAveWidth * j), GRAPHBORDER - fontHeight); + } } } @@ -1136,42 +1140,45 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements td = gd.getTraceData(i); if (td != null && td.isTraceOn()) { TimeSeriesPoint[] points = null; - TimeSeriesPoint[] pointsZoomed = null; - + TimeSeriesPoint[] pointsZoomed = null; + if (zoomed) { points = td.getTsData(); - pointsZoomed = td.getZoomedTsData(); + pointsZoomed = td.getZoomedTsData(); } else { points = td.getTsData(); } - if ( points != null) { - - List pointListZoomed = new ArrayList(); - List pointList = new ArrayList(); - + if (points != null) { + + List pointListZoomed = new ArrayList(); + List pointList = new ArrayList(); + /* Delete the specified point */ if ((deleteList.size() > 0) && (i == selectedTraceId)) { - - for (int j = 0; j < points.length; j++) { + + for (int j = 0; j < points.length; j++) { if (!deleteList.contains(j)) { - pointList.add(points[j]); - } - } - td.setTsData(pointList.toArray(new TimeSeriesPoint[pointList.size()])); - - if ( zoomed && pointsZoomed != null ) { - - for (int j = 0; j < pointsZoomed.length; j++) { - if (!deleteList.contains(j)) { - pointListZoomed.add(pointsZoomed[j]); - } + pointList.add(points[j]); } - td.setZoomedTsData(pointListZoomed.toArray(new TimeSeriesPoint[pointListZoomed.size()])); } - + td.setTsData(pointList + .toArray(new TimeSeriesPoint[pointList.size()])); + + if (zoomed && pointsZoomed != null) { + + for (int j = 0; j < pointsZoomed.length; j++) { + if (!deleteList.contains(j)) { + pointListZoomed.add(pointsZoomed[j]); + } + } + td.setZoomedTsData(pointListZoomed + .toArray(new TimeSeriesPoint[pointListZoomed + .size()])); + } + deleteIndex = HydroConstants.MISSING_VALUE; - deleteList.clear(); + deleteList.clear(); } /* Set missing */ @@ -1181,8 +1188,9 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements pointList.add(points[j]); } } - td.setTsData(pointList.toArray(new TimeSeriesPoint[pointList.size()])); - + td.setTsData(pointList + .toArray(new TimeSeriesPoint[pointList.size()])); + setMissingIndex = HydroConstants.MISSING_VALUE; setMissingList.clear(); } @@ -1219,40 +1227,39 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements .toArray(new TimeSeriesPoint[pointList.size()])); insertedPoint = null; } - + TimeSeriesPoint[] pointArray = null; if (zoomed) { - pointArray = td.getZoomedTsData(); - }else{ - pointArray = td.getTsData(); + pointArray = td.getZoomedTsData(); + } else { + pointArray = td.getTsData(); } - + if (pointArray != null) { - for (int j = 0; j < pointArray.length; j++) { - if (pointArray[j] != null) { - if (pointArray[j].getY() < yLowest) { - yLowest = pointArray[j].getY(); - minDate = pointArray[j].getX(); + for (int j = 0; j < pointArray.length; j++) { + if (pointArray[j] != null) { + if (pointArray[j].getY() < yLowest) { + yLowest = pointArray[j].getY(); + minDate = pointArray[j].getX(); - // Set the lowest ymin of the graph - if (gd.getYmin() > yLowest) { - gd.setYmin(yLowest); - } - } - if (pointArray[j].getY() > yHighest) { - yHighest = pointArray[j].getY(); - maxDate = pointArray[j].getX(); - - // Set the highest ymax of the graph - if (gd.getYmax() < yHighest) { - gd.setYmax(yHighest); - } + // Set the lowest ymin of the graph + if (gd.getYmin() > yLowest) { + gd.setYmin(yLowest); } } - } // end for - } - - + if (pointArray[j].getY() > yHighest) { + yHighest = pointArray[j].getY(); + maxDate = pointArray[j].getX(); + + // Set the highest ymax of the graph + if (gd.getYmax() < yHighest) { + gd.setYmax(yHighest); + } + } + } + } // end for + } + } } } // end for @@ -1265,12 +1272,12 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements } Date xMin = pixel2x(gd, rubberBandX1 - GRAPHBORDER_LEFT); Date xMax = pixel2x(gd, rubberBandX2 - GRAPHBORDER_LEFT); - //Swap the corner points of the bounding box when zooming + // Swap the corner points of the bounding box when zooming if (xMin.after(xMax)) { - Date xtmp; - xtmp= xMin; - xMin=xMax; - xMax=xtmp; + Date xtmp; + xtmp = xMin; + xMin = xMax; + xMax = xtmp; } gd.setXMin(xMin); gd.setXMax(xMax); @@ -1286,12 +1293,12 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements if (ymin < gd.getYmin()) { ymin = gd.getYmin(); } - //Swap the corner points of the bounding box when zooming + // Swap the corner points of the bounding box when zooming if (ymin > ymax) { - double ytmp; - ytmp= ymin; - ymin=ymax; - ymax=ytmp; + double ytmp; + ytmp = ymin; + ymin = ymax; + ymax = ytmp; } gd.setYmin(ymin); gd.setYmax(ymax); @@ -1489,7 +1496,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements statusHandler.handle(Priority.ERROR, "Error retrieving graph data", e); } - + td.setTsData(points.toArray(new TimeSeriesPoint[points.size()])); td.setPreviousTsData(pointsbak.toArray(new TimeSeriesPoint[pointsbak @@ -1540,8 +1547,8 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements ttsd.open(); } - protected void handleSelection(Event event) { - Button item = (Button) event.widget; + protected void handleSelection(SelectionEvent e) { + Button item = (Button) e.widget; TraceData trace = (TraceData) item.getData(); trace.setTraceOn(!trace.isTraceOn()); if (trace.isTraceOn()) { @@ -1876,10 +1883,11 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements double u = ((x - x1) * p2X + (y - y1) * p2Y) / something; - if (u > 1) + if (u > 1) { u = 1; - else if (u < 0) + } else if (u < 0) { u = 0; + } double xx = x1 + u * p2X; double yy = y1 + u * p2Y; @@ -1898,8 +1906,9 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements } } - if (distance < 20) // if less than 20 pixels away + if (distance < 20) { return choosingTrace; + } return -999; } @@ -1955,12 +1964,13 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements } } } else if (traceSelected && dialog.isDelete()) { - if (precipPE) { + if (precipPE) { List ppl = precipPointList.get(selectedTraceId); for (int i = 0; i < ppl.size(); i++) { if (ppl.get(i).contains(e.x, e.y)) { deleteIndex = i; - deleteList.add( getZoomOffset(selectedTraceId) + deleteIndex ); + deleteList.add(getZoomOffset(selectedTraceId) + + deleteIndex); } } } else { @@ -1968,20 +1978,21 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements for (int i = 0; i < prl.size(); i++) { if (prl.get(i).contains(e.x, e.y)) { deleteIndex = i; - deleteList.add( getZoomOffset(selectedTraceId) + deleteIndex ); + deleteList.add(getZoomOffset(selectedTraceId) + + deleteIndex); break; } } } TraceData td = graphData.getTraceData(selectedTraceId); - - TimeSeriesPoint[] points = null; - if (zoomed) { - points = td.getZoomedTsData(); - } else { - points = td.getTsData(); - } - + + TimeSeriesPoint[] points = null; + if (zoomed) { + points = td.getZoomedTsData(); + } else { + points = td.getTsData(); + } + for (int j = 0; j < points.length; j++) { if (j == deleteIndex) { @@ -1998,7 +2009,8 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements for (int i = 0; i < ppl.size(); i++) { if (ppl.get(i).contains(e.x, e.y)) { setMissingIndex = i; - setMissingList.add(getZoomOffset(selectedTraceId) + setMissingIndex); + setMissingList.add(getZoomOffset(selectedTraceId) + + setMissingIndex); break; } } @@ -2007,7 +2019,8 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements for (int i = 0; i < prl.size(); i++) { if (prl.get(i).contains(e.x, e.y)) { setMissingIndex = i; - setMissingList.add(getZoomOffset(selectedTraceId) + setMissingIndex); + setMissingList.add(getZoomOffset(selectedTraceId) + + setMissingIndex); break; } } @@ -2059,7 +2072,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements * Mouse Event */ private void handleMouseUpEvent(MouseEvent e) { - mouseDown = false; + mouseDown = false; /* Null the point string or the last location stays displayed */ pointString = null; @@ -2080,7 +2093,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements dataPts[selectionIndex * 2 + 1] = e.y; graphData.getTraceData(selectedTraceId).setLineData(dataPts); - + setEditData(e.y); pointSelected = false; getAgain = false; @@ -2123,38 +2136,39 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements } dialog.addDeletePoint(data); - deleteList.add( getZoomOffset(selectedTraceId) + i ); + deleteList.add(getZoomOffset(selectedTraceId) + i); } } deleteRect = null; - } else if (traceSelected && dialog.isSetMissing() && (setMissingRect != null) ) { - + } else if (traceSelected && dialog.isSetMissing() + && (setMissingRect != null)) { + TraceData td = graphData.getTraces().get(selectedTraceId); - TimeSeriesPoint[] pointArray = null; + TimeSeriesPoint[] pointArray = null; if (!zoomed) { pointArray = td.getTsData(); } else { pointArray = td.getZoomedTsData(); } - + for (int i = 0; i < pointArray.length; i++) { if (setMissingRect.contains(pointArray[i].getPixelX(), pointArray[i].getPixelY())) { ForecastData data = createPoint(td, pointArray[i]); data.setValue(new Double(HydroConstants.MISSING_VALUE)); dialog.addEditPoint(data); - setMissingList.add( getZoomOffset(selectedTraceId) + i ); + setMissingList.add(getZoomOffset(selectedTraceId) + i); } } setMissingRect = null; } - + /* Get the data traces */ traceArray = graphData.getTraces(); - + // Set true so new regions will be created createRegions = true; @@ -2170,13 +2184,13 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements setZoomed(false); dialog.setZoomAction(false); traceArray = graphData.getTraces(); - + // Set true so new regions will be created createRegions = true; setCursor(null); redraw(); - + return; } @@ -2202,18 +2216,18 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements graphData.getTraceData(selectedTraceId).setTsData(pa); } - + // set the value back into the list pa[selectionIndex] = tsp; ForecastData data = createPoint(td, tsp); dialog.addEditPoint(data); if (zoomed) { - graphData.getTraceData(selectedTraceId).setZoomedTsData(pa); + graphData.getTraceData(selectedTraceId).setZoomedTsData(pa); } else { - graphData.getTraceData(selectedTraceId).setTsData(pa); + graphData.getTraceData(selectedTraceId).setTsData(pa); } - } + } /** * Make the regions around the lines and points @@ -2267,8 +2281,9 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements ia[5] = y2 + (y2 - y1) / 5; } else if (y2 < y1) { ia[5] = y2 - (y1 - y2) / 5; - } else + } else { ia[5] = y2 + 10; + } ia[6] = x1; ia[7] = y1 + dy; @@ -2853,14 +2868,14 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements public void setZoomed(boolean zoomed) { this.zoomed = zoomed; } - + private int getZoomOffset(int pSelectedTraceId) { - - if (zoomed){ - TraceData td = graphData.getTraceData(pSelectedTraceId); + + if (zoomed) { + TraceData td = graphData.getTraceData(pSelectedTraceId); return td.getZoomIndexOffset(); } - + return 0; } } diff --git a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/ToggleTimeSeriesDlg.java b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/ToggleTimeSeriesDlg.java index d602cffeba..e13f1a9d88 100644 --- a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/ToggleTimeSeriesDlg.java +++ b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/ToggleTimeSeriesDlg.java @@ -19,99 +19,116 @@ **/ package com.raytheon.viz.hydro.timeseries; -import java.util.List; +import java.util.Collection; import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import com.raytheon.viz.hydro.CaveHydroSWTDialog; import com.raytheon.viz.hydro.timeseries.util.TraceData; +import com.raytheon.viz.ui.dialogs.ICloseCallback; /** - * This class is the popup menu when right/middle click on the Time Series Display. - * There should be only one toggle time series dialog at a time. + * This class is the popup menu when right/middle click on the Time Series + * Display. There should be only one toggle time series dialog at a time. * *
+ * 
  * SOFTWARE HISTORY
- * Date       Ticket# Engineer    Description
- * ---------- ------- ----------- --------------------------
- * 1/16/2013  15695   wkwock      Initial                         
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Jan 16, 2013  15695     wkwock      Initial creation
+ * May 06, 2016  #5483     dgilling    Code-cleanup.
+ * 
+ * 
+ * * @author wkwock * @version 1.0 - * */ public class ToggleTimeSeriesDlg extends CaveHydroSWTDialog { - private static final String DLG_TITLE="Toggle Time Series"; - private List traceList=null; - private TimeSeriesDisplayCanvas tsDisCanvas=null; - private static ToggleTimeSeriesDlg oneTTSD=null; //singleton - - public static ToggleTimeSeriesDlg getInstance(Shell parentShell,List traceLst, TimeSeriesDisplayCanvas tsdc) { - if (oneTTSD!=null){ - oneTTSD.close(); - oneTTSD.disposed(); - } - oneTTSD = new ToggleTimeSeriesDlg(parentShell, traceLst, tsdc) ; - return oneTTSD; - } - - private ToggleTimeSeriesDlg(Shell parentShell,List traceLst, TimeSeriesDisplayCanvas tsdc) { - super(parentShell); - this.setText(DLG_TITLE); - - this.traceList=traceLst; - this.tsDisCanvas=tsdc; - } - @Override - protected void initializeComponents(Shell shell) { - Composite beginningTimeComp = new Composite(shell, SWT.NONE); - RowLayout topLabelCompRl = new RowLayout(); - beginningTimeComp.setLayout(topLabelCompRl); + private static final String DLG_TITLE = "Toggle Time Series"; - Button[] checkBtns = new Button[traceList.size()]; - - for (int i = 0; i < traceList.size(); i++) { - TraceData td = traceList.get(i); - checkBtns[i] = new Button(shell, SWT.CHECK); - String s = null; - if (td.isForecast()) { - s = this.tsDisCanvas.getFcstPEDTSE(td); - } else { - s = this.tsDisCanvas.getPEDTSE(td); - } - if (td.getLineData()!=null && td.getLineData().length>0) { - if (td.isTraceOn()) - checkBtns[i].setSelection(true); - else - checkBtns[i].setSelection(false); - } else { - checkBtns[i].setSelection(false); - s = s.concat("" + "NO DATA"); - } + private static ToggleTimeSeriesDlg dialogSingleton = null; - checkBtns[i].setText(s); - checkBtns[i].setLocation(50*i,250); - checkBtns[i].pack(); - checkBtns[i].setData(td); - - - checkBtns[i].addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - handleSelection(event); - } - }); - } - // We need to make the menu visible - beginningTimeComp.setVisible(true); - } + private final Collection traceList; - private void handleSelection(Event event) { - this.tsDisCanvas.handleSelection(event); - } + private final TimeSeriesDisplayCanvas tsDisCanvas; + + public static ToggleTimeSeriesDlg getInstance(Shell parentShell, + Collection traceLst, TimeSeriesDisplayCanvas tsdc) { + if (dialogSingleton != null) { + dialogSingleton.close(); + dialogSingleton.setCloseCallback(new ICloseCallback() { + + @Override + public void dialogClosed(Object returnValue) { + dialogSingleton = null; + } + }); + } + dialogSingleton = new ToggleTimeSeriesDlg(parentShell, traceLst, tsdc); + return dialogSingleton; + } + + /** + * @param parentShell + * @param traceLst + * @param tsdc + */ + private ToggleTimeSeriesDlg(Shell parentShell, + Collection traceLst, TimeSeriesDisplayCanvas tsdc) { + super(parentShell, SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.NONE); + setText(DLG_TITLE); + + this.traceList = traceLst; + this.tsDisCanvas = tsdc; + } + + @Override + protected void initializeComponents(Shell shell) { + Composite beginningTimeComp = new Composite(shell, SWT.NONE); + beginningTimeComp.setLayout(new GridLayout(1, false)); + GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); + gd.minimumWidth = getDisplay().getDPI().x * 3; + beginningTimeComp.setLayoutData(gd); + + for (TraceData td : traceList) { + Button checkBox = new Button(beginningTimeComp, SWT.CHECK); + checkBox.setData(td); + + StringBuilder sb = new StringBuilder(); + if (td.isForecast()) { + sb.append(tsDisCanvas.getFcstPEDTSE(td)); + } else { + sb.append(tsDisCanvas.getPEDTSE(td)); + } + if ((td.getLineData() != null) && (td.getLineData().length > 0)) { + checkBox.setSelection(td.isTraceOn()); + } else { + checkBox.setSelection(false); + sb.append("NO DATA"); + } + checkBox.setText(sb.toString()); + + checkBox.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + handleSelection(e); + } + }); + } + } + + private void handleSelection(SelectionEvent e) { + this.tsDisCanvas.handleSelection(e); + } }