Adds AliasModel, AliasController tab with new AliasEditor

This commit is contained in:
denny
2016-01-24 15:46:55 -05:00
parent 15edcdebe6
commit 75714072b2
12 changed files with 686 additions and 163 deletions

View File

@@ -41,6 +41,11 @@ public class Alias
{ {
} }
public Alias( String name )
{
mName = name;
}
public String toString() public String toString()
{ {
return getName(); return getName();

View File

@@ -0,0 +1,30 @@
/*******************************************************************************
* 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;
/**
* Interface for receiving alias events. Each listener will receive
* notification of all alias events.
*/
public interface AliasActionListener
{
/**
* Notifies the listener that an alias event has occurred
*/
public void aliasChanged( AliasEvent event );
}

View File

@@ -0,0 +1,36 @@
/*******************************************************************************
* 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;
import javax.swing.JPanel;
public abstract class AliasConfigurationEditor extends JPanel
{
private static final long serialVersionUID = 1L;
/**
* Sets or resets the configuration editor components
*/
public abstract void setAlias( Alias alias );
/**
* Saves the contents of the editor components to the configuration
*/
public abstract void save();
}

View File

@@ -0,0 +1,287 @@
package alias;
import java.awt.Color;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import net.coderazzi.filters.gui.AutoChoices;
import net.coderazzi.filters.gui.TableFilterHeader;
import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import settings.SettingsManager;
import com.jidesoft.swing.JideSplitPane;
public class AliasController extends JPanel
implements ActionListener, ListSelectionListener
{
private static final long serialVersionUID = 1L;
private final static Logger mLog = LoggerFactory.getLogger( AliasController.class );
private AliasModel mAliasModel;
private JTable mAliasTable;
private TableFilterHeader mTableFilterHeader;
private AliasEditor mEditor;
private static final String NEW_ALIAS = "New";
private static final String COPY_ALIAS = "Copy";
private static final String DELETE_ALIAS = "Delete";
private JButton mNewButton = new JButton( NEW_ALIAS );
private JButton mCopyButton = new JButton( COPY_ALIAS );
private JButton mDeleteButton = new JButton( DELETE_ALIAS );
private IconCellRenderer mIconCellRenderer;
public AliasController( AliasModel aliasModel, SettingsManager settingsManager )
{
mAliasModel = aliasModel;
mEditor = new AliasEditor( mAliasModel, settingsManager );
mAliasModel.addAliasEventListener( mEditor );
mIconCellRenderer = new IconCellRenderer( settingsManager );
init();
}
private void init()
{
setLayout( new MigLayout( "insets 0 0 0 0",
"[grow,fill]",
"[grow,fill]") );
//System Configuration View and Editor
mAliasTable = new JTable( mAliasModel );
mAliasTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
mAliasTable.getSelectionModel().addListSelectionListener( this );
mAliasTable.setAutoCreateRowSorter( true );
mAliasTable.getColumnModel().getColumn( AliasModel.COLUMN_COLOR )
.setCellRenderer( new ColorCellRenderer() );
mAliasTable.getColumnModel().getColumn( AliasModel.COLUMN_ICON )
.setCellRenderer( mIconCellRenderer );
mTableFilterHeader = new TableFilterHeader( mAliasTable, AutoChoices.ENABLED );
mTableFilterHeader.setFilterOnUpdates( true );
JScrollPane tableScroller = new JScrollPane( mAliasTable );
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(
new MigLayout( "insets 0 0 0 0", "[grow,fill][grow,fill][grow,fill]", "[]") );
mNewButton.addActionListener( this );
mNewButton.setToolTipText( "Adds a new alias" );
buttonsPanel.add( mNewButton );
mCopyButton.addActionListener( this );
mCopyButton.setEnabled( false );
mCopyButton.setToolTipText( "Creates a copy of the currently selected alias and adds it" );
buttonsPanel.add( mCopyButton );
mDeleteButton.addActionListener( this );
mDeleteButton.setEnabled( false );
mDeleteButton.setToolTipText( "Deletes the currently selected alias" );
buttonsPanel.add( mDeleteButton );
JPanel listAndButtonsPanel = new JPanel();
listAndButtonsPanel.setLayout(
new MigLayout( "insets 0 0 0 0", "[grow,fill]", "[grow,fill][]") );
listAndButtonsPanel.add( tableScroller, "wrap" );
listAndButtonsPanel.add( buttonsPanel );
JideSplitPane splitPane = new JideSplitPane( JideSplitPane.HORIZONTAL_SPLIT );
splitPane.setDividerSize( 5 );
splitPane.setShowGripper( true );
splitPane.add( listAndButtonsPanel );
splitPane.add( mEditor );
add( splitPane );
}
@Override
public void valueChanged( ListSelectionEvent event )
{
//This limits event firing to only when selection is complete
if( !event.getValueIsAdjusting() )
{
int selectedRow = mAliasTable.getSelectedRow();
if( selectedRow != -1 )
{
int index = mAliasTable.convertRowIndexToModel( mAliasTable.getSelectedRow() );
Alias alias = mAliasModel.getAliasAtIndex( index );
if( alias != null )
{
mEditor.setAlias( alias );
mCopyButton.setEnabled( true );
mDeleteButton.setEnabled( true );
}
}
else
{
mEditor.setAlias( null );
mCopyButton.setEnabled( false );
mDeleteButton.setEnabled( false );
}
}
}
/**
* Adds the alias to the alias table/model and scrolls the view it
*/
private void addAlias( Alias alias )
{
//HACK: when inserting a row to the model, the JTable gets
//notified and attempts to tell the coderazzi table filter
//adaptive choices filter to refresh before the table filter is
//notified of the row additions, causing an index out of bounds
//exception. We turn off adaptive choices temporarily, add the
//channel, and turn on adaptive choices again.
mTableFilterHeader.setAdaptiveChoices( false );
int index = mAliasModel.addAlias( alias );
mTableFilterHeader.setAdaptiveChoices( true );
if( index >= 0 )
{
int translatedIndex = mAliasTable.convertRowIndexToView( index );
mAliasTable.setRowSelectionInterval( translatedIndex, translatedIndex );
mAliasTable.scrollRectToVisible(
new Rectangle( mAliasTable.getCellRect( translatedIndex, 0, true ) ) );
}
}
private Alias getSelectedAlias()
{
int index = mAliasTable.getSelectedRow();
if( index >= 0 )
{
return mAliasModel.getAliasAtIndex(
mAliasTable.convertRowIndexToModel( index ) );
}
return null;
}
/**
* Responds to New, Copy and Delete Channel button invocations
*/
@Override
public void actionPerformed( ActionEvent event )
{
switch( event.getActionCommand() )
{
case NEW_ALIAS:
addAlias( new Alias( "New Alias" ) );
break;
case COPY_ALIAS:
Alias selected = getSelectedAlias();
if( selected != null )
{
// addAlias( selected.copyOf() );
}
break;
case DELETE_ALIAS:
Alias toDelete = getSelectedAlias();
if( toDelete != null )
{
int choice = JOptionPane.showConfirmDialog( AliasController.this,
"Do you want to delete this alias?", "Delete Alias?",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE );
if( choice == JOptionPane.YES_OPTION )
{
mAliasModel.removeAlias( toDelete );
}
}
break;
default:
break;
}
}
/**
* Colorizes the cell based on the cell's integer value
*/
public class ColorCellRenderer extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent( JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column )
{
JLabel label = (JLabel)super.getTableCellRendererComponent( table,
value, isSelected, hasFocus, row, column );
label.setBackground( new Color( (int)value ) );
label.setText( "" );
return label;
}
}
/**
* Displays cell's icon and name
*/
public class IconCellRenderer extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 1L;
private SettingsManager mSettingsManager;
public IconCellRenderer( SettingsManager settingsManager )
{
mSettingsManager = settingsManager;
}
@Override
public Component getTableCellRendererComponent( JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column )
{
JLabel label = (JLabel)super.getTableCellRendererComponent( table,
value, isSelected, hasFocus, row, column );
ImageIcon icon = mSettingsManager.getImageIcon( label.getText(), 12 );
if( icon != null )
{
label.setIcon( icon );
}
return label;
}
}
}

