diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 36fc4eea..c3db71b0 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -4,7 +4,7 @@
org.pamguard
Pamguard
Pamguard
- 2.02.11f
+ 2.02.12
Pamguard using Maven to control dependencies
www.pamguard.org
@@ -107,6 +107,7 @@
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
+ test/resources/**
diff --git a/pom.xml b/pom.xml
index 18b6a902..5706741b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,8 @@
META-INF/*.SF
META-INF/*.DSA
- META-INF/*.RSA
+ META-INF/*.RSA
+ test/resources/**
@@ -180,6 +181,24 @@
+
+
+
@@ -308,7 +327,7 @@
io.github.macster110
jdl4pam
- 0.0.99a
+ 0.0.99b
diff --git a/src/Acquisition/FileInputSystem.java b/src/Acquisition/FileInputSystem.java
index b4678913..9b99ad3b 100644
--- a/src/Acquisition/FileInputSystem.java
+++ b/src/Acquisition/FileInputSystem.java
@@ -603,7 +603,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe
audioStream.close();
}
- System.out.println("FileInputSystem - prepareInputFile");
+// System.out.println("FileInputSystem - prepareInputFile");
audioStream = PamAudioFileManager.getInstance().getAudioInputStream(currentFile);
diff --git a/src/PamView/dialog/GenericSwingDialog.java b/src/PamView/dialog/GenericSwingDialog.java
index 208bd386..72ea3821 100644
--- a/src/PamView/dialog/GenericSwingDialog.java
+++ b/src/PamView/dialog/GenericSwingDialog.java
@@ -10,6 +10,8 @@ import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
+import PamController.PamController;
+
public class GenericSwingDialog extends PamDialog {
private boolean allOk;
@@ -45,6 +47,9 @@ public class GenericSwingDialog extends PamDialog {
* @return
*/
public static boolean showDialog(Window parentFrame, String title, Point screenPoint, PamDialogPanel ...dialogPanels) {
+ if (parentFrame == null) {
+ parentFrame = PamController.getMainFrame();
+ }
GenericSwingDialog swingDialog = new GenericSwingDialog(parentFrame, title, dialogPanels);
swingDialog.setParams();
swingDialog.pack();
diff --git a/src/PamView/dialog/PamDialogPanel.java b/src/PamView/dialog/PamDialogPanel.java
index d8dcc706..19e83808 100644
--- a/src/PamView/dialog/PamDialogPanel.java
+++ b/src/PamView/dialog/PamDialogPanel.java
@@ -5,6 +5,7 @@ import javax.swing.JComponent;
/**
* General class for dialog panels which will be incorporated into one or
* more actual dialogs.
+ * Can be quickly opened with GenericSwingDialog
* @author Doug Gillespie
*
*/
diff --git a/src/PamView/symbol/modifier/SymbolModifier.java b/src/PamView/symbol/modifier/SymbolModifier.java
index 3e33d0eb..96ccfa53 100644
--- a/src/PamView/symbol/modifier/SymbolModifier.java
+++ b/src/PamView/symbol/modifier/SymbolModifier.java
@@ -150,7 +150,8 @@ abstract public class SymbolModifier {
if (dialogPanel == null) {
return null;
}
- JMenuItem menuItem = new JMenuItem("Options ...");
+ JMenuItem menuItem = new JMenuItem("More options ...");
+ menuItem.setToolTipText("More symbol options");
menuItem.addActionListener(new ActionListener() {
@Override
diff --git a/src/PamView/symbol/modifier/swing/ModifierTreeNode.java b/src/PamView/symbol/modifier/swing/ModifierTreeNode.java
index 746fa43b..70285206 100644
--- a/src/PamView/symbol/modifier/swing/ModifierTreeNode.java
+++ b/src/PamView/symbol/modifier/swing/ModifierTreeNode.java
@@ -8,12 +8,13 @@ import java.util.Enumeration;
import javax.swing.tree.TreeNode;
import PamUtils.PamUtils;
+import PamView.dialog.PamDialogPanel;
import PamView.symbol.modifier.SymbolModifier;
public class ModifierTreeNode implements TreeNode {
private SymbolModifier modifier;
private SymbolTreeRoot rootNode;
- private ArrayList choiceNodes;
+ private ArrayList choiceNodes;
public ModifierTreeNode(SymbolTreeRoot rootNode, SymbolModifier modifier) {
super();
@@ -22,17 +23,25 @@ public class ModifierTreeNode implements TreeNode {
int modBits = modifier.getModifyableBits();
int nMod = Integer.bitCount(modBits);
choiceNodes = new ArrayList<>();
+
+ int leafIndex = 0;
+
for (int i = 0; i < nMod; i++) {
- choiceNodes.add(new ChoiceTreeNode(this, 1< children() {
+ return null;
+ }
+
+}
diff --git a/src/PamView/symbol/modifier/swing/SymbolModifierPanel.java b/src/PamView/symbol/modifier/swing/SymbolModifierPanel.java
index 922a4c16..70fa539b 100644
--- a/src/PamView/symbol/modifier/swing/SymbolModifierPanel.java
+++ b/src/PamView/symbol/modifier/swing/SymbolModifierPanel.java
@@ -137,6 +137,7 @@ public class SymbolModifierPanel implements PamDialogPanel {
JMenuItem optsItem = modifier.getModifierOptionsMenu();
if (optsItem != null) {
popMenu.add(optsItem);
+ popMenu.addSeparator();
}
}
if (nodeInd > 0) {
diff --git a/src/PamView/symbol/modifier/swing/SymbolTreeRenderer.java b/src/PamView/symbol/modifier/swing/SymbolTreeRenderer.java
index da04fedf..f96d563b 100644
--- a/src/PamView/symbol/modifier/swing/SymbolTreeRenderer.java
+++ b/src/PamView/symbol/modifier/swing/SymbolTreeRenderer.java
@@ -43,6 +43,10 @@ public class SymbolTreeRenderer extends DefaultTreeCellRenderer {
if (value instanceof ChoiceTreeNode) {
return checkboxChoice(tree, (ChoiceTreeNode) value, sel, expanded, leaf, row, hasFocus);
}
+
+ if (value instanceof OptionsTreeNode) {
+ return ((OptionsTreeNode) value).optionsButton;
+ }
Component component = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (value instanceof ModifierTreeNode) {
diff --git a/src/PamguardMVC/dataSelector/DataSelectDialog.java b/src/PamguardMVC/dataSelector/DataSelectDialog.java
index 5fd7f81f..9cb541e1 100644
--- a/src/PamguardMVC/dataSelector/DataSelectDialog.java
+++ b/src/PamguardMVC/dataSelector/DataSelectDialog.java
@@ -76,6 +76,22 @@ public class DataSelectDialog extends PamDialog {
// }
}
+ public boolean setTab(int tabIndex) {
+ if (tabPane == null) {
+ return false;
+ }
+ if (tabIndex < 0 || tabIndex >= tabPane.getTabCount()) {
+ return false;
+ }
+ try {
+ tabPane.setSelectedIndex(tabIndex);
+ }
+ catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+
public boolean showDialog() {
if (dataPanel != null) {
dataPanel.setParams();
diff --git a/src/clickDetector/BTAmplitudeSelector.java b/src/clickDetector/BTAmplitudeSelector.java
index ba020596..fac92954 100644
--- a/src/clickDetector/BTAmplitudeSelector.java
+++ b/src/clickDetector/BTAmplitudeSelector.java
@@ -29,6 +29,7 @@ import PamView.PamSymbolType;
import PamView.dialog.PamDialog;
import PamView.dialog.PamDialogPanel;
import PamView.dialog.PamGridBagContraints;
+import clickDetector.dataSelector.ClickDataSelector;
import pamMaths.HistogramDisplay;
import pamMaths.HistogramGraphicsLayer;
import pamMaths.PamHistogram;
@@ -59,6 +60,7 @@ public class BTAmplitudeSelector implements PamDialogPanel {
private JCheckBox amplitudeSelect;
private JTextField minAmplitude;
private JFrame ownerFrame;
+ private ClickDataSelector dataSelector;
/**
* @param btDisplay
*/
@@ -66,6 +68,7 @@ public class BTAmplitudeSelector implements PamDialogPanel {
super();
this.clickControl = clickControl;
this.btDisplay = btDisplay;
+ dataSelector = btDisplay.getDataSelector();
clickDataBlock = clickControl.getClickDataBlock();
histoPlot = new HistogramDisplay();
histoPlot.setGraphicsOverLayer(histoOverLayer = new HistoOverLayer());
@@ -125,7 +128,8 @@ public class BTAmplitudeSelector implements PamDialogPanel {
axMin = allHistogram.getScaleMinVal();
axMax = allHistogram.getScaleMaxVal();
plotRectangle = g.getClipBounds();
- double dx = (btDisplayParameters.minAmplitude - axMin) / (axMax-axMin) * plotRectangle.width;
+// double dx = (btDisplayParameters.minAmplitude - axMin) / (axMax-axMin) * plotRectangle.width;
+ double dx = (dataSelector.getParams().minimumAmplitude - axMin) / (axMax-axMin) * plotRectangle.width;
int x = (int) Math.round(dx);
g.setColor(Color.RED);
g.drawLine(x, 0, x, plotRectangle.height);
@@ -151,7 +155,7 @@ public class BTAmplitudeSelector implements PamDialogPanel {
double newAmp = (double) mouseEvent.getX() / histoOverLayer.plotRectangle.width *
(histoOverLayer.axMax-histoOverLayer.axMin) + histoOverLayer.axMin;
BTDisplayParameters btDisplayParameters = btDisplay.getBtDisplayParameters();
- btDisplayParameters.minAmplitude = newAmp;
+ dataSelector.getParams().minimumAmplitude = newAmp;
ampCtrlPanel.setParams(btDisplayParameters);
redrawHisto();
//
@@ -173,7 +177,7 @@ public class BTAmplitudeSelector implements PamDialogPanel {
if (btDisplayParameters.amplitudeSelect == false) {
return false;
}
- double dx = (btDisplayParameters.minAmplitude - histoOverLayer.axMin) /
+ double dx = (dataSelector.getParams().minimumAmplitude - histoOverLayer.axMin) /
(histoOverLayer.axMax-histoOverLayer.axMin) * histoOverLayer.plotRectangle.width;
int x = (int) Math.round(dx);
if (Math.abs(e.getX()-x) > 10) {
@@ -213,14 +217,14 @@ public class BTAmplitudeSelector implements PamDialogPanel {
}
private void setParams(BTDisplayParameters btParams) {
amplitudeSelect.setSelected(btParams.amplitudeSelect);
- minAmplitude.setText(String.format("%3.1f", btParams.minAmplitude));
+ minAmplitude.setText(String.format("%3.1f", dataSelector.getParams().minimumAmplitude));
enableControls();
}
private boolean getParams(BTDisplayParameters btParams) {
btParams.amplitudeSelect = amplitudeSelect.isSelected();
try {
- btParams.minAmplitude = Double.valueOf(minAmplitude.getText());
+ dataSelector.getParams().minimumAmplitude = Double.valueOf(minAmplitude.getText());
}
catch (NumberFormatException e) {
return false;
diff --git a/src/clickDetector/BTDisplayParameters.java b/src/clickDetector/BTDisplayParameters.java
index bf9604f7..925f0b74 100644
--- a/src/clickDetector/BTDisplayParameters.java
+++ b/src/clickDetector/BTDisplayParameters.java
@@ -44,17 +44,17 @@ public class BTDisplayParameters implements Serializable, Cloneable, ManagedPara
public int nBearingGridLines = 1;
public int nAmplitudeGridLines = 0;
public int nICIGridLines = 0;
- public boolean showEchoes = true;
+// public boolean showEchoes = true;
public int minClickLength = 2, maxClickLength = 12;
public int minClickHeight = 2, maxClickHeight = 12;
private double timeRange = 10;
public int displayChannels = 0;
public boolean view360;
public boolean amplitudeSelect = false;
- public double minAmplitude = 0;
+// public double minAmplitude = 0;
public boolean showUnassignedICI = false;
- public boolean showEventsOnly = false;
- public boolean showANDEvents = true;
+// public boolean showEventsOnly = false;
+// public boolean showANDEvents = true;
public boolean logICIScale;
public int angleRotation = ROTATE_TOARRAY;
@@ -65,7 +65,7 @@ public class BTDisplayParameters implements Serializable, Cloneable, ManagedPara
/*
* Show identified species
*/
- private boolean[] showSpeciesList;
+// private boolean[] showSpeciesList;
public int colourScheme = COLOUR_BY_TRAIN;
@@ -83,7 +83,7 @@ public class BTDisplayParameters implements Serializable, Cloneable, ManagedPara
} catch (CloneNotSupportedException Ex) {
Ex.printStackTrace();
}
- showSpeciesList = null;
+// showSpeciesList = null;
return null;
}
@@ -107,49 +107,49 @@ public class BTDisplayParameters implements Serializable, Cloneable, ManagedPara
/**
* @return the showSpeciesList
*/
- public boolean getShowSpecies(int speciesIndex) {
- if (showSpeciesList != null && showSpeciesList.length > speciesIndex) {
- return showSpeciesList[speciesIndex];
- }
- makeShowSpeciesList(speciesIndex);
- return true;
- }
- private void makeShowSpeciesList(int maxIndex) {
- if (showSpeciesList == null) {
- showSpeciesList = new boolean[0];
- }
- else if (showSpeciesList.length > maxIndex) {
- return;
- }
- int oldLength = showSpeciesList.length;
- showSpeciesList = Arrays.copyOf(showSpeciesList, maxIndex + 1);
- for (int i = oldLength; i <= maxIndex; i++) {
- showSpeciesList[i] = true;
- }
- }
+// public boolean getShowSpecies(int speciesIndex) {
+// if (showSpeciesList != null && showSpeciesList.length > speciesIndex) {
+// return showSpeciesList[speciesIndex];
+// }
+// makeShowSpeciesList(speciesIndex);
+// return true;
+// }
+// private void makeShowSpeciesList(int maxIndex) {
+// if (showSpeciesList == null) {
+// showSpeciesList = new boolean[0];
+// }
+// else if (showSpeciesList.length > maxIndex) {
+// return;
+// }
+// int oldLength = showSpeciesList.length;
+// showSpeciesList = Arrays.copyOf(showSpeciesList, maxIndex + 1);
+// for (int i = oldLength; i <= maxIndex; i++) {
+// showSpeciesList[i] = true;
+// }
+// }
/**
* @param showSpeciesList the showSpeciesList to set
*/
- public void setShowSpecies(int speciesIndex, boolean showSpecies) {
- makeShowSpeciesList(speciesIndex);
- showSpeciesList[speciesIndex] = showSpecies;
- }
+// public void setShowSpecies(int speciesIndex, boolean showSpecies) {
+// makeShowSpeciesList(speciesIndex);
+// showSpeciesList[speciesIndex] = showSpecies;
+// }
@Override
public PamParameterSet getParameterSet() {
PamParameterSet ps = PamParameterSet.autoGenerate(this, ParameterSetType.DETECTOR);
- try {
- Field field = this.getClass().getDeclaredField("showSpeciesList");
- ps.put(new PrivatePamParameterData(this, field) {
- @Override
- public Object getData() throws IllegalArgumentException, IllegalAccessException {
- return showSpeciesList;
- }
- });
- } catch (NoSuchFieldException | SecurityException e) {
- e.printStackTrace();
- }
+// try {
+// Field field = this.getClass().getDeclaredField("showSpeciesList");
+// ps.put(new PrivatePamParameterData(this, field) {
+// @Override
+// public Object getData() throws IllegalArgumentException, IllegalAccessException {
+// return showSpeciesList;
+// }
+// });
+// } catch (NoSuchFieldException | SecurityException e) {
+// e.printStackTrace();
+// }
return ps;
}
diff --git a/src/clickDetector/ClickBTDisplay.java b/src/clickDetector/ClickBTDisplay.java
index 637d9578..ebf0ca07 100644
--- a/src/clickDetector/ClickBTDisplay.java
+++ b/src/clickDetector/ClickBTDisplay.java
@@ -34,6 +34,7 @@ import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
+import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
@@ -115,9 +116,12 @@ import PamguardMVC.PamDataBlock;
import PamguardMVC.PamDataUnit;
import PamguardMVC.PamObservable;
import PamguardMVC.PamObserver;
+import PamguardMVC.dataSelector.DataSelectDialog;
import PamguardMVC.superdet.SuperDetection;
import clickDetector.ClickClassifiers.ClickIdInformation;
import clickDetector.ClickClassifiers.ClickIdentifier;
+import clickDetector.alarm.ClickAlarmParameters;
+import clickDetector.dataSelector.ClickDataSelector;
import clickDetector.dialogs.ClickDisplayDialog;
import clickDetector.offlineFuncs.OfflineEventDataBlock;
import clickDetector.offlineFuncs.OfflineEventDataUnit;
@@ -2244,7 +2248,7 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
PamDataBlock clickData = clickControl.getClickDataBlock();
int nAll = clickData.getUnitsCount();
String txt = String.format("%d of %d loaded clicks will not be displayed because their amplitude is < %3.1fdB",
- n, nAll, btDisplayParameters.minAmplitude);
+ n, nAll, getDataSelector().getParams().minimumAmplitude);
Insets insets = getInsets();
int x = insets.left;
int y = getHeight()-5;
@@ -2383,19 +2387,33 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
}
menuItem = new JMenuItem("Settings ...");
+ menuItem.setToolTipText("Display options");
menuItem.addActionListener(new SettingsMenuAction());
menu.add(menuItem);
+ menuItem = new JMenuItem("Click data selector ...");
+ menuItem.setToolTipText("Detailed data selection options");
+ menuItem.addActionListener(new DataSelectorAction());
+ menu.add(menuItem);
menuItem = new JMenuItem("Show amplitude selector ...");
+ menuItem.setToolTipText("Graphical amplitude selector display");
menuItem.addActionListener(new AmplitudeSelector());
menu.add(menuItem);
menu.addSeparator();
- ArrayList colOptList = getSymbolChooser().getQuickMenuItems(clickControl.getGuiFrame(), this, "Colour by ", SymbolModType.EVERYTHING, true);
+ ArrayList colOptList = getSymbolChooser().getQuickMenuItems(clickControl.getGuiFrame(), this, "Colour by ", SymbolModType.EVERYTHING, false);
if (colOptList != null) {
for (JMenuItem menuIt : colOptList) {
menu.add(menuIt);
}
- menu.addSeparator();
}
+ menuItem = new JMenuItem("More symbol options ...");
+ menuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ showDataSymbolOptions(1);
+ }
+ });
+ menu.add(menuItem);
+ menu.addSeparator();
// menuItem = new JCheckBoxMenuItem("Colour by species id",
// btDisplayParameters.colourScheme == BTDisplayParameters.COLOUR_BY_SPECIES);
@@ -2470,7 +2488,7 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
return menu;
}
-
+
/**
* Looks through the current modules and finds if there is a target motion or static localiser
*/
@@ -2771,7 +2789,7 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
BTDisplayParameters newParameters =
ClickDisplayDialog.showDialog(clickControl,
- clickControl.getGuiFrame(), btDisplayParameters);
+ clickControl.getGuiFrame(), btDisplayParameters, getDataSelector().getClickAlarmParameters());
if (newParameters != null){
btDisplayParameters = newParameters.clone();
if (getVScaleManager() != null) {
@@ -2788,6 +2806,15 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
}
}
+
+
+ /**
+ * Get a data selector specific to this display.
+ * @return click data selector specific to this display.
+ */
+ public ClickDataSelector getDataSelector() {
+ return (ClickDataSelector) clickControl.getClickDataBlock().getDataSelector(getUnitName(), false);
+ }
class AmplitudeSelector implements ActionListener {
@Override
@@ -2795,6 +2822,13 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
showAmplitudeSelector();
}
}
+
+ class DataSelectorAction implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ showDataSelector();
+ }
+ }
private void showAmplitudeSelector() {
@@ -2814,6 +2848,38 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
// }
}
+ /**
+ * Show a dialog with both data and symbol options, but go to the correct tab.
+ * @param selectedTab
+ * @return
+ */
+ private boolean showDataSymbolOptions(int selectedTab) {
+ Window javaFrame = clickControl.getGuiFrame();
+ DataSelectDialog dataSelectDialog = new DataSelectDialog(javaFrame, clickControl.getClickDataBlock(), getDataSelector(), symbolChooser);
+ if (javaFrame == null) {
+ dataSelectDialog.moveToMouseLocation();
+ }
+ dataSelectDialog.setTab(selectedTab);
+ boolean ok = dataSelectDialog.showDialog();
+ if (ok) {
+ repaintBoth();
+ if (clickControl.getOfflineToolbar() != null) {
+ clickControl.getOfflineToolbar().displayActivated(clickBTDisplay);
+ }
+ }
+ return ok;
+ }
+
+ public void showDataSelector() {
+// if (getDataSelector().showSelectDialog(clickControl.getGuiFrame())) {
+// repaintBoth();
+// if (clickControl.getOfflineToolbar() != null) {
+// clickControl.getOfflineToolbar().displayActivated(clickBTDisplay);
+// }
+// };
+ showDataSymbolOptions(0);
+ }
+
private void checkBTAmplitudeSelectHisto() {
if (btAmplitudeSelector == null) {
return;
@@ -3036,15 +3102,15 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
zoomer.paintShape(g, this, true);
}
- // long t1 = System.nanoTime();
- synchronized (clickData.getSynchLock()) {
- // long t2 = System.nanoTime();
- // double ms = ((double) (t2-t1)) / 1000000.;
- // if (btDisplayParameters.VScale == BTDisplayParameters.DISPLAY_ICI) {
- // sortTempICIs();
- // }
+ ArrayList clickCopy = clickData.getDataCopy(displayStartMillis, displayStartMillis+displayLengthMillis, true, getDataSelector());
+ if (clickCopy.size() == 0) {
+ return;
+ }
+ ListIterator clickIterator = clickCopy.listIterator(clickCopy.size()-1);
- ListIterator clickIterator = clickData.getListIterator(PamDataBlock.ITERATOR_END);
+// synchronized (clickData.getSynchLock()) {
+//
+// ListIterator clickIterator = clickData.getListIterator(PamDataBlock.ITERATOR_END);
while (clickIterator.hasPrevious()) {
click = clickIterator.previous();
if (shouldPlot(prevPlottedClick)){
@@ -3060,11 +3126,6 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
if (shouldPlot(prevPlottedClick)){ // and draw the last one !
drawClick(g, prevPlottedClick, clipRectangle);
}
- // g.drawString(String.format("Wait synch %3.3fms", ms), 0, 20);
- }
- // long t3 = System.nanoTime();
- // g.drawString(String.format("Last draw %3.3fms", lastPaintTime), 0, 20);
- // lastPaintTime = ((double) (t3-t0)) / 1000000.;
}
@Override
@@ -3342,7 +3403,9 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
else if (btDisplayParameters.colourScheme == BTDisplayParameters.COLOUR_BY_HYDROPHONE) {
keyPanel.add(new TextKeyItem("Colour by hydrophone"));
}
- if (btDisplayParameters.getShowSpecies(0)) {
+ ClickAlarmParameters selectParams = getDataSelector().getParams();
+// if (btDisplayParameters.getShowSpecies(0)) {
+ if (selectParams.onlineAutoEvents | selectParams.onlineManualEvents) {
keyPanel.add(symbolChooser.getDefaultSymbol(true).makeKeyItem("Unidentified species"));
}
@@ -3354,7 +3417,8 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
PamSymbol[] symbols = clickControl.getClickIdentifier().getSymbols();
if (speciesList != null) {
for (int i = 0; i < speciesList.length; i++) {
- if (btDisplayParameters.getShowSpecies(i+1)) {
+ if (selectParams.getUseSpecies(i+1)) {
+// if (btDisplayParameters.getShowSpecies(i+1)) {
if (btDisplayParameters.colourScheme != BTDisplayParameters.COLOUR_BY_TRAIN) {
keyPanel.add(symbols[i].makeKeyItem(speciesList[i]));
}
@@ -3423,11 +3487,12 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
PamDataBlock clickData = clickControl.getClickDataBlock();
ClickDetection click;
int n = 0;
+ double minAmpli = getDataSelector().getParams().minimumAmplitude;
synchronized (clickData.getSynchLock()) {
ListIterator clickIterator = clickData.getListIterator(0);
while (clickIterator.hasNext()) {
click = clickIterator.next();
- if (click.getAmplitudeDB() < btDisplayParameters.minAmplitude) {
+ if (click.getAmplitudeDB() < minAmpli) {
n++;
}
}
@@ -3448,29 +3513,30 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
*/
synchronized boolean shouldPlot(ClickDetection click) {
if (click == null) return false;
- if (!clickInTimeWindow(click)) return false;
- if (btDisplayParameters.showEchoes == false && click.isEcho()) {
- return false;
- }
+// if (!clickInTimeWindow(click)) return false;
+// if (btDisplayParameters.showEchoes == false && click.isEcho()) {
+// return false;
+// }
if (btDisplayParameters.VScale == BTDisplayParameters.DISPLAY_ICI) {
// if (btDisplayParameters.showUnassignedICI == false && click.getICI() < 0) return false;
if (btDisplayParameters.showUnassignedICI == false && click.getSuperDetectionsCount() <= 0) return false;
// otherwise may be ok, since will estimate all ici's on teh fly.
}
- if (btDisplayParameters.amplitudeSelect && click.getAmplitudeDB() < btDisplayParameters.minAmplitude) {
- return false;
- }
+// if (btDisplayParameters.amplitudeSelect && click.getAmplitudeDB() < btDisplayParameters.minAmplitude) {
+// return false;
+// }
if (btDisplayParameters.displayChannels > 0 && (btDisplayParameters.displayChannels & click.getChannelBitmap()) == 0) return false;
- int speciesIndex = clickControl.getClickIdentifier().codeToListIndex(click.getClickType());
- boolean showSpecies = btDisplayParameters.getShowSpecies(speciesIndex+1);
- boolean showEvents = (btDisplayParameters.showEventsOnly == false || click.getSuperDetectionsCount() > 0);
- if (btDisplayParameters.showANDEvents) {
- return showSpecies & showEvents;
- }
- else {
- return showSpecies | showEvents;
- }
+// int speciesIndex = clickControl.getClickIdentifier().codeToListIndex(click.getClickType());
+// boolean showSpecies = btDisplayParameters.getShowSpecies(speciesIndex+1);
+// boolean showEvents = (btDisplayParameters.showEventsOnly == false || click.getSuperDetectionsCount() > 0);
+// if (btDisplayParameters.showANDEvents) {
+// return showSpecies & showEvents;
+// }
+// else {
+// return showSpecies | showEvents;
+// }
+ return true;
}
/**
@@ -4085,7 +4151,7 @@ public class ClickBTDisplay extends ClickDisplay implements PamObserver, PamSett
amplitudeSelectorLabel.setText("");
}
else {
- String txt = String.format(" Amplitude Selector showing clicks > %3.1fdB", btDisplayParameters.minAmplitude);
+ String txt = String.format(" Amplitude Selector showing clicks > %3.1fdB", getDataSelector().getParams().minimumAmplitude);
amplitudeSelectorLabel.setText(txt);
}
}
diff --git a/src/clickDetector/alarm/ClickAlarmParameters.java b/src/clickDetector/alarm/ClickAlarmParameters.java
index 8bed53c6..d126f4c6 100644
--- a/src/clickDetector/alarm/ClickAlarmParameters.java
+++ b/src/clickDetector/alarm/ClickAlarmParameters.java
@@ -17,10 +17,12 @@ public class ClickAlarmParameters extends DataSelectParams implements Cloneable,
public static final long serialVersionUID = 1L;
private boolean[] useSpeciesList;
private double[] speciesWeightings;
- public boolean useEchoes;
- public boolean scoreByAmplitude;
- public boolean onlineAutoEvents, onlineManualEvents;
+ public boolean useEchoes = true;
+ public boolean scoreByAmplitude; // alarm options, probably not used any more.
+ public double minimumAmplitude;
+ public boolean onlineAutoEvents = true, onlineManualEvents = true;
public int minICIMillis;
+ private boolean clicksOREvents = false;
/*
* Which events to use ...
*/
@@ -165,5 +167,30 @@ public class ClickAlarmParameters extends DataSelectParams implements Cloneable,
return ps;
}
+ /**
+ * @return the clicksOREvents
+ */
+ public boolean isClicksOREvents() {
+ return clicksOREvents;
+ }
+
+ /**
+ * @param clicksOREvents the clicksOREvents to set
+ */
+ public void setClicksOREvents(boolean clicksOREvents) {
+ this.clicksOREvents = clicksOREvents;
+ }
+ /**
+ * @return the clicksANDEvents
+ */
+ public boolean isClicksANDEvents() {
+ return !clicksOREvents;
+ }
+
+
+ public void setClicksANDEvents(boolean clicksANDEvents) {
+ this.clicksOREvents = !clicksANDEvents;
+ }
+
}
diff --git a/src/clickDetector/dataSelector/ClickDataSelector.java b/src/clickDetector/dataSelector/ClickDataSelector.java
index 5be77c2a..9f2248d3 100644
--- a/src/clickDetector/dataSelector/ClickDataSelector.java
+++ b/src/clickDetector/dataSelector/ClickDataSelector.java
@@ -38,9 +38,9 @@ public class ClickDataSelector extends DataSelector {
@Override
public PamDialogPanel getDialogPanel() {
- if (clickSelectPanel == null) {
+// if (clickSelectPanel == null) {
clickSelectPanel = new ClickSelectPanel(this, allowScores, useEventTypes);
- }
+// }
return clickSelectPanel;
}
@Override
@@ -60,19 +60,25 @@ public class ClickDataSelector extends DataSelector {
if (clickAlarmParameters.useEchoes == false && click.isEcho()) {
return 0;
}
- /**
- * First score based on whether the event panel is in use and
- * criteria satisfied.
- */
+
+ double score = scoreClick(click);
if (useEventTypes) {
- if (wantEventType(click) == false) {
- return 0;
+ double eventScore = scoreEventType(click);
+ if (clickAlarmParameters.isClicksANDEvents()) {
+ score = Math.min(score, eventScore);
+ }
+ else {
+ score = Math.max(score, eventScore);
}
}
+ return score;
- /*
- * Now score based on whether or not it's individual click type is wanted.
- */
+ }
+
+ private double scoreClick(ClickDetection click) {
+ if (click.getAmplitudeDB() < clickAlarmParameters.minimumAmplitude) {
+ return 0;
+ }
ClickIdentifier clickIdentifier = clickControl.getClickIdentifier();
int code = click.getClickType();
if (code > 0 && clickIdentifier != null) {
@@ -81,13 +87,13 @@ public class ClickDataSelector extends DataSelector {
boolean enabled = clickAlarmParameters.getUseSpecies(code);
if (enabled == false) {
return 0;
- }
- if (isAllowScores()) {
+ }if (isAllowScores()) {
return clickAlarmParameters.getSpeciesWeight(code);
}
else {
return 1;
}
+
}
/**
@@ -95,7 +101,7 @@ public class ClickDataSelector extends DataSelector {
* @param click
* @return
*/
- private boolean wantEventType(ClickDetection click) {
+ private double scoreEventType(ClickDetection click) {
OfflineEventDataUnit oev = null;
try {
@@ -107,7 +113,7 @@ public class ClickDataSelector extends DataSelector {
int eventId = click.getOfflineEventID();
if (oev == null) {
- return clickAlarmParameters.unassignedEvents;
+ return clickAlarmParameters.unassignedEvents ? 1 : 0;
}
// see if there is a super detection and see if it's got a comment.
@@ -118,10 +124,10 @@ public class ClickDataSelector extends DataSelector {
isAutomatic = comment.startsWith("Automatic");
}
if (isAutomatic && clickAlarmParameters.onlineAutoEvents) {
- return true;
+ return 1;
}
else if (clickAlarmParameters.onlineManualEvents) {
- return true;
+ return 1;
}
// if (clickAlarmParameters.onlineAutoEvents && comment.startsWith("Automatic")) {
// return true;
@@ -134,7 +140,7 @@ public class ClickDataSelector extends DataSelector {
* list of event types and see if it's wanted.
*/
String evType = oev.getEventType();
- return clickAlarmParameters.isUseEventType(evType);
+ return clickAlarmParameters.isUseEventType(evType) ? 1 : 0;
}
@@ -188,7 +194,7 @@ public class ClickDataSelector extends DataSelector {
* @see PamguardMVC.dataSelector.DataSelector#getParams()
*/
@Override
- public DataSelectParams getParams() {
+ public ClickAlarmParameters getParams() {
return clickAlarmParameters;
}
diff --git a/src/clickDetector/dataSelector/ClickSelectPanel.java b/src/clickDetector/dataSelector/ClickSelectPanel.java
index 512e088d..60e1566a 100644
--- a/src/clickDetector/dataSelector/ClickSelectPanel.java
+++ b/src/clickDetector/dataSelector/ClickSelectPanel.java
@@ -4,6 +4,7 @@ import generalDatabase.lookupTables.LookUpTables;
import generalDatabase.lookupTables.LookupList;
import java.awt.BorderLayout;
+import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
@@ -13,11 +14,13 @@ import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import PamController.PamController;
@@ -42,6 +45,7 @@ public class ClickSelectPanel implements PamDialogPanel {
private ClickDataSelector clickDataSelector;
private JPanel mainPanel;
private boolean isViewer;
+ private JComboBox andOrBox;
public static final String mainTip = "You should select options in both the Click Type and the Event Type panels";
@@ -70,10 +74,12 @@ public class ClickSelectPanel implements PamDialogPanel {
public void setParams() {
eventTypePanel.setParams();
speciesPanel.setParams();
+ andOrBox.setSelectedIndex(clickDataSelector.getParams().isClicksANDEvents() ? 0 : 1);
}
@Override
public boolean getParams() {
+ clickDataSelector.getParams().setClicksANDEvents(andOrBox.getSelectedIndex() == 0);
return (speciesPanel.getParams() & eventTypePanel.getParams());
}
@@ -163,17 +169,26 @@ public class ClickSelectPanel implements PamDialogPanel {
// JRadioButton andEvents, orEvents;
// JRadioButton anyEvents, onlyEvents;
private JCheckBox useEchoes;
+ private JTextField minAmplitude;
private JCheckBox scoreByAmplitude;
private JTextField minICI;
SpeciesPanel () {
super();
- setLayout(new BorderLayout());
+// setLayout(new BorderLayout());
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
northPanel = new JPanel();
northPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new PamGridBagContraints();
- c.gridwidth = 3;
+ c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
+ northPanel.add(new JLabel("Minimum amplitude ", JLabel.RIGHT), c);
+ c.gridx++;
+ northPanel.add(minAmplitude = new JTextField(4), c);
+ c.gridx++;
+ northPanel.add(new JLabel(" dB"));
+ c.gridx = 0;
+ c.gridy++;
northPanel.add(new PamAlignmentPanel(useEchoes = new JCheckBox("Use Echoes"), BorderLayout.WEST), c);
c.gridwidth = 1;
c.gridy++;
@@ -185,35 +200,50 @@ public class ClickSelectPanel implements PamDialogPanel {
// minICI.setToolTipText("Minimum ICI in milliseconds");
// c.gridx++;
// northPanel.add(new JLabel(" ms", JLabel.LEFT), c);
- c.gridwidth = 3;
- c.gridy++;
- c.gridx = 0;
- northPanel.add(scoreByAmplitude = new JCheckBox("Score by amplitude"), c);
- scoreByAmplitude.setVisible(allowScores);
- scoreByAmplitude.addActionListener(new AllSpeciesListener());
+ scoreByAmplitude = new JCheckBox("Score by amplitude");
+ if (allowScores) {
+ c.gridwidth = 3;
+ c.gridy++;
+ c.gridx = 0;
+ northPanel.add(scoreByAmplitude, c);
+ scoreByAmplitude.setVisible(allowScores);
+ scoreByAmplitude.addActionListener(new AllSpeciesListener());
+ }
WestAlignedPanel walpn;
- add(BorderLayout.NORTH, walpn = new WestAlignedPanel(northPanel));
- walpn.setBorder(new SeparatorBorder("Echoes"));
+ this.add(walpn = new WestAlignedPanel(northPanel));
+ walpn.setBorder(new SeparatorBorder("Click Selection"));
JPanel centralOuterPanel = new JPanel(new BorderLayout());
centralPanel.setLayout(new GridBagLayout());
- centralOuterPanel.setBorder(new SeparatorBorder("Click Type Selection"));
+ centralOuterPanel.setBorder(new SeparatorBorder("Click Types"));
- add(BorderLayout.CENTER, centralOuterPanel);
+ this.add(centralOuterPanel);
JScrollPane scrollPane = new DialogScrollPane(new PamAlignmentPanel(centralPanel, BorderLayout.WEST), 10);
centralOuterPanel.add(BorderLayout.CENTER, scrollPane);
centralEastPanel.setLayout(new GridBagLayout());
c = new PamGridBagContraints();
- centralEastPanel.add(selectAll = new JButton("Select All"), c);
- c.gridx++;
- centralEastPanel.add(clearAll = new JButton("Clear All"), c);
+ c.ipady = 0;
+ c.insets.bottom = c.insets.top = c.insets.left = c.insets.right = 0;
+ centralEastPanel.add(selectAll = new JButton("All"), c);
+ c.gridy++;
+ centralEastPanel.add(clearAll = new JButton("None"), c);
+ selectAll.setBorder(new EmptyBorder(3,3,2,3));
+ clearAll.setBorder(new EmptyBorder(3,3,2,3));
selectAll.addActionListener(new AutoSelect(true));
clearAll.addActionListener(new AutoSelect(false));
- centralOuterPanel.add(BorderLayout.SOUTH, new PamAlignmentPanel(centralEastPanel, BorderLayout.WEST));
+ centralOuterPanel.add(BorderLayout.EAST, new PamAlignmentPanel(centralEastPanel, BorderLayout.NORTH));
centralOuterPanel.setToolTipText(mainTip);
+ this.add(andOrBox = new JComboBox<>());
+ andOrBox.setToolTipText("Select how to logically combine the click and event selections");
+ andOrBox.addItem("AND");
+ andOrBox.addItem("OR");
+ JPanel emptyPanel = new JPanel();
+ emptyPanel.setPreferredSize(new Dimension(10, 5));
+ this.add(emptyPanel);
+
setToolTipText(mainTip);
}
@@ -254,6 +284,7 @@ public class ClickSelectPanel implements PamDialogPanel {
}
}
useEchoes.setSelected(clickAlarmParameters.useEchoes);
+ minAmplitude.setText(String.format("%3.1f", clickAlarmParameters.minimumAmplitude));
minICI.setText(String.format("%d", clickAlarmParameters.minICIMillis));
scoreByAmplitude.setSelected(clickAlarmParameters.scoreByAmplitude);
allWeight.setText(String.format("%3.1f", clickAlarmParameters.getSpeciesWeight(0)));
@@ -279,6 +310,12 @@ public class ClickSelectPanel implements PamDialogPanel {
ClickAlarmParameters clickAlarmParameters = clickDataSelector.getClickAlarmParameters().clone();
clickAlarmParameters.useEchoes = useEchoes.isSelected();
+ try {
+ clickAlarmParameters.minimumAmplitude = Double.valueOf(minAmplitude.getText());
+ }
+ catch (NumberFormatException e) {
+ return PamDialog.showWarning(null, "Minimum amplitude", "Invalid minimum amplitude value");
+ }
try {
clickAlarmParameters.minICIMillis = Integer.valueOf(minICI.getText());
}
diff --git a/src/clickDetector/dialogs/ClickDisplayDialog.java b/src/clickDetector/dialogs/ClickDisplayDialog.java
index 0a049c30..5c08f7bd 100644
--- a/src/clickDetector/dialogs/ClickDisplayDialog.java
+++ b/src/clickDetector/dialogs/ClickDisplayDialog.java
@@ -31,6 +31,7 @@ import PamView.dialog.warn.WarnOnce;
import clickDetector.BTDisplayParameters;
import clickDetector.ClickControl;
import clickDetector.ClickClassifiers.ClickIdentifier;
+import clickDetector.alarm.ClickAlarmParameters;
/**
* Dialog for basic click display parameters
@@ -57,6 +58,8 @@ public class ClickDisplayDialog extends PamDialog implements ActionListener {
private SizePanel sizePanel;
private SpeciesPanel speciesPanel;
private JComboBox angleTypes;
+
+ private ClickAlarmParameters clickSelectParams;
private ClickDisplayDialog(Window owner) {
@@ -86,12 +89,13 @@ public class ClickDisplayDialog extends PamDialog implements ActionListener {
}
- public static BTDisplayParameters showDialog(ClickControl clickControl, Window parentFrame, BTDisplayParameters btDisplayParameters) {
+ public static BTDisplayParameters showDialog(ClickControl clickControl, Window parentFrame, BTDisplayParameters btDisplayParameters, ClickAlarmParameters clickSelectParams) {
if (singleInstance == null || singleInstance.getOwner() != parentFrame) {
singleInstance = new ClickDisplayDialog(parentFrame);
}
singleInstance.clickControl = clickControl;
singleInstance.btDisplayParameters = btDisplayParameters.clone();
+ singleInstance.clickSelectParams = clickSelectParams;
singleInstance.setParams(btDisplayParameters);
singleInstance.setVisible(true);
return singleInstance.btDisplayParameters;
@@ -514,14 +518,16 @@ public class ClickDisplayDialog extends PamDialog implements ActionListener {
}
}
}
- showEchoes.setSelected(btDisplayParameters.showEchoes);
+ showEchoes.setSelected(clickSelectParams.useEchoes);
if (species == null) {
showAll.setSelected(true);
}
else {
- showAll.setSelected(btDisplayParameters.getShowSpecies(0));
+// showAll.setSelected(btDisplayParameters.getShowSpecies(0));
+ showAll.setSelected(clickSelectParams.getUseSpecies(0));
for (int i = 0; i < species.length; i++) {
- species[i].setSelected(btDisplayParameters.getShowSpecies(i+1));
+ species[i].setSelected(clickSelectParams.getUseSpecies(i+1));
+// species[i].setSelected(btDisplayParameters.getShowSpecies(i+1));
}
// if (btDisplayParameters.showSpeciesList != null) {
// for (int i = 0; i < Math.min(species.length, btDisplayParameters.showSpeciesList.length);i++) {
@@ -529,9 +535,10 @@ public class ClickDisplayDialog extends PamDialog implements ActionListener {
// }
// }
}
-
- clicksInAnEvent.setSelected(btDisplayParameters.showEventsOnly);
- andOrSelection.setSelectedIndex(btDisplayParameters.showANDEvents ? 0: 1);
+ clicksInAnEvent.setSelected(clickSelectParams.onlineAutoEvents | clickSelectParams.onlineAutoEvents);
+
+// clicksInAnEvent.setSelected(btDisplayParameters.showEventsOnly);
+// andOrSelection.setSelectedIndex(btDisplayParameters.showANDEvents ? 0: 1);
// orEvents.setSelected(!btDisplayParameters.showANDEvents);
// andEvents.setSelected(btDisplayParameters.showANDEvents);
// anyEvents.setSelected(!btDisplayParameters.showEventsOnly);
@@ -540,19 +547,17 @@ public class ClickDisplayDialog extends PamDialog implements ActionListener {
enableButtons();
}
boolean getParams() {
- btDisplayParameters.showEchoes = showEchoes.isSelected();
- btDisplayParameters.setShowSpecies(0, showAll.isSelected());
- if (species != null) {
- for (int i = 0; i < species.length; i++) {
- btDisplayParameters.setShowSpecies(i+1, species[i].isSelected());
- }
-
- }
-
- btDisplayParameters.showEventsOnly = clicksInAnEvent.isSelected();
- btDisplayParameters.showANDEvents = (andOrSelection.getSelectedIndex() == 0);
-// btDisplayParameters.showANDEvents = andEvents.isSelected();
-// btDisplayParameters.showEventsOnly = onlyEvents.isSelected();
+// clickSelectParams.useEchoes = showEchoes.isSelected();
+// btDisplayParameters.setShowSpecies(0, showAll.isSelected());
+// if (species != null) {
+// for (int i = 0; i < species.length; i++) {
+// btDisplayParameters.setShowSpecies(i+1, species[i].isSelected());
+// }
+//
+// }
+//
+// btDisplayParameters.showEventsOnly = clicksInAnEvent.isSelected();
+// btDisplayParameters.showANDEvents = (andOrSelection.getSelectedIndex() == 0);
return true;
}
class AllSpeciesListener implements ActionListener {
diff --git a/src/clickDetector/offlineFuncs/OfflineToolbar.java b/src/clickDetector/offlineFuncs/OfflineToolbar.java
index 9ff5ba5f..414bae2b 100644
--- a/src/clickDetector/offlineFuncs/OfflineToolbar.java
+++ b/src/clickDetector/offlineFuncs/OfflineToolbar.java
@@ -31,12 +31,15 @@ import clickDetector.ClickBTDisplay;
import clickDetector.ClickControl;
import clickDetector.ClickDisplay;
import clickDetector.ClickClassifiers.ClickIdentifier;
+import clickDetector.alarm.ClickAlarmParameters;
+import clickDetector.dataSelector.ClickDataSelector;
import PamView.PamToolBar;
import PamView.component.PamSettingsIconButton;
import PamView.dialog.PamCheckBox;
import PamView.dialog.PamLabel;
import PamView.dialog.PamRadioButton;
import PamView.panel.PamPanel;
+import PamguardMVC.dataSelector.DataSelectParams;
public class OfflineToolbar {
@@ -252,19 +255,29 @@ public class OfflineToolbar {
return;
}
try {
+ ClickDataSelector clickDataSelector = currentBTDisplay.getDataSelector();
+ ClickAlarmParameters selectParams = clickDataSelector.getParams();
BTDisplayParameters btDisplayParameters = currentBTDisplay.getBtDisplayParameters();
- btDisplayParameters.setShowSpecies(0, showNonSpecies.isSelected());
- btDisplayParameters.showEchoes = showEchoes.isSelected();
+
+ selectParams.setUseSpecies(0, showNonSpecies.isSelected());
+// btDisplayParameters.setShowSpecies(0, showNonSpecies.isSelected());
+// btDisplayParameters.showEchoes = showEchoes.isSelected();
+ selectParams.useEchoes = showEchoes.isSelected();
+
if (clicksInAnEvent != null) {
- btDisplayParameters.showEventsOnly = clicksInAnEvent.isSelected();
+// btDisplayParameters.showEventsOnly = clicksInAnEvent.isSelected();
+// selectParams.onlineAutoEvents = selectParams.onlineManualEvents = true;
+ selectParams.unassignedEvents =clicksInAnEvent.isSelected() == false;
}
if (andOrSelection != null) {
- btDisplayParameters.showANDEvents = (andOrSelection.getSelectedIndex() == 0);
+ selectParams.setClicksANDEvents(andOrSelection.getSelectedIndex() == 0);
+// btDisplayParameters.showANDEvents = (andOrSelection.getSelectedIndex() == 0);
}
if (speciesButtons != null) {
int n = speciesButtons.length;
for (int i = 0; i < n; i++) {
- btDisplayParameters.setShowSpecies(i+1, speciesButtons[i].isSelected());
+ selectParams.setUseSpecies(i+1, speciesButtons[i].isSelected());
+// btDisplayParameters.setShowSpecies(i+1, speciesButtons[i].isSelected());
}
}
currentBTDisplay.repaintTotal();
@@ -275,23 +288,35 @@ public class OfflineToolbar {
}
private void checkButtons(BTDisplayParameters btDisplayParameters) {
- showEchoes.setSelected(btDisplayParameters.showEchoes);
- showNonSpecies.setSelected(btDisplayParameters.getShowSpecies(0));
+ ClickDataSelector clickDataSelector = currentBTDisplay.getDataSelector();
+ ClickAlarmParameters selectParams = clickDataSelector.getParams();
+ showEchoes.setSelected(selectParams.useEchoes);
+ showNonSpecies.setSelected(selectParams.getUseSpecies(0));
+// showNonSpecies.setSelected(btDisplayParameters.getShowSpecies(0));
+ boolean anySel = false;;
if (clicksInAnEvent != null) {
- clicksInAnEvent.setSelected(btDisplayParameters.showEventsOnly);
+ clicksInAnEvent.setSelected(selectParams.unassignedEvents == false);
+ anySel |= clicksInAnEvent.isSelected();
+// clicksInAnEvent.setSelected(btDisplayParameters.showEventsOnly);
}
if (speciesButtons != null) {
int n = speciesButtons.length;
for (int i = 0; i < n; i++) {
- speciesButtons[i].setSelected(btDisplayParameters.getShowSpecies(i+1));
+ speciesButtons[i].setSelected(selectParams.getUseSpecies(i+1));
+ anySel |= speciesButtons[i].isSelected();
+// speciesButtons[i].setSelected(btDisplayParameters.getShowSpecies(i+1));
}
}
// setting combo box fires actionlistener, so we have to make sure that all checkboxes have been properly set first
// or else they will get cleared later
if (andOrSelection != null) {
- andOrSelection.setSelectedIndex(btDisplayParameters.showANDEvents ? 0: 1);
+ andOrSelection.setSelectedIndex(selectParams.isClicksANDEvents() ? 0 : 1);
+// andOrSelection.setSelectedIndex(btDisplayParameters.showANDEvents ? 0: 1);
}
firstSetup = true;
+ if (anySel) {
+ selectParams.setCombinationFlag(DataSelectParams.DATA_SELECT_AND);
+ }
}
}
diff --git a/src/clickDetector/tdPlots/ClickClassSymbolModifier.java b/src/clickDetector/tdPlots/ClickClassSymbolModifier.java
index 2ad9c3c7..e27b9a4a 100644
--- a/src/clickDetector/tdPlots/ClickClassSymbolModifier.java
+++ b/src/clickDetector/tdPlots/ClickClassSymbolModifier.java
@@ -1,7 +1,13 @@
package clickDetector.tdPlots;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.border.TitledBorder;
+
import PamView.GeneralProjector;
import PamView.PamSymbol;
+import PamView.dialog.PamDialogPanel;
import PamView.symbol.PamSymbolChooser;
import PamView.symbol.SymbolData;
import PamView.symbol.modifier.SymbolModType;
@@ -32,4 +38,41 @@ public class ClickClassSymbolModifier extends SymbolModifier {
}
}
+ @Override
+ public PamDialogPanel getDialogPanel() {
+ // Just a play to check buttons and menus work. Not actually used at all so revert to super: returns null.
+ return super.getDialogPanel();
+// return new DumyPanel();
+ }
+
+ private class DumyPanel implements PamDialogPanel {
+
+ private JPanel mainPanel;
+ public DumyPanel() {
+ super();
+ mainPanel = new JPanel();
+ mainPanel.setBorder(new TitledBorder("More options"));
+ mainPanel.add(new JCheckBox("Dummy option"));
+ }
+
+ @Override
+ public JComponent getDialogComponent() {
+ // TODO Auto-generated method stub
+ return mainPanel;
+ }
+
+ @Override
+ public void setParams() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean getParams() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ }
+
}
diff --git a/src/clickDetector/tdPlots/ClickPlotInfo.java b/src/clickDetector/tdPlots/ClickPlotInfo.java
index 18cdfb7a..baa60626 100644
--- a/src/clickDetector/tdPlots/ClickPlotInfo.java
+++ b/src/clickDetector/tdPlots/ClickPlotInfo.java
@@ -9,6 +9,8 @@ import clickDetector.BTDisplayParameters;
import clickDetector.ClickControl;
import clickDetector.ClickDetection;
import clickDetector.ClickDisplayManagerParameters;
+import clickDetector.alarm.ClickAlarmParameters;
+import clickDetector.dataSelector.ClickDataSelector;
import clickDetector.dialogs.ClickDisplayDialog;
import PamView.GeneralProjector.ParameterType;
import PamView.GeneralProjector.ParameterUnits;
@@ -52,6 +54,10 @@ public class ClickPlotInfo extends TDDataInfo {
allScaleInfo[3] = slantScaleInfo;
clickHidingDialog = new ClickHidingDialog(this);
}
+
+ ClickDataSelector getDataSelector() {
+ return (ClickDataSelector) clickControl.getClickDataBlock().getDataSelector("ClickTDPlots", false);
+ }
@Override
public Double getDataValue(PamDataUnit pamDataUnit) {
@@ -110,7 +116,8 @@ public class ClickPlotInfo extends TDDataInfo {
private synchronized boolean shouldPlot(ClickDetection click) {
if (click == null) return false;
- if (btDisplayParams.showEchoes == false && click.isEcho()) {
+ boolean showEchoes = getDataSelector().getClickAlarmParameters().useEchoes;
+ if (showEchoes == false && click.isEcho()) {
return false;
}
@@ -170,7 +177,7 @@ public class ClickPlotInfo extends TDDataInfo {
*/
@Override
public boolean editOptions(Window frame) {
- BTDisplayParameters newParams = ClickDisplayDialog.showDialog(clickControl, frame, btDisplayParams);
+ BTDisplayParameters newParams = ClickDisplayDialog.showDialog(clickControl, frame, btDisplayParams, getDataSelector().getClickAlarmParameters());
if (newParams != null) {
btDisplayParams = newParams.clone();
updateSettings();
diff --git a/src/pamMaths/PamVector.java b/src/pamMaths/PamVector.java
index cbea40c9..8029e0aa 100644
--- a/src/pamMaths/PamVector.java
+++ b/src/pamMaths/PamVector.java
@@ -905,7 +905,7 @@ public class PamVector implements Serializable, Cloneable, PamCoordinate, Manage
}
double[] angs = new double[3];
angs[0] = vectors[0].getHeading();
- angs[1] = vectors[1].getPitch();
+ angs[1] = vectors[0].getPitch();
if (vectors.length >= 2) {
angs[2] = vectors[1].getPitch();
}
diff --git a/src/whistlesAndMoans/dataSelector/WMDDataSelector.java b/src/whistlesAndMoans/dataSelector/WMDDataSelector.java
index 34ec0027..9ded69a2 100644
--- a/src/whistlesAndMoans/dataSelector/WMDDataSelector.java
+++ b/src/whistlesAndMoans/dataSelector/WMDDataSelector.java
@@ -39,6 +39,9 @@ public class WMDDataSelector extends DataSelector {
@Override
public double scoreData(PamDataUnit pamDataUnit) {
+ if (getParams().getCombinationFlag() == DataSelectParams.DATA_SELECT_DISABLE) {
+ return 1;
+ }
ConnectedRegionDataUnit crDataUnit = (ConnectedRegionDataUnit) pamDataUnit;
return (wantWhistle(crDataUnit) ? 1: 0);
}