mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-14 17:47:32 -05:00
wip: finished alias, alias ID and alias action editing framework.
This commit is contained in:
@@ -27,6 +27,8 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||||
|
|
||||||
import alias.action.AliasAction;
|
import alias.action.AliasAction;
|
||||||
|
import alias.id.AliasID;
|
||||||
|
import alias.id.AliasIDType;
|
||||||
import alias.id.priority.Priority;
|
import alias.id.priority.Priority;
|
||||||
|
|
||||||
@XmlSeeAlso( { AliasID.class, AliasAction.class } )
|
@XmlSeeAlso( { AliasID.class, AliasAction.class } )
|
||||||
|
|||||||
@@ -55,11 +55,12 @@ public class AliasController extends JPanel
|
|||||||
mAliasModel = aliasModel;
|
mAliasModel = aliasModel;
|
||||||
|
|
||||||
mEditor = new AliasEditor( mAliasModel, settingsManager );
|
mEditor = new AliasEditor( mAliasModel, settingsManager );
|
||||||
mAliasModel.addListener( mEditor );
|
|
||||||
|
|
||||||
mIconCellRenderer = new IconCellRenderer( settingsManager );
|
mIconCellRenderer = new IconCellRenderer( settingsManager );
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|
||||||
|
mAliasModel.addListener( mEditor );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init()
|
private void init()
|
||||||
@@ -124,7 +125,7 @@ public class AliasController extends JPanel
|
|||||||
@Override
|
@Override
|
||||||
public void valueChanged( ListSelectionEvent event )
|
public void valueChanged( ListSelectionEvent event )
|
||||||
{
|
{
|
||||||
//This limits event firing to only when selection is complete
|
//Limits event firing to only when selection is complete
|
||||||
if( !event.getValueIsAdjusting() )
|
if( !event.getValueIsAdjusting() )
|
||||||
{
|
{
|
||||||
int selectedRow = mAliasTable.getSelectedRow();
|
int selectedRow = mAliasTable.getSelectedRow();
|
||||||
@@ -137,14 +138,14 @@ public class AliasController extends JPanel
|
|||||||
|
|
||||||
if( alias != null )
|
if( alias != null )
|
||||||
{
|
{
|
||||||
mEditor.setAlias( alias );
|
mEditor.setItem( alias );
|
||||||
mCopyButton.setEnabled( true );
|
mCopyButton.setEnabled( true );
|
||||||
mDeleteButton.setEnabled( true );
|
mDeleteButton.setEnabled( true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mEditor.setAlias( null );
|
mEditor.setItem( null );
|
||||||
mCopyButton.setEnabled( false );
|
mCopyButton.setEnabled( false );
|
||||||
mDeleteButton.setEnabled( false );
|
mDeleteButton.setEnabled( false );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,26 +17,35 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias;
|
package alias;
|
||||||
|
|
||||||
|
import gui.editor.Editor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JSeparator;
|
import javax.swing.JSeparator;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import sample.Listener;
|
import sample.Listener;
|
||||||
import settings.SettingsManager;
|
import settings.SettingsManager;
|
||||||
import alias.AliasEvent.Event;
|
import alias.AliasEvent.Event;
|
||||||
|
import alias.action.AliasActionEditor;
|
||||||
|
import alias.id.AliasIdentifierEditor;
|
||||||
|
|
||||||
import com.jidesoft.swing.JideTabbedPane;
|
import com.jidesoft.swing.JideTabbedPane;
|
||||||
|
|
||||||
public class AliasEditor extends JPanel implements ActionListener, Listener<AliasEvent>
|
public class AliasEditor extends Editor<Alias> implements ActionListener, Listener<AliasEvent>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private final static Logger mLog = LoggerFactory.getLogger( AliasEditor.class );
|
||||||
|
|
||||||
private static final String DEFAULT_NAME = "select an alias";
|
private static final String DEFAULT_NAME = "select an alias";
|
||||||
|
|
||||||
private AliasModel mAliasModel;
|
private AliasModel mAliasModel;
|
||||||
@@ -44,41 +53,44 @@ public class AliasEditor extends JPanel implements ActionListener, Listener<Alia
|
|||||||
private JLabel mAliasLabel;
|
private JLabel mAliasLabel;
|
||||||
private AliasNameEditor mAliasNameEditor;
|
private AliasNameEditor mAliasNameEditor;
|
||||||
private AliasIdentifierEditor mAliasIdentifierEditor;
|
private AliasIdentifierEditor mAliasIdentifierEditor;
|
||||||
|
private AliasActionEditor mAliasActionEditor;
|
||||||
private Alias mAlias;
|
|
||||||
|
|
||||||
|
|
||||||
public AliasEditor( AliasModel aliasModel, SettingsManager settingsManager )
|
public AliasEditor( AliasModel aliasModel, SettingsManager settingsManager )
|
||||||
{
|
{
|
||||||
mAliasModel = aliasModel;
|
mAliasModel = aliasModel;
|
||||||
mAliasNameEditor = new AliasNameEditor( mAliasModel, settingsManager );
|
mAliasNameEditor = new AliasNameEditor( mAliasModel, settingsManager );
|
||||||
mAliasIdentifierEditor = new AliasIdentifierEditor( aliasModel );
|
mAliasIdentifierEditor = new AliasIdentifierEditor( aliasModel );
|
||||||
|
mAliasActionEditor = new AliasActionEditor( aliasModel );
|
||||||
|
|
||||||
mAliasModel.addListener( this );
|
mAliasModel.addListener( this );
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAlias( Alias alias )
|
|
||||||
{
|
|
||||||
mAlias = alias;
|
|
||||||
|
|
||||||
if( mAlias != null )
|
@Override
|
||||||
{
|
public void setItem( Alias alias )
|
||||||
mAliasLabel.setText( alias.getName() );
|
{
|
||||||
}
|
super.setItem( alias );
|
||||||
else
|
|
||||||
{
|
if( hasItem() )
|
||||||
|
{
|
||||||
|
mAliasLabel.setText( getItem().getName() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mAliasLabel.setText( DEFAULT_NAME );
|
mAliasLabel.setText( DEFAULT_NAME );
|
||||||
}
|
}
|
||||||
|
|
||||||
mAliasNameEditor.setAlias( alias );
|
mAliasNameEditor.setItem( alias );
|
||||||
mAliasIdentifierEditor.setAlias( alias );
|
mAliasIdentifierEditor.setItem( alias );
|
||||||
}
|
mAliasActionEditor.setItem( alias );
|
||||||
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
{
|
{
|
||||||
setLayout( new MigLayout( "fill,wrap 2", "[grow,fill][grow,fill]", "[][][][][grow,fill]" ) );
|
setLayout( new MigLayout( "fill,wrap 2", "[grow,fill][grow,fill]",
|
||||||
|
"[][][][][][grow,fill]" ) );
|
||||||
|
|
||||||
add( new JLabel( "Alias:" ), "align right" );
|
add( new JLabel( "Alias:" ), "align right" );
|
||||||
mAliasLabel = new JLabel( DEFAULT_NAME );
|
mAliasLabel = new JLabel( DEFAULT_NAME );
|
||||||
@@ -91,14 +103,18 @@ public class AliasEditor extends JPanel implements ActionListener, Listener<Alia
|
|||||||
tabs.setForeground( Color.BLACK );
|
tabs.setForeground( Color.BLACK );
|
||||||
|
|
||||||
tabs.addTab( "Alias", mAliasNameEditor );
|
tabs.addTab( "Alias", mAliasNameEditor );
|
||||||
tabs.addTab( "Identifiers", mAliasIdentifierEditor );
|
tabs.addTab( "Audio / Identifier", mAliasIdentifierEditor );
|
||||||
|
tabs.addTab( "Action", mAliasActionEditor );
|
||||||
add( tabs, "span,grow" );
|
add( tabs, "span,grow" );
|
||||||
|
|
||||||
|
//Playlist management buttons
|
||||||
JButton btnSave = new JButton( "Save" );
|
JButton btnSave = new JButton( "Save" );
|
||||||
|
btnSave.setToolTipText( "Save alias changes to the playlist" );
|
||||||
btnSave.addActionListener( AliasEditor.this );
|
btnSave.addActionListener( AliasEditor.this );
|
||||||
add( btnSave );
|
add( btnSave );
|
||||||
|
|
||||||
JButton btnReset = new JButton( "Reset" );
|
JButton btnReset = new JButton( "Reset" );
|
||||||
|
btnReset.setToolTipText( "Reset alias changes since last save" );
|
||||||
btnReset.addActionListener( AliasEditor.this );
|
btnReset.addActionListener( AliasEditor.this );
|
||||||
add( btnReset, "wrap" );
|
add( btnReset, "wrap" );
|
||||||
}
|
}
|
||||||
@@ -107,28 +123,46 @@ public class AliasEditor extends JPanel implements ActionListener, Listener<Alia
|
|||||||
public void receive( AliasEvent event )
|
public void receive( AliasEvent event )
|
||||||
{
|
{
|
||||||
//If this is the currently displayed alias, reload it
|
//If this is the currently displayed alias, reload it
|
||||||
if( mAlias != null && mAlias == event.getAlias() )
|
if( hasItem() && getItem() == event.getAlias() )
|
||||||
{
|
{
|
||||||
setAlias( event.getAlias() );
|
switch( event.getEvent() )
|
||||||
|
{
|
||||||
|
case CHANGE:
|
||||||
|
//Alias changed - reset the editor with changed alias
|
||||||
|
setItem( event.getAlias() );
|
||||||
|
break;
|
||||||
|
case DELETE:
|
||||||
|
setItem( null );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed( ActionEvent e )
|
public void actionPerformed( ActionEvent e )
|
||||||
{
|
{
|
||||||
String command = e.getActionCommand();
|
if( hasItem() )
|
||||||
|
|
||||||
if( command.contentEquals( "Save" ) )
|
|
||||||
{
|
{
|
||||||
mAliasNameEditor.save();
|
String command = e.getActionCommand();
|
||||||
mAliasIdentifierEditor.save();
|
|
||||||
|
|
||||||
//Broadcast an alias change event to save the updates
|
if( command.contentEquals( "Save" ) )
|
||||||
mAliasModel.broadcast( new AliasEvent( mAlias, Event.CHANGE ) );
|
{
|
||||||
}
|
save();
|
||||||
else if( command.contentEquals( "Reset" ) )
|
}
|
||||||
{
|
else if( command.contentEquals( "Reset" ) )
|
||||||
setAlias( mAlias );
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
mAliasNameEditor.save();
|
||||||
|
mAliasIdentifierEditor.save();
|
||||||
|
mAliasActionEditor.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,42 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* SDR Trunk
|
||||||
|
* Copyright (C) 2014-2016 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 <http://www.gnu.org/licenses/>
|
||||||
|
******************************************************************************/
|
||||||
package alias;
|
package alias;
|
||||||
|
|
||||||
|
import gui.editor.Editor;
|
||||||
|
import gui.editor.EmptyEditor;
|
||||||
import alias.action.AliasAction;
|
import alias.action.AliasAction;
|
||||||
|
import alias.action.AliasActionType;
|
||||||
import alias.action.beep.BeepAction;
|
import alias.action.beep.BeepAction;
|
||||||
|
import alias.action.beep.BeepActionEditor;
|
||||||
import alias.action.clip.ClipAction;
|
import alias.action.clip.ClipAction;
|
||||||
|
import alias.action.clip.ClipActionEditor;
|
||||||
import alias.action.script.ScriptAction;
|
import alias.action.script.ScriptAction;
|
||||||
|
import alias.action.script.ScriptActionEditor;
|
||||||
|
import alias.id.AliasID;
|
||||||
|
import alias.id.AliasIDType;
|
||||||
import alias.id.esn.ESNEditor;
|
import alias.id.esn.ESNEditor;
|
||||||
import alias.id.esn.Esn;
|
import alias.id.esn.Esn;
|
||||||
import alias.id.fleetsync.FleetsyncID;
|
import alias.id.fleetsync.FleetsyncID;
|
||||||
import alias.id.fleetsync.FleetsyncIDEditor;
|
import alias.id.fleetsync.FleetsyncIDEditor;
|
||||||
import alias.id.lojack.LoJackIDEditor;
|
|
||||||
import alias.id.lojack.LoJackFunctionAndID;
|
import alias.id.lojack.LoJackFunctionAndID;
|
||||||
import alias.id.mdc.MDC1200IDEditor;
|
import alias.id.lojack.LoJackIDEditor;
|
||||||
import alias.id.mdc.MDC1200ID;
|
import alias.id.mdc.MDC1200ID;
|
||||||
|
import alias.id.mdc.MDC1200IDEditor;
|
||||||
import alias.id.mobileID.MINEditor;
|
import alias.id.mobileID.MINEditor;
|
||||||
import alias.id.mobileID.Min;
|
import alias.id.mobileID.Min;
|
||||||
import alias.id.mpt1327.MPT1327ID;
|
import alias.id.mpt1327.MPT1327ID;
|
||||||
@@ -20,8 +45,8 @@ import alias.id.nonrecordable.NonRecordable;
|
|||||||
import alias.id.nonrecordable.NonRecordableEditor;
|
import alias.id.nonrecordable.NonRecordableEditor;
|
||||||
import alias.id.priority.Priority;
|
import alias.id.priority.Priority;
|
||||||
import alias.id.priority.PriorityEditor;
|
import alias.id.priority.PriorityEditor;
|
||||||
import alias.id.siteID.SiteIDEditor;
|
|
||||||
import alias.id.siteID.SiteID;
|
import alias.id.siteID.SiteID;
|
||||||
|
import alias.id.siteID.SiteIDEditor;
|
||||||
import alias.id.status.StatusID;
|
import alias.id.status.StatusID;
|
||||||
import alias.id.status.StatusIDEditor;
|
import alias.id.status.StatusIDEditor;
|
||||||
import alias.id.talkgroup.TalkgroupID;
|
import alias.id.talkgroup.TalkgroupID;
|
||||||
@@ -158,7 +183,7 @@ public class AliasFactory
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ComponentEditor<AliasID> getEditor( AliasID aliasID )
|
public static Editor<AliasID> getEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
if( aliasID != null )
|
if( aliasID != null )
|
||||||
{
|
{
|
||||||
@@ -193,28 +218,27 @@ public class AliasFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new EmptyAliasIDEditor();
|
return new EmptyEditor<AliasID>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ComponentEditor<AliasAction> getEditor( AliasAction aliasAction )
|
public static Editor<AliasAction> getEditor( AliasAction aliasAction )
|
||||||
{
|
{
|
||||||
if( aliasAction != null )
|
if( aliasAction != null )
|
||||||
{
|
{
|
||||||
if( aliasAction instanceof BeepAction )
|
switch( aliasAction.getType() )
|
||||||
{
|
{
|
||||||
|
case BEEP:
|
||||||
}
|
return new BeepActionEditor( aliasAction );
|
||||||
else if( aliasAction instanceof ClipAction )
|
case CLIP:
|
||||||
{
|
return new ClipActionEditor( aliasAction );
|
||||||
|
case SCRIPT:
|
||||||
}
|
return new ScriptActionEditor( aliasAction );
|
||||||
else if( aliasAction instanceof ScriptAction )
|
default:
|
||||||
{
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new EmptyAliasActionEditor();
|
return new EmptyEditor<AliasAction>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AliasID getAliasID( AliasIDType type )
|
public static AliasID getAliasID( AliasIDType type )
|
||||||
@@ -249,4 +273,20 @@ public class AliasFactory
|
|||||||
throw new IllegalArgumentException( "Unrecognized Alias ID type: " + type );
|
throw new IllegalArgumentException( "Unrecognized Alias ID type: " + type );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static AliasAction getAliasAction( AliasActionType type )
|
||||||
|
{
|
||||||
|
switch( type )
|
||||||
|
{
|
||||||
|
case BEEP:
|
||||||
|
return new BeepAction();
|
||||||
|
case CLIP:
|
||||||
|
return new ClipAction();
|
||||||
|
case SCRIPT:
|
||||||
|
return new ScriptAction();
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException( "Unrecognized Alias Action type: " + type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import alias.action.AliasAction;
|
|||||||
import alias.action.beep.BeepAction;
|
import alias.action.beep.BeepAction;
|
||||||
import alias.action.clip.ClipAction;
|
import alias.action.clip.ClipAction;
|
||||||
import alias.action.script.ScriptAction;
|
import alias.action.script.ScriptAction;
|
||||||
|
import alias.id.AliasID;
|
||||||
import alias.id.esn.Esn;
|
import alias.id.esn.Esn;
|
||||||
import alias.id.fleetsync.FleetsyncID;
|
import alias.id.fleetsync.FleetsyncID;
|
||||||
import alias.id.lojack.LoJackFunctionAndID;
|
import alias.id.lojack.LoJackFunctionAndID;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class AliasModel extends AbstractTableModel
|
|||||||
public static final int COLUMN_ICON = 3;
|
public static final int COLUMN_ICON = 3;
|
||||||
public static final int COLUMN_COLOR = 4;
|
public static final int COLUMN_COLOR = 4;
|
||||||
|
|
||||||
private List<Alias> mAliases = new ArrayList<>();
|
private List<Alias> mAliases = new CopyOnWriteArrayList<>();
|
||||||
private Broadcaster<AliasEvent> mAliasEventBroadcaster = new Broadcaster<>();
|
private Broadcaster<AliasEvent> mAliasEventBroadcaster = new Broadcaster<>();
|
||||||
|
|
||||||
public AliasModel()
|
public AliasModel()
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package alias;
|
package alias;
|
||||||
|
|
||||||
|
import gui.editor.Editor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
@@ -14,16 +16,23 @@ import javax.swing.JColorChooser;
|
|||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.event.DocumentEvent;
|
||||||
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import alias.AliasEvent.Event;
|
||||||
import map.IconManager;
|
import map.IconManager;
|
||||||
import map.MapIcon;
|
import map.MapIcon;
|
||||||
import map.MapIconListCellRenderer;
|
import map.MapIconListCellRenderer;
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import settings.SettingsManager;
|
import settings.SettingsManager;
|
||||||
|
|
||||||
public class AliasNameEditor extends AliasConfigurationEditor
|
public class AliasNameEditor extends Editor<Alias>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
private final static Logger mLog = LoggerFactory.getLogger( AliasNameEditor.class );
|
||||||
|
|
||||||
private static ComboBoxModel<String> EMPTY_MODEL = new DefaultComboBoxModel<>();
|
private static ComboBoxModel<String> EMPTY_MODEL = new DefaultComboBoxModel<>();
|
||||||
|
|
||||||
@@ -34,7 +43,6 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
private JButton mButtonColor;
|
private JButton mButtonColor;
|
||||||
private JButton mBtnIconManager;
|
private JButton mBtnIconManager;
|
||||||
|
|
||||||
private Alias mAlias;
|
|
||||||
private AliasModel mAliasModel;
|
private AliasModel mAliasModel;
|
||||||
private SettingsManager mSettingsManager;
|
private SettingsManager mSettingsManager;
|
||||||
|
|
||||||
@@ -52,6 +60,23 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
|
|
||||||
add( new JLabel( "Name:" ) );
|
add( new JLabel( "Name:" ) );
|
||||||
mName = new JTextField();
|
mName = new JTextField();
|
||||||
|
mName.getDocument().addDocumentListener( new DocumentListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void removeUpdate( DocumentEvent e )
|
||||||
|
{
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertUpdate( DocumentEvent e )
|
||||||
|
{
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changedUpdate( DocumentEvent e ){}
|
||||||
|
} );
|
||||||
add( mName, "wrap" );
|
add( mName, "wrap" );
|
||||||
|
|
||||||
add( new JLabel( "List:" ) );
|
add( new JLabel( "List:" ) );
|
||||||
@@ -76,12 +101,22 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
groups.toArray( new String[ groups.size() ] ) ) );;
|
groups.toArray( new String[ groups.size() ] ) ) );;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
add( mListCombo, "wrap" );
|
add( mListCombo, "wrap" );
|
||||||
|
|
||||||
add( new JLabel( "Group:" ) );
|
add( new JLabel( "Group:" ) );
|
||||||
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( new JLabel( "Color:" ) );
|
add( new JLabel( "Color:" ) );
|
||||||
@@ -95,12 +130,14 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
Color newColor = JColorChooser.showDialog(
|
Color newColor = JColorChooser.showDialog(
|
||||||
AliasNameEditor.this,
|
AliasNameEditor.this,
|
||||||
"Choose color for this alias",
|
"Choose color for this alias",
|
||||||
( mAlias != null ? mAlias.getMapColor() : null ) );
|
( hasItem() ? getItem().getMapColor() : null ) );
|
||||||
|
|
||||||
if( newColor != null )
|
if( newColor != null )
|
||||||
{
|
{
|
||||||
mButtonColor.setForeground( newColor );
|
mButtonColor.setForeground( newColor );
|
||||||
mButtonColor.setBackground( newColor );
|
mButtonColor.setBackground( newColor );
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
@@ -113,6 +150,14 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
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" );
|
||||||
|
|
||||||
@@ -138,16 +183,18 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
add( mBtnIconManager, "span 2,wrap" );
|
add( mBtnIconManager, "span 2,wrap" );
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAlias( Alias alias )
|
public void setItem( Alias alias )
|
||||||
{
|
{
|
||||||
mAlias = alias;
|
super.setItem( alias );
|
||||||
|
|
||||||
if( mAlias != null )
|
if( hasItem() )
|
||||||
{
|
{
|
||||||
mName.setText( alias.getName() );
|
mName.setText( alias.getName() );
|
||||||
|
|
||||||
@@ -163,9 +210,9 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
listNames.toArray( new String[ listNames.size() ] ) ) );;
|
listNames.toArray( new String[ listNames.size() ] ) ) );;
|
||||||
}
|
}
|
||||||
|
|
||||||
mListCombo.setSelectedItem( mAlias.getList() );
|
mListCombo.setSelectedItem( alias.getList() );
|
||||||
|
|
||||||
List<String> groupNames = mAliasModel.getGroupNames( mAlias.getList() );
|
List<String> groupNames = mAliasModel.getGroupNames( alias.getList() );
|
||||||
|
|
||||||
if( groupNames.isEmpty() )
|
if( groupNames.isEmpty() )
|
||||||
{
|
{
|
||||||
@@ -177,14 +224,14 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
groupNames.toArray( new String[ groupNames.size() ] ) ) );;
|
groupNames.toArray( new String[ groupNames.size() ] ) ) );;
|
||||||
}
|
}
|
||||||
|
|
||||||
mGroupCombo.setSelectedItem( mAlias.getGroup() );
|
mGroupCombo.setSelectedItem( alias.getGroup() );
|
||||||
|
|
||||||
Color color = mAlias.getMapColor();
|
Color color = alias.getMapColor();
|
||||||
|
|
||||||
mButtonColor.setBackground( color );
|
mButtonColor.setBackground( color );
|
||||||
mButtonColor.setForeground( color );
|
mButtonColor.setForeground( color );
|
||||||
|
|
||||||
String iconName = mAlias.getIconName();
|
String iconName = alias.getIconName();
|
||||||
|
|
||||||
if( iconName == null )
|
if( iconName == null )
|
||||||
{
|
{
|
||||||
@@ -207,31 +254,40 @@ public class AliasNameEditor extends AliasConfigurationEditor
|
|||||||
mButtonColor.setBackground( getBackground() );
|
mButtonColor.setBackground( getBackground() );
|
||||||
mButtonColor.setForeground( getForeground() );
|
mButtonColor.setForeground( getForeground() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save()
|
public void save()
|
||||||
{
|
{
|
||||||
if( mAlias != null )
|
if( hasItem() && isModified() )
|
||||||
{
|
{
|
||||||
|
Alias alias = getItem();
|
||||||
|
|
||||||
if( mListCombo.getSelectedItem() != null )
|
if( mListCombo.getSelectedItem() != null )
|
||||||
{
|
{
|
||||||
mAlias.setList( (String)mListCombo.getSelectedItem() );
|
alias.setList( (String)mListCombo.getSelectedItem() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( mGroupCombo.getSelectedItem() != null )
|
if( mGroupCombo.getSelectedItem() != null )
|
||||||
{
|
{
|
||||||
mAlias.setGroup( (String)mGroupCombo.getSelectedItem() );
|
alias.setGroup( (String)mGroupCombo.getSelectedItem() );
|
||||||
}
|
}
|
||||||
|
|
||||||
mAlias.setName( mName.getText() );
|
alias.setName( mName.getText() );
|
||||||
|
|
||||||
mAlias.setColor( mButtonColor.getBackground().getRGB() );
|
alias.setColor( mButtonColor.getBackground().getRGB() );
|
||||||
|
|
||||||
if( mMapIconCombo.getSelectedItem() != null )
|
if( mMapIconCombo.getSelectedItem() != null )
|
||||||
{
|
{
|
||||||
mAlias.setIconName( ((MapIcon)mMapIconCombo.getSelectedItem()).getName() );
|
alias.setIconName( ((MapIcon)mMapIconCombo.getSelectedItem()).getName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Broadcast an alias change event to save the updates
|
||||||
|
mAliasModel.broadcast( new AliasEvent( getItem(), Event.CHANGE ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import alias.action.clip.ClipAction;
|
|||||||
import alias.action.clip.ClipActionNode;
|
import alias.action.clip.ClipActionNode;
|
||||||
import alias.action.script.ScriptAction;
|
import alias.action.script.ScriptAction;
|
||||||
import alias.action.script.ScriptActionNode;
|
import alias.action.script.ScriptActionNode;
|
||||||
|
import alias.id.AliasID;
|
||||||
import alias.id.esn.ESNNode;
|
import alias.id.esn.ESNNode;
|
||||||
import alias.id.esn.Esn;
|
import alias.id.esn.Esn;
|
||||||
import alias.id.fleetsync.FleetsyncID;
|
import alias.id.fleetsync.FleetsyncID;
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
package alias;
|
package alias;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.event.DocumentEvent;
|
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
public abstract class ComponentEditor<T> extends JPanel implements DocumentListener
|
public abstract class ComponentEditor<T> extends JPanel implements DocumentListener
|
||||||
@@ -71,21 +70,6 @@ public abstract class ComponentEditor<T> extends JPanel implements DocumentListe
|
|||||||
return mModified;
|
return mModified;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void insertUpdate( DocumentEvent e )
|
|
||||||
{
|
|
||||||
setModified( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeUpdate( DocumentEvent e )
|
|
||||||
{
|
|
||||||
setModified( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changedUpdate( DocumentEvent e ) { }
|
|
||||||
|
|
||||||
public void setComponentModificationListener( ComponentModificationListener listener )
|
public void setComponentModificationListener( ComponentModificationListener listener )
|
||||||
{
|
{
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
package alias;
|
|
||||||
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
import alias.action.AliasAction;
|
|
||||||
|
|
||||||
public class EmptyAliasActionEditor extends ComponentEditor<AliasAction>
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public EmptyAliasActionEditor()
|
|
||||||
{
|
|
||||||
setLayout( new MigLayout( "", "[center]", "[][grow]" ) );
|
|
||||||
add( new JLabel( "Please select an alias action" ), "wrap" );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setComponent( AliasAction t )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reset()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package alias;
|
|
||||||
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
|
|
||||||
public class EmptyAliasIDEditor extends ComponentEditor<AliasID>
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public EmptyAliasIDEditor()
|
|
||||||
{
|
|
||||||
setLayout( new MigLayout( "", "[center]", "[][grow]" ) );
|
|
||||||
add( new JLabel( "Please select an identifier" ), "wrap" );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setComponent( AliasID t )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reset()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -19,6 +19,7 @@ package alias.action;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||||
|
import javax.xml.bind.annotation.XmlTransient;
|
||||||
|
|
||||||
import message.Message;
|
import message.Message;
|
||||||
import alias.Alias;
|
import alias.Alias;
|
||||||
@@ -38,6 +39,9 @@ public abstract class AliasAction
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@XmlTransient
|
||||||
|
public abstract AliasActionType getType();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Task to execute when an alias action is defined. The message argument is
|
* Task to execute when an alias action is defined. The message argument is
|
||||||
* the original message containing one or more aliases that have an alias
|
* the original message containing one or more aliases that have an alias
|
||||||
|
|||||||
349
src/alias/action/AliasActionEditor.java
Normal file
349
src/alias/action/AliasActionEditor.java
Normal file
@@ -0,0 +1,349 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* SDR Trunk
|
||||||
|
* Copyright (C) 2014-2016 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 <http://www.gnu.org/licenses/>
|
||||||
|
******************************************************************************/
|
||||||
|
package alias.action;
|
||||||
|
|
||||||
|
import gui.editor.Editor;
|
||||||
|
import gui.editor.EmptyEditor;
|
||||||
|
|
||||||
|
import java.awt.EventQueue;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.DefaultListModel;
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JList;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JPopupMenu;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.ListModel;
|
||||||
|
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 alias.Alias;
|
||||||
|
import alias.AliasEvent;
|
||||||
|
import alias.AliasEvent.Event;
|
||||||
|
import alias.AliasFactory;
|
||||||
|
import alias.AliasModel;
|
||||||
|
|
||||||
|
public class AliasActionEditor extends Editor<Alias>
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private final static Logger mLog = LoggerFactory.getLogger( AliasActionEditor.class );
|
||||||
|
|
||||||
|
private static ListModel<AliasAction> EMPTY_MODEL = new DefaultListModel<>();
|
||||||
|
private JList<AliasAction> mAliasActionList = new JList<>( EMPTY_MODEL );
|
||||||
|
private JButton mNewActionButton;
|
||||||
|
private JButton mCloneActionButton;
|
||||||
|
private JButton mDeleteActionButton;
|
||||||
|
private EditorContainer mEditorContainer = new EditorContainer();
|
||||||
|
|
||||||
|
private AliasModel mAliasModel;
|
||||||
|
|
||||||
|
public AliasActionEditor( AliasModel model )
|
||||||
|
{
|
||||||
|
mAliasModel = model;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init()
|
||||||
|
{
|
||||||
|
setLayout( new MigLayout( "fill,wrap 3",
|
||||||
|
"[grow,fill][grow,fill][grow,fill]", "[][grow,fill][]" ) );
|
||||||
|
|
||||||
|
mAliasActionList.setVisibleRowCount( 6 );
|
||||||
|
mAliasActionList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
|
||||||
|
mAliasActionList.setLayoutOrientation( JList.VERTICAL );
|
||||||
|
mAliasActionList.addListSelectionListener( new ListSelectionListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void valueChanged( ListSelectionEvent event )
|
||||||
|
{
|
||||||
|
if( !event.getValueIsAdjusting() )
|
||||||
|
{
|
||||||
|
JList<?> list = (JList<?>)event.getSource();
|
||||||
|
|
||||||
|
Object selectedItem = list.getSelectedValue();
|
||||||
|
|
||||||
|
if( selectedItem != null && selectedItem instanceof AliasAction )
|
||||||
|
{
|
||||||
|
AliasAction selected = (AliasAction)selectedItem;
|
||||||
|
|
||||||
|
mEditorContainer.setAliasAction( selected );
|
||||||
|
|
||||||
|
mCloneActionButton.setEnabled( true );
|
||||||
|
mDeleteActionButton.setEnabled( true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mCloneActionButton.setEnabled( false );
|
||||||
|
mDeleteActionButton.setEnabled( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
JScrollPane scroller = new JScrollPane( mAliasActionList );
|
||||||
|
add( scroller, "span,grow" );
|
||||||
|
|
||||||
|
add( mEditorContainer, "span,grow" );
|
||||||
|
|
||||||
|
mNewActionButton = new JButton( "New ..." );
|
||||||
|
mNewActionButton.setToolTipText( "Create a new Alias Action" );
|
||||||
|
mNewActionButton.addMouseListener( new MouseAdapter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void mouseClicked( MouseEvent e )
|
||||||
|
{
|
||||||
|
JPopupMenu menu = new JPopupMenu();
|
||||||
|
|
||||||
|
menu.add( new AddAliasActionItem( AliasActionType.BEEP ) );
|
||||||
|
menu.add( new AddAliasActionItem( AliasActionType.CLIP ) );
|
||||||
|
menu.add( new AddAliasActionItem( AliasActionType.SCRIPT ) );
|
||||||
|
|
||||||
|
menu.show( e.getComponent(), e.getX(), e.getY() );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
add( mNewActionButton );
|
||||||
|
|
||||||
|
mCloneActionButton = new JButton( "Clone" );
|
||||||
|
mCloneActionButton.setToolTipText( "Create a copy of the currently selected action" );
|
||||||
|
mCloneActionButton.setEnabled( false );
|
||||||
|
mCloneActionButton.addActionListener( new ActionListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void actionPerformed( ActionEvent e )
|
||||||
|
{
|
||||||
|
AliasAction selected = mAliasActionList.getSelectedValue();
|
||||||
|
|
||||||
|
if( selected != null )
|
||||||
|
{
|
||||||
|
AliasAction clone = AliasFactory.copyOf( selected );
|
||||||
|
|
||||||
|
if( clone != null )
|
||||||
|
{
|
||||||
|
addAliasActionToList( clone );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
add( mCloneActionButton );
|
||||||
|
|
||||||
|
mDeleteActionButton = new JButton( "Delete" );
|
||||||
|
mDeleteActionButton.setToolTipText( "Delete the currently selected action" );
|
||||||
|
mDeleteActionButton.setEnabled( false );
|
||||||
|
mDeleteActionButton.addActionListener( new ActionListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void actionPerformed( ActionEvent e )
|
||||||
|
{
|
||||||
|
final AliasAction selected = mAliasActionList.getSelectedValue();
|
||||||
|
|
||||||
|
if( selected != null )
|
||||||
|
{
|
||||||
|
int choice = JOptionPane.showConfirmDialog( mDeleteActionButton,
|
||||||
|
"Do you want to delete [" + selected.toString() + "]",
|
||||||
|
"Are you sure?", JOptionPane.YES_NO_OPTION );
|
||||||
|
|
||||||
|
if( choice == JOptionPane.YES_OPTION && hasItem() )
|
||||||
|
{
|
||||||
|
Alias alias = getItem();
|
||||||
|
|
||||||
|
alias.removeAliasAction( selected );
|
||||||
|
|
||||||
|
mAliasModel.broadcast( new AliasEvent( alias, Event.CHANGE ) );
|
||||||
|
|
||||||
|
setItem( alias );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
add( mDeleteActionButton, "wrap" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItem( Alias alias )
|
||||||
|
{
|
||||||
|
super.setItem( alias );
|
||||||
|
|
||||||
|
if( alias == null || alias.getAction().isEmpty() )
|
||||||
|
{
|
||||||
|
mAliasActionList.setModel( EMPTY_MODEL );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DefaultListModel<AliasAction> model = new DefaultListModel<>();
|
||||||
|
|
||||||
|
List<AliasAction> actions = alias.getAction();
|
||||||
|
|
||||||
|
Collections.sort( actions, new Comparator<AliasAction>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public int compare( AliasAction o1, AliasAction o2 )
|
||||||
|
{
|
||||||
|
return o1.toString().compareTo( o2.toString() );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
for( AliasAction action: actions )
|
||||||
|
{
|
||||||
|
model.addElement( action );
|
||||||
|
}
|
||||||
|
|
||||||
|
mAliasActionList.setModel( model );
|
||||||
|
}
|
||||||
|
|
||||||
|
mEditorContainer.setAliasAction( null );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
if( mEditorContainer.isModified() )
|
||||||
|
{
|
||||||
|
mEditorContainer.save();
|
||||||
|
|
||||||
|
if( hasItem() )
|
||||||
|
{
|
||||||
|
mAliasModel.broadcast( new AliasEvent( getItem(), Event.CHANGE ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EditorContainer extends JPanel
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private Editor<AliasAction> mEditor = new EmptyEditor<>();
|
||||||
|
|
||||||
|
public EditorContainer()
|
||||||
|
{
|
||||||
|
setLayout( new MigLayout( "","[grow,fill]", "[grow,fill]" ) );
|
||||||
|
|
||||||
|
add( mEditor );
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isModified()
|
||||||
|
{
|
||||||
|
if( mEditor != null )
|
||||||
|
{
|
||||||
|
return mEditor.isModified();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
if( mEditor != null )
|
||||||
|
{
|
||||||
|
mEditor.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAliasAction( AliasAction aliasAction )
|
||||||
|
{
|
||||||
|
if( mEditor != null )
|
||||||
|
{
|
||||||
|
if( mEditor.isModified() )
|
||||||
|
{
|
||||||
|
int option = JOptionPane.showConfirmDialog(
|
||||||
|
EditorContainer.this,
|
||||||
|
"Action settings have changed. Do you want to save these changes?",
|
||||||
|
"Save Changes?",
|
||||||
|
JOptionPane.YES_NO_OPTION,
|
||||||
|
JOptionPane.QUESTION_MESSAGE );
|
||||||
|
|
||||||
|
if( option == JOptionPane.YES_OPTION )
|
||||||
|
{
|
||||||
|
mEditor.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
removeAll();
|
||||||
|
|
||||||
|
//This will always give us an editor
|
||||||
|
mEditor = AliasFactory.getEditor( aliasAction );
|
||||||
|
|
||||||
|
add( mEditor );
|
||||||
|
|
||||||
|
revalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addAliasActionToList( final AliasAction action )
|
||||||
|
{
|
||||||
|
if( action != null && hasItem() )
|
||||||
|
{
|
||||||
|
final Alias alias = getItem();
|
||||||
|
|
||||||
|
alias.addAliasAction( action );
|
||||||
|
|
||||||
|
EventQueue.invokeLater( new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
setItem( alias );
|
||||||
|
|
||||||
|
mAliasActionList.setSelectedValue( action, true );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AddAliasActionItem extends JMenuItem
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private AliasActionType mAliasActionType;
|
||||||
|
|
||||||
|
public AddAliasActionItem( AliasActionType type )
|
||||||
|
{
|
||||||
|
super( type.toString() );
|
||||||
|
|
||||||
|
mAliasActionType = type;
|
||||||
|
|
||||||
|
addActionListener( new ActionListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void actionPerformed( ActionEvent e )
|
||||||
|
{
|
||||||
|
final AliasAction action =
|
||||||
|
AliasFactory.getAliasAction( mAliasActionType );
|
||||||
|
|
||||||
|
addAliasActionToList( action );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,7 +15,9 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias;
|
package alias.action;
|
||||||
|
|
||||||
|
import alias.AliasEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for receiving alias events. Each listener will receive
|
* Interface for receiving alias events. Each listener will receive
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
||||||
* SDR Trunk
|
* SDR Trunk
|
||||||
* Copyright (C) 2014-2016 Dennis Sheirer
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||||
*
|
*
|
||||||
@@ -16,21 +15,23 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias;
|
package alias.action;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
public enum AliasActionType
|
||||||
|
|
||||||
public abstract class AliasConfigurationEditor extends JPanel
|
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
BEEP( "Beep" ),
|
||||||
|
CLIP( "Play Clip" ),
|
||||||
|
SCRIPT( "Run Script" );
|
||||||
|
|
||||||
/**
|
private String mLabel;
|
||||||
* Sets or resets the configuration editor components
|
|
||||||
*/
|
|
||||||
public abstract void setAlias( Alias alias );
|
|
||||||
|
|
||||||
/**
|
private AliasActionType( String label )
|
||||||
* Saves the contents of the editor components to the configuration
|
{
|
||||||
*/
|
mLabel = label;
|
||||||
public abstract void save();
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return mLabel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,13 +2,27 @@ package alias.action.beep;
|
|||||||
|
|
||||||
import message.Message;
|
import message.Message;
|
||||||
import alias.Alias;
|
import alias.Alias;
|
||||||
|
import alias.action.AliasActionType;
|
||||||
import alias.action.RecurringAction;
|
import alias.action.RecurringAction;
|
||||||
|
|
||||||
public class BeepAction extends RecurringAction
|
public class BeepAction extends RecurringAction
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AliasActionType getType()
|
||||||
|
{
|
||||||
|
return AliasActionType.BEEP;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void performAction( Alias alias, Message message )
|
public void performAction( Alias alias, Message message )
|
||||||
{
|
{
|
||||||
System.out.println( "\007" );
|
System.out.println( "\007" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "Beep";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* SDR Trunk
|
* SDR Trunk
|
||||||
* Copyright (C) 2014 Dennis Sheirer
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -17,59 +17,77 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.action.beep;
|
package alias.action.beep;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Cursor;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JSlider;
|
||||||
import javax.swing.JSpinner;
|
import javax.swing.JSpinner;
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.SpinnerModel;
|
import javax.swing.SpinnerModel;
|
||||||
import javax.swing.SpinnerNumberModel;
|
import javax.swing.SpinnerNumberModel;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import alias.action.AliasAction;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import alias.action.RecurringAction.Interval;
|
import alias.action.RecurringAction.Interval;
|
||||||
|
import alias.id.priority.Priority;
|
||||||
|
|
||||||
public class BeepActionEditor extends JPanel implements ActionListener
|
public class BeepActionEditor extends DocumentListenerEditor<AliasAction>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private final static Logger mLog =
|
private static final String HELP_TEXT =
|
||||||
LoggerFactory.getLogger( BeepActionEditor.class );
|
"<html><h3>Beep Action</h3>"
|
||||||
|
+ "This action will sound a beep according to the interval<br>"
|
||||||
|
+ "that you select:<br><br>"
|
||||||
|
+ "<b>Once:</b> Beep the first time the alias is active and<br>"
|
||||||
|
+ "never again<br><br>"
|
||||||
|
+ "<b>Once, Reset After Delay:</b> Beep once and suppress<br>"
|
||||||
|
+ "subsequent beeps for the specified period in seconds.<br>"
|
||||||
|
+ "After the reset period, beep again when the alias is active.<br><br>"
|
||||||
|
+ "<b>Until Dismissed:</b> Beep every period seconds until you<br>"
|
||||||
|
+ "click OK on the dialog that appears. Alerting is suppressed<br>"
|
||||||
|
+ "for 15 seconds after you click OK.<br>"
|
||||||
|
+ "</html>";
|
||||||
|
|
||||||
private BeepActionNode mBeepActionNode;
|
|
||||||
private JTextField mTextSiteID;
|
|
||||||
private JComboBox<Interval> mComboInterval;
|
private JComboBox<Interval> mComboInterval;
|
||||||
private JSpinner mSpinnerPeriod;
|
private JSlider mPeriodSlider;
|
||||||
|
private JLabel mPeriodSliderLabel;
|
||||||
|
|
||||||
public BeepActionEditor( BeepActionNode beepActionNode )
|
public BeepActionEditor( AliasAction aliasAction )
|
||||||
{
|
{
|
||||||
mBeepActionNode = beepActionNode;
|
init();
|
||||||
|
|
||||||
initGUI();
|
setItem( aliasAction );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
public BeepAction getBeepAction()
|
||||||
{
|
{
|
||||||
setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][][][][][grow]" ) );
|
if( getItem() instanceof BeepAction )
|
||||||
|
{
|
||||||
|
return (BeepAction)getItem();
|
||||||
|
}
|
||||||
|
|
||||||
add( new JLabel( "Action: Beep" ), "span,align center" );
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
add( new JLabel( "Interval:" ) );
|
private void init()
|
||||||
|
{
|
||||||
|
setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][][]" ) );
|
||||||
|
|
||||||
|
add( new JLabel( "Beep Interval:" ) );
|
||||||
|
|
||||||
mComboInterval = new JComboBox<Interval>( Interval.values() );
|
mComboInterval = new JComboBox<Interval>( Interval.values() );
|
||||||
|
mComboInterval.setToolTipText( HELP_TEXT );
|
||||||
mComboInterval.setSelectedItem( mBeepActionNode.getBeepAction().getInterval() );
|
|
||||||
|
|
||||||
mComboInterval.addActionListener( new ActionListener()
|
mComboInterval.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -81,71 +99,97 @@ public class BeepActionEditor extends JPanel implements ActionListener
|
|||||||
if( selected != null )
|
if( selected != null )
|
||||||
{
|
{
|
||||||
/* Enable/disable period spinner based on selection */
|
/* Enable/disable period spinner based on selection */
|
||||||
mSpinnerPeriod.setEnabled( selected != Interval.ONCE );
|
boolean enabled = selected != Interval.ONCE;
|
||||||
|
|
||||||
mBeepActionNode.getBeepAction().setInterval( selected );
|
mPeriodSlider.setEnabled( enabled );
|
||||||
|
mPeriodSliderLabel.setEnabled( enabled );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
add( mComboInterval, "wrap" );
|
add( mComboInterval, "wrap" );
|
||||||
|
|
||||||
final SpinnerModel model = new SpinnerNumberModel(
|
final SpinnerModel model = new SpinnerNumberModel( 1, 1, 30, 1 );
|
||||||
mBeepActionNode.getBeepAction().getPeriod(), 1, 30, 1 );
|
|
||||||
|
|
||||||
model.addChangeListener( new ChangeListener()
|
model.addChangeListener( new ChangeListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void stateChanged( ChangeEvent e )
|
public void stateChanged( ChangeEvent e )
|
||||||
{
|
{
|
||||||
mBeepActionNode.getBeepAction().setPeriod( (int)model.getValue() );
|
setModified( true );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
mSpinnerPeriod = new JSpinner( model );
|
mPeriodSlider = new JSlider( JSlider.HORIZONTAL, 1, 60, 1 );
|
||||||
|
mPeriodSlider.setMajorTickSpacing( 10 );
|
||||||
if( mBeepActionNode.getBeepAction().getInterval() == Interval.ONCE )
|
mPeriodSlider.setMinorTickSpacing( 2 );
|
||||||
|
mPeriodSlider.setPaintTicks( true );
|
||||||
|
mPeriodSlider.setLabelTable( mPeriodSlider.createStandardLabels( 10, 10 ) );
|
||||||
|
mPeriodSlider.setPaintLabels( true );
|
||||||
|
mPeriodSlider.addChangeListener( new ChangeListener()
|
||||||
{
|
{
|
||||||
mSpinnerPeriod.setEnabled( false );
|
@Override
|
||||||
}
|
public void stateChanged( ChangeEvent e )
|
||||||
|
{
|
||||||
|
mPeriodSliderLabel.setText( "Period: " + mPeriodSlider.getValue() );
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
mPeriodSlider.setToolTipText( HELP_TEXT );
|
||||||
|
|
||||||
add( new JLabel( "Period:" ) );
|
mPeriodSliderLabel = new JLabel( "Period: " + mPeriodSlider.getValue() + " " );
|
||||||
add( mSpinnerPeriod, "wrap" );
|
add( mPeriodSliderLabel );
|
||||||
|
add( mPeriodSlider, "wrap,grow" );
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
JLabel example = new JLabel( "Help ..." );
|
||||||
|
example.setForeground( Color.BLUE.brighter() );
|
||||||
sb.append( "This action will sound a beep according to the interval that you select.\n\n" );
|
example.setCursor( new Cursor( Cursor.HAND_CURSOR ) );
|
||||||
sb.append( "Once - Beep the first time the alias is active and never again.\n\n" );
|
example.addMouseListener( new MouseAdapter()
|
||||||
sb.append( "Once, Reset After Delay - Beep once and suppress subsequent beeps for the specified period in seconds. After the reset period, it will beep again when the alias is active.\n\n" );
|
{
|
||||||
sb.append( "Until Dismissed - Beep every period seconds until you click OK on the dialog that appears. Alerting is suppressed for 15 seconds after you click OK." );
|
@Override
|
||||||
|
public void mouseClicked( MouseEvent e )
|
||||||
JTextArea description = new JTextArea( sb.toString() );
|
{
|
||||||
|
JOptionPane.showMessageDialog( BeepActionEditor.this,
|
||||||
description.setLineWrap( true );
|
HELP_TEXT, "Help", JOptionPane.INFORMATION_MESSAGE );
|
||||||
description.setBackground( getBackground() );
|
}
|
||||||
|
} );
|
||||||
add( description, "growx,span" );
|
add( example );
|
||||||
|
|
||||||
JButton btnSave = new JButton( "Save" );
|
|
||||||
btnSave.addActionListener( BeepActionEditor.this );
|
|
||||||
add( btnSave, "growx,push" );
|
|
||||||
|
|
||||||
JButton btnReset = new JButton( "Reset" );
|
|
||||||
btnReset.addActionListener( BeepActionEditor.this );
|
|
||||||
add( btnReset, "growx,push" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed( ActionEvent e )
|
public void setItem( AliasAction item )
|
||||||
{
|
{
|
||||||
String command = e.getActionCommand();
|
super.setItem( item );
|
||||||
|
|
||||||
if( command.contentEquals( "Save" ) )
|
if( hasItem() )
|
||||||
{
|
{
|
||||||
mBeepActionNode.save();
|
BeepAction beep = getBeepAction();
|
||||||
mBeepActionNode.show();
|
|
||||||
|
Interval interval = beep.getInterval();
|
||||||
|
|
||||||
|
mComboInterval.setSelectedItem( interval );
|
||||||
|
|
||||||
|
boolean enabled = interval != Interval.ONCE;
|
||||||
|
|
||||||
|
mPeriodSliderLabel.setEnabled( enabled );
|
||||||
|
mPeriodSlider.setEnabled( enabled );
|
||||||
|
mPeriodSlider.setValue( beep.getPeriod() );
|
||||||
}
|
}
|
||||||
|
|
||||||
mBeepActionNode.refresh();
|
setModified( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
if( hasItem() && isModified() )
|
||||||
|
{
|
||||||
|
BeepAction beep = getBeepAction();
|
||||||
|
|
||||||
|
beep.setInterval( (Interval)mComboInterval.getSelectedItem() );
|
||||||
|
beep.setPeriod( mPeriodSlider.getValue() );
|
||||||
|
}
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class BeepActionNode extends AliasActionNode
|
|||||||
@Override
|
@Override
|
||||||
public JPanel getEditor()
|
public JPanel getEditor()
|
||||||
{
|
{
|
||||||
return new BeepActionEditor( this );
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BeepAction getBeepAction()
|
public BeepAction getBeepAction()
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import alias.Alias;
|
import alias.Alias;
|
||||||
|
import alias.action.AliasActionType;
|
||||||
import alias.action.RecurringAction;
|
import alias.action.RecurringAction;
|
||||||
|
|
||||||
public class ClipAction extends RecurringAction
|
public class ClipAction extends RecurringAction
|
||||||
@@ -28,9 +29,14 @@ public class ClipAction extends RecurringAction
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AliasActionType getType()
|
||||||
|
{
|
||||||
|
return AliasActionType.CLIP;
|
||||||
|
}
|
||||||
|
|
||||||
public String getPath()
|
public String getPath()
|
||||||
{
|
{
|
||||||
|
|
||||||
return mFilePath;
|
return mFilePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,4 +93,18 @@ public class ClipAction extends RecurringAction
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
if( mFilePath == null )
|
||||||
|
{
|
||||||
|
return "Play Clip";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "Play Clip: " + mFilePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* SDR Trunk
|
* SDR Trunk
|
||||||
* Copyright (C) 2014 Dennis Sheirer
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -17,9 +17,15 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.action.clip;
|
package alias.action.clip;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Cursor;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
@@ -27,9 +33,7 @@ import javax.swing.JComboBox;
|
|||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JSlider;
|
||||||
import javax.swing.JSpinner;
|
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.SpinnerModel;
|
import javax.swing.SpinnerModel;
|
||||||
import javax.swing.SpinnerNumberModel;
|
import javax.swing.SpinnerNumberModel;
|
||||||
@@ -37,43 +41,59 @@ import javax.swing.event.ChangeEvent;
|
|||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import alias.action.AliasAction;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import alias.action.RecurringAction.Interval;
|
import alias.action.RecurringAction.Interval;
|
||||||
|
import alias.action.script.ScriptActionEditor;
|
||||||
|
|
||||||
public class ClipActionEditor extends JPanel implements ActionListener
|
public class ClipActionEditor extends DocumentListenerEditor<AliasAction>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private final static Logger mLog =
|
private static final String PLEASE_SELECT_A_FILE = "Please select a file";
|
||||||
LoggerFactory.getLogger( ClipActionEditor.class );
|
private static final String HELP_TEXT =
|
||||||
|
"<html><h3>Clip Action</h3>"
|
||||||
|
+ "This action will play an audio clip according to the interval<br>"
|
||||||
|
+ "that you select:<br><br>"
|
||||||
|
+ "<b>Once:</b> play the first time the alias is active and<br>"
|
||||||
|
+ "never again<br><br>"
|
||||||
|
+ "<b>Once, Reset After Delay:</b> play once and suppress<br>"
|
||||||
|
+ "subsequent runs for the specified period in seconds.<br>"
|
||||||
|
+ "After the reset period, play again when the alias is active.<br><br>"
|
||||||
|
+ "<b>Until Dismissed:</b> play every period seconds until you<br>"
|
||||||
|
+ "click OK on the dialog that appears. Alerting is suppressed<br>"
|
||||||
|
+ "for 15 seconds after you click OK.<br>"
|
||||||
|
+ "</html>";
|
||||||
|
|
||||||
private ClipActionNode mClipActionNode;
|
|
||||||
private JComboBox<Interval> mComboInterval;
|
private JComboBox<Interval> mComboInterval;
|
||||||
private JSpinner mSpinnerPeriod;
|
private JSlider mPeriodSlider;
|
||||||
|
private JLabel mPeriodSliderLabel;
|
||||||
private JTextField mTextFilePath;
|
private JTextField mTextFilePath;
|
||||||
|
|
||||||
public ClipActionEditor( ClipActionNode clipActionNode )
|
public ClipActionEditor( AliasAction aliasAction )
|
||||||
{
|
{
|
||||||
mClipActionNode = clipActionNode;
|
init();
|
||||||
|
|
||||||
initGUI();
|
setItem( aliasAction );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
public ClipAction getClipAction()
|
||||||
{
|
{
|
||||||
setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][][][][][grow]" ) );
|
if( getItem() instanceof ClipAction )
|
||||||
|
{
|
||||||
|
return (ClipAction)getItem();
|
||||||
|
}
|
||||||
|
|
||||||
add( new JLabel( "Action: Audio Clip" ), "span,align center" );
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
add( new JLabel( "Interval:" ) );
|
private void init()
|
||||||
|
{
|
||||||
|
setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][][][][]" ) );
|
||||||
|
|
||||||
|
add( new JLabel( "Play Interval:" ) );
|
||||||
|
|
||||||
mComboInterval = new JComboBox<Interval>( Interval.values() );
|
mComboInterval = new JComboBox<Interval>( Interval.values() );
|
||||||
|
mComboInterval.setToolTipText( HELP_TEXT );
|
||||||
mComboInterval.setSelectedItem( mClipActionNode.getClipAction().getInterval() );
|
|
||||||
|
|
||||||
mComboInterval.addActionListener( new ActionListener()
|
mComboInterval.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -84,37 +104,51 @@ public class ClipActionEditor extends JPanel implements ActionListener
|
|||||||
|
|
||||||
if( selected != null )
|
if( selected != null )
|
||||||
{
|
{
|
||||||
/* Enable/disable period spinner based on selection */
|
/* Enable/disable period slider based on selection */
|
||||||
mSpinnerPeriod.setEnabled( selected != Interval.ONCE );
|
boolean enabled = selected != Interval.ONCE;
|
||||||
|
|
||||||
mClipActionNode.getClipAction().setInterval( selected );
|
mPeriodSlider.setEnabled( enabled );
|
||||||
|
mPeriodSliderLabel.setEnabled( enabled );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
add( mComboInterval );
|
||||||
|
|
||||||
add( mComboInterval, "wrap" );
|
final SpinnerModel model = new SpinnerNumberModel( 1, 1, 30, 1 );
|
||||||
|
|
||||||
final SpinnerModel model = new SpinnerNumberModel(
|
|
||||||
mClipActionNode.getClipAction().getPeriod(), 1, 30, 1 );
|
|
||||||
|
|
||||||
model.addChangeListener( new ChangeListener()
|
model.addChangeListener( new ChangeListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void stateChanged( ChangeEvent e )
|
public void stateChanged( ChangeEvent e )
|
||||||
{
|
{
|
||||||
mClipActionNode.getClipAction().setPeriod( (int)model.getValue() );
|
setModified( true );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
mSpinnerPeriod = new JSpinner( model );
|
mPeriodSlider = new JSlider( JSlider.HORIZONTAL, 1, 60, 1 );
|
||||||
|
mPeriodSlider.setMajorTickSpacing( 10 );
|
||||||
if( mClipActionNode.getClipAction().getInterval() == Interval.ONCE )
|
mPeriodSlider.setMinorTickSpacing( 2 );
|
||||||
|
mPeriodSlider.setPaintTicks( true );
|
||||||
|
mPeriodSlider.setLabelTable( mPeriodSlider.createStandardLabels( 10, 10 ) );
|
||||||
|
mPeriodSlider.setPaintLabels( true );
|
||||||
|
mPeriodSlider.addChangeListener( new ChangeListener()
|
||||||
{
|
{
|
||||||
mSpinnerPeriod.setEnabled( false );
|
@Override
|
||||||
}
|
public void stateChanged( ChangeEvent e )
|
||||||
|
{
|
||||||
|
mPeriodSliderLabel.setText( "Period: " + mPeriodSlider.getValue() );
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
mPeriodSlider.setToolTipText( HELP_TEXT );
|
||||||
|
|
||||||
add( new JLabel( "Period:" ) );
|
mPeriodSliderLabel = new JLabel( "Period: " + mPeriodSlider.getValue() + " " );
|
||||||
add( mSpinnerPeriod, "wrap" );
|
add( mPeriodSliderLabel );
|
||||||
|
add( mPeriodSlider, "wrap,grow" );
|
||||||
|
|
||||||
|
mTextFilePath = new JTextField( PLEASE_SELECT_A_FILE );
|
||||||
|
add( mTextFilePath, "growx,span" );
|
||||||
|
|
||||||
JButton fileButton = new JButton( "File" );
|
JButton fileButton = new JButton( "File" );
|
||||||
|
|
||||||
@@ -131,88 +165,134 @@ public class ClipActionEditor extends JPanel implements ActionListener
|
|||||||
{
|
{
|
||||||
File file = chooser.getSelectedFile();
|
File file = chooser.getSelectedFile();
|
||||||
|
|
||||||
mClipActionNode.getClipAction().setPath( file.getAbsolutePath() );
|
|
||||||
mTextFilePath.setText( file.getAbsolutePath() );
|
mTextFilePath.setText( file.getAbsolutePath() );
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
add( fileButton );
|
add( fileButton, "grow" );
|
||||||
|
|
||||||
JButton testButton = new JButton( "Test" );
|
JButton testButton = new JButton( "Test" );
|
||||||
|
|
||||||
testButton.addActionListener( new ActionListener()
|
testButton.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed( ActionEvent actionEvent )
|
public void actionPerformed( ActionEvent e )
|
||||||
{
|
{
|
||||||
String path = mClipActionNode.getClipAction().getPath();
|
if( hasItem() )
|
||||||
|
|
||||||
if( path == null || path.trim().isEmpty() )
|
|
||||||
{
|
{
|
||||||
JOptionPane.showMessageDialog( ClipActionEditor.this,
|
String path = mTextFilePath.getText();
|
||||||
"Please select an audio file", "Please select file",
|
|
||||||
JOptionPane.ERROR_MESSAGE );
|
|
||||||
}
|
|
||||||
|
|
||||||
EventQueue.invokeLater( new Runnable()
|
if( path == null || path.trim().isEmpty() )
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
{
|
||||||
try
|
JOptionPane.showMessageDialog( ClipActionEditor.this,
|
||||||
{
|
"Please select an audio file", PLEASE_SELECT_A_FILE,
|
||||||
mClipActionNode.getClipAction().play();
|
JOptionPane.ERROR_MESSAGE );
|
||||||
}
|
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
JOptionPane.showMessageDialog( ClipActionEditor.this,
|
|
||||||
"Couldn't play audio clip [" + e.getMessage() + "]",
|
|
||||||
"Error", JOptionPane.ERROR_MESSAGE );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} );
|
else
|
||||||
|
{
|
||||||
|
if( isModified() )
|
||||||
|
{
|
||||||
|
int option = JOptionPane.showConfirmDialog(
|
||||||
|
ClipActionEditor.this,
|
||||||
|
"Settings have changed. Do you want to save these changes?",
|
||||||
|
"Save Changes?",
|
||||||
|
JOptionPane.YES_NO_OPTION,
|
||||||
|
JOptionPane.QUESTION_MESSAGE );
|
||||||
|
|
||||||
|
if( option == JOptionPane.YES_OPTION )
|
||||||
|
{
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new Thread( new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
getClipAction().play();
|
||||||
|
}
|
||||||
|
catch( Exception e1 )
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog( ClipActionEditor.this,
|
||||||
|
"Couldn't play audio clip [" + e1.getMessage() + "]",
|
||||||
|
"Error", JOptionPane.ERROR_MESSAGE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
add( testButton, "wrap" );
|
add( testButton, "grow,wrap" );
|
||||||
|
|
||||||
mTextFilePath = new JTextField( mClipActionNode.getClipAction().getPath() );
|
JLabel example = new JLabel( "Help ..." );
|
||||||
add( mTextFilePath, "growx,span" );
|
example.setForeground( Color.BLUE.brighter() );
|
||||||
|
example.setCursor( new Cursor( Cursor.HAND_CURSOR ) );
|
||||||
StringBuilder sb = new StringBuilder();
|
example.addMouseListener( new MouseAdapter()
|
||||||
|
{
|
||||||
sb.append( "This action will play the audio clip according to the interval that you select.\n\n" );
|
@Override
|
||||||
sb.append( "Once - Play the first time the alias is active and never again.\n\n" );
|
public void mouseClicked( MouseEvent e )
|
||||||
sb.append( "Once, Reset After Delay - Play once and suppress subsequent plays for the specified period in seconds. After the reset period, it will play again when the alias is active.\n\n" );
|
{
|
||||||
sb.append( "Until Dismissed - Play audio clip every period seconds until you click OK on the dialog that appears. Alerting is suppressed for 15 seconds after you click OK." );
|
JOptionPane.showMessageDialog( ClipActionEditor.this,
|
||||||
|
HELP_TEXT, "Help", JOptionPane.INFORMATION_MESSAGE );
|
||||||
JTextArea description = new JTextArea( sb.toString() );
|
}
|
||||||
|
} );
|
||||||
description.setLineWrap( true );
|
add( example );
|
||||||
description.setBackground( getBackground() );
|
|
||||||
|
|
||||||
add( description, "growx,span" );
|
|
||||||
|
|
||||||
JButton btnSave = new JButton( "Save" );
|
|
||||||
btnSave.addActionListener( ClipActionEditor.this );
|
|
||||||
add( btnSave, "growx,push" );
|
|
||||||
|
|
||||||
JButton btnReset = new JButton( "Reset" );
|
|
||||||
btnReset.addActionListener( ClipActionEditor.this );
|
|
||||||
add( btnReset, "growx,push" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed( ActionEvent e )
|
public void setItem( AliasAction item )
|
||||||
{
|
{
|
||||||
String command = e.getActionCommand();
|
super.setItem( item );
|
||||||
|
|
||||||
if( command.contentEquals( "Save" ) )
|
if( hasItem() )
|
||||||
{
|
{
|
||||||
mClipActionNode.save();
|
ClipAction clip = getClipAction();
|
||||||
mClipActionNode.show();
|
|
||||||
|
Interval interval = clip.getInterval();
|
||||||
|
|
||||||
|
mComboInterval.setSelectedItem( interval );
|
||||||
|
|
||||||
|
boolean enabled = interval != Interval.ONCE;
|
||||||
|
|
||||||
|
mPeriodSliderLabel.setEnabled( enabled );
|
||||||
|
mPeriodSlider.setEnabled( enabled );
|
||||||
|
mPeriodSlider.setValue( clip.getPeriod() );
|
||||||
|
|
||||||
|
String filepath = clip.getPath();
|
||||||
|
|
||||||
|
if( filepath != null && !filepath.isEmpty() )
|
||||||
|
{
|
||||||
|
mTextFilePath.setText( filepath );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mTextFilePath.setText( PLEASE_SELECT_A_FILE );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mClipActionNode.refresh();
|
setModified( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
if( hasItem() && isModified() )
|
||||||
|
{
|
||||||
|
ClipAction script = getClipAction();
|
||||||
|
|
||||||
|
script.setInterval( (Interval)mComboInterval.getSelectedItem() );
|
||||||
|
script.setPeriod( mPeriodSlider.getValue() );
|
||||||
|
script.setPath( mTextFilePath.getText() );
|
||||||
|
}
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class ClipActionNode extends AliasActionNode
|
|||||||
@Override
|
@Override
|
||||||
public JPanel getEditor()
|
public JPanel getEditor()
|
||||||
{
|
{
|
||||||
return new ClipActionEditor( this );
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClipAction getClipAction()
|
public ClipAction getClipAction()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import alias.Alias;
|
import alias.Alias;
|
||||||
|
import alias.action.AliasActionType;
|
||||||
import alias.action.RecurringAction;
|
import alias.action.RecurringAction;
|
||||||
|
|
||||||
public class ScriptAction extends RecurringAction
|
public class ScriptAction extends RecurringAction
|
||||||
@@ -21,6 +22,12 @@ public class ScriptAction extends RecurringAction
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AliasActionType getType()
|
||||||
|
{
|
||||||
|
return AliasActionType.SCRIPT;
|
||||||
|
}
|
||||||
|
|
||||||
public String getScript()
|
public String getScript()
|
||||||
{
|
{
|
||||||
return mScript;
|
return mScript;
|
||||||
@@ -75,4 +82,17 @@ public class ScriptAction extends RecurringAction
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
if( mScript == null )
|
||||||
|
{
|
||||||
|
return "Run Script";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "Run Script: " + mScript;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* SDR Trunk
|
* SDR Trunk
|
||||||
* Copyright (C) 2014 Dennis Sheirer
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -17,9 +17,16 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.action.script;
|
package alias.action.script;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
import gui.editor.Editor;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Cursor;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
@@ -27,9 +34,7 @@ import javax.swing.JComboBox;
|
|||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JSlider;
|
||||||
import javax.swing.JSpinner;
|
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.SpinnerModel;
|
import javax.swing.SpinnerModel;
|
||||||
import javax.swing.SpinnerNumberModel;
|
import javax.swing.SpinnerNumberModel;
|
||||||
@@ -37,43 +42,59 @@ import javax.swing.event.ChangeEvent;
|
|||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import alias.action.AliasAction;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import alias.action.RecurringAction.Interval;
|
import alias.action.RecurringAction.Interval;
|
||||||
|
import alias.action.clip.ClipActionEditor;
|
||||||
|
|
||||||
public class ScriptActionEditor extends JPanel implements ActionListener
|
public class ScriptActionEditor extends DocumentListenerEditor<AliasAction>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private final static Logger mLog =
|
private static final String PLEASE_SELECT_A_FILE = "Please select a file";
|
||||||
LoggerFactory.getLogger( ScriptActionEditor.class );
|
private static final String HELP_TEXT =
|
||||||
|
"<html><h3>Script Action</h3>"
|
||||||
|
+ "This action will run a script according to the interval<br>"
|
||||||
|
+ "that you select:<br><br>"
|
||||||
|
+ "<b>Once:</b> run the first time the alias is active and<br>"
|
||||||
|
+ "never again<br><br>"
|
||||||
|
+ "<b>Once, Reset After Delay:</b> run once and suppress<br>"
|
||||||
|
+ "subsequent runs for the specified period in seconds.<br>"
|
||||||
|
+ "After the reset period, run again when the alias is active.<br><br>"
|
||||||
|
+ "<b>Until Dismissed:</b> run every period seconds until you<br>"
|
||||||
|
+ "click OK on the dialog that appears. Alerting is suppressed<br>"
|
||||||
|
+ "for 15 seconds after you click OK.<br>"
|
||||||
|
+ "</html>";
|
||||||
|
|
||||||
private ScriptActionNode mScriptActionNode;
|
|
||||||
private JComboBox<Interval> mComboInterval;
|
private JComboBox<Interval> mComboInterval;
|
||||||
private JSpinner mSpinnerPeriod;
|
private JSlider mPeriodSlider;
|
||||||
|
private JLabel mPeriodSliderLabel;
|
||||||
private JTextField mTextFilePath;
|
private JTextField mTextFilePath;
|
||||||
|
|
||||||
public ScriptActionEditor( ScriptActionNode clipActionNode )
|
public ScriptActionEditor( AliasAction aliasAction )
|
||||||
{
|
{
|
||||||
mScriptActionNode = clipActionNode;
|
init();
|
||||||
|
|
||||||
initGUI();
|
setItem( aliasAction );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
public ScriptAction getScriptAction()
|
||||||
{
|
{
|
||||||
setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][][][][][grow]" ) );
|
if( getItem() instanceof ScriptAction )
|
||||||
|
{
|
||||||
|
return (ScriptAction)getItem();
|
||||||
|
}
|
||||||
|
|
||||||
add( new JLabel( "Action: Script" ), "span,align center" );
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
add( new JLabel( "Interval:" ) );
|
private void init()
|
||||||
|
{
|
||||||
|
setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][][][][]" ) );
|
||||||
|
|
||||||
|
add( new JLabel( "Run Interval:" ) );
|
||||||
|
|
||||||
mComboInterval = new JComboBox<Interval>( Interval.values() );
|
mComboInterval = new JComboBox<Interval>( Interval.values() );
|
||||||
|
mComboInterval.setToolTipText( HELP_TEXT );
|
||||||
mComboInterval.setSelectedItem( mScriptActionNode.getScriptAction().getInterval() );
|
|
||||||
|
|
||||||
mComboInterval.addActionListener( new ActionListener()
|
mComboInterval.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -84,37 +105,51 @@ public class ScriptActionEditor extends JPanel implements ActionListener
|
|||||||
|
|
||||||
if( selected != null )
|
if( selected != null )
|
||||||
{
|
{
|
||||||
/* Enable/disable period spinner based on selection */
|
/* Enable/disable period slider based on selection */
|
||||||
mSpinnerPeriod.setEnabled( selected != Interval.ONCE );
|
boolean enabled = selected != Interval.ONCE;
|
||||||
|
|
||||||
mScriptActionNode.getScriptAction().setInterval( selected );
|
mPeriodSlider.setEnabled( enabled );
|
||||||
|
mPeriodSliderLabel.setEnabled( enabled );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
add( mComboInterval );
|
||||||
|
|
||||||
add( mComboInterval, "wrap" );
|
final SpinnerModel model = new SpinnerNumberModel( 1, 1, 30, 1 );
|
||||||
|
|
||||||
final SpinnerModel model = new SpinnerNumberModel(
|
|
||||||
mScriptActionNode.getScriptAction().getPeriod(), 1, 30, 1 );
|
|
||||||
|
|
||||||
model.addChangeListener( new ChangeListener()
|
model.addChangeListener( new ChangeListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void stateChanged( ChangeEvent e )
|
public void stateChanged( ChangeEvent e )
|
||||||
{
|
{
|
||||||
mScriptActionNode.getScriptAction().setPeriod( (int)model.getValue() );
|
setModified( true );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
mSpinnerPeriod = new JSpinner( model );
|
mPeriodSlider = new JSlider( JSlider.HORIZONTAL, 1, 60, 1 );
|
||||||
|
mPeriodSlider.setMajorTickSpacing( 10 );
|
||||||
if( mScriptActionNode.getScriptAction().getInterval() == Interval.ONCE )
|
mPeriodSlider.setMinorTickSpacing( 2 );
|
||||||
|
mPeriodSlider.setPaintTicks( true );
|
||||||
|
mPeriodSlider.setLabelTable( mPeriodSlider.createStandardLabels( 10, 10 ) );
|
||||||
|
mPeriodSlider.setPaintLabels( true );
|
||||||
|
mPeriodSlider.addChangeListener( new ChangeListener()
|
||||||
{
|
{
|
||||||
mSpinnerPeriod.setEnabled( false );
|
@Override
|
||||||
}
|
public void stateChanged( ChangeEvent e )
|
||||||
|
{
|
||||||
|
mPeriodSliderLabel.setText( "Period: " + mPeriodSlider.getValue() );
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
mPeriodSlider.setToolTipText( HELP_TEXT );
|
||||||
|
|
||||||
add( new JLabel( "Period:" ) );
|
mPeriodSliderLabel = new JLabel( "Period: " + mPeriodSlider.getValue() + " " );
|
||||||
add( mSpinnerPeriod, "wrap" );
|
add( mPeriodSliderLabel );
|
||||||
|
add( mPeriodSlider, "wrap,grow" );
|
||||||
|
|
||||||
|
mTextFilePath = new JTextField( PLEASE_SELECT_A_FILE );
|
||||||
|
add( mTextFilePath, "growx,span" );
|
||||||
|
|
||||||
JButton fileButton = new JButton( "File" );
|
JButton fileButton = new JButton( "File" );
|
||||||
|
|
||||||
@@ -131,13 +166,14 @@ public class ScriptActionEditor extends JPanel implements ActionListener
|
|||||||
{
|
{
|
||||||
File file = chooser.getSelectedFile();
|
File file = chooser.getSelectedFile();
|
||||||
|
|
||||||
mScriptActionNode.getScriptAction().setScript( file.getAbsolutePath() );
|
|
||||||
mTextFilePath.setText( file.getAbsolutePath() );
|
mTextFilePath.setText( file.getAbsolutePath() );
|
||||||
|
|
||||||
|
setModified( true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
add( fileButton );
|
add( fileButton, "grow" );
|
||||||
|
|
||||||
JButton testButton = new JButton( "Test" );
|
JButton testButton = new JButton( "Test" );
|
||||||
testButton.addActionListener( new ActionListener()
|
testButton.addActionListener( new ActionListener()
|
||||||
@@ -145,74 +181,115 @@ public class ScriptActionEditor extends JPanel implements ActionListener
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed( ActionEvent actionEvent )
|
public void actionPerformed( ActionEvent actionEvent )
|
||||||
{
|
{
|
||||||
String script = mScriptActionNode.getScriptAction().getScript();
|
String script = mTextFilePath.getText();
|
||||||
|
|
||||||
if( script == null || script.trim().isEmpty() )
|
if( script == null || script.trim().isEmpty() )
|
||||||
{
|
{
|
||||||
JOptionPane.showMessageDialog( ScriptActionEditor.this,
|
JOptionPane.showMessageDialog( ScriptActionEditor.this,
|
||||||
"Please select a script file", "Please select file",
|
"Please select a script file", PLEASE_SELECT_A_FILE,
|
||||||
JOptionPane.ERROR_MESSAGE );
|
JOptionPane.ERROR_MESSAGE );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
EventQueue.invokeLater( new Runnable()
|
|
||||||
{
|
{
|
||||||
@Override
|
if( isModified() )
|
||||||
public void run()
|
|
||||||
{
|
{
|
||||||
try
|
int option = JOptionPane.showConfirmDialog(
|
||||||
|
ScriptActionEditor.this,
|
||||||
|
"Settings have changed. Do you want to save these changes?",
|
||||||
|
"Save Changes?",
|
||||||
|
JOptionPane.YES_NO_OPTION,
|
||||||
|
JOptionPane.QUESTION_MESSAGE );
|
||||||
|
|
||||||
|
if( option == JOptionPane.YES_OPTION )
|
||||||
{
|
{
|
||||||
mScriptActionNode.getScriptAction().play();
|
save();
|
||||||
}
|
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
JOptionPane.showMessageDialog( ScriptActionEditor.this,
|
|
||||||
"Couldn't run script [" + e.getMessage() + "]",
|
|
||||||
"Error", JOptionPane.ERROR_MESSAGE );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} );
|
|
||||||
|
new Thread( new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
getScriptAction().play();
|
||||||
|
}
|
||||||
|
catch( Exception e1 )
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog( ScriptActionEditor.this,
|
||||||
|
e1.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
add( testButton, "wrap" );
|
add( testButton, "grow,wrap" );
|
||||||
|
|
||||||
mTextFilePath = new JTextField( mScriptActionNode.getScriptAction().getScript() );
|
JLabel example = new JLabel( "Help ..." );
|
||||||
add( mTextFilePath, "growx,span" );
|
example.setForeground( Color.BLUE.brighter() );
|
||||||
|
example.setCursor( new Cursor( Cursor.HAND_CURSOR ) );
|
||||||
StringBuilder sb = new StringBuilder();
|
example.addMouseListener( new MouseAdapter()
|
||||||
|
{
|
||||||
sb.append( "This action will run the script according to the interval that you select.\n\n" );
|
@Override
|
||||||
sb.append( "Once - Run script the first time the alias is active and never again.\n\n" );
|
public void mouseClicked( MouseEvent e )
|
||||||
sb.append( "Once, Reset After Delay - Run once and suppress subsequent runs for the specified period in seconds. After the reset period, it will play again when the alias is active.\n\n" );
|
{
|
||||||
sb.append( "Until Dismissed - Run script every period seconds until you click OK on the dialog that appears. Alerting is suppressed for 15 seconds after you click OK." );
|
JOptionPane.showMessageDialog( ScriptActionEditor.this,
|
||||||
|
HELP_TEXT, "Help", JOptionPane.INFORMATION_MESSAGE );
|
||||||
JTextArea description = new JTextArea( sb.toString() );
|
}
|
||||||
|
} );
|
||||||
description.setLineWrap( true );
|
add( example );
|
||||||
description.setBackground( getBackground() );
|
|
||||||
|
|
||||||
add( description, "growx,span" );
|
|
||||||
|
|
||||||
JButton btnSave = new JButton( "Save" );
|
|
||||||
btnSave.addActionListener( ScriptActionEditor.this );
|
|
||||||
add( btnSave, "growx,push" );
|
|
||||||
|
|
||||||
JButton btnReset = new JButton( "Reset" );
|
|
||||||
btnReset.addActionListener( ScriptActionEditor.this );
|
|
||||||
add( btnReset, "growx,push" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed( ActionEvent e )
|
public void setItem( AliasAction item )
|
||||||
{
|
{
|
||||||
String command = e.getActionCommand();
|
super.setItem( item );
|
||||||
|
|
||||||
if( command.contentEquals( "Save" ) )
|
if( hasItem() )
|
||||||
{
|
{
|
||||||
mScriptActionNode.save();
|
ScriptAction script = getScriptAction();
|
||||||
mScriptActionNode.show();
|
|
||||||
|
Interval interval = script.getInterval();
|
||||||
|
|
||||||
|
mComboInterval.setSelectedItem( interval );
|
||||||
|
|
||||||
|
boolean enabled = interval != Interval.ONCE;
|
||||||
|
|
||||||
|
mPeriodSliderLabel.setEnabled( enabled );
|
||||||
|
mPeriodSlider.setEnabled( enabled );
|
||||||
|
mPeriodSlider.setValue( script.getPeriod() );
|
||||||
|
|
||||||
|
String filepath = script.getScript();
|
||||||
|
|
||||||
|
if( filepath != null && !filepath.isEmpty() )
|
||||||
|
{
|
||||||
|
mTextFilePath.setText( filepath );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mTextFilePath.setText( PLEASE_SELECT_A_FILE );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mScriptActionNode.refresh();
|
setModified( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
if( hasItem() && isModified() )
|
||||||
|
{
|
||||||
|
ScriptAction script = getScriptAction();
|
||||||
|
|
||||||
|
script.setInterval( (Interval)mComboInterval.getSelectedItem() );
|
||||||
|
script.setPeriod( mPeriodSlider.getValue() );
|
||||||
|
script.setScript( mTextFilePath.getText() );
|
||||||
|
}
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class ScriptActionNode extends AliasActionNode
|
|||||||
@Override
|
@Override
|
||||||
public JPanel getEditor()
|
public JPanel getEditor()
|
||||||
{
|
{
|
||||||
return new ScriptActionEditor( this );
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScriptAction getScriptAction()
|
public ScriptAction getScriptAction()
|
||||||
|
|||||||
@@ -15,11 +15,12 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias;
|
package alias.id;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||||
|
|
||||||
|
import alias.Group;
|
||||||
import alias.id.esn.Esn;
|
import alias.id.esn.Esn;
|
||||||
import alias.id.fleetsync.FleetsyncID;
|
import alias.id.fleetsync.FleetsyncID;
|
||||||
import alias.id.lojack.LoJackFunctionAndID;
|
import alias.id.lojack.LoJackFunctionAndID;
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias;
|
package alias.id;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import controller.ConfigurableNode;
|
import controller.ConfigurableNode;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* SDR Trunk
|
* SDR Trunk
|
||||||
* Copyright (C) 2014 Dennis Sheirer
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias;
|
package alias.id;
|
||||||
|
|
||||||
public enum AliasIDType
|
public enum AliasIDType
|
||||||
{
|
{
|
||||||
@@ -26,11 +26,14 @@ public enum AliasIDType
|
|||||||
MDC1200( "MDC-1200" ),
|
MDC1200( "MDC-1200" ),
|
||||||
MIN( "Passport MIN" ),
|
MIN( "Passport MIN" ),
|
||||||
MPT1327( "MPT-1327" ),
|
MPT1327( "MPT-1327" ),
|
||||||
NonRecordable( "Non-Recordable" ),
|
|
||||||
Priority( "Audio Priority" ),
|
|
||||||
Site( "Site" ),
|
Site( "Site" ),
|
||||||
Status( "Status" ),
|
Status( "Status" ),
|
||||||
Talkgroup( "Talkgroup" );
|
Talkgroup( "Talkgroup" ),
|
||||||
|
|
||||||
|
Invert( "Audio Inversion" ),
|
||||||
|
Priority( "Audio Priority" ),
|
||||||
|
NonRecordable( "Audio Non-Recordable" ),
|
||||||
|
Streaming( "Audio Streaming" );
|
||||||
|
|
||||||
private String mLabel;
|
private String mLabel;
|
||||||
|
|
||||||
@@ -1,4 +1,24 @@
|
|||||||
package alias;
|
/*******************************************************************************
|
||||||
|
* SDR Trunk
|
||||||
|
* Copyright (C) 2014-2016 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 <http://www.gnu.org/licenses/>
|
||||||
|
******************************************************************************/
|
||||||
|
package alias.id;
|
||||||
|
|
||||||
|
import gui.editor.Editor;
|
||||||
|
import gui.editor.EmptyEditor;
|
||||||
|
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@@ -27,9 +47,13 @@ import net.miginfocom.swing.MigLayout;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import alias.Alias;
|
||||||
|
import alias.AliasEvent;
|
||||||
import alias.AliasEvent.Event;
|
import alias.AliasEvent.Event;
|
||||||
|
import alias.AliasFactory;
|
||||||
|
import alias.AliasModel;
|
||||||
|
|
||||||
public class AliasIdentifierEditor extends AliasConfigurationEditor
|
public class AliasIdentifierEditor extends Editor<Alias>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -40,10 +64,8 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
private JButton mNewIDButton;
|
private JButton mNewIDButton;
|
||||||
private JButton mCloneIDButton;
|
private JButton mCloneIDButton;
|
||||||
private JButton mDeleteIDButton;
|
private JButton mDeleteIDButton;
|
||||||
|
|
||||||
private EditorContainer mEditorContainer = new EditorContainer();
|
private EditorContainer mEditorContainer = new EditorContainer();
|
||||||
|
|
||||||
private Alias mAlias;
|
|
||||||
private AliasModel mAliasModel;
|
private AliasModel mAliasModel;
|
||||||
|
|
||||||
public AliasIdentifierEditor( AliasModel model )
|
public AliasIdentifierEditor( AliasModel model )
|
||||||
@@ -57,7 +79,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
setLayout( new MigLayout( "fill,wrap 3",
|
setLayout( new MigLayout( "fill,wrap 3",
|
||||||
"[grow,fill][grow,fill][grow,fill]", "[][grow,fill][]" ) );
|
"[grow,fill][grow,fill][grow,fill]", "[][grow,fill][]" ) );
|
||||||
|
|
||||||
mAliasIDList.setVisibleRowCount( 4 );
|
mAliasIDList.setVisibleRowCount( 6 );
|
||||||
mAliasIDList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
|
mAliasIDList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
|
||||||
mAliasIDList.setLayoutOrientation( JList.VERTICAL );
|
mAliasIDList.setLayoutOrientation( JList.VERTICAL );
|
||||||
mAliasIDList.addListSelectionListener( new ListSelectionListener()
|
mAliasIDList.addListSelectionListener( new ListSelectionListener()
|
||||||
@@ -95,7 +117,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
add( mEditorContainer, "span,grow" );
|
add( mEditorContainer, "span,grow" );
|
||||||
|
|
||||||
mNewIDButton = new JButton( "New ..." );
|
mNewIDButton = new JButton( "New ..." );
|
||||||
|
mNewIDButton.setToolTipText( "Create a new Alias Identifier" );
|
||||||
mNewIDButton.addMouseListener( new MouseAdapter()
|
mNewIDButton.addMouseListener( new MouseAdapter()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -115,7 +137,6 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
menu.add( new AddAliasIdentifierItem( AliasIDType.Talkgroup ) );
|
menu.add( new AddAliasIdentifierItem( AliasIDType.Talkgroup ) );
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
menu.add( new AddAliasIdentifierItem( AliasIDType.Priority ) );
|
menu.add( new AddAliasIdentifierItem( AliasIDType.Priority ) );
|
||||||
menu.addSeparator();
|
|
||||||
menu.add( new AddAliasIdentifierItem( AliasIDType.NonRecordable ) );
|
menu.add( new AddAliasIdentifierItem( AliasIDType.NonRecordable ) );
|
||||||
|
|
||||||
menu.show( e.getComponent(), e.getX(), e.getY() );
|
menu.show( e.getComponent(), e.getX(), e.getY() );
|
||||||
@@ -125,6 +146,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
add( mNewIDButton );
|
add( mNewIDButton );
|
||||||
|
|
||||||
mCloneIDButton = new JButton( "Clone" );
|
mCloneIDButton = new JButton( "Clone" );
|
||||||
|
mCloneIDButton.setToolTipText( "Create a copy of the currently selected identifier" );
|
||||||
mCloneIDButton.setEnabled( false );
|
mCloneIDButton.setEnabled( false );
|
||||||
mCloneIDButton.addActionListener( new ActionListener()
|
mCloneIDButton.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@@ -147,6 +169,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
add( mCloneIDButton );
|
add( mCloneIDButton );
|
||||||
|
|
||||||
mDeleteIDButton = new JButton( "Delete" );
|
mDeleteIDButton = new JButton( "Delete" );
|
||||||
|
mDeleteIDButton.setToolTipText( "Delete the currently selected identifier" );
|
||||||
mDeleteIDButton.setEnabled( false );
|
mDeleteIDButton.setEnabled( false );
|
||||||
mDeleteIDButton.addActionListener( new ActionListener()
|
mDeleteIDButton.addActionListener( new ActionListener()
|
||||||
{
|
{
|
||||||
@@ -161,13 +184,15 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
"Do you want to delete [" + selected.toString() + "]",
|
"Do you want to delete [" + selected.toString() + "]",
|
||||||
"Are you sure?", JOptionPane.YES_NO_OPTION );
|
"Are you sure?", JOptionPane.YES_NO_OPTION );
|
||||||
|
|
||||||
if( choice == JOptionPane.YES_OPTION )
|
if( choice == JOptionPane.YES_OPTION && hasItem() )
|
||||||
{
|
{
|
||||||
mAlias.removeAliasID( selected );
|
Alias alias = getItem();
|
||||||
|
|
||||||
mAliasModel.broadcast( new AliasEvent( mAlias, Event.CHANGE ) );
|
alias.removeAliasID( selected );
|
||||||
|
|
||||||
setAlias( mAlias );
|
mAliasModel.broadcast( new AliasEvent( alias, Event.CHANGE ) );
|
||||||
|
|
||||||
|
setItem( alias );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -176,11 +201,11 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAlias( Alias alias )
|
public void setItem( Alias alias )
|
||||||
{
|
{
|
||||||
mAlias = alias;
|
super.setItem( alias );
|
||||||
|
|
||||||
if( mAlias == null || mAlias.getId().isEmpty() )
|
if( alias == null || alias.getId().isEmpty() )
|
||||||
{
|
{
|
||||||
mAliasIDList.setModel( EMPTY_MODEL );
|
mAliasIDList.setModel( EMPTY_MODEL );
|
||||||
}
|
}
|
||||||
@@ -188,7 +213,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
{
|
{
|
||||||
DefaultListModel<AliasID> model = new DefaultListModel<AliasID>();
|
DefaultListModel<AliasID> model = new DefaultListModel<AliasID>();
|
||||||
|
|
||||||
List<AliasID> ids = mAlias.getId();
|
List<AliasID> ids = alias.getId();
|
||||||
|
|
||||||
Collections.sort( ids, new Comparator<AliasID>()
|
Collections.sort( ids, new Comparator<AliasID>()
|
||||||
{
|
{
|
||||||
@@ -216,16 +241,19 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
if( mEditorContainer.isModified() )
|
if( mEditorContainer.isModified() )
|
||||||
{
|
{
|
||||||
mEditorContainer.save();
|
mEditorContainer.save();
|
||||||
}
|
|
||||||
|
|
||||||
mAliasModel.broadcast( new AliasEvent( mAlias, Event.CHANGE ) );
|
if( hasItem() )
|
||||||
|
{
|
||||||
|
mAliasModel.broadcast( new AliasEvent( getItem(), Event.CHANGE ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EditorContainer extends JPanel
|
public class EditorContainer extends JPanel
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private ComponentEditor<AliasID> mEditor = new EmptyAliasIDEditor();
|
private Editor<AliasID> mEditor = new EmptyEditor<>();
|
||||||
|
|
||||||
public EditorContainer()
|
public EditorContainer()
|
||||||
{
|
{
|
||||||
@@ -273,6 +301,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
}
|
}
|
||||||
removeAll();
|
removeAll();
|
||||||
|
|
||||||
|
//This will always give us an editor
|
||||||
mEditor = AliasFactory.getEditor( aliasID );
|
mEditor = AliasFactory.getEditor( aliasID );
|
||||||
|
|
||||||
add( mEditor );
|
add( mEditor );
|
||||||
@@ -283,16 +312,18 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor
|
|||||||
|
|
||||||
private void addAliasIDToList( final AliasID id )
|
private void addAliasIDToList( final AliasID id )
|
||||||
{
|
{
|
||||||
if( id != null && mAlias != null )
|
if( id != null && hasItem() )
|
||||||
{
|
{
|
||||||
mAlias.addAliasID( id );
|
final Alias alias = getItem();
|
||||||
|
|
||||||
|
alias.addAliasID( id );
|
||||||
|
|
||||||
EventQueue.invokeLater( new Runnable()
|
EventQueue.invokeLater( new Runnable()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
setAlias( mAlias );
|
setItem( alias );
|
||||||
|
|
||||||
mAliasIDList.setSelectedValue( id, true );
|
mAliasIDList.setSelectedValue( id, true );
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.esn;
|
package alias.id.esn;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -24,15 +26,12 @@ import java.awt.event.MouseEvent;
|
|||||||
|
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
import alias.id.talkgroup.TalkgroupIDEditor;
|
|
||||||
|
|
||||||
public class ESNEditor extends ComponentEditor<AliasID>
|
public class ESNEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -47,11 +46,9 @@ public class ESNEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public ESNEditor( AliasID aliasID )
|
public ESNEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -81,18 +78,18 @@ public class ESNEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public Esn getEsn()
|
public Esn getEsn()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof Esn )
|
if( getItem() instanceof Esn )
|
||||||
{
|
{
|
||||||
return (Esn)getComponent();
|
return (Esn)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
Esn esn = getEsn();
|
Esn esn = getEsn();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class ESNNode extends AliasIDNode
|
public class ESNNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.esn;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class Esn extends AliasID
|
public class Esn extends AliasID
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.fleetsync;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
|
|
||||||
public class FleetsyncID extends AliasID
|
public class FleetsyncID extends AliasID
|
||||||
|
|||||||
@@ -17,30 +17,27 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.fleetsync;
|
package alias.id.fleetsync;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
import javax.swing.JFormattedTextField;
|
import javax.swing.JFormattedTextField;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.text.MaskFormatter;
|
import javax.swing.text.MaskFormatter;
|
||||||
|
|
||||||
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import controller.channel.Channel;
|
import alias.id.AliasID;
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
import alias.AliasID;
|
|
||||||
import alias.ComponentEditor;
|
|
||||||
import alias.id.esn.ESNEditor;
|
|
||||||
|
|
||||||
public class FleetsyncIDEditor extends ComponentEditor<AliasID>
|
public class FleetsyncIDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private final static Logger mLog = LoggerFactory.getLogger( FleetsyncIDEditor.class );
|
private final static Logger mLog = LoggerFactory.getLogger( FleetsyncIDEditor.class );
|
||||||
|
|
||||||
@@ -56,11 +53,9 @@ public class FleetsyncIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public FleetsyncIDEditor( AliasID aliasID )
|
public FleetsyncIDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -104,18 +99,18 @@ public class FleetsyncIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public FleetsyncID getFleetsyncID()
|
public FleetsyncID getFleetsyncID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof FleetsyncID )
|
if( getItem() instanceof FleetsyncID )
|
||||||
{
|
{
|
||||||
return (FleetsyncID)getComponent();
|
return (FleetsyncID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
FleetsyncID fleetsync = getFleetsyncID();
|
FleetsyncID fleetsync = getFleetsyncID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class FleetsyncIDNode extends AliasIDNode
|
public class FleetsyncIDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ import javax.xml.bind.annotation.XmlAttribute;
|
|||||||
|
|
||||||
import module.decode.lj1200.LJ1200Message;
|
import module.decode.lj1200.LJ1200Message;
|
||||||
import module.decode.lj1200.LJ1200Message.Function;
|
import module.decode.lj1200.LJ1200Message.Function;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class LoJackFunctionAndID extends AliasID
|
public class LoJackFunctionAndID extends AliasID
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.lojack;
|
package alias.id.lojack;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@@ -34,10 +36,9 @@ import javax.swing.text.MaskFormatter;
|
|||||||
import module.decode.lj1200.LJ1200Message;
|
import module.decode.lj1200.LJ1200Message;
|
||||||
import module.decode.lj1200.LJ1200Message.Function;
|
import module.decode.lj1200.LJ1200Message.Function;
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class LoJackIDEditor extends ComponentEditor<AliasID>
|
public class LoJackIDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -61,11 +62,9 @@ public class LoJackIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public LoJackIDEditor( AliasID aliasID )
|
public LoJackIDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -121,18 +120,18 @@ public class LoJackIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public LoJackFunctionAndID getLoJackID()
|
public LoJackFunctionAndID getLoJackID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof LoJackFunctionAndID )
|
if( getItem() instanceof LoJackFunctionAndID )
|
||||||
{
|
{
|
||||||
return (LoJackFunctionAndID)getComponent();
|
return (LoJackFunctionAndID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
LoJackFunctionAndID lojack = getLoJackID();
|
LoJackFunctionAndID lojack = getLoJackID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class LoJackIDNode extends AliasIDNode
|
public class LoJackIDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.mdc;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
|
|
||||||
public class MDC1200ID extends AliasID
|
public class MDC1200ID extends AliasID
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.mdc;
|
package alias.id.mdc;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -29,10 +31,9 @@ import javax.swing.JTextField;
|
|||||||
import javax.swing.text.MaskFormatter;
|
import javax.swing.text.MaskFormatter;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class MDC1200IDEditor extends ComponentEditor<AliasID>
|
public class MDC1200IDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -47,11 +48,9 @@ public class MDC1200IDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public MDC1200IDEditor( AliasID aliasID )
|
public MDC1200IDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -94,18 +93,18 @@ public class MDC1200IDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public MDC1200ID getMDC1200ID()
|
public MDC1200ID getMDC1200ID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof MDC1200ID )
|
if( getItem() instanceof MDC1200ID )
|
||||||
{
|
{
|
||||||
return (MDC1200ID)getComponent();
|
return (MDC1200ID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
MDC1200ID mdc = getMDC1200ID();
|
MDC1200ID mdc = getMDC1200ID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class MDC1200IDNode extends AliasIDNode
|
public class MDC1200IDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.mobileID;
|
package alias.id.mobileID;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -25,16 +27,13 @@ import java.awt.event.MouseEvent;
|
|||||||
import javax.swing.JFormattedTextField;
|
import javax.swing.JFormattedTextField;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.text.MaskFormatter;
|
import javax.swing.text.MaskFormatter;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
import alias.id.esn.ESNEditor;
|
|
||||||
|
|
||||||
public class MINEditor extends ComponentEditor<AliasID>
|
public class MINEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -49,11 +48,9 @@ public class MINEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public MINEditor( AliasID aliasID )
|
public MINEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -96,18 +93,18 @@ public class MINEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public Min getMin()
|
public Min getMin()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof Min )
|
if( getItem() instanceof Min )
|
||||||
{
|
{
|
||||||
return (Min)getComponent();
|
return (Min)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
Min min = getMin();
|
Min min = getMin();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class MINNode extends AliasIDNode
|
public class MINNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.mobileID;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mobile ID Number
|
* Mobile ID Number
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.mpt1327;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class MPT1327ID extends AliasID
|
public class MPT1327ID extends AliasID
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.mpt1327;
|
package alias.id.mpt1327;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -29,10 +31,9 @@ import javax.swing.JTextField;
|
|||||||
import javax.swing.text.MaskFormatter;
|
import javax.swing.text.MaskFormatter;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class MPT1327IDEditor extends ComponentEditor<AliasID>
|
public class MPT1327IDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -48,11 +49,9 @@ public class MPT1327IDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public MPT1327IDEditor( AliasID aliasID )
|
public MPT1327IDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -96,18 +95,18 @@ public class MPT1327IDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public MPT1327ID getMPT1327ID()
|
public MPT1327ID getMPT1327ID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof MPT1327ID )
|
if( getItem() instanceof MPT1327ID )
|
||||||
{
|
{
|
||||||
return (MPT1327ID)getComponent();
|
return (MPT1327ID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
MPT1327ID mpt = getMPT1327ID();
|
MPT1327ID mpt = getMPT1327ID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class MPT1327IDNode extends AliasIDNode
|
public class MPT1327IDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package alias.id.nonrecordable;
|
package alias.id.nonrecordable;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class NonRecordable extends AliasID
|
public class NonRecordable extends AliasID
|
||||||
{
|
{
|
||||||
@@ -20,6 +20,6 @@ public class NonRecordable extends AliasID
|
|||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "Non-Recordable";
|
return "Audio Non-Recordable";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.nonrecordable;
|
package alias.id.nonrecordable;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -26,26 +28,23 @@ import javax.swing.JLabel;
|
|||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class NonRecordableEditor extends ComponentEditor<AliasID>
|
public class NonRecordableEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private static final String HELP_TEXT = "<html>"
|
private static final String HELP_TEXT = "<html>"
|
||||||
+ "<h3>Non-Recordable Example</h3>"
|
+ "<h3>Audio Non-Recordable Example</h3>"
|
||||||
+ "This identifies an alias as non-recordable.<br><br>"
|
+ "This identifies an alias as non-recordable.<br><br>"
|
||||||
+ "The alias can still be monitored but it will not be recorded<br>"
|
+ "The alias can still be monitored but associated audio will not be recorded<br>"
|
||||||
+ "when recording is enabled for the decoding channel.";
|
+ "when recording is enabled for the decoding channel.";
|
||||||
|
|
||||||
public NonRecordableEditor( AliasID aliasID )
|
public NonRecordableEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -63,17 +62,12 @@ public class NonRecordableEditor extends ComponentEditor<AliasID>
|
|||||||
public void mouseClicked( MouseEvent e )
|
public void mouseClicked( MouseEvent e )
|
||||||
{
|
{
|
||||||
JOptionPane.showMessageDialog( NonRecordableEditor.this,
|
JOptionPane.showMessageDialog( NonRecordableEditor.this,
|
||||||
HELP_TEXT, "Examples", JOptionPane.INFORMATION_MESSAGE );
|
HELP_TEXT, "Example", JOptionPane.INFORMATION_MESSAGE );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
add( example );
|
add( example );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setComponent( AliasID aliasID )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save()
|
public void save()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasID;
|
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasID;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class NonRecordableNode extends AliasIDNode
|
public class NonRecordableNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.priority;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies an (audio) priority level for this alias.
|
* Specifies an (audio) priority level for this alias.
|
||||||
@@ -60,7 +60,7 @@ public class Priority extends AliasID
|
|||||||
|
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "Priority: " + ( isDoNotMonitor() ? "Do Not Monitor" : mPriority );
|
return "Audio Priority: " + ( isDoNotMonitor() ? "Do Not Monitor" : mPriority );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.priority;
|
package alias.id.priority;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@@ -32,17 +34,16 @@ import javax.swing.event.ChangeEvent;
|
|||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class PriorityEditor extends ComponentEditor<AliasID>
|
public class PriorityEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
public static final String DO_NOT_MONITOR = "Do Not Monitor";
|
public static final String DO_NOT_MONITOR = "Do Not Monitor";
|
||||||
|
|
||||||
private static final String HELP_TEXT = "<html>"
|
private static final String HELP_TEXT = "<html>"
|
||||||
+ "<h3>Call Priority Example</h3>"
|
+ "<h3>Call Audio Priority Example</h3>"
|
||||||
+ "Priority determines which calls have priority for playback<br>"
|
+ "Priority determines which calls have priority for playback<br>"
|
||||||
+ "over your computer speakers, or designates an alias for<br>"
|
+ "over your computer speakers, or designates an alias for<br>"
|
||||||
+ "no-monitoring if you don't want to hear calls from an alias.<br><br>"
|
+ "no-monitoring if you don't want to hear calls from an alias.<br><br>"
|
||||||
@@ -55,11 +56,9 @@ public class PriorityEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public PriorityEditor( AliasID aliasID )
|
public PriorityEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -119,18 +118,18 @@ public class PriorityEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public Priority getPriority()
|
public Priority getPriority()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof Priority )
|
if( getItem() instanceof Priority )
|
||||||
{
|
{
|
||||||
return (Priority)getComponent();
|
return (Priority)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
Priority priority = getPriority();
|
Priority priority = getPriority();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class PriorityNode extends AliasIDNode
|
public class PriorityNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.siteID;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class SiteID extends AliasID
|
public class SiteID extends AliasID
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.siteID;
|
package alias.id.siteID;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -27,10 +29,9 @@ import javax.swing.JOptionPane;
|
|||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class SiteIDEditor extends ComponentEditor<AliasID>
|
public class SiteIDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -47,11 +48,9 @@ public class SiteIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public SiteIDEditor( AliasID aliasID )
|
public SiteIDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -82,18 +81,18 @@ public class SiteIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public SiteID getSiteID()
|
public SiteID getSiteID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof SiteID )
|
if( getItem() instanceof SiteID )
|
||||||
{
|
{
|
||||||
return (SiteID)getComponent();
|
return (SiteID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
SiteID siteID = getSiteID();
|
SiteID siteID = getSiteID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class SiteIDNode extends AliasIDNode
|
public class SiteIDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.status;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class StatusID extends AliasID
|
public class StatusID extends AliasID
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.status;
|
package alias.id.status;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -29,10 +31,9 @@ import javax.swing.JTextField;
|
|||||||
import javax.swing.text.MaskFormatter;
|
import javax.swing.text.MaskFormatter;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class StatusIDEditor extends ComponentEditor<AliasID>
|
public class StatusIDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -49,11 +50,9 @@ public class StatusIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public StatusIDEditor( AliasID aliasID )
|
public StatusIDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -96,18 +95,18 @@ public class StatusIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public StatusID getStatusID()
|
public StatusID getStatusID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof StatusID )
|
if( getItem() instanceof StatusID )
|
||||||
{
|
{
|
||||||
return (StatusID)getComponent();
|
return (StatusID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
StatusID statusID = getStatusID();
|
StatusID statusID = getStatusID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class StatusIDNode extends AliasIDNode
|
public class StatusIDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.talkgroup;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
import audio.inverted.AudioType;
|
import audio.inverted.AudioType;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.talkgroup;
|
package alias.id.talkgroup;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -27,10 +29,9 @@ import javax.swing.JOptionPane;
|
|||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class TalkgroupIDEditor extends ComponentEditor<AliasID>
|
public class TalkgroupIDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -47,11 +48,9 @@ public class TalkgroupIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public TalkgroupIDEditor( AliasID aliasID )
|
public TalkgroupIDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -82,18 +81,18 @@ public class TalkgroupIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public TalkgroupID getTalkgroupID()
|
public TalkgroupID getTalkgroupID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof TalkgroupID )
|
if( getItem() instanceof TalkgroupID )
|
||||||
{
|
{
|
||||||
return (TalkgroupID)getComponent();
|
return (TalkgroupID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
TalkgroupID talkgroup = getTalkgroupID();
|
TalkgroupID talkgroup = getTalkgroupID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class TalkgroupIDNode extends AliasIDNode
|
public class TalkgroupIDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package alias.id.uniqueID;
|
|||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
import javax.xml.bind.annotation.XmlAttribute;
|
||||||
|
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.AliasIDType;
|
import alias.id.AliasIDType;
|
||||||
|
|
||||||
public class UniqueID extends AliasID
|
public class UniqueID extends AliasID
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package alias.id.uniqueID;
|
package alias.id.uniqueID;
|
||||||
|
|
||||||
|
import gui.editor.DocumentListenerEditor;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -27,10 +29,9 @@ import javax.swing.JOptionPane;
|
|||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import alias.AliasID;
|
import alias.id.AliasID;
|
||||||
import alias.ComponentEditor;
|
|
||||||
|
|
||||||
public class UniqueIDEditor extends ComponentEditor<AliasID>
|
public class UniqueIDEditor extends DocumentListenerEditor<AliasID>
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@@ -44,11 +45,9 @@ public class UniqueIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public UniqueIDEditor( AliasID aliasID )
|
public UniqueIDEditor( AliasID aliasID )
|
||||||
{
|
{
|
||||||
super( aliasID );
|
|
||||||
|
|
||||||
initGUI();
|
initGUI();
|
||||||
|
|
||||||
setComponent( aliasID );
|
setItem( aliasID );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGUI()
|
private void initGUI()
|
||||||
@@ -78,18 +77,18 @@ public class UniqueIDEditor extends ComponentEditor<AliasID>
|
|||||||
|
|
||||||
public UniqueID getUniqueID()
|
public UniqueID getUniqueID()
|
||||||
{
|
{
|
||||||
if( getComponent() instanceof UniqueID )
|
if( getItem() instanceof UniqueID )
|
||||||
{
|
{
|
||||||
return (UniqueID)getComponent();
|
return (UniqueID)getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setComponent( AliasID aliasID )
|
public void setItem( AliasID aliasID )
|
||||||
{
|
{
|
||||||
mComponent = aliasID;
|
super.setItem( aliasID );
|
||||||
|
|
||||||
UniqueID uid = getUniqueID();
|
UniqueID uid = getUniqueID();
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
|
|
||||||
import playlist.PlaylistManager;
|
import playlist.PlaylistManager;
|
||||||
import alias.AliasIDNode;
|
|
||||||
import alias.AliasNode;
|
import alias.AliasNode;
|
||||||
|
import alias.id.AliasIDNode;
|
||||||
|
|
||||||
public class UniqueIDNode extends AliasIDNode
|
public class UniqueIDNode extends AliasIDNode
|
||||||
{
|
{
|
||||||
|
|||||||
29
src/gui/editor/DocumentListenerEditor.java
Normal file
29
src/gui/editor/DocumentListenerEditor.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package gui.editor;
|
||||||
|
|
||||||
|
import javax.swing.event.DocumentEvent;
|
||||||
|
import javax.swing.event.DocumentListener;
|
||||||
|
|
||||||
|
public abstract class DocumentListenerEditor<T> extends Editor<T>
|
||||||
|
implements DocumentListener
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public DocumentListenerEditor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertUpdate( DocumentEvent e )
|
||||||
|
{
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeUpdate( DocumentEvent e )
|
||||||
|
{
|
||||||
|
setModified( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changedUpdate( DocumentEvent e ) { }
|
||||||
|
}
|
||||||
94
src/gui/editor/Editor.java
Normal file
94
src/gui/editor/Editor.java
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
package gui.editor;
|
||||||
|
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import alias.id.AliasIdentifierEditor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic editor with change detection, save and reset functions.
|
||||||
|
*/
|
||||||
|
public abstract class Editor<T> extends JPanel
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private final static Logger mLog = LoggerFactory.getLogger( Editor.class );
|
||||||
|
|
||||||
|
protected T mItem;
|
||||||
|
protected boolean mModified = false;
|
||||||
|
|
||||||
|
public Editor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the object to be edited
|
||||||
|
*/
|
||||||
|
public void setItem( T item )
|
||||||
|
{
|
||||||
|
if( isModified() )
|
||||||
|
{
|
||||||
|
int option = JOptionPane.showConfirmDialog(
|
||||||
|
Editor.this,
|
||||||
|
"This item has changed. Do you want to save these changes?",
|
||||||
|
"Save Changes?",
|
||||||
|
JOptionPane.YES_NO_OPTION,
|
||||||
|
JOptionPane.QUESTION_MESSAGE );
|
||||||
|
|
||||||
|
if( option == JOptionPane.YES_OPTION )
|
||||||
|
{
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
setModified( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
mItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current editing item
|
||||||
|
*/
|
||||||
|
public T getItem()
|
||||||
|
{
|
||||||
|
return mItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasItem()
|
||||||
|
{
|
||||||
|
return mItem != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the contents modified flag
|
||||||
|
*/
|
||||||
|
public void setModified( boolean modified )
|
||||||
|
{
|
||||||
|
mModified = modified;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if this editor contents have been modified
|
||||||
|
*/
|
||||||
|
public boolean isModified()
|
||||||
|
{
|
||||||
|
return mModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the contents of the editor
|
||||||
|
*/
|
||||||
|
public abstract void save();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the contents of the editor without saving any changes
|
||||||
|
*/
|
||||||
|
public void reset()
|
||||||
|
{
|
||||||
|
mModified = false;
|
||||||
|
setItem( mItem );
|
||||||
|
}
|
||||||
|
}
|
||||||
26
src/gui/editor/EmptyEditor.java
Normal file
26
src/gui/editor/EmptyEditor.java
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package gui.editor;
|
||||||
|
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
|
||||||
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
|
||||||
|
public class EmptyEditor<T> extends Editor<T>
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public EmptyEditor()
|
||||||
|
{
|
||||||
|
setLayout( new MigLayout( "", "[center]", "[grow]" ) );
|
||||||
|
add( new JLabel( "Please select an item" ), "wrap" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -599,7 +599,6 @@ public class ProcessingChain implements IChannelEventListener
|
|||||||
*/
|
*/
|
||||||
public void addMessageListener( Listener<Message> listener )
|
public void addMessageListener( Listener<Message> listener )
|
||||||
{
|
{
|
||||||
mLog.debug( "Registering Message Listener:" + listener.getClass() );
|
|
||||||
mMessageBroadcaster.addListener( listener );
|
mMessageBroadcaster.addListener( listener );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user