View File

@@ -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
@@ -18,133 +18,76 @@
package alias; package alias;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension;
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 javax.swing.BorderFactory;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextField; import javax.swing.JSeparator;
import javax.swing.tree.TreePath;
import map.IconManager;
import map.MapIcon;
import map.MapIconListCellRenderer;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import sample.Listener;
import settings.SettingsManager; import settings.SettingsManager;
import controller.ConfigurableNode; import alias.AliasEvent.Event;
public class AliasEditor extends JPanel implements ActionListener import com.jidesoft.swing.JideTabbedPane;
public class AliasEditor extends JPanel implements ActionListener, Listener<AliasEvent>
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private AliasNode mAliasNode; private static final String DEFAULT_NAME = "select an alias";
private SettingsManager mSettingsManager;
private JLabel mLabelName;
private JTextField mTextAlias;
private JLabel mLabelMapColor; private AliasModel mAliasModel;
private JButton mButtonColor;
private JComboBox<MapIcon> mComboMapIcon; private JLabel mAliasLabel;
private JButton mBtnIconManager; private AliasNameEditor mAliasNameEditor;
public AliasEditor( AliasNode aliasNode, private Alias mAlias;
SettingsManager settingsManager )
public AliasEditor( AliasModel aliasModel, SettingsManager settingsManager )
{ {
mAliasNode = aliasNode; mAliasModel = aliasModel;
mSettingsManager = settingsManager; mAliasNameEditor = new AliasNameEditor( mAliasModel, settingsManager );
initGUI(); initGUI();
} }
public void setAlias( Alias alias )
{
mAlias = alias;
if( mAlias != null )
{
mAliasLabel.setText( alias.getName() );
}
else
{
mAliasLabel.setText( DEFAULT_NAME );
}
mAliasNameEditor.setAlias( alias );
}
private void initGUI() private void initGUI()
{ {
setLayout( new MigLayout( "", "[right][grow,fill]", "[][][][][][grow][]" ) ); setLayout( new MigLayout( "fill,wrap 2", "[right][grow,fill]", "[][][][][grow,fill]" ) );
setBorder( BorderFactory.createTitledBorder( "Alias" ) ); add( new JLabel( "Alias:" ) );
mAliasLabel = new JLabel( DEFAULT_NAME );
mLabelName = new JLabel( "Name:" ); add( mAliasLabel );
add( mLabelName );
mTextAlias = new JTextField( mAliasNode.getAlias().getName() ); add( new JSeparator( JSeparator.HORIZONTAL ), "span,growx,push" );
add( mTextAlias, "wrap" );
mLabelMapColor = new JLabel( "Map Color:" );
add( mLabelMapColor );
mButtonColor = new JButton( "Map Color" );
mButtonColor.setBackground( mAliasNode.getAlias().getMapColor() );
mButtonColor.setForeground( mAliasNode.getAlias().getMapColor() );
mButtonColor.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
Color newColor = JColorChooser.showDialog(
AliasEditor.this,
"Choose color for map labels and routes",
mAliasNode.getAlias().getMapColor() );
mButtonColor.setForeground( newColor );
mButtonColor.setBackground( newColor );
}
} );
add( mButtonColor, "wrap" );
add( new JLabel( "Icon:" ) ); JideTabbedPane tabs = new JideTabbedPane();
tabs.setFont( this.getFont() );
tabs.setForeground( Color.BLACK );
mComboMapIcon = new JComboBox<MapIcon>( mSettingsManager.getMapIcons() ); tabs.addTab( "Alias", mAliasNameEditor );
add( tabs, "span,grow" );
MapIconListCellRenderer renderer = new MapIconListCellRenderer();
renderer.setPreferredSize( new Dimension( 200, 30 ) );
mComboMapIcon.setRenderer( renderer );
String iconName = mAliasNode.getAlias().getIconName();
if( iconName == null )
{
iconName = SettingsManager.DEFAULT_ICON;
}
MapIcon savedIcon = mSettingsManager.getMapIcon( iconName );
if( savedIcon != null )
{
mComboMapIcon.setSelectedItem( savedIcon );
}
add( mComboMapIcon, "wrap" );
//Dummy place holder
add( new JLabel() );
mBtnIconManager = new JButton( "Icon Manager" );
mBtnIconManager.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent arg0 )
{
final IconManager iconManager =
new IconManager( mSettingsManager, AliasEditor.this );
EventQueue.invokeLater( new Runnable()
{
@Override
public void run()
{
iconManager.setVisible( true );
}
} );
}
} );
add( mBtnIconManager, "span 2,wrap" );
JButton btnSave = new JButton( "Save" ); JButton btnSave = new JButton( "Save" );
btnSave.addActionListener( AliasEditor.this ); btnSave.addActionListener( AliasEditor.this );
@@ -155,6 +98,16 @@ public class AliasEditor extends JPanel implements ActionListener
add( btnReset, "wrap" ); add( btnReset, "wrap" );
} }
@Override
public void receive( AliasEvent event )
{
//If this is the currently displayed alias, reload it
if( mAlias != null && mAlias == event.getAlias() )
{
setAlias( event.getAlias() );
}
}
@Override @Override
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
@@ -162,54 +115,14 @@ public class AliasEditor extends JPanel implements ActionListener
if( command.contentEquals( "Save" ) ) if( command.contentEquals( "Save" ) )
{ {
String alias = mTextAlias.getText(); mAliasNameEditor.save();
if( alias != null ) //Broadcast an alias change event to save the updates
{ mAliasModel.broadcast( new AliasEvent( mAlias, Event.CHANGE ) );
boolean expanded = mAliasNode.getModel().getTree()
.isExpanded( new TreePath( mAliasNode ) );
mAliasNode.getAlias().setName( alias );
((ConfigurableNode)mAliasNode.getParent()).sort();
mAliasNode.getAlias().setColor(
mButtonColor.getBackground().getRGB() );
MapIcon selectedIcon = (MapIcon)mComboMapIcon.getSelectedItem();
if( selectedIcon != null )
{
mAliasNode.getAlias().setIconName( selectedIcon.getName() );
}
mAliasNode.save();
mAliasNode.show();
if( expanded )
{
mAliasNode.getModel().getTree()
.expandPath( new TreePath( mAliasNode ) );
}
}
else
{
JOptionPane.showMessageDialog( AliasEditor.this, "Please enter an alias name" );
}
} }
else if( command.contentEquals( "Reset" ) ) else if( command.contentEquals( "Reset" ) )
{ {
mTextAlias.setText( mAliasNode.getAlias().getName() ); setAlias( mAlias );
mButtonColor.setBackground( mAliasNode.getAlias().getMapColor() );
mButtonColor.setForeground( mAliasNode.getAlias().getMapColor() );
MapIcon savedIcon = mSettingsManager
.getMapIcon( mAliasNode.getAlias().getIconName() );
mComboMapIcon.setSelectedItem( savedIcon );
} }
mAliasNode.refresh();
} }
} }

