mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-10 15:47:25 -05:00
-Adds new LoJack AliasID allowing user to specify a lojack function and 5-character reply code with wildcards. -Removes SiteID as an alias option for LoJack. Valid Alias IDs for LoJack now are: -LoJack Alias ID: for function and reply code combinations -ESN ID: for transponder addresses
563 lines
14 KiB
Java
563 lines
14 KiB
Java
/*******************************************************************************
|
|
* SDR Trunk
|
|
* Copyright (C) 2014 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;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
|
|
import javax.swing.JMenu;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPopupMenu;
|
|
|
|
import map.MapIcon;
|
|
import alias.action.AliasAction;
|
|
import alias.action.beep.BeepAction;
|
|
import alias.action.beep.BeepActionNode;
|
|
import alias.action.clip.ClipAction;
|
|
import alias.action.clip.ClipActionNode;
|
|
import alias.action.script.ScriptAction;
|
|
import alias.action.script.ScriptActionNode;
|
|
import alias.id.esn.ESNNode;
|
|
import alias.id.esn.Esn;
|
|
import alias.id.fleetsync.FleetsyncID;
|
|
import alias.id.fleetsync.FleetsyncIDNode;
|
|
import alias.id.fleetsync.StatusID;
|
|
import alias.id.fleetsync.StatusIDNode;
|
|
import alias.id.lojack.LoJackFunctionAndID;
|
|
import alias.id.lojack.LoJackIDNode;
|
|
import alias.id.mdc.MDC1200ID;
|
|
import alias.id.mdc.MDC1200IDNode;
|
|
import alias.id.mobileID.MINNode;
|
|
import alias.id.mobileID.Min;
|
|
import alias.id.mpt1327.MPT1327ID;
|
|
import alias.id.mpt1327.MPT1327IDNode;
|
|
import alias.id.siteID.SiteID;
|
|
import alias.id.siteID.SiteIDNode;
|
|
import alias.id.talkgroup.TalkgroupID;
|
|
import alias.id.talkgroup.TalkgroupIDNode;
|
|
import alias.id.uniqueID.UniqueID;
|
|
import alias.id.uniqueID.UniqueIDNode;
|
|
import alias.priority.Priority;
|
|
import alias.priority.PriorityNode;
|
|
import alias.record.NonRecordable;
|
|
import alias.record.NonRecordableNode;
|
|
import controller.ConfigurableNode;
|
|
|
|
public class AliasNode extends ConfigurableNode
|
|
{
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
public AliasNode( Alias alias )
|
|
{
|
|
super( alias );
|
|
}
|
|
|
|
@Override
|
|
public JPanel getEditor()
|
|
{
|
|
return new AliasEditor( this, getModel().getResourceManager() );
|
|
}
|
|
|
|
public Alias getAlias()
|
|
{
|
|
return (Alias)getUserObject();
|
|
}
|
|
|
|
public String getIconPath()
|
|
{
|
|
String icon = getAlias().getIconName();
|
|
|
|
MapIcon mapIcon = getModel().getResourceManager()
|
|
.getSettingsManager().getMapIcon( icon );
|
|
|
|
if( mapIcon != null )
|
|
{
|
|
return mapIcon.getPath();
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public void init()
|
|
{
|
|
for( AliasID aliasID: getAlias().getId() )
|
|
{
|
|
switch( aliasID.getType() )
|
|
{
|
|
case ESN:
|
|
getModel().addNode( new ESNNode( (Esn)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case Fleetsync:
|
|
getModel().addNode( new FleetsyncIDNode( (FleetsyncID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case LoJack:
|
|
getModel().addNode( new LoJackIDNode( (LoJackFunctionAndID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case LTRNetUID:
|
|
getModel().addNode( new UniqueIDNode( (UniqueID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case MDC1200:
|
|
getModel().addNode( new MDC1200IDNode( (MDC1200ID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case MIN:
|
|
getModel().addNode( new MINNode( (Min)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case MPT1327:
|
|
getModel().addNode( new MPT1327IDNode( (MPT1327ID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case NonRecordable:
|
|
getModel().addNode( new NonRecordableNode( (NonRecordable)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case Priority:
|
|
getModel().addNode( new PriorityNode( (Priority)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case Site:
|
|
getModel().addNode( new SiteIDNode( (SiteID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case Status:
|
|
getModel().addNode( new StatusIDNode( (StatusID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
case Talkgroup:
|
|
getModel().addNode( new TalkgroupIDNode( (TalkgroupID)aliasID ),
|
|
AliasNode.this, getChildCount() );
|
|
break;
|
|
default:
|
|
throw new IllegalArgumentException( "Unrecognized alias ID [" +
|
|
aliasID.getType() + "]");
|
|
}
|
|
}
|
|
|
|
for( AliasAction action: getAlias().getAction() )
|
|
{
|
|
if( action instanceof BeepAction )
|
|
{
|
|
getModel().addNode( new BeepActionNode( (BeepAction)action ),
|
|
AliasNode.this, getChildCount() );
|
|
}
|
|
else if( action instanceof ClipAction )
|
|
{
|
|
getModel().addNode( new ClipActionNode( (ClipAction)action ),
|
|
AliasNode.this, getChildCount() );
|
|
}
|
|
else if( action instanceof ScriptAction )
|
|
{
|
|
getModel().addNode( new ScriptActionNode( (ScriptAction)action ),
|
|
AliasNode.this, getChildCount() );
|
|
}
|
|
}
|
|
|
|
sort();
|
|
}
|
|
|
|
public String toString()
|
|
{
|
|
return getAlias().getName() + " [" + this.getChildCount() + "]";
|
|
}
|
|
|
|
public JPopupMenu getContextMenu()
|
|
{
|
|
JPopupMenu retVal = new JPopupMenu();
|
|
|
|
JMenu addIDMenu = new JMenu( "Add ID" );
|
|
|
|
JMenuItem addESNItem = new JMenuItem( "ESN" );
|
|
addESNItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
Esn esn = new Esn();
|
|
|
|
getAlias().addAliasID( esn );
|
|
|
|
ESNNode node = new ESNNode( esn );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addESNItem );
|
|
|
|
JMenuItem addFleetsyncItem = new JMenuItem( "Fleetsync" );
|
|
addFleetsyncItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
FleetsyncID fs = new FleetsyncID();
|
|
|
|
getAlias().addAliasID( fs );
|
|
|
|
FleetsyncIDNode node = new FleetsyncIDNode( fs );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addFleetsyncItem );
|
|
|
|
JMenuItem addLoJackItem = new JMenuItem( "LoJack" );
|
|
addLoJackItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
LoJackFunctionAndID lj = new LoJackFunctionAndID();
|
|
|
|
getAlias().addAliasID( lj );
|
|
|
|
LoJackIDNode node = new LoJackIDNode( lj );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addLoJackItem );
|
|
|
|
JMenuItem addMDCItem = new JMenuItem( "MDC-1200" );
|
|
addMDCItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
MDC1200ID mdc = new MDC1200ID();
|
|
|
|
getAlias().addAliasID( mdc );
|
|
|
|
MDC1200IDNode node = new MDC1200IDNode( mdc );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addMDCItem );
|
|
|
|
JMenuItem addMINItem = new JMenuItem( "MIN" );
|
|
addMINItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
Min min = new Min();
|
|
|
|
getAlias().addAliasID( min );
|
|
|
|
MINNode node = new MINNode( min );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addMINItem );
|
|
|
|
JMenuItem addMPTItem = new JMenuItem( "MPT-1327" );
|
|
addMPTItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
MPT1327ID mpt = new MPT1327ID();
|
|
|
|
getAlias().addAliasID( mpt );
|
|
|
|
MPT1327IDNode node = new MPT1327IDNode( mpt );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addMPTItem );
|
|
|
|
JMenuItem addSiteItem = new JMenuItem( "Site" );
|
|
addSiteItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
SiteID siteID = new SiteID();
|
|
|
|
getAlias().addAliasID( siteID );
|
|
|
|
SiteIDNode node = new SiteIDNode( siteID );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addSiteItem );
|
|
|
|
JMenuItem addStatusItem = new JMenuItem( "Status" );
|
|
addStatusItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
StatusID statusID = new StatusID();
|
|
|
|
getAlias().addAliasID( statusID );
|
|
|
|
StatusIDNode node = new StatusIDNode( statusID );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
|
|
addIDMenu.add( addStatusItem );
|
|
|
|
JMenuItem addTalkgroupItem = new JMenuItem( "Talkgroup" );
|
|
addTalkgroupItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
TalkgroupID tg = new TalkgroupID();
|
|
|
|
getAlias().addAliasID( tg );
|
|
|
|
TalkgroupIDNode node = new TalkgroupIDNode( tg );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addTalkgroupItem );
|
|
|
|
JMenuItem addUniqueIDItem = new JMenuItem( "Unique ID" );
|
|
addUniqueIDItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
UniqueID uid = new UniqueID();
|
|
|
|
getAlias().addAliasID( uid );
|
|
|
|
UniqueIDNode node = new UniqueIDNode( uid );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
addIDMenu.add( addUniqueIDItem );
|
|
|
|
retVal.add( addIDMenu );
|
|
|
|
JMenu addActionMenu = new JMenu( "Add Action" );
|
|
|
|
JMenuItem addClipItem = new JMenuItem( "Audio Clip" );
|
|
|
|
addClipItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
ClipAction clipAction = new ClipAction();
|
|
|
|
getAlias().addAliasAction( clipAction );
|
|
|
|
ClipActionNode node = new ClipActionNode( clipAction );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
|
|
addActionMenu.add( addClipItem );
|
|
|
|
JMenuItem addBeepItem = new JMenuItem( "Beep" );
|
|
|
|
addBeepItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
BeepAction beepAction = new BeepAction();
|
|
|
|
getAlias().addAliasAction( beepAction );
|
|
|
|
BeepActionNode node = new BeepActionNode( beepAction );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
|
|
addActionMenu.add( addBeepItem );
|
|
|
|
JMenuItem addScriptItem = new JMenuItem( "Script" );
|
|
|
|
addScriptItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
ScriptAction scriptAction = new ScriptAction();
|
|
|
|
getAlias().addAliasAction( scriptAction );
|
|
|
|
ScriptActionNode node = new ScriptActionNode( scriptAction );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
|
|
addActionMenu.add( addScriptItem );
|
|
|
|
retVal.add( addActionMenu );
|
|
|
|
retVal.addSeparator();
|
|
|
|
if( getAlias().isRecordable() )
|
|
{
|
|
JMenuItem nonRecordableItem = new JMenuItem( "Set Non-Recordable" );
|
|
|
|
nonRecordableItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
NonRecordable non = new NonRecordable();
|
|
|
|
getAlias().addAliasID( non );
|
|
|
|
NonRecordableNode node = new NonRecordableNode( non );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
|
|
retVal.add( nonRecordableItem );
|
|
retVal.addSeparator();
|
|
}
|
|
|
|
if( !getAlias().hasPriority() )
|
|
{
|
|
JMenuItem priorityItem = new JMenuItem( "Set Call Priority" );
|
|
|
|
priorityItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
Priority priority = new Priority();
|
|
|
|
getAlias().addAliasID( priority );
|
|
|
|
PriorityNode node = new PriorityNode( priority );
|
|
|
|
getModel().addNode( node,
|
|
AliasNode.this,
|
|
AliasNode.this.getChildCount() );
|
|
|
|
node.show();
|
|
}
|
|
} );
|
|
|
|
retVal.add( priorityItem );
|
|
retVal.addSeparator();
|
|
}
|
|
|
|
|
|
JMenuItem deleteItem = new JMenuItem( "Delete" );
|
|
deleteItem.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
int n = JOptionPane.showConfirmDialog( getModel().getTree(),
|
|
"Are you sure you want to permanently delete this node?" );
|
|
|
|
if( n == JOptionPane.YES_OPTION )
|
|
{
|
|
GroupNode parent = (GroupNode)getParent();
|
|
|
|
parent.getGroup().removeAlias( getAlias() );
|
|
|
|
save();
|
|
|
|
getModel().removeNodeFromParent( AliasNode.this );
|
|
}
|
|
}
|
|
} );
|
|
|
|
retVal.add( deleteItem );
|
|
|
|
return retVal;
|
|
}
|
|
}
|