Skip to content

Commit

Permalink
Merge branch 'feature/hide-frequency-panel' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
paulosousadias committed Feb 29, 2024
2 parents 5dcdff1 + 8189321 commit 2dd0d0d
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,12 @@
import java.awt.Component;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.plaf.basic.BasicSliderUI;

import net.miginfocom.swing.MigLayout;
Expand All @@ -58,7 +61,6 @@

/**
* @author jqcorreia
*
*/
@PluginDescription(author = "jqcorreia", name = "Sidescan Analyzer", icon = "pt/lsts/neptus/plugins/echosounder/echosounder.png")
public class SidescanAnalyzer extends JPanel implements MRAVisualization, TimelineChangeListener, LogMarkerListener {
Expand All @@ -70,10 +72,12 @@ public class SidescanAnalyzer extends JPanel implements MRAVisualization, Timeli
private long lastPingTime;
private long currentTime;
private long lastUpdateTime;
private ArrayList<SidescanPanel> sidescanPanels = new ArrayList<SidescanPanel>();
private ArrayList<LogMarker> markerList = new ArrayList<LogMarker>();
private Map<Integer, SidescanPanel> sidescanPanels = new HashMap<>();
private Map<Integer, JToggleButton> panelButtons = new HashMap<>();
private ArrayList<LogMarker> markerList = new ArrayList<>();
private SidescanParser ssParser;
private SidescanHistogramNormalizer histogram;
private ArrayList<SidescanPanel> currentPanels = new ArrayList<>();

public SidescanAnalyzer(MRAPanel panel) {
this.mraPanel = panel;
Expand Down Expand Up @@ -105,18 +109,57 @@ public void paintTicks(Graphics g) {
}
});


for (Integer subsys : ssParser.getSubsystemList()) {
sidescanPanels.add(new SidescanPanel(this, ssParser, subsys));
JToggleButton button = new JToggleButton(subsys.toString());
button.addActionListener(e -> {
updateSidescanPanel(subsys);
});
panelButtons.put(subsys, button);
}

// Layout building
setLayout(new MigLayout());

for (SidescanPanel p : sidescanPanels) {
add(p, "w 100%, h 100%, wrap");
for (Integer subsys : ssParser.getSubsystemList()) {
SidescanPanel panel = new SidescanPanel(this, ssParser, subsys, ssParser.getSubsystemList());
panel.setToolbarSubsystemListener(new SubsystemListener() {
@Override
public void setSubsystem(int subsystem) {
updateSidescanPanel(subsystem);
}
});
sidescanPanels.put(subsys, panel);
currentPanels.add(panel);
add(panel, "w 100%, h 100%, wrap");
}
add(timeline, "w 100%, split");
}

private void updateSidescanPanel(int subsystem) {
// Display all
for (SidescanPanel panel : currentPanels) {
remove(panel);
}
remove(timeline);
currentPanels.clear();

if (subsystem == -1) {
for (SidescanPanel panel : sidescanPanels.values()) {
currentPanels.add(panel);
}
}
else {
currentPanels.add(sidescanPanels.get(subsystem));
}

for (SidescanPanel panel : currentPanels) {
panel.notifySubsystem(subsystem);
add(panel, "w 100%, h 100%, wrap");
}
add(timeline, "w 100%, split");
repaint();
revalidate();
}

