diff --git a/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java b/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java
index de1b7cde..06d1becb 100644
--- a/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java
+++ b/src/main/java/io/github/dsheirer/controller/channel/ChannelController.java
@@ -1,3 +1,18 @@
+/*******************************************************************************
+ * sdr-trunk
+ * Copyright (C) 2014-2018 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 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
+ *
+ ******************************************************************************/
package io.github.dsheirer.controller.channel;
import com.jidesoft.swing.JideSplitPane;
@@ -24,8 +39,7 @@ import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-public class ChannelController extends JPanel
- implements ActionListener, ListSelectionListener
+public class ChannelController extends JPanel implements ActionListener, ListSelectionListener
{
private static final long serialVersionUID = 1L;
@@ -168,9 +182,13 @@ public class ChannelController extends JPanel
if( index >= 0 )
{
int translatedIndex = mChannelTable.convertRowIndexToView( index );
- mChannelTable.setRowSelectionInterval( translatedIndex, translatedIndex );
- mChannelTable.scrollRectToVisible(
- new Rectangle( mChannelTable.getCellRect( translatedIndex, 0, true ) ) );
+
+ if(translatedIndex >= 0)
+ {
+ mChannelTable.setRowSelectionInterval( translatedIndex, translatedIndex );
+ mChannelTable.scrollRectToVisible(
+ new Rectangle( mChannelTable.getCellRect( translatedIndex, 0, true ) ) );
+ }
}
}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java b/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java
index 3350bcae..3b904a83 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/TunerModel.java
@@ -289,15 +289,7 @@ public class TunerModel extends AbstractTableModel implements Listener 0)
- {
- return channelCount + " (LOCKED)";
- }
- else
- {
- return "0";
- }
+ return channelCount + " (" + (tuner.getTunerController().isLocked() ? "LOCKED)" : "UNLOCKED)");
case FREQUENCY_ERROR:
double ppm = tuner.getTunerController().getFrequencyCorrection();
return mFrequencyErrorPPMFormat.format(ppm);
diff --git a/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java b/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java
index 3e6e8545..8520146a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/manager/HeterodyneChannelSourceManager.java
@@ -85,6 +85,10 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager
//Add to the channel list and update the tuner center frequency as needed
mTunerChannels.add(tunerChannel);
updateTunerFrequency();
+
+ //Lock the tuner controller frequency and sample rate
+ mTunerController.setLocked(true);
+
broadcast(SourceEvent.channelCountChange(getTunerChannelCount()));
return tunerChannelSource;
@@ -138,6 +142,8 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager
broadcastToChannels(tunerSourceEvent);
break;
case NOTIFICATION_SAMPLE_RATE_CHANGE:
+ case NOTIFICATION_FREQUENCY_AND_SAMPLE_RATE_LOCKED:
+ case NOTIFICATION_FREQUENCY_AND_SAMPLE_RATE_UNLOCKED:
//no-op
break;
default:
@@ -205,6 +211,12 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager
mChannelSources.remove(channelSource);
mTunerChannels.remove(channelSource.getTunerChannel());
channelSource.dispose();
+
+ //Unlock the tuner controller if there are no more channels
+ if(getTunerChannelCount() == 0)
+ {
+ mTunerController.setLocked(false);
+ }
broadcast(SourceEvent.channelCountChange(getTunerChannelCount()));
}
break;
@@ -212,8 +224,12 @@ public class HeterodyneChannelSourceManager extends ChannelSourceManager
//Rebroadcast so that the tuner source can process this event
broadcast(sourceEvent);
break;
+ case NOTIFICATION_CHANNEL_COUNT_CHANGE:
+ //Lock the tuner controller frequency & sample rate when we're processing channels
+ break;
default:
mLog.info("Unrecognized Source Event received from channel: " + sourceEvent);
+ break;
}
}
}