mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
wip #34 - resolved various issues with alias controller and editors.
Added synchronized method to channel processing manager to ensure that we don't have contention during channel changes.
This commit is contained in:
@@ -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<Alias> getSelectedAliases()
|
||||
{
|
||||
int index = mAliasTable.getSelectedRow();
|
||||
List<Alias> 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<Alias> 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;
|
||||
|
||||
@@ -255,6 +255,8 @@ public class AliasNameEditor extends Editor<Alias>
|
||||
mButtonColor.setForeground( getForeground() );
|
||||
}
|
||||
|
||||
repaint();
|
||||
|
||||
setModified( false );
|
||||
}
|
||||
|
||||
|
||||
@@ -261,21 +261,25 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
|
||||
groupNames.add( 0, "" );
|
||||
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
|
||||
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<String> listNames = mAliasModel.getListNames();
|
||||
listNames.add( 0, "" );
|
||||
mListCombo.setModel( new DefaultComboBoxModel<String>(
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
* 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 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();
|
||||
|
||||
|
||||
@@ -136,10 +136,8 @@ public class SDRTrunk implements Listener<TunerEvent>
|
||||
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 );
|
||||
|
||||
@@ -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<Module> modules = DecoderFactory.getModules( channelModel,
|
||||
channelMapModel, channelProcessingManager, new AliasModel(), channel );
|
||||
|
||||
Reference in New Issue
Block a user