diff --git a/src/settings/SettingsManager.java b/src/settings/SettingsManager.java index 9529c9f6..4952ea9a 100644 --- a/src/settings/SettingsManager.java +++ b/src/settings/SettingsManager.java @@ -759,9 +759,6 @@ public class SettingsManager implements Listener mTunerConfigurationModel.addTunerConfigurations( mSettings.getTunerConfigurations() ); - - mTunerConfigurationModel.addTunerConfigurationAssignments( - mSettings.getSelectedTunerConfiguration() ); } } @@ -771,9 +768,6 @@ public class SettingsManager implements Listener { mSettings.setTunerConfigurations( mTunerConfigurationModel.getTunerConfigurations() ); - - mSettings.setSelectedTunerConfiguration( - mTunerConfigurationModel.getTunerConfigurationAssignments() ); } } diff --git a/src/source/tuner/TunerEditor.java b/src/source/tuner/TunerEditor.java index a5e91e17..9f310b33 100644 --- a/src/source/tuner/TunerEditor.java +++ b/src/source/tuner/TunerEditor.java @@ -10,7 +10,6 @@ import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JLabel; -import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; @@ -26,7 +25,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import source.tuner.configuration.TunerConfiguration; -import source.tuner.configuration.TunerConfigurationEditor; import source.tuner.configuration.TunerConfigurationFactory; import source.tuner.configuration.TunerConfigurationModel; @@ -94,7 +92,8 @@ public class TunerEditor extends Editor } ); JScrollPane tableScroller = new JScrollPane( mTunerConfigurationTable ); - tableScroller.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); + tableScroller.setHorizontalScrollBarPolicy( + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); listPanel.add( new JLabel( "Tuner Configurations" ), "span" ); listPanel.add( tableScroller, "span" ); @@ -106,38 +105,14 @@ public class TunerEditor extends Editor { Tuner tuner = getItem(); - int counter = 0; + String name = mTunerConfigurationModel + .getDistinctName( tuner.getTunerType(), tuner.getUniqueID() ); - String name = tuner.getUniqueID() + "-New"; - - while( counter < 10 && mTunerConfigurationModel - .hasTunerConfiguration( tuner.getTunerType(), name ) ) - { - counter++; + TunerConfiguration config = TunerConfigurationFactory + .getTunerConfiguration( tuner.getTunerType(), + tuner.getUniqueID(), name ); - StringBuilder sb = new StringBuilder(); - sb.append( tuner.getUniqueID() ); - sb.append( "-New(" ); - sb.append( String.valueOf( counter ) ); - sb.append( ")" ); - - name = sb.toString(); - } - - if( counter < 10 ) - { - TunerConfiguration config = TunerConfigurationFactory - .getTunerConfiguration( tuner.getTunerType(), name ); - - mTunerConfigurationModel.addTunerConfiguration( config ); - } - else - { - JOptionPane.showMessageDialog( TunerEditor.this, - "Can't create configuration - maximum limit reached", - "Error", - JOptionPane.OK_OPTION ); - } + mTunerConfigurationModel.addTunerConfiguration( config ); } } ); listPanel.add( mNewConfigurationButton ); @@ -186,7 +161,8 @@ public class TunerEditor extends Editor mTunerConfigurationTable.setEnabled( true ); mNewConfigurationButton.setEnabled( true ); - mRowSorter.setRowFilter( new ConfigurationRowFilter( tuner.getTunerType() ) ); + mRowSorter.setRowFilter( new ConfigurationRowFilter( + tuner.getTunerType(), tuner.getUniqueID() ) ); TunerConfiguration assigned = mTunerConfigurationModel .getTunerConfiguration( tuner.getTunerType(), tuner.getUniqueID() ); @@ -228,7 +204,7 @@ public class TunerEditor extends Editor mEditor = new EmptyEditor(); } - //Swap out the editor + //Swap out the editor int split = mEditorSplitPane.getDividerLocation( 0 ); mEditorSplitPane.remove( mEditorScroller ); mEditorScroller = new JScrollPane( mEditor ); @@ -259,10 +235,12 @@ public class TunerEditor extends Editor public class ConfigurationRowFilter extends RowFilter { private TunerType mTunerType; + private String mUniqueID; - public ConfigurationRowFilter( TunerType type ) + public ConfigurationRowFilter( TunerType type, String uniqueID ) { mTunerType = type; + mUniqueID = uniqueID; } @Override @@ -272,7 +250,10 @@ public class TunerEditor extends Editor TunerConfiguration config = entry.getModel() .getTunerConfiguration( entry.getIdentifier() ); - return config != null && config.getTunerType() == mTunerType; + return config != null && + config.getTunerType() == mTunerType && + config.getUniqueID() != null && + config.getUniqueID().contentEquals( mUniqueID ); } } diff --git a/src/source/tuner/airspy/AirspyTunerConfiguration.java b/src/source/tuner/airspy/AirspyTunerConfiguration.java index 5b50c348..c9c47421 100644 --- a/src/source/tuner/airspy/AirspyTunerConfiguration.java +++ b/src/source/tuner/airspy/AirspyTunerConfiguration.java @@ -39,12 +39,11 @@ public class AirspyTunerConfiguration extends TunerConfiguration */ public AirspyTunerConfiguration() { - this( "Default" ); } - public AirspyTunerConfiguration( String name ) + public AirspyTunerConfiguration( String uniqueID, String name ) { - super( name ); + super( uniqueID, name ); } @Override diff --git a/src/source/tuner/configuration/TunerConfiguration.java b/src/source/tuner/configuration/TunerConfiguration.java index eee31f3f..040b829f 100644 --- a/src/source/tuner/configuration/TunerConfiguration.java +++ b/src/source/tuner/configuration/TunerConfiguration.java @@ -29,13 +29,23 @@ import source.tuner.TunerType; public abstract class TunerConfiguration { protected String mName; + protected String mUniqueID; + protected boolean mAssigned; /** * Default constructor to support JAXB */ public TunerConfiguration() { - this( "Unknown" ); + } + + /** + * Normal constructor + */ + public TunerConfiguration( String uniqueID, String name ) + { + mUniqueID = uniqueID; + mName = name; } public String toString() @@ -43,14 +53,6 @@ public abstract class TunerConfiguration return mName; } - /** - * Normal constructor - */ - public TunerConfiguration( String name ) - { - mName = name; - } - @XmlAttribute( name = "name" ) public String getName() { @@ -61,6 +63,28 @@ public abstract class TunerConfiguration { mName = name; } + + @XmlAttribute( name = "unique_id" ) + public String getUniqueID() + { + return mUniqueID; + } + + public void setUniqueID( String id ) + { + mUniqueID = id;; + } + + @XmlAttribute( name = "assigned" ) + public boolean isAssigned() + { + return mAssigned; + } + + public void setAssigned( boolean assigned ) + { + mAssigned = assigned; + } @XmlAttribute( name = "tuner_type" ) public abstract TunerType getTunerType(); diff --git a/src/source/tuner/configuration/TunerConfigurationEvent.java b/src/source/tuner/configuration/TunerConfigurationEvent.java index 3815c7b7..02a0769d 100644 --- a/src/source/tuner/configuration/TunerConfigurationEvent.java +++ b/src/source/tuner/configuration/TunerConfigurationEvent.java @@ -3,7 +3,6 @@ package source.tuner.configuration; public class TunerConfigurationEvent { private TunerConfiguration mTunerConfiguration; - private TunerConfigurationAssignment mTunerConfigurationAssignment; private Event mEvent; public TunerConfigurationEvent( TunerConfiguration configuration, Event event ) @@ -12,22 +11,11 @@ public class TunerConfigurationEvent mEvent = event; } - public TunerConfigurationEvent( TunerConfigurationAssignment assignment, Event event ) - { - mTunerConfigurationAssignment = assignment; - mEvent = event; - } - public TunerConfiguration getConfiguration() { return mTunerConfiguration; } - public TunerConfigurationAssignment getAssignment() - { - return mTunerConfigurationAssignment; - } - public Event getEvent() { return mEvent; @@ -35,11 +23,8 @@ public class TunerConfigurationEvent public enum Event { - CONFIGURATION_ADD, - CONFIGURATION_REMOVE, - CONFIGURATION_CHANGE, - ASSIGNMENT_ADD, - ASSIGNMENT_REMOVE, - ASSIGNMENT_CHANGE; + ADD, + REMOVE, + CHANGE; } } diff --git a/src/source/tuner/configuration/TunerConfigurationFactory.java b/src/source/tuner/configuration/TunerConfigurationFactory.java index 35e774a5..8a93b54e 100644 --- a/src/source/tuner/configuration/TunerConfigurationFactory.java +++ b/src/source/tuner/configuration/TunerConfigurationFactory.java @@ -15,22 +15,23 @@ import source.tuner.rtl.r820t.R820TTunerEditor; public class TunerConfigurationFactory { - public static TunerConfiguration getTunerConfiguration( TunerType type, String name ) + public static TunerConfiguration getTunerConfiguration( TunerType type, + String uniqueID, String name ) { switch( type ) { case AIRSPY_R820T: - return new AirspyTunerConfiguration( name ); + return new AirspyTunerConfiguration( uniqueID, name ); case ELONICS_E4000: - return new E4KTunerConfiguration( name ); + return new E4KTunerConfiguration( uniqueID, name ); case FUNCUBE_DONGLE_PRO: - return new FCD1TunerConfiguration( name ); + return new FCD1TunerConfiguration( uniqueID, name ); case FUNCUBE_DONGLE_PRO_PLUS: - return new FCD2TunerConfiguration( name ); + return new FCD2TunerConfiguration( uniqueID, name ); case HACKRF: - return new HackRFTunerConfiguration( name ); + return new HackRFTunerConfiguration( uniqueID, name ); case RAFAELMICRO_R820T: - return new R820TTunerConfiguration( name ); + return new R820TTunerConfiguration( uniqueID, name ); default: throw new IllegalArgumentException( "Unrecognized tuner type [" + type.name() + "] - can't create named [" + name + "] tuner" diff --git a/src/source/tuner/configuration/TunerConfigurationModel.java b/src/source/tuner/configuration/TunerConfigurationModel.java index 36625241..64bd45f3 100644 --- a/src/source/tuner/configuration/TunerConfigurationModel.java +++ b/src/source/tuner/configuration/TunerConfigurationModel.java @@ -20,11 +20,11 @@ public class TunerConfigurationModel extends AbstractTableModel private static final int TUNER_TYPE = 0; private static final int CONFIGURATION_NAME = 1; - private static final String[] COLUMN_HEADERS = { "Tuner Type", "Name" }; + private static final int ASSIGNED = 2; + private static final String[] COLUMN_HEADERS = { "Tuner Type", "Name", "Assigned" }; private List> mConfigurationListeners = new ArrayList<>(); private List mTunerConfigurations = new ArrayList<>(); - private List mTunerConfigurationAssignments = new ArrayList<>(); /** * Table model for managing tuner configurations and tuner configuration @@ -59,7 +59,9 @@ public class TunerConfigurationModel extends AbstractTableModel */ public void addTunerConfiguration( TunerConfiguration config ) { - if( !mTunerConfigurations.contains( config ) ) + if( !mTunerConfigurations.contains( config ) && + config.getUniqueID() != null && + config.getName() != null ) { mTunerConfigurations.add( config ); @@ -67,7 +69,7 @@ public class TunerConfigurationModel extends AbstractTableModel fireTableRowsInserted( index, index ); - broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_ADD ) ); + broadcast( new TunerConfigurationEvent( config, Event.ADD ) ); } } @@ -85,7 +87,7 @@ public class TunerConfigurationModel extends AbstractTableModel fireTableRowsDeleted( index, index ); - broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_REMOVE ) ); + broadcast( new TunerConfigurationEvent( config, Event.REMOVE ) ); } } @@ -98,7 +100,7 @@ public class TunerConfigurationModel extends AbstractTableModel { for( TunerConfiguration config: mTunerConfigurations ) { - broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_REMOVE ) ); + broadcast( new TunerConfigurationEvent( config, Event.REMOVE ) ); } int size = mTunerConfigurations.size(); @@ -106,13 +108,6 @@ public class TunerConfigurationModel extends AbstractTableModel mTunerConfigurations.clear(); fireTableRowsDeleted( 0, size - 1 ); - - for( TunerConfigurationAssignment assignment: mTunerConfigurationAssignments ) - { - broadcast( new TunerConfigurationEvent( assignment, Event.ASSIGNMENT_REMOVE ) ); - } - - mTunerConfigurationAssignments.clear(); } /** @@ -142,96 +137,61 @@ public class TunerConfigurationModel extends AbstractTableModel } } - /** - * Adds a list of tuner configuration assignments to the model - */ - public void addTunerConfigurationAssignments( List assignments ) - { - for( TunerConfigurationAssignment assigment: assignments ) - { - addTunerConfigurationAssignment( assigment ); - } - } - - /** - * Returns of list of tuner configurations from the model - */ - public List getTunerConfigurationAssignments() - { - return mTunerConfigurationAssignments; - } - - /** - * Adds a tuner configuration assigment to the model - */ - public void addTunerConfigurationAssignment( TunerConfigurationAssignment assignment ) - { - mTunerConfigurationAssignments.add( assignment ); - - broadcast( new TunerConfigurationEvent( assignment, Event.ASSIGNMENT_ADD ) ); - } - - /** - * Removes a tuner configuration assignment from the model - */ - public void removeTunerConfigurationAssignment( TunerConfigurationAssignment assignment ) - { - mTunerConfigurationAssignments.remove( assignment ); - - broadcast( new TunerConfigurationEvent( assignment, Event.ASSIGNMENT_REMOVE ) ); - } - /** * Returns the tuner configuration that is assigned to the tuner with the - * tuner type and uniqueID, or creates a new tuner configuration and tuner - * configuration assignment for the tuner. + * tuner type and uniqueID, or selects the first existing configuration that + * matches the tuner type and unique ID and assigns it, or creates a new + * tuner configuration and assigns it to the tuner. + * + * This method will always return a tuner configuration that is assigned to + * the tuner type and unique ID. */ public TunerConfiguration getTunerConfiguration( TunerType type, String uniqueID ) { - String configurationName = null; - - TunerConfigurationAssignment assignment = getTunerConfigurationAssignment( type, uniqueID ); - - if( assignment != null ) - { - configurationName = assignment.getTunerConfigurationName(); - } - - if( configurationName == null ) - { - configurationName = uniqueID; - } - - List configs = getTunerConfigurations( type ); + List configs = getTunerConfigurations( type, uniqueID ); for( TunerConfiguration config: configs ) { - if( config.getName().contentEquals( configurationName ) ) + if( config.isAssigned() && + config.getUniqueID() != null && + config.getUniqueID().contentEquals( uniqueID ) ) { - if( assignment == null ) - { - assignTunerConfiguration( config, configurationName ); - } - return config; } } + //Reuse an existing configuration to assign + if( !configs.isEmpty() ) + { + configs.get( 0 ).setAssigned( true ); + return configs.get( 0 ); + } + + String name = getDistinctName( type, uniqueID ); + //We didn't find the config so create a new one and assign it TunerConfiguration config = TunerConfigurationFactory - .getTunerConfiguration( type, configurationName ); + .getTunerConfiguration( type, uniqueID, name ); + + config.setAssigned( true ); addTunerConfiguration( config ); - assignTunerConfiguration( config, configurationName ); return config; } - public boolean hasTunerConfiguration( TunerType type, String name ) + /** + * Indicates if a configuration exists in this model matching the tuner type + * and unique ID and name. + */ + public boolean hasTunerConfiguration( TunerType type, String uniqueID, String name ) { for( TunerConfiguration config: mTunerConfigurations ) { if( config.getTunerType() == type && + config.getUniqueID() != null && + config.getUniqueID().contentEquals( uniqueID ) && + config.getName() != null && config.getName().contentEquals( name ) ) { return true; @@ -240,59 +200,39 @@ public class TunerConfigurationModel extends AbstractTableModel return false; } - - /** - * Assigns the tuner configuration to the tuner identified by the uniqueID - */ - public void assignTunerConfiguration( TunerConfiguration config, String uniqueID ) - { - TunerConfigurationAssignment assignment = - getTunerConfigurationAssignment( config.getTunerType(), uniqueID ); - - Event event = Event.ASSIGNMENT_CHANGE; - - if( assignment == null ) - { - assignment = new TunerConfigurationAssignment(); - assignment.setUniqueID( uniqueID ); - - addTunerConfigurationAssignment( assignment ); - - event = Event.ASSIGNMENT_ADD; - } - - assignment.setTunerConfigurationName( config.getName() ); - - broadcast( new TunerConfigurationEvent( assignment, event ) ); - } - - /** - * Returns the tuner configuration assiged to the tuner type and unique id - */ - private TunerConfigurationAssignment getTunerConfigurationAssignment( TunerType type, String uniqueID ) - { - for( TunerConfigurationAssignment assignment: mTunerConfigurationAssignments ) - { - if( assignment.getTunerType() == type && - assignment.getUniqueID().contentEquals( uniqueID ) ) - { - return assignment; - } - } - - return null; - } + /** + * Creates a configuration name for the tuner configuration that is distinct + * among the existing tuner configurations of the same type and uniqueID + */ + public String getDistinctName( TunerType type, String uniqueID ) + { + int counter = 0; + + String name = "New"; + + while( hasTunerConfiguration( type, uniqueID, name ) ) + { + counter++; + + name = "New (" + counter + ")"; + } + + return name; + } + /** * Returns all tuner configurations for the specified tuner type */ - public List getTunerConfigurations( TunerType type ) + public List getTunerConfigurations( TunerType type, String uniqueID ) { List configs = new ArrayList<>(); for( TunerConfiguration config: mTunerConfigurations ) { - if( config.getTunerType() == type ) + if( config.getTunerType() == type && + config.getUniqueID() != null && + config.getUniqueID().contentEquals( uniqueID ) ) { configs.add( config ); } @@ -370,6 +310,8 @@ public class TunerConfigurationModel extends AbstractTableModel return config.getTunerType().getLabel(); case CONFIGURATION_NAME: return config.getName(); + case ASSIGNED: + return config.isAssigned() ? "*" : null; default: break; } diff --git a/src/source/tuner/fcd/proV1/FCD1TunerConfiguration.java b/src/source/tuner/fcd/proV1/FCD1TunerConfiguration.java index 43152221..9c474376 100644 --- a/src/source/tuner/fcd/proV1/FCD1TunerConfiguration.java +++ b/src/source/tuner/fcd/proV1/FCD1TunerConfiguration.java @@ -42,12 +42,11 @@ public class FCD1TunerConfiguration extends TunerConfiguration */ public FCD1TunerConfiguration() { - this( "Default" ); } - public FCD1TunerConfiguration( String name ) + public FCD1TunerConfiguration( String uniqueID, String name ) { - super( name ); + super( uniqueID, name ); } @Override diff --git a/src/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java b/src/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java index b2955570..0f001b13 100644 --- a/src/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java +++ b/src/source/tuner/fcd/proplusV2/FCD2TunerConfiguration.java @@ -33,12 +33,11 @@ public class FCD2TunerConfiguration extends TunerConfiguration */ public FCD2TunerConfiguration() { - this( "Default" ); } - public FCD2TunerConfiguration( String name ) + public FCD2TunerConfiguration( String uniqueID, String name ) { - super( name ); + super( uniqueID, name ); } @Override diff --git a/src/source/tuner/hackrf/HackRFTunerConfiguration.java b/src/source/tuner/hackrf/HackRFTunerConfiguration.java index 33356fc0..14cd6a66 100644 --- a/src/source/tuner/hackrf/HackRFTunerConfiguration.java +++ b/src/source/tuner/hackrf/HackRFTunerConfiguration.java @@ -39,12 +39,11 @@ public class HackRFTunerConfiguration extends TunerConfiguration */ public HackRFTunerConfiguration() { - this( "Default" ); } - public HackRFTunerConfiguration( String name ) + public HackRFTunerConfiguration( String uniqueID, String name ) { - super( name ); + super( uniqueID, name ); } @Override diff --git a/src/source/tuner/rtl/e4k/E4KTunerConfiguration.java b/src/source/tuner/rtl/e4k/E4KTunerConfiguration.java index 5c699d4d..072d2fa6 100644 --- a/src/source/tuner/rtl/e4k/E4KTunerConfiguration.java +++ b/src/source/tuner/rtl/e4k/E4KTunerConfiguration.java @@ -41,12 +41,11 @@ public class E4KTunerConfiguration extends TunerConfiguration */ public E4KTunerConfiguration() { - this( "Default" ); } - public E4KTunerConfiguration( String name ) + public E4KTunerConfiguration( String uniqueID, String name ) { - super( name ); + super( uniqueID, name ); } @Override diff --git a/src/source/tuner/rtl/r820t/R820TTunerConfiguration.java b/src/source/tuner/rtl/r820t/R820TTunerConfiguration.java index 95686f66..f1d92e1a 100644 --- a/src/source/tuner/rtl/r820t/R820TTunerConfiguration.java +++ b/src/source/tuner/rtl/r820t/R820TTunerConfiguration.java @@ -41,12 +41,11 @@ public class R820TTunerConfiguration extends TunerConfiguration */ public R820TTunerConfiguration() { - this( "Default" ); } - public R820TTunerConfiguration( String name ) + public R820TTunerConfiguration( String uniqueID, String name ) { - super( name ); + super( uniqueID, name ); } @Override diff --git a/src/source/tuner/rtl/r820t/R820TTunerEditor.java b/src/source/tuner/rtl/r820t/R820TTunerEditor.java index 599ed4bd..32d9ab1f 100644 --- a/src/source/tuner/rtl/r820t/R820TTunerEditor.java +++ b/src/source/tuner/rtl/r820t/R820TTunerEditor.java @@ -120,7 +120,7 @@ public class R820TTunerEditor extends TunerConfigurationEditor config.setVGAGain( vgaGain ); getTunerConfigurationModel().broadcast( - new TunerConfigurationEvent( getConfiguration(), Event.CONFIGURATION_CHANGE ) ); + new TunerConfigurationEvent( getConfiguration(), Event.CHANGE ) ); } }