wip: alias multi-editor feature complete

This commit is contained in:
denny
2016-03-05 07:33:04 -05:00
parent e8fd4f363a
commit 4ad16296d8
7 changed files with 221 additions and 71 deletions

View File

@@ -29,6 +29,7 @@ import javax.xml.bind.annotation.XmlSeeAlso;
import alias.action.AliasAction; import alias.action.AliasAction;
import alias.id.AliasID; import alias.id.AliasID;
import alias.id.AliasIDType; import alias.id.AliasIDType;
import alias.id.nonrecordable.NonRecordable;
import alias.id.priority.Priority; import alias.id.priority.Priority;
@XmlSeeAlso( { AliasID.class, AliasAction.class } ) @XmlSeeAlso( { AliasID.class, AliasAction.class } )
@@ -190,7 +191,7 @@ public class Alias
return Priority.DEFAULT_PRIORITY; return Priority.DEFAULT_PRIORITY;
} }
public boolean hasPriority() public boolean hasCallPriority()
{ {
for( AliasID id: mAliasIDs ) for( AliasID id: mAliasIDs )
{ {
@@ -202,6 +203,30 @@ public class Alias
return false; return false;
} }
/**
* Sets or updates the call priority
*/
public void setCallPriority( int priority )
{
if( priority == Priority.DO_NOT_MONITOR ||
( Priority.MIN_PRIORITY <= priority && priority <= Priority.MAX_PRIORITY ) )
{
for( AliasID id: mAliasIDs )
{
if( id.getType() == AliasIDType.Priority )
{
((Priority)id).setPriority( priority );
return;
}
}
//If we don't find a priority id, create one
Priority p = new Priority();
p.setPriority( priority );
addAliasID( p );
}
}
/** /**
* Inspects the alias for a non-recordable alias id. Default is true; * Inspects the alias for a non-recordable alias id. Default is true;
@@ -218,4 +243,41 @@ public class Alias
return true; return true;
} }
/**
* Sets or removes the non-recordable alias ID for this alias.
*/
public void setRecordable( boolean recordable )
{
if( recordable )
{
AliasID toRemove = null;
for( AliasID id: getId() )
{
if( id.getType() == AliasIDType.NonRecordable )
{
toRemove = id;
break;
}
}
if( toRemove != null )
{
removeAliasID( toRemove );
}
}
else
{
for( AliasID id: getId() )
{
if( id.getType() == AliasIDType.NonRecordable )
{
return;
}
}
addAliasID( new NonRecordable() );
}
}
} }

View File

@@ -161,7 +161,7 @@ public class AliasController extends JPanel
{ {
if( selectedRow >= 0 ) if( selectedRow >= 0 )
{ {
int index = mAliasTable.convertRowIndexToModel( mAliasTable.getSelectedRow() ); int index = mAliasTable.convertRowIndexToModel( selectedRow );
return mAliasModel.getAliasAtIndex( index ); return mAliasModel.getAliasAtIndex( index );
} }
@@ -207,10 +207,11 @@ public class AliasController extends JPanel
for( int selectedRow: selectedRows ) for( int selectedRow: selectedRows )
{ {
selectedAliases.add( getAlias( selectedRow ) ); Alias alias = getAlias( selectedRow );
selectedAliases.add( alias );
} }
mLog.debug( "Selection changed - setting selected aliases" );
mMultipleAliasEditor.setItem( selectedAliases ); mMultipleAliasEditor.setItem( selectedAliases );
} }
} }

View File

@@ -266,14 +266,14 @@ public class AliasModel extends AbstractTableModel
public void broadcast( AliasEvent event ) public void broadcast( AliasEvent event )
{ {
mAliasEventBroadcaster.broadcast( event );
if( event.getEvent() == Event.CHANGE ) if( event.getEvent() == Event.CHANGE )
{ {
int index = mAliases.indexOf( event.getAlias() ); int index = mAliases.indexOf( event.getAlias() );
fireTableRowsUpdated( index, index ); fireTableRowsUpdated( index, index );
} }
mAliasEventBroadcaster.broadcast( event );
} }
public void addListener( Listener<AliasEvent> listener ) public void addListener( Listener<AliasEvent> listener )

