From 6fa3089bc9624e72f17247677de7584de2b00e12 Mon Sep 17 00:00:00 2001 From: denny Date: Mon, 7 Mar 2016 20:43:43 -0500 Subject: [PATCH] WIP #34 - adds tuner model and view tab, preparing to remove the configuration panel from the controller view. --- src/controller/ControllerPanel.java | 10 ++- src/gui/SDRTrunk.java | 6 +- src/source/SampleProvider.java | 28 --------- src/source/TunerModel.java | 88 +++++++++++++++++++++++++++ src/source/TunerViewPanel.java | 94 +++++++++++++++++++++++++++++ src/source/tuner/TunerManager.java | 18 ++++++ 6 files changed, 214 insertions(+), 30 deletions(-) delete mode 100644 src/source/SampleProvider.java create mode 100644 src/source/TunerModel.java create mode 100644 src/source/TunerViewPanel.java diff --git a/src/controller/ControllerPanel.java b/src/controller/ControllerPanel.java index c9018a7c..79d24625 100644 --- a/src/controller/ControllerPanel.java +++ b/src/controller/ControllerPanel.java @@ -35,6 +35,8 @@ import module.decode.state.ChannelList; import net.miginfocom.swing.MigLayout; import settings.SettingsManager; import source.SourceManager; +import source.TunerViewPanel; +import source.TunerModel; import spectrum.ChannelSpectrumPanel; import alias.AliasController; import alias.AliasModel; @@ -55,6 +57,8 @@ public class ControllerPanel extends JPanel private ChannelList mChannelStateList; + private TunerViewPanel mTunerManagerPanel; + private CallEventPanel mCallEventPanel; private MessageActivityPanel mMessageActivityPanel; @@ -87,7 +91,8 @@ public class ControllerPanel extends JPanel ChannelProcessingManager channelProcessingManager, MapService mapService, SettingsManager settingsManager, - SourceManager sourceManager ) + SourceManager sourceManager, + TunerModel tunerModel ) { mChannelModel = channelModel; mController = controller; @@ -111,6 +116,8 @@ public class ControllerPanel extends JPanel sourceManager, aliasModel ); mAliasController = new AliasController( aliasModel, mSettingsManager ); + + mTunerManagerPanel = new TunerViewPanel( tunerModel, mSettingsManager ); init(); } @@ -138,6 +145,7 @@ public class ControllerPanel extends JPanel mTabbedPane.setForeground( Color.BLACK ); mTabbedPane.addTab( "Channels", mChannelController ); mTabbedPane.addTab( "Aliases", mAliasController ); + mTabbedPane.addTab( "Tuners", mTunerManagerPanel ); mTabbedPane.addTab( "Configuration", mSystemControlSplitPane ); mTabbedPane.addTab( "Channel Spectrum", mChannelSpectrumPanel ); mTabbedPane.addTab( "Events", mCallEventPanel ); diff --git a/src/gui/SDRTrunk.java b/src/gui/SDRTrunk.java index 505f0dd9..16658a8f 100644 --- a/src/gui/SDRTrunk.java +++ b/src/gui/SDRTrunk.java @@ -56,6 +56,7 @@ import properties.SystemProperties; import record.RecorderManager; import settings.SettingsManager; import source.SourceManager; +import source.TunerModel; import source.tuner.Tuner; import source.tuner.TunerSelectionListener; import spectrum.SpectralDisplayPanel; @@ -130,6 +131,9 @@ public class SDRTrunk SourceManager sourceManager = new SourceManager( mSettingsManager, threadPoolManager ); + + TunerModel tunerModel = new TunerModel(); + tunerModel.addTuners( sourceManager.getTunerManager().getTuners() ); ChannelProcessingManager channelProcessingManager = new ChannelProcessingManager( channelModel, channelMapModel, @@ -158,7 +162,7 @@ public class SDRTrunk mControllerPanel = new ControllerPanel( audioManager, configurationControllerModel, aliasModel, channelModel, channelMapModel, channelProcessingManager, - mapService, mSettingsManager, sourceManager ); + mapService, mSettingsManager, sourceManager, tunerModel ); mSpectralPanel = new SpectralDisplayPanel( configurationControllerModel, channelModel, channelProcessingManager, mSettingsManager ); diff --git a/src/source/SampleProvider.java b/src/source/SampleProvider.java deleted file mode 100644 index 3cc84749..00000000 --- a/src/source/SampleProvider.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * SDR Trunk - * Copyright (C) 2014 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 source; - -import sample.SampleType; - -public interface SampleProvider -{ - /** - * Real or Complex - */ - public abstract SampleType getSampleType(); -} diff --git a/src/source/TunerModel.java b/src/source/TunerModel.java new file mode 100644 index 00000000..dd51250e --- /dev/null +++ b/src/source/TunerModel.java @@ -0,0 +1,88 @@ +package source; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.AbstractListModel; + +import source.tuner.Tuner; + +public class TunerModel extends AbstractListModel +{ + private static final long serialVersionUID = 1L; + + private List mTuners = new ArrayList<>(); + + public TunerModel() + { + } + + /** + * List of Tuners currently in the model + */ + public List getTuners() + { + return mTuners; + } + + public void addTuners( List Tuners ) + { + for( Tuner tuner: Tuners ) + { + addTuner( tuner ); + } + } + + /** + * Adds the Tuner to this model + */ + public void addTuner( Tuner tuner ) + { + if( !mTuners.contains( tuner ) ) + { + mTuners.add( tuner ); + + int index = mTuners.indexOf( tuner ); + + fireIntervalAdded( this, index, index ); + } + } + + /** + * Removes the Tuner from this model + */ + public void removeTuner( Tuner tuner ) + { + if( mTuners.contains( tuner ) ) + { + int index = mTuners.indexOf( tuner ); + + mTuners.remove( tuner ); + + fireIntervalRemoved( this, index, index ); + } + } + + /** + * Number of Tuners in this model + */ + @Override + public int getSize() + { + return mTuners.size(); + } + + /** + * Returns the Tuner at the specified index + */ + @Override + public Tuner getElementAt( int index ) + { + if( index <= mTuners.size() ) + { + return mTuners.get( index ); + } + + return null; + } +} diff --git a/src/source/TunerViewPanel.java b/src/source/TunerViewPanel.java new file mode 100644 index 00000000..e2b9ef57 --- /dev/null +++ b/src/source/TunerViewPanel.java @@ -0,0 +1,94 @@ +package source; + +import gui.editor.EmptyEditor; + +import java.awt.Component; + +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import net.miginfocom.swing.MigLayout; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import settings.SettingsManager; +import source.tuner.Tuner; +import source.tuner.TunerManager; + +import com.jidesoft.swing.JideSplitPane; + +public class TunerViewPanel extends JPanel +{ + private static final long serialVersionUID = 1L; + private final static Logger mLog = LoggerFactory.getLogger( TunerViewPanel.class ); + + private TunerModel mTunerModel; + private SettingsManager mSettingsManager; + private JideSplitPane mSplitPane; + private JList mTunerList; + + public TunerViewPanel( TunerModel tunerModel, SettingsManager settingsManager ) + { + mTunerModel = tunerModel; + mSettingsManager = settingsManager; + + init(); + } + + private void init() + { + setLayout( new MigLayout( "insets 1 1 1 1", "[fill,grow]", "[fill,grow]" ) ); + + mTunerList = new JList<>( mTunerModel ); + mTunerList.setLayoutOrientation( JList.VERTICAL ); + mTunerList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); + mTunerList.addListSelectionListener( new ListSelectionListener() + { + @Override + public void valueChanged( ListSelectionEvent event ) + { + if( !event.getValueIsAdjusting() ) + { + Tuner selected = mTunerList.getSelectedValue(); + + Component component = null; + + if( selected != null ) + { + JPanel tunerEditor = TunerManager + .getEditor( mSettingsManager, selected ); + + component = new JScrollPane( tunerEditor ); + } + else + { + component = new EmptyEditor(); + } + + int split = mSplitPane.getDividerLocation( 0 ); + + mSplitPane.remove( 2 ); + mSplitPane.add( component ); + mSplitPane.setDividerLocation( 0, split ); + validate(); + } + } + } ); + + JScrollPane listScroller = new JScrollPane( mTunerList ); + + JScrollPane editorScroller = new JScrollPane( new EmptyEditor() ); + + mSplitPane = new JideSplitPane(); + mSplitPane.setOrientation( JideSplitPane.HORIZONTAL_SPLIT ); + mSplitPane.add( listScroller ); + mSplitPane.add( editorScroller ); + + add( mSplitPane ); + } +} diff --git a/src/source/tuner/TunerManager.java b/src/source/tuner/TunerManager.java index 759bf7d6..38b10e0a 100644 --- a/src/source/tuner/TunerManager.java +++ b/src/source/tuner/TunerManager.java @@ -17,12 +17,16 @@ ******************************************************************************/ package source.tuner; +import gui.editor.EmptyEditor; + import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.concurrent.RejectedExecutionException; +import javax.swing.JPanel; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.usb4java.Device; @@ -38,6 +42,7 @@ import source.config.SourceConfiguration; import source.mixer.MixerManager; import source.tuner.airspy.AirspyTuner; import source.tuner.airspy.AirspyTunerController; +import source.tuner.airspy.AirspyTunerEditorPanel; import source.tuner.fcd.FCDTuner; import source.tuner.fcd.proV1.FCD1TunerController; import source.tuner.fcd.proplusV2.FCD2TunerController; @@ -46,6 +51,7 @@ import source.tuner.hackrf.HackRFTunerController; import source.tuner.rtl.RTL2832Tuner; import source.tuner.rtl.RTL2832TunerController; import source.tuner.rtl.e4k.E4KTunerController; +import source.tuner.rtl.e4k.E4KTunerEditorPanel; import source.tuner.rtl.r820t.R820TTunerController; import controller.ThreadPoolManager; @@ -618,4 +624,16 @@ public class TunerManager return mTuner != null; } } + + public static JPanel getEditor( SettingsManager settingsManager, Tuner tuner ) + { + JPanel editor = tuner.getEditor( settingsManager ); + + if( editor != null ) + { + return editor; + } + + return new EmptyEditor(); + } }