View File

@@ -39,6 +39,12 @@ import sample.Listener;
public class AliasModel implements TableModel public class AliasModel implements TableModel
{ {
private final static Logger mLog = LoggerFactory.getLogger( AliasModel.class ); private final static Logger mLog = LoggerFactory.getLogger( AliasModel.class );
public static final int COLUMN_LIST = 0;
public static final int COLUMN_GROUP = 1;
public static final int COLUMN_NAME = 2;
public static final int COLUMN_ICON = 3;
public static final int COLUMN_COLOR = 4;
private List<Alias> mAliases = new ArrayList<>(); private List<Alias> mAliases = new ArrayList<>();
private List<TableModelListener> mTableModelListeners = new CopyOnWriteArrayList<>(); private List<TableModelListener> mTableModelListeners = new CopyOnWriteArrayList<>();
@@ -181,15 +187,15 @@ public class AliasModel implements TableModel
{ {
switch( columnIndex ) switch( columnIndex )
{ {
case 0: case COLUMN_LIST:
return "List"; return "List";
case 1: case COLUMN_GROUP:
return "Group"; return "Group";
case 2: case COLUMN_NAME:
return "Name"; return "Name";
case 3: case COLUMN_ICON:
return "Icon"; return "Icon";
case 4: case COLUMN_COLOR:
return "Color"; return "Color";
} }
@@ -199,6 +205,11 @@ public class AliasModel implements TableModel
@Override @Override
public Class<?> getColumnClass( int columnIndex ) public Class<?> getColumnClass( int columnIndex )
{ {
if( columnIndex == COLUMN_COLOR )
{
return Integer.class;
}
return String.class; return String.class;
} }
@@ -215,15 +226,15 @@ public class AliasModel implements TableModel
switch( columnIndex ) switch( columnIndex )
{ {
case 0: case COLUMN_LIST:
return alias.getList(); return alias.getList();
case 1: case COLUMN_GROUP:
return alias.getGroup(); return alias.getGroup();
case 2: case COLUMN_NAME:
return alias.getName(); return alias.getName();
case 3: case COLUMN_ICON:
return alias.getIconName(); return alias.getIconName();
case 4: case COLUMN_COLOR:
return alias.getColor(); return alias.getColor();
} }

View File

@@ -0,0 +1,232 @@
package alias;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import map.IconManager;
import map.MapIcon;
import map.MapIconListCellRenderer;
import net.miginfocom.swing.MigLayout;
import settings.SettingsManager;
public class AliasNameEditor extends AliasConfigurationEditor
{
private static final long serialVersionUID = 1L;
private static ComboBoxModel<String> EMPTY_MODEL = new DefaultComboBoxModel<>();
private JComboBox<String> mListCombo = new JComboBox<>( EMPTY_MODEL );
private JComboBox<String> mGroupCombo = new JComboBox<>( EMPTY_MODEL );
private JTextField mName;
private JLabel mLabelMapColor;
private JButton mButtonColor;
private JComboBox<MapIcon> mComboMapIcon;
private JButton mBtnIconManager;
private Alias mAlias;
private AliasModel mAliasModel;
private SettingsManager mSettingsManager;
public AliasNameEditor( AliasModel aliasModel, SettingsManager settingsManager )
{
mAliasModel = aliasModel;
mSettingsManager = settingsManager;
init();
}
private void init()
{
setLayout( new MigLayout( "fill,wrap 2", "[right][grow,fill]", "[][][][][][grow][]" ) );
add( new JLabel( "List:" ) );
mListCombo.setEditable( true );
add( mListCombo, "wrap" );
add( new JLabel( "Group:" ) );
mGroupCombo.setEditable( true );
add( mGroupCombo, "wrap" );
add( new JLabel( "Name:" ) );
mName = new JTextField();
add( mName, "wrap" );
add( new JLabel( "Color:" ) );
mButtonColor = new JButton( "Select ..." );
mButtonColor.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
Color newColor = JColorChooser.showDialog(
AliasNameEditor.this,
"Choose color for this alias",
( mAlias != null ? mAlias.getMapColor() : null ) );
if( newColor != null )
{
mButtonColor.setForeground( newColor );
mButtonColor.setBackground( newColor );
}
}
} );
add( mButtonColor, "wrap" );
add( new JLabel( "Icon:" ) );
mComboMapIcon = new JComboBox<MapIcon>( mSettingsManager.getMapIcons() );
MapIconListCellRenderer renderer = new MapIconListCellRenderer();
renderer.setPreferredSize( new Dimension( 200, 30 ) );
mComboMapIcon.setRenderer( renderer );
add( mComboMapIcon, "wrap" );
//Dummy place holder
add( new JLabel() );
mBtnIconManager = new JButton( "Icon Manager" );
mBtnIconManager.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent arg0 )
{
final IconManager iconManager =
new IconManager( mSettingsManager, AliasNameEditor.this );
EventQueue.invokeLater( new Runnable()
{
@Override
public void run()
{
iconManager.setVisible( true );
}
} );
}
} );
add( mBtnIconManager, "span 2,wrap" );
}
@Override
public void setAlias( Alias alias )
{
mAlias = alias;
if( mAlias != null )
{
mName.setText( alias.getName() );
List<String> listNames = mAliasModel.getListNames();
if( listNames.isEmpty() )
{
mListCombo.setModel( EMPTY_MODEL );
}
else
{
mListCombo.setModel( new DefaultComboBoxModel<String>(
listNames.toArray( new String[ listNames.size() ] ) ) );;
}
mListCombo.setSelectedItem( mAlias.getList() );
List<String> groupNames = mAliasModel.getGroupNames( mAlias.getList() );
if( groupNames.isEmpty() )
{
mGroupCombo.setModel( EMPTY_MODEL );
}
else
{
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
groupNames.toArray( new String[ groupNames.size() ] ) ) );;
}
mGroupCombo.setSelectedItem( mAlias.getGroup() );
Color color = mAlias.getMapColor();
mButtonColor.setBackground( color );
mButtonColor.setForeground( color );
String iconName = mAlias.getIconName();
if( iconName == null )
{
iconName = SettingsManager.DEFAULT_ICON;
}
MapIcon savedIcon = mSettingsManager.getMapIcon( iconName );
if( savedIcon != null )
{
mComboMapIcon.setSelectedItem( savedIcon );
}
}
else
{
mListCombo.setModel( EMPTY_MODEL );
mGroupCombo.setModel( EMPTY_MODEL );
mName.setText( null );
mButtonColor.setBackground( getBackground() );
mButtonColor.setForeground( getForeground() );
}
}
@Override
public void save()
{
// TODO Auto-generated method stub
String alias = mName.getText();
if( alias != null )
{
// boolean expanded = mAliasNode.getModel().getTree()
// .isExpanded( new TreePath( mAliasNode ) );
//
// mAliasNode.getAlias().setName( alias );
// ((ConfigurableNode)mAliasNode.getParent()).sort();
//
// mAliasNode.getAlias().setColor(
// mButtonColor.getBackground().getRGB() );
MapIcon selectedIcon = (MapIcon)mComboMapIcon.getSelectedItem();
// if( selectedIcon != null )
// {
// mAliasNode.getAlias().setIconName( selectedIcon.getName() );
// }
//
// mAliasNode.save();
//
// mAliasNode.show();
//
// if( expanded )
// {
// mAliasNode.getModel().getTree()
// .expandPath( new TreePath( mAliasNode ) );
// }
}
else
{
JOptionPane.showMessageDialog( AliasNameEditor.this, "Please enter an alias name" );
}
}
}