View File

@@ -515,7 +515,7 @@ public class AliasNode extends ConfigurableNode
retVal.addSeparator(); retVal.addSeparator();
} }
if( !getAlias().hasPriority() ) if( !getAlias().hasCallPriority() )
{ {
JMenuItem priorityItem = new JMenuItem( "Set Call Priority" ); JMenuItem priorityItem = new JMenuItem( "Set Call Priority" );

View File

@@ -18,12 +18,16 @@ import javax.swing.JColorChooser;
import javax.swing.JComboBox; import javax.swing.JComboBox;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import alias.AliasEvent.Event; import alias.AliasEvent.Event;
import alias.id.priority.Priority;
import map.IconManager; import map.IconManager;
import map.MapIcon; import map.MapIcon;
import map.MapIconListCellRenderer; import map.MapIconListCellRenderer;
@@ -52,6 +56,11 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
private JCheckBox mColorCheckBox = new JCheckBox( "Color" ); private JCheckBox mColorCheckBox = new JCheckBox( "Color" );
private JButton mButtonColor; private JButton mButtonColor;
private JButton mBtnIconManager; private JButton mBtnIconManager;
private JCheckBox mRecordCheckBox = new JCheckBox( "Record" );
private JComboBox<Record> mRecordActionCombo = new JComboBox<>( Record.values() );
private JCheckBox mPriorityCheckBox = new JCheckBox( "Priority" );
private JSlider mPrioritySlider;
private JLabel mPrioritySliderLabel;
private AliasModel mAliasModel; private AliasModel mAliasModel;
private SettingsManager mSettingsManager; private SettingsManager mSettingsManager;
@@ -79,7 +88,7 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
public void init() public void init()
{ {
setLayout( new MigLayout( "fill,wrap 2", "[grow,fill][grow,fill]", setLayout( new MigLayout( "fill,wrap 2", "[grow,fill][grow,fill]",
"[][][][][][][][][][grow,fill]" ) ); "[][][][][][][][][][][][][grow,fill]" ) );
mAliasCountLabel = new JLabel( "Alias:" ); mAliasCountLabel = new JLabel( "Alias:" );
add( mAliasCountLabel ); add( mAliasCountLabel );
@@ -94,27 +103,11 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
add( mListCheckBox ); add( mListCheckBox );
mListCombo.setEditable( true ); mListCombo.setEditable( true );
mListCombo.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
setModified( true );
}
} );
add( mListCombo, "wrap" ); add( mListCombo, "wrap" );
add( mGroupCheckBox ); add( mGroupCheckBox );
mGroupCombo.setEditable( true ); mGroupCombo.setEditable( true );
mGroupCombo.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
setModified( true );
}
} );
add( mGroupCombo, "wrap" ); add( mGroupCombo, "wrap" );
add( mColorCheckBox ); add( mColorCheckBox );
@@ -133,8 +126,6 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
{ {
mButtonColor.setForeground( newColor ); mButtonColor.setForeground( newColor );
mButtonColor.setBackground( newColor ); mButtonColor.setBackground( newColor );
setModified( true );
} }
} }
} ); } );
@@ -147,15 +138,6 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
MapIconListCellRenderer renderer = new MapIconListCellRenderer(); MapIconListCellRenderer renderer = new MapIconListCellRenderer();
renderer.setPreferredSize( new Dimension( 200, 30 ) ); renderer.setPreferredSize( new Dimension( 200, 30 ) );
mMapIconCombo.setRenderer( renderer ); mMapIconCombo.setRenderer( renderer );
mMapIconCombo.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
setModified( true );
}
} );
add( mMapIconCombo, "wrap" ); add( mMapIconCombo, "wrap" );
//Dummy place holder //Dummy place holder
@@ -183,6 +165,47 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
add( mBtnIconManager, "span,wrap" ); add( mBtnIconManager, "span,wrap" );
add( mRecordCheckBox );
add( mRecordActionCombo );
//Placeholder
add( new JLabel( " " ) );
mPrioritySliderLabel = new JLabel( "Priority: " + Priority.MIN_PRIORITY );
add( mPrioritySliderLabel );
add( mPriorityCheckBox );
mPrioritySlider = new JSlider( JSlider.HORIZONTAL,
Priority.MIN_PRIORITY,
Priority.MAX_PRIORITY + 1,
Priority.MIN_PRIORITY );
mPrioritySlider.setMajorTickSpacing( 20 );
mPrioritySlider.setMinorTickSpacing( 5 );
mPrioritySlider.setPaintTicks( true );
mPrioritySlider.setLabelTable( mPrioritySlider.createStandardLabels( 20, 20 ) );
mPrioritySlider.setPaintLabels( true );
mPrioritySlider.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
int priority = mPrioritySlider.getValue();
if( priority > Priority.MAX_PRIORITY )
{
mPrioritySliderLabel.setText( "Priority: Do Not Monitor" );
}
else
{
mPrioritySliderLabel.setText( "Priority: " + mPrioritySlider.getValue() );
}
}
} );
mPrioritySlider.setToolTipText( HELP_TEXT );
add( mPrioritySlider );
JButton saveButton = new JButton( "Save" ); JButton saveButton = new JButton( "Save" );
saveButton.addActionListener( new ActionListener() saveButton.addActionListener( new ActionListener()
{ {
@@ -200,8 +223,7 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
@Override @Override
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
setModified( false ); reset();
setItem( getAliases() );
} }
} ); } );
add( resetButton ); add( resetButton );
@@ -212,45 +234,79 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
@Override @Override
public void setItem( List<Alias> item ) public void setItem( List<Alias> item )
{ {
mLog.debug( "setItem invoked" );
super.setItem( item ); super.setItem( item );
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append( "Multiple [" ); sb.append( "Multiple Selected [ " );
if( hasItem() ) if( hasItem() )
{ {
sb.append( String.valueOf( getAliases().size() ) ); sb.append( String.valueOf( getAliases().size() ) );
List<String> listNames = mAliasModel.getListNames();
listNames.add( 0, "" );
mListCombo.setModel( new DefaultComboBoxModel<String>(
listNames.toArray( new String[ listNames.size() ] ) ) );
List<String> groupNames = mAliasModel.getGroupNames();
groupNames.add( 0, "" );
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
groupNames.toArray( new String[ groupNames.size() ] ) ) );
} }
else else
{ {
sb.append( "0" ); sb.append( "0" );
} }
sb.append( "]" ); sb.append( " ]" );
mAliasCount.setText( sb.toString() ); mAliasCount.setText( sb.toString() );
List<String> listNames = mAliasModel.getListNames();
listNames.add( 0, "" );
mListCombo.setModel( new DefaultComboBoxModel<String>(
listNames.toArray( new String[ listNames.size() ] ) ) );
List<String> groupNames = mAliasModel.getGroupNames();
groupNames.add( 0, "" );
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
groupNames.toArray( new String[ groupNames.size() ] ) ) );
setModified( false ); setModified( false );
} }
@Override
public void reset()
{
//Reset multi-editor controls
mListCheckBox.setSelected( false );
mGroupCheckBox.setSelected( false );
mColorCheckBox.setSelected( false );
mIconCheckBox.setSelected( false );
mRecordCheckBox.setSelected( false );
mPriorityCheckBox.setSelected( false );
List<String> listNames = mAliasModel.getListNames();
listNames.add( 0, "" );
mListCombo.setModel( new DefaultComboBoxModel<String>(
listNames.toArray( new String[ listNames.size() ] ) ) );
List<String> groupNames = mAliasModel.getGroupNames();
groupNames.add( 0, "" );
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
groupNames.toArray( new String[ groupNames.size() ] ) ) );
mButtonColor.setForeground( getForeground() );
mButtonColor.setBackground( getBackground() );
super.reset();
}
private boolean hasRequestedChanges()
{
return mListCheckBox.isSelected() ||
mGroupCheckBox.isSelected() ||
mColorCheckBox.isSelected() ||
mIconCheckBox.isSelected() ||
mRecordCheckBox.isSelected() ||
mPriorityCheckBox.isSelected();
}
@Override @Override
public void save() public void save()
{ {
if( isModified() && hasItem() ) if( hasRequestedChanges() && hasItem() )
{ {
setModified( false );
List<Alias> aliases = getAliases(); List<Alias> aliases = getAliases();
for( Alias alias: aliases ) for( Alias alias: aliases )
@@ -276,7 +332,6 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
group = (String)mGroupCombo.getSelectedItem(); group = (String)mGroupCombo.getSelectedItem();
} }
mLog.debug( "Group is:" + group );
alias.setGroup( group ); alias.setGroup( group );
} }
@@ -296,21 +351,34 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
alias.setIconName( null ); alias.setIconName( null );
} }
} }
if( mRecordCheckBox.isSelected() )
{
Record action =
(Record)mRecordActionCombo.getSelectedItem();
alias.setRecordable( action == Record.RECORDABLE );
}
if( mPriorityCheckBox.isSelected() )
{
int priority = mPrioritySlider.getValue();
//This is a work-around -- we use max priority + 1 in the
//gui to indicate do not monitor, and change the value here
if( priority == Priority.MAX_PRIORITY + 1 )
{
priority = Priority.DO_NOT_MONITOR;
}
alias.setCallPriority( priority );
}
} }
if( mListCheckBox.isSelected() || for( Alias alias: aliases )
mGroupCheckBox.isSelected() ||
mColorCheckBox.isSelected() ||
mIconCheckBox.isSelected() )
{ {
mLog.debug( "Broadcasting change event" ); //Broadcast an alias change event to save the updates
mAliasModel.broadcast( new AliasEvent( alias, Event.CHANGE ) );
for( Alias alias: aliases )
{
mLog.debug( "Group:" + alias.getGroup() );
//Broadcast an alias change event to save the updates
mAliasModel.broadcast( new AliasEvent( alias, Event.CHANGE ) );
}
} }
} }
} }
@@ -326,4 +394,22 @@ public class MultipleAliasEditor extends Editor<List<Alias>>
setItem( getAliases() ); setItem( getAliases() );
} }
} }
public enum Record
{
NON_RECORDABLE( "Non-Recordable" ),
RECORDABLE( "Recordable" );
private String mLabel;
private Record( String label )
{
mLabel = label;
}
public String toString()
{
return mLabel;
}
}
} }

