Issue #2088 changes for non-blocking RatingCurveDlg, FindReplaceDlg and TextEditorDlg.

Change-Id: I8d651254e862a45c1dad33c0d4991b29f1611828

Former-commit-id: 659a8f37ed [formerly 5884bb5692] [formerly d620283c3b] [formerly 659a8f37ed [formerly 5884bb5692] [formerly d620283c3b] [formerly 3eacead9bb [formerly d620283c3b [formerly d71b87606a93f744984f45aec8887dbc0052bb4e]]]]
Former-commit-id: 3eacead9bb
Former-commit-id: 5ee2faff34 [formerly 19ef062429] [formerly a018799df11c533f6ed97b64c91dc8cf9e42b7ea [formerly c556150c27]]
Former-commit-id: 3094ae8920f7ff3f764f041032c2dd5eff0c8ec4 [formerly a0b46a31ba]
Former-commit-id: adec97370a
This commit is contained in:
Roger Ferrel 2013-07-16 10:20:50 -05:00
parent 165ad4e74e
commit 36347f3704
9 changed files with 485 additions and 355 deletions

View file

@ -42,6 +42,7 @@ import com.raytheon.viz.hydrocommon.texteditor.TextEditorDlg;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Feb 18, 2010 2635 mpduff Initial creation
* Jul 16, 2013 2088 rferrel Changes for non-blocking TextEditorDlg.
*
* </pre>
*
@ -53,16 +54,22 @@ public class EditLocationShiftAction extends AbstractHandler {
/** The Location Shift Config file */
private static final String LOCATION_SHIFT_CONFIG = "hydro/config/pdc_loc_shift.txt";
/** Allow single instance of editor. */
private TextEditorDlg textDlg;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell();
IPathManager pm = PathManagerFactory.getPathManager();
File file = pm.getStaticFile(LOCATION_SHIFT_CONFIG);
TextEditorDlg textDlg = null;
if (file != null) {
textDlg = new TextEditorDlg(shell, false, file);
textDlg.open();
if (textDlg == null || textDlg.isDisposed()) {
textDlg = new TextEditorDlg(shell, false, file);
textDlg.open();
} else {
textDlg.bringToTop();
}
} else {
MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);

View file

@ -22,6 +22,9 @@
*/
package com.raytheon.viz.hydro.ratingcurve;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
@ -30,6 +33,7 @@ import org.eclipse.ui.PlatformUI;
import com.raytheon.viz.hydrocommon.HydroDisplayManager;
import com.raytheon.viz.hydrocommon.ratingcurve.RatingCurveDlg;
import com.raytheon.viz.ui.dialogs.ICloseCallback;
/**
* Action for unimplemented features. To be used temporarily until final
@ -43,6 +47,7 @@ import com.raytheon.viz.hydrocommon.ratingcurve.RatingCurveDlg;
* ------------ ---------- ----------- --------------------------
* 6/27/06 lvenable Initial Creation.
* 24 Nov 2008 1628 dhladky updated.
* 15 Jul 2013 2088 rferrel Changes for non-blocking RatingCurveDlg.
*
* </pre>
*
@ -50,6 +55,8 @@ import com.raytheon.viz.hydrocommon.ratingcurve.RatingCurveDlg;
*
*/
public class RatingCurveAction extends AbstractHandler {
private Map<String, RatingCurveDlg> ratingCurveDlgMap = new HashMap<String, RatingCurveDlg>();
public Object execute(ExecutionEvent arg0) throws ExecutionException {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell();
@ -57,16 +64,33 @@ public class RatingCurveAction extends AbstractHandler {
HydroDisplayManager manager = HydroDisplayManager.getInstance();
if (manager.isCurrentLidSelected(shell)) {
String lid = manager.getCurrentLid();
String name = manager.getCurrentData().getName();
RatingCurveDlg ratingCurveDlg = ratingCurveDlgMap.get(lid);
String displayString = " - "
+ lid
+ ((name != null && name.compareTo("") != 0) ? " - " + name
: "");
if (ratingCurveDlg == null || ratingCurveDlg.isDisposed()) {
String name = manager.getCurrentData().getName();
StringBuilder displayString = new StringBuilder(" - ");
displayString.append(lid);
if (name != null && name.length() > 0) {
displayString.append(" - ").append(name);
}
RatingCurveDlg ratingCurveDlg = new RatingCurveDlg(shell, lid,
displayString, false);
ratingCurveDlg.open();
ratingCurveDlg = new RatingCurveDlg(shell, lid,
displayString.toString(), false);
ratingCurveDlg.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue instanceof String) {
String lid = returnValue.toString();
ratingCurveDlgMap.remove(lid);
}
}
});
ratingCurveDlg.open();
ratingCurveDlgMap.put(lid, ratingCurveDlg);
} else {
ratingCurveDlg.bringToTop();
}
}
return null;

View file

