mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
Merges from master branch.
This commit is contained in:
@@ -1,19 +1,16 @@
|
||||
/*******************************************************************************
|
||||
* sdrtrunk
|
||||
* sdr-trunk
|
||||
* Copyright (C) 2014-2017 Dennis Sheirer
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
* You should have received a copy of the GNU General Public License along with this program.
|
||||
* If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
******************************************************************************/
|
||||
package io.github.dsheirer.spectrum;
|
||||
@@ -33,10 +30,9 @@ import io.github.dsheirer.sample.complex.ComplexBuffer;
|
||||
import io.github.dsheirer.settings.ColorSetting.ColorSettingName;
|
||||
import io.github.dsheirer.settings.ColorSettingMenuItem;
|
||||
import io.github.dsheirer.settings.SettingsManager;
|
||||
import io.github.dsheirer.source.ISourceEventProcessor;
|
||||
import io.github.dsheirer.source.SourceEvent;
|
||||
import io.github.dsheirer.source.tuner.Tuner;
|
||||
import io.github.dsheirer.source.tuner.frequency.FrequencyChangeEvent;
|
||||
import io.github.dsheirer.source.tuner.frequency.FrequencyChangeEvent.Event;
|
||||
import io.github.dsheirer.source.tuner.frequency.IFrequencyChangeProcessor;
|
||||
import io.github.dsheirer.spectrum.OverlayPanel.ChannelDisplay;
|
||||
import io.github.dsheirer.spectrum.converter.ComplexDecibelConverter;
|
||||
import io.github.dsheirer.spectrum.converter.DFTResultsConverter;
|
||||
@@ -50,11 +46,25 @@ import net.miginfocom.swing.MigLayout;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.JCheckBoxMenuItem;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSeparator;
|
||||
import javax.swing.JSlider;
|
||||
import javax.swing.JSplitPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.MouseInputAdapter;
|
||||
import java.awt.*;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ComponentEvent;
|
||||
@@ -65,7 +75,7 @@ import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuffer>, IFrequencyChangeProcessor, IDFTWidthChangeProcessor
|
||||
public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuffer>, ISourceEventProcessor, IDFTWidthChangeProcessor
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -223,7 +233,7 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
*
|
||||
* @param zoom level, 0 - 6.
|
||||
* @param frequency under the mouse to maintain while zooming
|
||||
* @param xAxisOffset where to maintain the frequency under the mouse
|
||||
* @param windowOffset where to maintain the frequency under the mouse
|
||||
*/
|
||||
public void setZoom(int zoom, long frequency, double windowOffset)
|
||||
{
|
||||
@@ -247,7 +257,7 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
//Calculate the bin offset into the newly sized zoom window that
|
||||
//would place the frequency in the same proportional window location
|
||||
//that it was in the previous zoom size
|
||||
double windowBinOffset = (double) getZoomWindowSizeInBins() * windowOffset;
|
||||
double windowBinOffset = (double)getZoomWindowSizeInBins() * windowOffset;
|
||||
|
||||
//Set the overall offset to place the reference frequency in the
|
||||
//same location in the newly zoomed window
|
||||
@@ -276,7 +286,7 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
offset = mDFTSize.getSize() - getZoomWindowSizeInBins();
|
||||
}
|
||||
|
||||
mDFTZoomWindowOffset = (int) offset;
|
||||
mDFTZoomWindowOffset = (int)offset;
|
||||
|
||||
mSpectrumPanel.setZoomWindowOffset(mDFTZoomWindowOffset);
|
||||
mOverlayPanel.setZoomWindowOffset(mDFTZoomWindowOffset);
|
||||
@@ -294,7 +304,7 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
|
||||
public int getZoomMultiplier()
|
||||
{
|
||||
return (int) Math.pow(2.0, mZoom);
|
||||
return (int)Math.pow(2.0, mZoom);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -310,9 +320,9 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
|
||||
if(mOverlayPanel.containsFrequency(frequency))
|
||||
{
|
||||
offset = (double) mDFTSize.getSize() *
|
||||
((double) (frequency - mOverlayPanel.getMinFrequency()) /
|
||||
(double) mOverlayPanel.getBandwidth());
|
||||
offset = (double)mDFTSize.getSize() *
|
||||
((double)(frequency - mOverlayPanel.getMinFrequency()) /
|
||||
(double)mOverlayPanel.getBandwidth());
|
||||
}
|
||||
|
||||
return offset;
|
||||
@@ -357,15 +367,15 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
mWaterfallPanel.addMouseMotionListener(mouser);
|
||||
mWaterfallPanel.addMouseWheelListener(mouser);
|
||||
|
||||
/* Attempt to set a 50/50 split preferred size for the split pane */
|
||||
/* Attempt to set a 50/50 split preferred size for the split pane */
|
||||
double totalHeight = mLayeredPanel.getPreferredSize().getHeight() +
|
||||
mWaterfallPanel.getPreferredSize().getHeight();
|
||||
|
||||
mLayeredPanel.setPreferredSize(new Dimension((int) mLayeredPanel
|
||||
.getPreferredSize().getWidth(), (int) (totalHeight / 2.0d)));
|
||||
mLayeredPanel.setPreferredSize(new Dimension((int)mLayeredPanel
|
||||
.getPreferredSize().getWidth(), (int)(totalHeight / 2.0d)));
|
||||
|
||||
mWaterfallPanel.setPreferredSize(new Dimension((int) mWaterfallPanel
|
||||
.getPreferredSize().getWidth(), (int) (totalHeight / 2.0d)));
|
||||
mWaterfallPanel.setPreferredSize(new Dimension((int)mWaterfallPanel
|
||||
.getPreferredSize().getWidth(), (int)(totalHeight / 2.0d)));
|
||||
|
||||
//Create the split pane to hold the layered pane and the waterfall
|
||||
JideSplitPane splitPane = new JideSplitPane(JSplitPane.VERTICAL_SPLIT);
|
||||
@@ -385,17 +395,17 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
mDFTConverter = new ComplexDecibelConverter();
|
||||
mDFTProcessor.addConverter(mDFTConverter);
|
||||
|
||||
mDFTConverter.addListener((DFTResultsListener) mSpectrumPanel);
|
||||
mDFTConverter.addListener((DFTResultsListener) mWaterfallPanel);
|
||||
mDFTConverter.addListener((DFTResultsListener)mSpectrumPanel);
|
||||
mDFTConverter.addListener((DFTResultsListener)mWaterfallPanel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Receives frequency change events -- primarily from tuner components.
|
||||
*/
|
||||
public void frequencyChanged(FrequencyChangeEvent event)
|
||||
public void process(SourceEvent event)
|
||||
{
|
||||
mOverlayPanel.frequencyChanged(event);
|
||||
mDFTProcessor.frequencyChanged(event);
|
||||
mOverlayPanel.process(event);
|
||||
mDFTProcessor.process(event);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -425,19 +435,15 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
mTuner.getTunerController().addListener(this);
|
||||
|
||||
//Register the dft processor to receive samples from the tuner
|
||||
mTuner.addListener((Listener<ComplexBuffer>) mDFTProcessor);
|
||||
mTuner.getSourceManager().addComplexBufferListener(mDFTProcessor);
|
||||
|
||||
mSpectrumPanel.setSampleSize(mTuner.getSampleSize());
|
||||
|
||||
//Fire frequency and sample rate change events so that the spectrum
|
||||
//and overlay panels can synchronize
|
||||
frequencyChanged(new FrequencyChangeEvent(
|
||||
Event.NOTIFICATION_FREQUENCY_CHANGE,
|
||||
mTuner.getTunerController().getFrequency()));
|
||||
process(SourceEvent.frequencyChange(mTuner.getTunerController().getFrequency()));
|
||||
|
||||
frequencyChanged(new FrequencyChangeEvent(
|
||||
Event.NOTIFICATION_SAMPLE_RATE_CHANGE,
|
||||
mTuner.getTunerController().getSampleRate()));
|
||||
process(SourceEvent.sampleRateChange(mTuner.getTunerController().getSampleRate()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,7 +458,7 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
mTuner.getTunerController().removeListener(this);
|
||||
|
||||
//Deregister the dft processor from receiving samples
|
||||
mTuner.removeListener((Listener<ComplexBuffer>) mDFTProcessor);
|
||||
mTuner.getTunerController().removeComplexBufferListener(mDFTProcessor);
|
||||
mTuner = null;
|
||||
}
|
||||
}
|
||||
@@ -508,7 +514,7 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
|
||||
long frequency = mOverlayPanel.getFrequencyFromAxis(e.getX());
|
||||
|
||||
double windowOffset = (double) e.getX() / (double) getWidth();
|
||||
double windowOffset = (double)e.getX() / (double)getWidth();
|
||||
|
||||
setZoom(zoom, frequency, windowOffset);
|
||||
}
|
||||
@@ -526,9 +532,9 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
|
||||
int dragDistance = mDragStartX - event.getX();
|
||||
|
||||
double binDistance = (double) dragDistance / mPixelsPerBin;
|
||||
double binDistance = (double)dragDistance / mPixelsPerBin;
|
||||
|
||||
int offset = (int) (mDFTZoomWindowOffsetAtDragStart + binDistance);
|
||||
int offset = (int)(mDFTZoomWindowOffsetAtDragStart + binDistance);
|
||||
|
||||
if(offset < 0)
|
||||
{
|
||||
@@ -552,9 +558,9 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
|
||||
mDFTZoomWindowOffsetAtDragStart = mDFTZoomWindowOffset;
|
||||
|
||||
mPixelsPerBin = (double) getWidth() /
|
||||
((double) (mDFTSize.getSize()) /
|
||||
(double) getZoomMultiplier());
|
||||
mPixelsPerBin = (double)getWidth() /
|
||||
((double)(mDFTSize.getSize()) /
|
||||
(double)getZoomMultiplier());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -773,12 +779,12 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
displayMenu.add(smoothingMenu);
|
||||
}
|
||||
|
||||
/*
|
||||
* Zoom menu
|
||||
*/
|
||||
/*
|
||||
* Zoom menu
|
||||
*/
|
||||
JMenuItem zoomMenu = new JMenu("Zoom");
|
||||
|
||||
double windowOffset = (double) event.getX() / (double) getWidth();
|
||||
double windowOffset = (double)event.getX() / (double)getWidth();
|
||||
|
||||
zoomMenu.add(new ZoomItem(frequency, windowOffset));
|
||||
|
||||
@@ -943,4 +949,4 @@ public class SpectralDisplayPanel extends JPanel implements Listener<ComplexBuff
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user