View File

@@ -317,7 +317,7 @@ public class TrafficChannelManager extends Module
Alias to = event.getToIDAlias(); Alias to = event.getToIDAlias();
if( to != null && if( to != null &&
to.hasPriority() && to.hasCallPriority() &&
to.getCallPriority() == Priority.DO_NOT_MONITOR ) to.getCallPriority() == Priority.DO_NOT_MONITOR )
{ {
return true; return true;
@@ -326,7 +326,7 @@ public class TrafficChannelManager extends Module
Alias from = event.getFromIDAlias(); Alias from = event.getFromIDAlias();
if( from != null && if( from != null &&
from.hasPriority() && from.hasCallPriority() &&
from.getCallPriority() == Priority.DO_NOT_MONITOR ) from.getCallPriority() == Priority.DO_NOT_MONITOR )
{ {
return true; return true;

View File

@@ -504,16 +504,17 @@ public class PlaylistManager implements ChannelEventListener, Listener<AliasEven
} }
/** /**
* Saves the playlist and resets the playlist save pending flag to false * Resets the playlist save pending flag to false and proceeds to save the
* playlist.
*/ */
public class PlaylistSaveTask implements Runnable public class PlaylistSaveTask implements Runnable
{ {
@Override @Override
public void run() public void run()
{ {
save();
mPlaylistSavePending.set( false ); mPlaylistSavePending.set( false );
save();
} }
} }
} }