View File

@@ -81,7 +81,8 @@ public class AliasNode extends ConfigurableNode
@Override @Override
public JPanel getEditor() public JPanel getEditor()
{ {
return new AliasEditor( this, mSettingsManager ); return null;
// return new AliasEditor( this, mSettingsManager );
} }
public Alias getAlias() public Alias getAlias()

View File

@@ -37,6 +37,8 @@ import playlist.PlaylistManager;
import settings.SettingsManager; import settings.SettingsManager;
import source.SourceManager; import source.SourceManager;
import spectrum.ChannelSpectrumPanel; import spectrum.ChannelSpectrumPanel;
import alias.AliasController;
import alias.AliasModel;
import audio.AudioManager; import audio.AudioManager;
import audio.AudioPanel; import audio.AudioPanel;
@@ -58,8 +60,10 @@ public class ControllerPanel extends JPanel
private MessageActivityPanel mMessageActivityPanel; private MessageActivityPanel mMessageActivityPanel;
private ChannelSpectrumPanel mChannelSpectrumPanel; private ChannelSpectrumPanel mChannelSpectrumPanel;
private AliasController mAliasController;
private ChannelController mPlaylistEditor; private ChannelController mChannelController;
private JideTabbedPane mTabbedPane; private JideTabbedPane mTabbedPane;
@@ -77,6 +81,7 @@ public class ControllerPanel extends JPanel
public ControllerPanel( AudioManager audioManager, public ControllerPanel( AudioManager audioManager,
ConfigurationControllerModel controller, ConfigurationControllerModel controller,
AliasModel aliasModel,
ChannelModel channelModel, ChannelModel channelModel,
ChannelProcessingManager channelProcessingManager, ChannelProcessingManager channelProcessingManager,
MapService mapService, MapService mapService,
@@ -103,7 +108,9 @@ public class ControllerPanel extends JPanel
mChannelStateList = new ChannelList( channelModel, channelProcessingManager, mChannelStateList = new ChannelList( channelModel, channelProcessingManager,
playlistManager, mSettingsManager ); playlistManager, mSettingsManager );
mPlaylistEditor = new ChannelController( channelModel, playlistManager, sourceManager ); mChannelController = new ChannelController( channelModel, playlistManager, sourceManager );
mAliasController = new AliasController( aliasModel, mSettingsManager );
init(); init();
} }
@@ -129,7 +136,8 @@ public class ControllerPanel extends JPanel
mTabbedPane = new JideTabbedPane(); mTabbedPane = new JideTabbedPane();
mTabbedPane.setFont( this.getFont() ); mTabbedPane.setFont( this.getFont() );
mTabbedPane.setForeground( Color.BLACK ); mTabbedPane.setForeground( Color.BLACK );
mTabbedPane.addTab( "Channels", mPlaylistEditor ); mTabbedPane.addTab( "Channels", mChannelController );
mTabbedPane.addTab( "Aliases", mAliasController );
mTabbedPane.addTab( "Configuration", mSystemControlSplitPane ); mTabbedPane.addTab( "Configuration", mSystemControlSplitPane );
mTabbedPane.addTab( "Channel Spectrum", mChannelSpectrumPanel ); mTabbedPane.addTab( "Channel Spectrum", mChannelSpectrumPanel );
mTabbedPane.addTab( "Events", mCallEventPanel ); mTabbedPane.addTab( "Events", mCallEventPanel );