@ -128,6 +128,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* Code clean up for non-blocking dialog.
* Feb 27,2013 1790 rferrel Bug fix for non-blocking dialogs.
* Jun 07, 2013 1981 mpduff Set user's id on the OUPRequest as it is now protected.
* Jul 16, 2013 2088 rferrel Changes for non-blocking TextEditorDlg.
*
* </pre>
*
@ -997,7 +998,6 @@ public class TabularTimeSeriesDlg extends CaveSWTDialog implements
@Override
public void widgetSelected(SelectionEvent event) {
tabularShefEncode();
// notYetImplemented();
}
});
@ -3012,7 +3012,8 @@ public class TabularTimeSeriesDlg extends CaveSWTDialog implements
}
out.close();
} catch (IOException e) {
statusHandler.handle(Priority.PROBLEM, "", e);
statusHandler.handle(Priority.PROBLEM,
"Unable to create shef file: ", e);
showMessage(shell, SWT.ERROR | SWT.OK, "Unable to Save File",
"File: " + SHEF_FILE_NAME + "." + getPid()
+ "\nUser does NOT have write permission.");
@ -3026,8 +3027,12 @@ public class TabularTimeSeriesDlg extends CaveSWTDialog implements
if ((shefFileName != null) && (shefFileName.length() > 0)) {
File shefFile = new File(shefFileName);
if (shefFile.exists()) {
editor = new TextEditorDlg(shell, false, shefFile);
editor.open();
if (editor == null || editor.isDisposed()) {
editor = new TextEditorDlg(shell, false, shefFile);
editor.open();
} else {
editor.bringToTop();
}
} else {
showMessage(shell, SWT.OK, "Unable to Open File",
"Unable to open file:\n" + SHEF_FILE_NAME + "."

View file

@ -165,6 +165,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
* Changes for non-blocking DataSourcesDlg.
* Changes for non-blocking ImpactStatementDlg.
* Changes for non-blocking LowWaterStatementDlg.
* Changes for non-blocking RatingCurveDlg.
*
* </pre>
*
@ -352,6 +353,11 @@ public class HydroBaseDlg extends CaveSWTDialog implements IGetSortType,
*/
private final Map<String, LowWaterStatementDlg> lowWaterStmntDlgMap = new HashMap<String, LowWaterStatementDlg>();
/**
* Allow one instance per station.
*/
private final Map<String, RatingCurveDlg> ratingCurveDlgMap = new HashMap<String, RatingCurveDlg>();
/**
* Flood category menu item.
*/
@ -938,10 +944,7 @@ public class HydroBaseDlg extends CaveSWTDialog implements IGetSortType,
ratingCurveMI.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
RatingCurveDlg ratingCurveDlg = new RatingCurveDlg(shell,
getStationLid(), getStationAndName(), true);
ratingCurveDlg.open();
handleRatingCurveDlg();
}
});
riverGageMenuItems.add(ratingCurveMI);
@ -1218,6 +1221,33 @@ public class HydroBaseDlg extends CaveSWTDialog implements IGetSortType,
}
}
/**
* Display Rating Curve Dialog for selected station.
*/
private void handleRatingCurveDlg() {
String lid = getStationLid();
RatingCurveDlg ratingCurveDlg = ratingCurveDlgMap.get(lid);
if (ratingCurveDlg == null || ratingCurveDlg.isDisposed()) {
ratingCurveDlg = new RatingCurveDlg(shell, lid,
getStationAndName(), true);
ratingCurveDlg.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue instanceof String) {
String lid = returnValue.toString();
ratingCurveDlgMap.remove(lid);
}
}
});
ratingCurveDlg.open();
ratingCurveDlgMap.put(lid, ratingCurveDlg);
} else {
ratingCurveDlg.bringToTop();
}
}
/**
* Create the Reservoir menu.
*

View file

@ -28,12 +28,13 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@ -62,6 +63,7 @@ import com.raytheon.viz.hydrocommon.HydroConstants.ArealTypeSelection;
import com.raytheon.viz.hydrocommon.texteditor.TextEditorDlg;
import com.raytheon.viz.hydrocommon.whfslib.GeoUtil;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
import com.raytheon.viz.ui.dialogs.ICloseCallback;
import com.vividsolutions.jts.geom.Coordinate;
/**
@ -74,6 +76,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* 02 Sep 2008 lvenable Initial creation.
* 09 Sep 2009 2772 mpduff Implemented Dialog.
* 16 Apr 2013 1790 rferrel Made dialog non-blocking.
* 16 Jul 2013 2088 rferrel Changes for non-blocking TextEditorDlg.
*
* </pre>
*
@ -147,9 +150,8 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
/** Log file open flag */
private boolean logFileOpen = false;
private Cursor waitCursor = null;
private Cursor arrowCursor = null;
/** Allow single instance of editor for a given file. */
private final Map<File, TextEditorDlg> textEditorDlgMap = new HashMap<File, TextEditorDlg>();
/**
* Constructor.
@ -160,9 +162,6 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
public ArealDefinitionsDlg(Shell parent) {
super(parent, SWT.DIALOG_TRIM, CAVE.DO_NOT_BLOCK);
setText("Areal Definitions");
waitCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_WAIT);
arrowCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_ARROW);
}
/*
@ -335,8 +334,24 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
public void widgetSelected(SelectionEvent event) {
File f = getAreaFilename();
if (f != null) {
TextEditorDlg teDlg = new TextEditorDlg(shell, false, f);
teDlg.open();
TextEditorDlg teDlg = textEditorDlgMap.get(f);
if (teDlg == null || teDlg.isDisposed()) {
teDlg = new TextEditorDlg(shell, false, f);
teDlg.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue instanceof File) {
File f = (File) returnValue;
textEditorDlgMap.remove(f);
}
}
});
teDlg.open();
textEditorDlgMap.put(f, teDlg);
} else {
teDlg.bringToTop();
}
}
}
});
@ -444,14 +459,14 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
}
private void handleImport() {
shell.setCursor(waitCursor);
shell.setCursor(shell.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
File importFile = getAreaFilename();
/*
* if the file was not accessible don't continue with the import
*/
if (importFile == null) {
shell.setCursor(arrowCursor);
shell.setCursor(null);
return;
}
@ -497,7 +512,7 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
}
}
shell.setCursor(arrowCursor);
shell.setCursor(null);
}
/**
@ -563,8 +578,24 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
File f = getLogFilename();
if (f.exists()) {
TextEditorDlg ted = new TextEditorDlg(shell, true, f);
ted.open();
TextEditorDlg ted = textEditorDlgMap.get(f);
if (ted == null || ted.isDisposed()) {
ted = new TextEditorDlg(shell, true, f);
ted.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue instanceof File) {
File f = (File) returnValue;
textEditorDlgMap.remove(f);
}
}
});
ted.open();
textEditorDlgMap.put(f, ted);
} else {
ted.bringToTop();
}
} else {
MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
mb.setText("File Not Found");
@ -852,11 +883,9 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
return;
}
int numBlock = 0;
for (GeoAreaData data : geoDataList) {
/* load the data into the database if good data */
if (data.isSaveDataBlock()) {
numBlock++;
try {
int status = dman.putGeoArea(data);
if (status < 0) {
@ -926,11 +955,9 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
*/
private ArrayList<Coordinate> getPointsFromArea(GeoAreaData data) {
ArrayList<Coordinate> points = new ArrayList<Coordinate>();
int pointCount = 0;
/* init the first point */
Coordinate coord = new Coordinate(data.getLon()[0], data.getLat()[0]);
pointCount++;
points.add(coord);
double[] lat = data.getLat();
double[] lon = data.getLon();
@ -945,7 +972,6 @@ public class ArealDefinitionsDlg extends CaveSWTDialog {
if ((lat[i] != lat[i - 1]) || (lon[i] != lon[i - 1])) {
coord = new Coordinate(lon[i], lat[i]);
points.add(coord);
pointCount++;
}
}

View file

@ -19,7 +19,7 @@
**/
package com.raytheon.viz.hydrocommon.ratingcurve;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
@ -43,6 +43,7 @@ import org.eclipse.swt.widgets.Composite;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 8, 2008 lvenable Initial creation
* Jul 15, 2013 2088 rferrel Code clean part of non-blocking dialogs.
*
* </pre>
*
@ -54,7 +55,7 @@ public class RatingCurveCanvasComp extends Canvas {
* Parent composite.
*/
private Composite parent;
/**
* Reference back to parent dialog.
*/
@ -123,8 +124,8 @@ public class RatingCurveCanvasComp extends Canvas {
/**
* Minimum stage value in feet.
*/
private double minStageFeet = 0.0;
private double minStageFeet = 0.0;
/**
* Maximum flow KCFS value.
*/
@ -134,10 +135,11 @@ public class RatingCurveCanvasComp extends Canvas {
* Minimum flow KCFS value.
*/
private double minFlowKcfs = 0.0;
/**
* Divisor for the flow value.
*/
private double FLOW_DIVISOR = 10000.0;
private double FLOW_DIVISOR = 10000.0;
/**
* Flood value.
@ -152,7 +154,7 @@ public class RatingCurveCanvasComp extends Canvas {
/**
* Array of curve data.
*/
private ArrayList<RatingCurveData> curveDataArray;
private List<RatingCurveData> curveDataArray;
/**
* Number of hashes on the vertical graph line.
@ -163,9 +165,9 @@ public class RatingCurveCanvasComp extends Canvas {
* Maximum stage feet label value.
*/
int maxStageFeetLabelVal = 0;
private double minStageFeetLabelVal = 0;
/**
* Number of hashes on the horizontal graph line.
*/
@ -210,7 +212,7 @@ public class RatingCurveCanvasComp extends Canvas {
* Current Y location of mouse pointer.
*/
int currentY;
/**
* Shift amount
*/
@ -229,7 +231,7 @@ public class RatingCurveCanvasComp extends Canvas {
* Record value.
*/
public RatingCurveCanvasComp(Composite parent, RatingCurveDlg parentDlg,
ArrayList<RatingCurveData> curveDataArray, double floodVal,
List<RatingCurveData> curveDataArray, double floodVal,
double recordDbl, double shiftAmount) {
super(parent, SWT.DOUBLE_BUFFERED);
@ -252,7 +254,7 @@ public class RatingCurveCanvasComp extends Canvas {
* @param floodVal
* @param recordDbl
*/
public void updateCurveData(ArrayList<RatingCurveData> curveDataArray,
public void updateCurveData(List<RatingCurveData> curveDataArray,
double floodVal, double recordDbl, double shiftAmount) {
floodValDbl = floodVal;
recordValDbl = recordDbl;
@ -330,7 +332,6 @@ public class RatingCurveCanvasComp extends Canvas {
maxFlowKcfs = 0.0;
minStageFeet = 0.0;
minFlowKcfs = 0.0;
if (curveDataArray != null) {
for (RatingCurveData curveData : curveDataArray) {
@ -341,11 +342,11 @@ public class RatingCurveCanvasComp extends Canvas {
if (curveData.getDischarge() > maxFlowKcfs) {
maxFlowKcfs = curveData.getDischarge();
}
if (curveData.getStage() < minStageFeet) {
minStageFeet = curveData.getStage();
}
if (curveData.getDischarge() < minFlowKcfs) {
minFlowKcfs = curveData.getDischarge();
}
@ -355,11 +356,11 @@ public class RatingCurveCanvasComp extends Canvas {
if (maxStageFeet < floodValDbl) {
maxStageFeet = floodValDbl;
}
if (maxStageFeet < recordValDbl) {
maxStageFeet = recordValDbl;
}
if (maxFlowKcfs > 100000) {
FLOW_DIVISOR = 100000;
} else if (maxFlowKcfs > 10000) {
@ -368,16 +369,18 @@ public class RatingCurveCanvasComp extends Canvas {
FLOW_DIVISOR = 1000;
}
maxFlowKcfs /= FLOW_DIVISOR;
if (minStageFeet >= 0) {
minStageFeetLabelVal = 0;
} else {
minStageFeetLabelVal = Math.round((minStageFeet - 5) / 10) * 10;
}
}
vNumHashs = Math.round((((maxStageFeet - minStageFeetLabelVal) / 10) + 0.5d));
maxStageFeetLabelVal = (int) ((vNumHashs * 10) - Math.abs(minStageFeetLabelVal));
vNumHashs = Math
.round((((maxStageFeet - minStageFeetLabelVal) / 10) + 0.5d));
maxStageFeetLabelVal = (int) ((vNumHashs * 10) - Math
.abs(minStageFeetLabelVal));
}
/**
@ -385,9 +388,10 @@ public class RatingCurveCanvasComp extends Canvas {
* lines.
*/
private void calcPixelsPerIncrement() {
vPixelsPerInc = VLINE_LENGTH / (maxStageFeetLabelVal - minStageFeetLabelVal);
vPixelsPerIncBase10 = (VLINE_LENGTH/vNumHashs);
vPixelsPerInc = VLINE_LENGTH
/ (maxStageFeetLabelVal - minStageFeetLabelVal);
vPixelsPerIncBase10 = (VLINE_LENGTH / vNumHashs);
hNumHashs = Math.round(((maxFlowKcfs - minFlowKcfs) + 0.5d));
maxKcfsLabelVal = (int) (hNumHashs * 10);
hPixelsPerIncBase10 = HLINE_LENGTH / hNumHashs;
@ -473,8 +477,9 @@ public class RatingCurveCanvasComp extends Canvas {
yCoord);
// draw label
gc.drawString(String.format("%5.1f", minStageFeetLabelVal + (x * 10)),
STAGE_FEET_HASH_LABEL_X, yCoord - fontHeightMid, true);
gc.drawString(
String.format("%5.1f", minStageFeetLabelVal + (x * 10)),
STAGE_FEET_HASH_LABEL_X, yCoord - fontHeightMid, true);
}
}
@ -494,7 +499,8 @@ public class RatingCurveCanvasComp extends Canvas {
gc.drawLine(xCoord, HLINE_YCOORD, xCoord, HLINE_YCOORD
+ HASH_MARK);
kcfsStr = String.format("%5.1f", (float) (x * FLOW_DIVISOR / 1000));
kcfsStr = String.format("%5.1f",
(float) (x * FLOW_DIVISOR / 1000));
gc.drawString(kcfsStr, xCoord
- ((kcfsStr.length() * fontAveWidth) / 2)
- fontAveWidth, HLINE_YCOORD + HASH_MARK * 2, true);
@ -519,18 +525,13 @@ public class RatingCurveCanvasComp extends Canvas {
.getDischarge() / FLOW_DIVISOR) * 10) * hPixelsPerInc)));
int yCoord = 0;
// Math.round((i - 9) / 10) * 10
if (shiftAmount < 0) {
yCoord = (int) (HLINE_YCOORD - Math
.round(((curveData.getStage() - minStageFeetLabelVal) * vPixelsPerInc)));
// yCoord = (int) (HLINE_YCOORD - Math
// .round(((curveData.getStage() - shiftAmount) * vPixelsPerInc)));
yCoord = (int) (HLINE_YCOORD - Math.round(((curveData
.getStage() - minStageFeetLabelVal) * vPixelsPerInc)));
} else {
yCoord = (int) (HLINE_YCOORD - Math
.round(((curveData.getStage()) * vPixelsPerInc)));
yCoord = (int) (HLINE_YCOORD - Math.round(((curveData
.getStage()) * vPixelsPerInc)));
}
// int yCoord = (int) (HLINE_YCOORD - Math
// .round(((curveData.getStage() - shiftAmount) * vPixelsPerInc))); // TODO Add the shift back in
if (firstTime) {
oldX = xCoord;
@ -538,9 +539,7 @@ public class RatingCurveCanvasComp extends Canvas {
firstTime = false;
}
gc
.setForeground(parent.getDisplay().getSystemColor(
SWT.COLOR_CYAN));
gc.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_CYAN));
gc.drawLine(oldX, oldY, xCoord, yCoord);
gc.setForeground(parent.getDisplay().getSystemColor(
@ -548,8 +547,6 @@ public class RatingCurveCanvasComp extends Canvas {
gc.drawOval(xCoord - circleWidth / 2, yCoord - circleHeight / 2,
circleWidth, circleHeight);
// Region r = new Region();
oldX = xCoord;
oldY = yCoord;
@ -557,10 +554,10 @@ public class RatingCurveCanvasComp extends Canvas {
}
/**
* Draw the cross hairs on the graph when the left
* mouse button is clicked.
* Draw the cross hairs on the graph when the left mouse button is clicked.
*
* @param gc The current GC
* @param gc
* The current GC
*/
private void drawCrossHairs(GC gc) {
if ((currentX > VLINE_XCOORD)
@ -599,21 +596,24 @@ public class RatingCurveCanvasComp extends Canvas {
}
/**
* Update the Stage and KCFS labels when moving
* mouse and left mouse button is pressed.
* Update the Stage and KCFS labels when moving mouse and left mouse button
* is pressed.
*/
private void updateLabels() {
if ((currentX > VLINE_XCOORD)
&& (currentX < VLINE_XCOORD + HLINE_LENGTH)
&& (currentY > HLINE_YCOORD - VLINE_LENGTH)
&& (currentY < HLINE_YCOORD)) {
double q = (((currentX - VLINE_XCOORD)/(hPixelsPerInc * 100) * FLOW_DIVISOR))/100;
double stage = (((currentY - (minStageFeetLabelVal*vPixelsPerInc) - HLINE_YCOORD)/vPixelsPerInc * -1));
parentDlg.getStageDataLbl().setText(String.valueOf(String.format("%5.1f", stage)));
parentDlg.getKcfsDataLbl().setText(String.valueOf(String.format("%5.1f", q)));
double q = (((currentX - VLINE_XCOORD) / (hPixelsPerInc * 100) * FLOW_DIVISOR)) / 100;
double stage = (((currentY - (minStageFeetLabelVal * vPixelsPerInc) - HLINE_YCOORD)
/ vPixelsPerInc * -1));
parentDlg.getStageDataLbl().setText(
String.valueOf(String.format("%5.1f", stage)));
parentDlg.getKcfsDataLbl().setText(
String.valueOf(String.format("%5.1f", q)));
}
}
private void handleMouseDownEvent(MouseEvent e) {
isMouseDown = true;
}
@ -622,7 +622,7 @@ public class RatingCurveCanvasComp extends Canvas {
isMouseDown = false;
redraw();
parentDlg.getStageDataLbl().setText("");
parentDlg.getKcfsDataLbl().setText("");
parentDlg.getKcfsDataLbl().setText("");
}
private void handleMouseMoveEvent(MouseEvent e) {

View file

@ -34,7 +34,6 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.TimeZone;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@ -53,11 +52,12 @@ import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.raytheon.uf.common.ohd.AppsDefaults;
import com.raytheon.uf.viz.core.VizApp;
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.uf.viz.core.exception.VizException;
import com.raytheon.viz.hydrocommon.data.RiverDataPoint;
import com.raytheon.viz.hydrocommon.datamanager.RiverDataManager;
import com.raytheon.viz.ui.UiPlugin;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
/**
@ -76,12 +76,15 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* 26 Jul 2012 14711/963 mpduff Fix problems adding/removing shift points
* 22 Jan 2013 15682 lbousaidi fix openfile problem and changed the path to
* whfs_import_dir for "Import Curve" button.
* 15 Jul 2013 2088 rferrel Make dialog non-blocking.
* </pre>
*
* @author lvenable
* @version 1.0
*/
public class RatingCurveDlg extends CaveSWTDialog {
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(RatingCurveDlg.class);
/**
* Control font.
@ -136,17 +139,17 @@ public class RatingCurveDlg extends CaveSWTDialog {
/**
* Array of rating curve data (no shift curve).
*/
private ArrayList<RatingCurveData> noShiftCurveArray;
private java.util.List<RatingCurveData> noShiftCurveArray;
/**
* Array of rating curve data (with shift curve).
*/
private ArrayList<RatingCurveData> shiftCurveArray;
private java.util.List<RatingCurveData> shiftCurveArray;
/**
* Shift Data if available
*/
private ArrayList<RatingCurveShiftData> shiftData;
private java.util.List<RatingCurveShiftData> shiftData;
/**
* Shift curve data list control.
@ -259,18 +262,24 @@ public class RatingCurveDlg extends CaveSWTDialog {
private boolean newRatingCurve = false;
/**
* rating curve points
* Rating curve remove points.
*/
private ArrayList<RatingCurveData> removedPoints = null;
private ArrayList<RatingCurveData> addedPoints = null;
private java.util.List<RatingCurveData> removedPoints = null;
/**
* rating curve shift points
* Rating curve added points.
*/
private ArrayList<RatingCurveShiftData> removedCurveShifts = null;
private java.util.List<RatingCurveData> addedPoints = null;
private ArrayList<RatingCurveShiftData> addedCurveShifts = null;
/**
* Rating curve remove shift points.
*/
private java.util.List<RatingCurveShiftData> removedCurveShifts = null;
/**
* Rating curve added shift points.
*/
private java.util.List<RatingCurveShiftData> addedCurveShifts = null;
/**
* The current selected shift curve
@ -294,7 +303,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
*/
public RatingCurveDlg(Shell parent, String lid, String titleInfo,
boolean fullControls) {
super(parent);
super(parent, SWT.DIALOG_TRIM, CAVE.DO_NOT_BLOCK);
setText("Rating Curve" + titleInfo);
this.lid = lid;
@ -312,8 +321,14 @@ public class RatingCurveDlg extends CaveSWTDialog {
addedCurveShifts = new ArrayList<RatingCurveShiftData>();
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
setReturnValue(lid);
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#constructShellLayout()
*/
@Override
protected Layout constructShellLayout() {
// Create the main layout for the shell.
@ -323,15 +338,25 @@ public class RatingCurveDlg extends CaveSWTDialog {
return mainLayout;
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#disposed()
*/
@Override
protected void disposed() {
controlFont.dispose();
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#initializeComponents(org
* .eclipse.swt.widgets.Shell)
*/
@Override
protected void initializeComponents(Shell shell) {
setReturnValue(false);
controlFont = new Font(shell.getDisplay(), "Monospace", 10, SWT.NORMAL);
// Initialize all of the controls and layouts
@ -491,7 +516,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
shftRemoveBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
removeShift();
removeShift();
}
});
@ -520,8 +545,9 @@ public class RatingCurveDlg extends CaveSWTDialog {
curveImportBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
final String tokenizedDir = "whfs_import_dir";
String importRating= AppsDefaults.getInstance().getToken(tokenizedDir);
final String tokenizedDir = "whfs_import_dir";
String importRating = AppsDefaults.getInstance().getToken(
tokenizedDir);
FileDialog fd = new FileDialog(shell, SWT.OPEN);
fd.setFilterPath(importRating);
String[] filterExt = { "*." + extension };
@ -529,10 +555,10 @@ public class RatingCurveDlg extends CaveSWTDialog {
String filename = fd.open();
if (filename == null) {
return;
} else {
} else {
importCurveData(importRatingCurve(filename));
}
}
}
});
@ -543,30 +569,32 @@ public class RatingCurveDlg extends CaveSWTDialog {
curveClearAllBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
MessageBox messageDialog = new MessageBox(shell, SWT.OK | SWT.CANCEL);
MessageBox messageDialog = new MessageBox(shell, SWT.OK
| SWT.CANCEL);
messageDialog.setText("Clear Confirmation");
messageDialog.setMessage("This will clear the list for " + lid + ".");
messageDialog.setMessage("This will clear the list for " + lid
+ ".");
int response = messageDialog.open();
if (response == SWT.OK) {
// get rid of every point
removedPoints = noShiftCurveArray;
noShiftCurveArray.clear();
noShiftCurveDataList.removeAll();
noShiftCurveDataList.redraw();
if (shiftCurveArray != null) {
shiftCurveArray.clear();
}
shiftCurveDataList.removeAll();
shiftCurveDataList.redraw();
stageTF.setText("");
dischargeTF.setText("");
selectedRatingShift = null;
ratingCurveCanvas.updateCurveData(noShiftCurveArray, floodDbl,
recordDbl, shiftAmount);
// get rid of every point
removedPoints = noShiftCurveArray;
noShiftCurveArray.clear();
noShiftCurveDataList.removeAll();
noShiftCurveDataList.redraw();
if (shiftCurveArray != null) {
shiftCurveArray.clear();
}
shiftCurveDataList.removeAll();
shiftCurveDataList.redraw();
stageTF.setText("");
dischargeTF.setText("");
selectedRatingShift = null;
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, shiftAmount);
}
}
});
@ -579,28 +607,28 @@ public class RatingCurveDlg extends CaveSWTDialog {
@Override
public void widgetSelected(SelectionEvent event) {
if (noShiftCurveDataList.getSelectionIndex() != -1) {
MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION
| SWT.OK | SWT.CANCEL);
mb.setText("Remove Base Rating Point Confirmation");
mb.setMessage("This will remove the highlighted pair.");
int response = mb.open();
MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION
| SWT.OK | SWT.CANCEL);
mb.setText("Remove Base Rating Point Confirmation");
mb.setMessage("This will remove the highlighted pair.");
int response = mb.open();
if (response == SWT.OK) {
// get rid of this point
int index = noShiftCurveDataList.getSelectionIndex();
removedPoints.add(noShiftCurveArray.remove(index));
remakeRatingCurveDataList();
if (response == SWT.OK) {
// get rid of this point
int index = noShiftCurveDataList.getSelectionIndex();
removedPoints.add(noShiftCurveArray.remove(index));
remakeRatingCurveDataList();
stageTF.setText("");
dischargeTF.setText("");
stageTF.setText("");
dischargeTF.setText("");
if (getEditingShiftData() != null) {
generateShiftList(getEditingShiftData());
}
if (getEditingShiftData() != null) {
generateShiftList(getEditingShiftData());
}
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, shiftAmount);
}
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, shiftAmount);
}
}
}
});
@ -616,7 +644,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
RatingCurveData rcd = new RatingCurveData(new Double(
stageTF.getText().trim()), new Double(dischargeTF
.getText().trim()));
insertBaseCurvePoint(rcd);
insertBaseCurvePoint(rcd);
}
}
});
@ -633,23 +661,28 @@ public class RatingCurveDlg extends CaveSWTDialog {
shiftValueTF.setEditable(true);
}
}
private void insertBaseCurvePoint(RatingCurveData rcd) {
if (!noShiftCurveArray.contains(rcd)) {
// Check for a matching stage value
RatingCurveData data = null;
for (RatingCurveData d: noShiftCurveArray) {
if (d.getStage() == rcd.getStage()) {
data = d;
break;
}
}
if (data != null) {
noShiftCurveArray.remove(data);
}
noShiftCurveArray.add(rcd);
/**
* Insert Rating Curve Data removing any old reference to and old rcd.
*
* @param rcd
*/
private void insertBaseCurvePoint(RatingCurveData rcd) {
if (!noShiftCurveArray.contains(rcd)) {
// Check for a matching stage value
RatingCurveData data = null;
for (RatingCurveData d : noShiftCurveArray) {
if (d.getStage() == rcd.getStage()) {
data = d;
break;
}
}
if (data != null) {
noShiftCurveArray.remove(data);
}
noShiftCurveArray.add(rcd);
if (!addedPoints.contains(rcd)) {
addedPoints.add(rcd);
} else {
@ -658,7 +691,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
}
remakeRatingCurveDataList();
if (getEditingShiftData() != null) {
if (getEditingShiftData().isActive()) {
int index = shiftDataList.getSelectionIndex();
@ -666,15 +699,14 @@ public class RatingCurveDlg extends CaveSWTDialog {
ratingCurveCanvas.updateCurveData(shiftCurveArray,
floodDbl, recordDbl, shiftAmount);
} else {
ratingCurveCanvas.updateCurveData(
noShiftCurveArray, floodDbl, recordDbl,
shiftAmount);
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, shiftAmount);
}
} else {
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, shiftAmount);
ratingCurveCanvas.updateCurveData(noShiftCurveArray, floodDbl,
recordDbl, shiftAmount);
}
}
}
}
/**
@ -700,12 +732,13 @@ public class RatingCurveDlg extends CaveSWTDialog {
shiftCurveDataList.setFont(controlFont);
shiftCurveDataList.setLayoutData(gd);
shiftCurveDataList.deselectAll();
shiftCurveDataList.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY));
shiftCurveDataList.setForeground(Display.getCurrent().getSystemColor(
SWT.COLOR_DARK_GRAY));
shiftCurveDataList.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
shiftCurveDataList.deselectAll();
}
@Override
public void widgetSelected(SelectionEvent e) {
shiftCurveDataList.deselectAll();
}
});
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
@ -724,26 +757,25 @@ public class RatingCurveDlg extends CaveSWTDialog {
RatingCurveData data = noShiftCurveArray
.get(noShiftCurveDataList.getSelectionIndex());
stageTF.setText(String.format("%7.2f", data.getStage()));
dischargeTF
.setText(String.format("%7.1f", data.getDischarge()));
dischargeTF.setText(String.format("%7.1f", data.getDischarge()));
}
});
if (noShiftCurveArray != null) {
// populate the list
RatingCurveShiftData currentShift = null;
if (shiftData != null && shiftData.size() > 0) {
if (shiftData.get(0).isActive()) {
currentShift = shiftData.get(0);
}
}
RatingCurveShiftData currentShift = null;
if (shiftData != null && shiftData.size() > 0) {
if (shiftData.get(0).isActive()) {
currentShift = shiftData.get(0);
}
}
for (RatingCurveData curve : noShiftCurveArray) {
noShiftCurveDataList.add(curve.toString());
}
if (noShiftCurveDataList.getItemCount() > 0) {
noShiftCurveDataList.select(0);
generateShiftList(currentShift);
noShiftCurveDataList.select(0);
generateShiftList(currentShift);
}
}
@ -834,7 +866,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
@Override
public void widgetSelected(SelectionEvent event) {
save();
shell.dispose();
close();
}
});
@ -858,7 +890,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
closeBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
shell.dispose();
close();
}
});
@ -894,9 +926,9 @@ public class RatingCurveDlg extends CaveSWTDialog {
if (shiftData != null) {
for (RatingCurveShiftData rcsd : shiftData) {
String fmtStr = "%10S %10S %10S";
String tmpStr = String.format(fmtStr, sdf.format(rcsd.getDate()
.getTime()), df.format(rcsd.getValue()), rcsd
.isActive());
String tmpStr = String.format(fmtStr,
sdf.format(rcsd.getDate().getTime()),
df.format(rcsd.getValue()), rcsd.isActive());
shiftDataList.add(tmpStr);
}
}
@ -907,11 +939,11 @@ public class RatingCurveDlg extends CaveSWTDialog {
if (label != null) {
ratingLbl.setText(label);
}
if (noShiftCurveArray.size() > 0) {
RatingCurveData rcd = noShiftCurveArray.get(0);
this.stageTF.setText(String.valueOf(rcd.getStage()));
this.dischargeTF.setText(String.valueOf(rcd.getDischarge()));
RatingCurveData rcd = noShiftCurveArray.get(0);
this.stageTF.setText(String.valueOf(rcd.getStage()));
this.dischargeTF.setText(String.valueOf(rcd.getDischarge()));
}
}
@ -965,7 +997,8 @@ public class RatingCurveDlg extends CaveSWTDialog {
recordDbl, shiftAmount);
newRatingCurve = true;
} catch (Exception e) {
e.printStackTrace();
statusHandler.handle(Priority.PROBLEM,
"Unable to import curve data: ", e);
}
return newRatingCurve;
@ -993,7 +1026,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
// redraw for the full effect
shiftCurveDataList.redraw();
} else {
// make the rating curve with no shift data
// make the rating curve with no shift data
for (RatingCurveData curve : noShiftCurveArray) {
shiftCurveDataList.add(curve.toString());
}
@ -1017,8 +1050,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION
| SWT.OK | SWT.CANCEL);
mb.setText("Directory Chosen!");
mb
.setMessage("Cannot open a directory, choose a rating curve. EX: 'NBD1.rating'");
mb.setMessage("Cannot open a directory, choose a rating curve. EX: 'NBD1.rating'");
mb.open();
}
// if they choose just the file to import
@ -1027,17 +1059,15 @@ public class RatingCurveDlg extends CaveSWTDialog {
try {
curve = readFile(fileName);
} catch (VizException ve) {
VizApp.logAndAlert(Status.ERROR, ve,
"Error reading in file: " + fileName,
"Error reading in file: " + fileName, UiPlugin
.getDefault(), UiPlugin.PLUGIN_ID);
statusHandler.handle(Priority.PROBLEM,
"Unable to import file \"" + fileName + "\": ",
ve);
}
} else {
MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION
| SWT.OK | SWT.CANCEL);
mb.setText("Invalid File format Chosen!");
mb
.setMessage("Cannot open this file format, choose rating curve. EX: 'NBD1.rating'");
mb.setMessage("Cannot open this file format, choose rating curve. EX: 'NBD1.rating'");
mb.open();
}
}
@ -1159,6 +1189,9 @@ public class RatingCurveDlg extends CaveSWTDialog {
return true;
}
/**
* Update or insert curve data.
*/
private void updateInsert() {
try {
if (verifyDate(shiftDateTF) && verifyDouble(shiftValueTF)) {
@ -1167,74 +1200,81 @@ public class RatingCurveDlg extends CaveSWTDialog {
.getInstance(TimeZone.getTimeZone("GMT"));
cal.setTime(sdf.parse(shiftDateTF.getText()));
RatingCurveShiftData rcsd = new RatingCurveShiftData(lid, cal,
new Double(shiftValueTF.getText()), shiftActiveChk
.getSelection());
new Double(shiftValueTF.getText()),
shiftActiveChk.getSelection());
if (shiftData.size() > 0 && shiftData.contains(rcsd)) {
for (RatingCurveShiftData sd: shiftData) {
if (rcsd.toString().equals(sd.toString())) {
sd.setActive(rcsd.isActive());
sd.setDate(rcsd.getDate());
sd.setLid(rcsd.getLid());
sd.setValue(rcsd.getValue());
break;
}
}
for (RatingCurveShiftData sd : shiftData) {
if (rcsd.toString().equals(sd.toString())) {
sd.setActive(rcsd.isActive());
sd.setDate(rcsd.getDate());
sd.setLid(rcsd.getLid());
sd.setValue(rcsd.getValue());
break;
}
}
} else {
shiftData.add(rcsd);
shiftData.add(rcsd);
}
if (!addedCurveShifts.contains(rcsd)) {
addedCurveShifts.add(rcsd);
addedCurveShifts.add(rcsd);
} else {
addedCurveShifts.remove(rcsd);
addedCurveShifts.add(rcsd);
addedCurveShifts.remove(rcsd);
addedCurveShifts.add(rcsd);
}
shiftDataList.removeAll();
Collections.sort(shiftData);
for (RatingCurveShiftData sd: shiftData) {
shiftDataList.add(getShiftListString(sd));
for (RatingCurveShiftData sd : shiftData) {
shiftDataList.add(getShiftListString(sd));
}
// Display the latest shift
RatingCurveShiftData currentShift = shiftData.get(0);
if (currentShift.isActive()) {
generateShiftList(currentShift);
ratingCurveCanvas.updateCurveData(shiftCurveArray,
floodDbl, recordDbl, currentShift.getValue());
generateShiftList(currentShift);
ratingCurveCanvas.updateCurveData(shiftCurveArray,
floodDbl, recordDbl, currentShift.getValue());
} else {
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, 0);
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, 0);
}
}
shiftValueTF.setText("");
shiftDateTF.setText("");
shiftActiveChk.setSelection(false);
} catch (Exception e) {
e.printStackTrace();
statusHandler.handle(Priority.PROBLEM,
"Unable to insert/update curve data: ", e);
}
}
/**
* Remove the selected entries from the shift data list.
*/
private void removeShift() {
if (shiftDataList.getItemCount() > 0 && shiftDataList.getSelectionCount() > 0) {
MessageBox messageDialog = new MessageBox(shell, SWT.OK | SWT.CANCEL);
if (shiftDataList.getItemCount() > 0
&& shiftDataList.getSelectionCount() > 0) {
MessageBox messageDialog = new MessageBox(shell, SWT.OK
| SWT.CANCEL);
messageDialog.setText("Shift Remove Confirmation");
messageDialog.setMessage("This will remove the highlighted shift.");
int response = messageDialog.open();
if (response == SWT.OK) {
String selection = shiftDataList.getItem(shiftDataList.getSelectionIndex());
for (RatingCurveShiftData sd: shiftData) {
if (getShiftListString(sd).equals(selection)) {
removedCurveShifts.add(sd);
break;
}
}
shiftData.removeAll(removedCurveShifts);
String selection = shiftDataList.getItem(shiftDataList
.getSelectionIndex());
for (RatingCurveShiftData sd : shiftData) {
if (getShiftListString(sd).equals(selection)) {
removedCurveShifts.add(sd);
break;
}
}
shiftData.removeAll(removedCurveShifts);
shiftDataList.removeAll();
Collections.sort(shiftData);
for (RatingCurveShiftData rcsd : shiftData) {
@ -1243,26 +1283,26 @@ public class RatingCurveDlg extends CaveSWTDialog {
shiftDataList.redraw();
if (shiftData.size() > 0) {
shiftAmount = shiftData.get(0).getValue();
shiftAmount = shiftData.get(0).getValue();
} else {
shiftAmount = 0;
shiftAmount = 0;
}
ratingCurveCanvas.updateCurveData(noShiftCurveArray, floodDbl,
recordDbl, shiftAmount);
if (shiftData.size() > 0) {
RatingCurveShiftData currentShift = shiftData.get(0);
if (currentShift.isActive()) {
generateShiftList(currentShift);
} else {
generateShiftList(null);
}
} else {
generateShiftList(null);
}
ratingCurveCanvas.updateCurveData(noShiftCurveArray,
floodDbl, recordDbl, shiftAmount);
if (shiftData.size() > 0) {
RatingCurveShiftData currentShift = shiftData.get(0);
if (currentShift.isActive()) {
generateShiftList(currentShift);
} else {
generateShiftList(null);
}
} else {
generateShiftList(null);
}
}
}
}
}
/**
@ -1307,8 +1347,9 @@ public class RatingCurveDlg extends CaveSWTDialog {
private String getShiftListString(RatingCurveShiftData rcsd) {
String fmtStr = "%10S %10S %10S";
String tmpStr = String.format(fmtStr, sdf.format(rcsd.getDate()
.getTime()), df.format(rcsd.getValue()), rcsd.isActive());
String tmpStr = String.format(fmtStr,
sdf.format(rcsd.getDate().getTime()),
df.format(rcsd.getValue()), rcsd.isActive());
return tmpStr;
}
@ -1326,34 +1367,35 @@ public class RatingCurveDlg extends CaveSWTDialog {
* update the noShiftCurveDataList
*/
private void remakeRatingCurveDataList() {
Collections.sort(noShiftCurveArray);
int index = noShiftCurveDataList.getSelectionIndex();
Collections.sort(noShiftCurveArray);
int index = noShiftCurveDataList.getSelectionIndex();
noShiftCurveDataList.removeAll();
shiftCurveDataList.removeAll();
for (RatingCurveData rcd : noShiftCurveArray) {
noShiftCurveDataList.add(rcd.toString());
}
if (shiftData.size() > 0) {
RatingCurveShiftData currentShift = shiftData.get(0);
if (currentShift.isActive()) {
generateShiftList(currentShift);
} else {
generateShiftList(null);
}
RatingCurveShiftData currentShift = shiftData.get(0);
if (currentShift.isActive()) {
generateShiftList(currentShift);
} else {
generateShiftList(null);
}
} else {
generateShiftList(null);
}
if (noShiftCurveDataList.getItemCount() > 0) {
if (index >= noShiftCurveDataList.getItemCount()) {
noShiftCurveDataList.select(noShiftCurveDataList.getItemCount() - 1);
} else if (index >= 0 && index < noShiftCurveArray.size()) {
noShiftCurveDataList.select(index);
} else {
noShiftCurveDataList.select(0);
}
noShiftCurveDataList.showSelection();
if (index >= noShiftCurveDataList.getItemCount()) {
noShiftCurveDataList
.select(noShiftCurveDataList.getItemCount() - 1);
} else if (index >= 0 && index < noShiftCurveArray.size()) {
noShiftCurveDataList.select(index);
} else {
noShiftCurveDataList.select(0);
}
noShiftCurveDataList.showSelection();
}
}
@ -1368,7 +1410,7 @@ public class RatingCurveDlg extends CaveSWTDialog {
}
/**
* Get an intance of the Stage data label
* Get an instance of the Stage data label
*
* @return the label
*/

View file

@ -43,6 +43,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 04 SEP 2008 lvenable Initial creation
* 15 JUL 2013 2088 rferrel Make dialog non-blocking.
*
* </pre>
*
@ -90,12 +91,7 @@ public class FindReplaceDlg extends CaveSWTDialog {
/**
* Text Editor buffer with everything upper-case.
*/
private StringBuffer editorTextBufUpcase;
/**
* Number of characters.
*/
private int characterCount = -9999;
private final StringBuilder editorTextBufUpcase;
/**
* Found word index.
@ -111,12 +107,19 @@ public class FindReplaceDlg extends CaveSWTDialog {
* Text editor containing the text to be searched.
*/
public FindReplaceDlg(Shell parent, StyledText textEditor) {
super(parent);
super(parent, SWT.DIALOG_TRIM, CAVE.DO_NOT_BLOCK);
setText("Find and Replace");
this.textEditor = textEditor;
this.editorTextBufUpcase = new StringBuilder(textEditor.getText()
.length());
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#constructShellLayout()
*/
@Override
protected Layout constructShellLayout() {
GridLayout mainLayout = new GridLayout(1, false);
@ -125,6 +128,13 @@ public class FindReplaceDlg extends CaveSWTDialog {
return mainLayout;
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#initializeComponents(org
* .eclipse.swt.widgets.Shell)
*/
@Override
protected void initializeComponents(Shell shell) {
createSearchReplaceTextField();
@ -232,7 +242,7 @@ public class FindReplaceDlg extends CaveSWTDialog {
closeBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
shell.dispose();
close();
}
});
}
@ -251,11 +261,8 @@ public class FindReplaceDlg extends CaveSWTDialog {
* Check if there has been updates to the text editor.
*/
private void checkForUpdates() {
if (characterCount != textEditor.getText().length()) {
characterCount = textEditor.getText().length();
editorTextBufUpcase = new StringBuffer(textEditor.getText()
.toUpperCase());
}
editorTextBufUpcase.setLength(0);
editorTextBufUpcase.append(textEditor.getText().toUpperCase());
if (caretPosition != textEditor.getCaretOffset()) {
caretPosition = textEditor.getCaretOffset();
@ -349,16 +356,8 @@ public class FindReplaceDlg extends CaveSWTDialog {
* "Replace by" text field
*/
private void replaceAll() {
while (1 == 1) {
if (findWhatText()) {
replaceText();
} else {
break;
}
while (findWhatText()) {
replaceText();
}
}
public void bringToFront() {
shell.setActive();
}
}

View file

@ -59,6 +59,8 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* ------------ ---------- ----------- --------------------------
* Sep 9, 2008 lvenable Initial creation
* Sep 18, 2009 2772 mpduff Fixed NullPointer when opening in Read only.
* Jul 15, 2013 2088 rferrel Changes for non-blocking FindReplaceDlg.
* Make dialog non-blocking.
*
* </pre>
*
@ -172,20 +174,6 @@ public class TextEditorDlg extends CaveSWTDialog {
*/
private Image findReplaceImage;
/**
* Constructor.
*
* @param parent
* Parent shell.
* @param readOnly
* Read only flag.
* @param fileName
* File name in string format.
*/
public TextEditorDlg(Shell parent, boolean readOnly, String fileName) {
this(parent, readOnly, new File(fileName));
}
/**
* Constructor.
*
@ -197,19 +185,27 @@ public class TextEditorDlg extends CaveSWTDialog {
* File to view/edit.
*/
public TextEditorDlg(Shell parent, boolean readOnly, File file) {
super(parent, SWT.DIALOG_TRIM | SWT.RESIZE);
if (textFile != null) {
if (readOnly == true) {
setText(textFile.getName() + " - (Read Only)");
} else {
setText(textFile.getName());
}
}
super(parent, SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.DO_NOT_BLOCK);
textFile = file;
this.readOnly = readOnly;
if (textFile != null) {
StringBuilder sb = new StringBuilder("Text Editor - ");
sb.append(textFile.getName());
if (readOnly == true) {
sb.append(" (Read Only)");
}
setText(sb.toString());
}
setReturnValue(file);
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#constructShellLayout()
*/
@Override
protected Layout constructShellLayout() {
// Create the main layout for the shell.
@ -220,6 +216,11 @@ public class TextEditorDlg extends CaveSWTDialog {
return mainLayout;
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#disposed()
*/
@Override
protected void disposed() {
controlFont.dispose();
@ -233,9 +234,15 @@ public class TextEditorDlg extends CaveSWTDialog {
redoImage.dispose();
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#initializeComponents(org
* .eclipse.swt.widgets.Shell)
*/
@Override
protected void initializeComponents(Shell shell) {
setReturnValue(false);
controlFont = new Font(shell.getDisplay(), "Monospace", 10, SWT.NORMAL);
undoRedoArray = new ArrayList<String>();
@ -252,6 +259,11 @@ public class TextEditorDlg extends CaveSWTDialog {
textST.setFocus();
}
/*
* (non-Javadoc)
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#shouldOpen()
*/
@Override
protected boolean shouldOpen() {
// Verify file name
@ -261,12 +273,10 @@ public class TextEditorDlg extends CaveSWTDialog {
mb.setMessage("The following file does not exist:\n"
+ textFile.getAbsolutePath());
mb.open();
setReturnValue(false);
return false;
}
if (readFile() == false) {
setReturnValue(false);
return false;
}
return true;
@ -281,7 +291,6 @@ public class TextEditorDlg extends CaveSWTDialog {
createFileMenu(menuBar);
createEditMenu(menuBar);
createOptionsMenu(menuBar);
// createHelpMenu(menuBar);
shell.setMenuBar(menuBar);
}
@ -338,7 +347,7 @@ public class TextEditorDlg extends CaveSWTDialog {
exitMI.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
shell.dispose();
close();
}
});
}
@ -652,8 +661,6 @@ public class TextEditorDlg extends CaveSWTDialog {
br.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
MessageBox mb = new MessageBox(getParent(), SWT.ICON_ERROR | SWT.OK);
mb.setText("File Error");
mb.setMessage("An error occurred reading the file:\n"
@ -736,15 +743,14 @@ public class TextEditorDlg extends CaveSWTDialog {
}
/**
* DIsplay the find and replace dialog.
* Display the find and replace dialog.
*/
private void findReplaceText() {
if (findReplaceDlg == null) {
if (findReplaceDlg == null || findReplaceDlg.isDisposed()) {
findReplaceDlg = new FindReplaceDlg(shell, textST);
findReplaceDlg.open();
findReplaceDlg = null;
} else {
findReplaceDlg.bringToFront();
findReplaceDlg.bringToTop();
}
}
@ -754,27 +760,18 @@ public class TextEditorDlg extends CaveSWTDialog {
private void saveFile() {
FileWriter fw;
// IPathManager pm = PathManagerFactory.getPathManager();
// LocalizationContext lc =
// pm.getContext(LocalizationType.COMMON_STATIC,
// LocalizationLevel.SITE);
// LocalizationFile newTextFile = pm.getLocalizationFile(lc,
// "hydro/" + textFile.getName());
try {
// fw = new FileWriter(newTextFile.getFile(), false);
fw = new FileWriter(textFile, false);
fw.write(textST.getText());
fw.flush();
fw.close();
// newTextFile.save();
} catch (IOException e) {
e.printStackTrace();
// } catch (LocalizationCommunicationException e) {
// e.printStackTrace();
// } catch (LocalizationOpFailedException e) {
// e.printStackTrace();
MessageBox mb = new MessageBox(getParent(), SWT.ICON_ERROR | SWT.OK);
mb.setText("File Error");
mb.setMessage("Unable to save file:\n" + textFile.getAbsolutePath()
+ "\n" + e.getMessage());
mb.open();
}
}