diff --git a/src/alias/AliasController.java b/src/alias/AliasController.java index e6c86812..846301a4 100644 --- a/src/alias/AliasController.java +++ b/src/alias/AliasController.java @@ -9,6 +9,7 @@ import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.swing.ImageIcon; @@ -177,8 +178,14 @@ public class AliasController extends JPanel if( !event.getValueIsAdjusting() ) { int[] selectedRows = mAliasTable.getSelectedRows(); - - if( selectedRows.length <= 1 ) + + if( selectedRows.length == 0 ) + { + mAliasEditor.setItem( null ); + mCopyButton.setEnabled( false ); + mDeleteButton.setEnabled( false ); + } + else if( selectedRows.length == 1 ) { setEditor( mAliasEditor ); @@ -244,17 +251,26 @@ public class AliasController extends JPanel } } - private Alias getSelectedAlias() + private List getSelectedAliases() { - int index = mAliasTable.getSelectedRow(); + List selected = new ArrayList<>(); - if( index >= 0 ) + int[] rows = mAliasTable.getSelectedRows(); + + for( int row: rows ) { - return mAliasModel.getAliasAtIndex( - mAliasTable.convertRowIndexToModel( index ) ); + if( row >= 0 ) + { + Alias alias = mAliasModel.getAliasAtIndex( mAliasTable.convertRowIndexToModel( row ) ); + + if( alias != null ) + { + selected.add( alias ); + } + } } - return null; + return selected; } /** @@ -269,25 +285,29 @@ public class AliasController extends JPanel addAlias( new Alias( "New Alias" ) ); break; case COPY_ALIAS: - Alias selected = getSelectedAlias(); - - if( selected != null ) + for( Alias alias: getSelectedAliases() ) { - addAlias( AliasFactory.copyOf( selected ) ); + addAlias( AliasFactory.copyOf( alias ) ); } break; case DELETE_ALIAS: - Alias toDelete = getSelectedAlias(); + List toDelete = getSelectedAliases(); - if( toDelete != null ) + if( toDelete != null && !toDelete.isEmpty() ) { + String title = toDelete.size() == 1 ? "Delete Alias?" : "Delete Aliases?"; + String prompt = toDelete.size() == 1 ? "Do you want to delete this alias?" : + "Do you want to delete these " + toDelete.size() + " aliases?"; + int choice = JOptionPane.showConfirmDialog( AliasController.this, - "Do you want to delete this alias?", "Delete Alias?", - JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE ); + prompt, title, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE ); if( choice == JOptionPane.YES_OPTION ) { - mAliasModel.removeAlias( toDelete ); + for( Alias alias: toDelete ) + { + mAliasModel.removeAlias( alias ); + } } } break; diff --git a/src/alias/AliasNameEditor.java b/src/alias/AliasNameEditor.java index 10124091..b44996f4 100644 --- a/src/alias/AliasNameEditor.java +++ b/src/alias/AliasNameEditor.java @@ -255,6 +255,8 @@ public class AliasNameEditor extends Editor mButtonColor.setForeground( getForeground() ); } + repaint(); + setModified( false ); } diff --git a/src/alias/MultipleAliasEditor.java b/src/alias/MultipleAliasEditor.java index ae4eeeec..3e45227e 100644 --- a/src/alias/MultipleAliasEditor.java +++ b/src/alias/MultipleAliasEditor.java @@ -261,21 +261,25 @@ public class MultipleAliasEditor extends Editor> groupNames.add( 0, "" ); mGroupCombo.setModel( new DefaultComboBoxModel( groupNames.toArray( new String[ groupNames.size() ] ) ) ); + + setCheckBoxesUnselected(); setModified( false ); } - - @Override - public void reset() + + private void setCheckBoxesUnselected() { - //Reset multi-editor controls mListCheckBox.setSelected( false ); mGroupCheckBox.setSelected( false ); mColorCheckBox.setSelected( false ); mIconCheckBox.setSelected( false ); mRecordCheckBox.setSelected( false ); mPriorityCheckBox.setSelected( false ); - + } + + @Override + public void reset() + { List listNames = mAliasModel.getListNames(); listNames.add( 0, "" ); mListCombo.setModel( new DefaultComboBoxModel( diff --git a/src/controller/channel/ChannelProcessingManager.java b/src/controller/channel/ChannelProcessingManager.java index 52ab21a2..ee4c3766 100644 --- a/src/controller/channel/ChannelProcessingManager.java +++ b/src/controller/channel/ChannelProcessingManager.java @@ -15,7 +15,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ - package controller.channel; import java.util.HashMap; @@ -33,7 +32,6 @@ import module.log.EventLogManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import playlist.PlaylistManager; import record.RecorderManager; import record.RecorderType; import sample.Listener; @@ -44,7 +42,6 @@ import alias.AliasModel; import audio.AudioPacket; import audio.metadata.Metadata; import audio.metadata.MetadataType; -import controller.ThreadPoolManager; import controller.channel.Channel.ChannelType; import controller.channel.ChannelEvent.Event; import controller.channel.map.ChannelMapModel; @@ -65,15 +62,13 @@ public class ChannelProcessingManager implements ChannelEventListener private EventLogManager mEventLogManager; private RecorderManager mRecorderManager; private SourceManager mSourceManager; - private ThreadPoolManager mThreadPoolManager; public ChannelProcessingManager( ChannelModel channelModel, ChannelMapModel channelMapModel, AliasModel aliasModel, EventLogManager eventLogManager, RecorderManager recorderManager, - SourceManager sourceManager, - ThreadPoolManager threadPoolManager ) + SourceManager sourceManager ) { mChannelModel = channelModel; mChannelMapModel = channelMapModel; @@ -81,7 +76,6 @@ public class ChannelProcessingManager implements ChannelEventListener mEventLogManager = eventLogManager; mRecorderManager = recorderManager; mSourceManager = sourceManager; - mThreadPoolManager = threadPoolManager; } /** @@ -108,7 +102,7 @@ public class ChannelProcessingManager implements ChannelEventListener } @Override - public void channelChanged( ChannelEvent event ) + public synchronized void channelChanged( ChannelEvent event ) { Channel channel = event.getChannel(); diff --git a/src/gui/SDRTrunk.java b/src/gui/SDRTrunk.java index 83f9f7ee..40bfb51a 100644 --- a/src/gui/SDRTrunk.java +++ b/src/gui/SDRTrunk.java @@ -136,10 +136,8 @@ public class SDRTrunk implements Listener SourceManager sourceManager = new SourceManager( tunerModel, mSettingsManager, threadPoolManager ); - ChannelProcessingManager channelProcessingManager = - new ChannelProcessingManager( channelModel, channelMapModel, - aliasModel, eventLogManager, recorderManager, - sourceManager, threadPoolManager ); + ChannelProcessingManager channelProcessingManager = new ChannelProcessingManager( + channelModel, channelMapModel, aliasModel, eventLogManager, recorderManager, sourceManager ); channelProcessingManager.addAudioPacketListener( recorderManager ); channelModel.addListener( channelProcessingManager ); diff --git a/src/instrument/gui/DecoderViewFrame.java b/src/instrument/gui/DecoderViewFrame.java index 09ea4383..87bfab41 100644 --- a/src/instrument/gui/DecoderViewFrame.java +++ b/src/instrument/gui/DecoderViewFrame.java @@ -104,7 +104,7 @@ public class DecoderViewFrame extends JInternalFrame ChannelProcessingManager channelProcessingManager = new ChannelProcessingManager( channelModel, channelMapModel, - new AliasModel(), new EventLogManager(), null, null, new ThreadPoolManager() ); + new AliasModel(), new EventLogManager(), null, null ); List modules = DecoderFactory.getModules( channelModel, channelMapModel, channelProcessingManager, new AliasModel(), channel );