View File

@@ -140,7 +140,7 @@ public class ChannelController extends JPanel
} }
/** /**
* Selects the channel's table row and scrolls the table's viewport to show it * Adds the channel to the channel model/table and scrolls to view it
*/ */
private void addChannel( Channel channel ) private void addChannel( Channel channel )
{ {

View File

@@ -120,7 +120,7 @@ public class ChannelEditor extends JPanel
private void initGUI() private void initGUI()
{ {
setLayout( new MigLayout( "fill,wrap 2", "[right,grow][grow]", "[][][][][grow][]" ) ); setLayout( new MigLayout( "fill,wrap 2", "[right,grow][grow]", "[][][][][grow]" ) );
mEnableButton.addActionListener( this ); mEnableButton.addActionListener( this );
mEnableButton.setEnabled( false ); mEnableButton.setEnabled( false );

View File

@@ -161,7 +161,7 @@ public class SDRTrunk
playlistManager, mSettingsManager, sourceManager ); playlistManager, mSettingsManager, sourceManager );
mControllerPanel = new ControllerPanel( audioManager, configurationControllerModel, mControllerPanel = new ControllerPanel( audioManager, configurationControllerModel,
channelModel, channelProcessingManager, mapService, playlistManager, aliasModel, channelModel, channelProcessingManager, mapService, playlistManager,
mSettingsManager, sourceManager ); mSettingsManager, sourceManager );
mSpectralPanel = new SpectralDisplayPanel( configurationControllerModel, mSpectralPanel = new SpectralDisplayPanel( configurationControllerModel,