@Override
Expand Down Expand Up @@ -157,21 +200,23 @@ public void timelineChanged(int value) {
// If this is true but currentTime and lastTime as the same value
if (Math.abs(value - currentTime) > 1000 / 15 * timeline.getSpeed()) {
// this means it dragged
for (SidescanPanel p : sidescanPanels)
for (SidescanPanel p : sidescanPanels.values()) {
p.clearLines();
}

lastUpdateTime = value;
}
else
else {
lastUpdateTime = currentTime;
}

currentTime = value;

if (currentTime + firstPingTime >= lastPingTime) {
timeline.pause();
}

for (SidescanPanel p : sidescanPanels) {
for (SidescanPanel p : sidescanPanels.values()) {
try {
p.updateImage(currentTime, lastUpdateTime);
p.repaint();
Expand Down Expand Up @@ -225,15 +270,16 @@ public ArrayList<LogMarker> getMarkerList() {

@Override
public void onCleanup() {
if (timeline != null)
if (timeline != null) {
timeline.shutdown();
}

sidescanPanels.stream().forEach((p) -> p.clean());
sidescanPanels.values().stream().forEach((p) -> p.clean());
sidescanPanels.clear();
removeAll();
mraPanel = null;
markerList.clear();
if (ssParser!=null) {
if (ssParser != null) {
ssParser.cleanup();
ssParser = null;
}
Expand Down Expand Up @@ -263,5 +309,4 @@ public void removeLogMarker(LogMarker e) {
public void goToMarker(LogMarker marker) {

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import java.io.File;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
Expand Down Expand Up @@ -121,7 +122,7 @@ public class SidescanPanel extends JPanel implements MouseListener, MouseMotionL

private final SidescanAnalyzer parent;
SidescanConfig config = new SidescanConfig();
private final SidescanToolbar toolbar = new SidescanToolbar(this);
private final SidescanToolbar toolbar;

private final SidescanParameters sidescanParams = new SidescanParameters(0, 0); // Initialize it to zero for now

Expand Down Expand Up @@ -322,12 +323,12 @@ protected boolean record = false;
private final Object lockTimelineChangeListenerExecution = new Object();
private ScheduledFuture<?> timelineChangeListenerExecution;

public SidescanPanel(SidescanAnalyzer analyzer, SidescanParser parser, int subsystem) {
public SidescanPanel(SidescanAnalyzer analyzer, SidescanParser parser, int subsystem, List<Integer> subsystemList) {
this.parent = analyzer;
ssParser = parser;
toolbar = new SidescanToolbar(subsystemList, this);
initialize();
this.subsystem = subsystem;

posHud = new MraVehiclePosHud(analyzer.mraPanel.getSource(), config.hudSize, config.hudSize);
}

Expand Down Expand Up @@ -1459,4 +1460,16 @@ public void mouseExited(MouseEvent e) {
mouseX = mouseY = -1;
repaint();
}

public void setToolbarSubsystemListener(SubsystemListener subsystemListener) {
toolbar.setSubsystemListener(subsystemListener);
}

public void notifySubsystem(int subsystem) {
if (toolbar != null) {
toolbar.setCurrentSubsystem(subsystem);
}
clearLines();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@

import javax.swing.AbstractAction;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JSlider;
Expand All @@ -56,11 +57,9 @@
import pt.lsts.neptus.gui.swing.RangeSlider;
import pt.lsts.neptus.i18n.I18n;
import pt.lsts.neptus.plugins.sidescan.SidescanPanel.InteractionMode;
import pt.lsts.neptus.util.MathMiscUtils;

/**
* @author jqcorreia
*
*/
public class SidescanToolbar extends JToolBar {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -90,6 +89,10 @@ public class SidescanToolbar extends JToolBar {
JToggleButton btnLogarithmicDecompression = new JToggleButton(I18n.text("DEC"));
final JSpinner spinLogarithmicDecompression = new JSpinner();
private final SpinnerNumberModel modelLogarithmicDecompression = new SpinnerNumberModel(1.7, 0.0, 100.0, 0.1);
private SubsystemListener subsystemListener;

private final List<Integer> subsystemList;
private ArrayList<JToggleButton> subsystemButtons;

JButton btnConfig = new JButton(new AbstractAction(I18n.textc("Config", "Configuration")) {
private static final long serialVersionUID = -878895322319699542L;
Expand All @@ -104,14 +107,17 @@ public void actionPerformed(ActionEvent e) {
PropertiesEditor.editProperties(panel.config, SwingUtilities.getWindowAncestor(panel), true);
panel.config.saveProps();

if (panel.config.tvgGain != (Double) spinTVG.getValue())
if (panel.config.tvgGain != (Double) spinTVG.getValue()) {
spinTVG.setValue(panel.config.tvgGain);
}

if (panel.config.normalization != (Double) spinNormalization.getValue())
if (panel.config.normalization != (Double) spinNormalization.getValue()) {
spinNormalization.setValue(panel.config.normalization);
}

if (panel.config.logartihmicDecompression != (Double) spinLogarithmicDecompression.getValue())
if (panel.config.logartihmicDecompression != (Double) spinLogarithmicDecompression.getValue()) {
spinLogarithmicDecompression.setValue(panel.config.logartihmicDecompression);
}
}
});

Expand All @@ -120,20 +126,26 @@ public void actionPerformed(ActionEvent e) {
public void actionPerformed(ActionEvent e) {
SidescanPanel.InteractionMode imode = SidescanPanel.InteractionMode.NONE;

if (btnInfo.isSelected())
if (btnInfo.isSelected()) {
imode = InteractionMode.INFO;
if (btnMark.isSelected())
}
if (btnMark.isSelected()) {
imode = InteractionMode.MARK;
if (btnMeasure.isSelected())
}
if (btnMeasure.isSelected()) {
imode = InteractionMode.MEASURE;
if (btnMeasureHeight.isSelected())
}
if (btnMeasureHeight.isSelected()) {
imode = InteractionMode.MEASURE_HEIGHT;
}

for (SidescanPanel panel : panelList) {
panel.setInteractionMode(imode);
panel.setZoom(btnZoom.isSelected());
}
};
}

;
};

private final ChangeListener alGains = new ChangeListener() {
Expand All @@ -157,14 +169,15 @@ public void stateChanged(ChangeEvent e) {
}
};

public SidescanToolbar(SidescanPanel... panel) {
public SidescanToolbar(List<Integer> subsystemList, SidescanPanel... panel) {
super();
for (SidescanPanel p : panel) {
this.panelList.add(p);
}
this.spinNormalization.setModel(modelNormalization);
this.spinTVG.setModel(modelTVG);
this.spinLogarithmicDecompression.setModel(modelLogarithmicDecompression);
this.subsystemList = subsystemList;
buildToolbar();
}

Expand All @@ -180,6 +193,45 @@ private void buildToolbar() {
add(btnMark);
add(btnZoom);

if (subsystemList.size() > 1) {
addSeparator();

ButtonGroup subsystemButtonGroup = new ButtonGroup() {
@Override
public void setSelected(ButtonModel model, boolean selected) {
if (selected) {
super.setSelected(model, selected);
}
else {
clearSelection();
}
}
};
subsystemButtons = new ArrayList<>();
for (int i = 1; i <= subsystemList.size(); i++) {
Integer subsystem = subsystemList.get(i - 1);
JToggleButton subsystemButton = new JToggleButton("CH " + i);
subsystemButtonGroup.add(subsystemButton);
subsystemButtons.add(subsystemButton);
subsystemButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int subsystem = -1;
for (int i = 0; i < subsystemButtons.size(); i++) {
JToggleButton button = subsystemButtons.get(i);
if (button.isSelected()) {
subsystem = subsystemList.get(i);
break;
}
}
if (subsystemListener != null) {
subsystemListener.setSubsystem(subsystem);
}
}
});
add(subsystemButton);
}
}

addSeparator();
add(lblNormalization);
add(spinNormalization);
Expand Down Expand Up @@ -213,4 +265,21 @@ private void buildToolbar() {

btnAutoEgn.addChangeListener(autoEgnChangeListener);
}

public void setSubsystemListener(SubsystemListener subsystemListener) {
this.subsystemListener = subsystemListener;
}

public void setCurrentSubsystem(Integer subsystem) {
for (int i = 0; i < subsystemButtons.size(); i++) {
JToggleButton subsystemButton = subsystemButtons.get(i);
if (subsystem == -1) {
subsystemButton.setSelected(false);
}
else if (subsystem.equals(subsystemList.get(i))) {
subsystemButton.setSelected(true);
}
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package pt.lsts.neptus.plugins.sidescan;

public interface SubsystemListener {
public void setSubsystem(int subsystem);
}

0 comments on commit 2dd0d0d

Please sign in to comment.