#82 WIP - reorganizing icon management and extracting icon model from the settings manager.

This commit is contained in:
Denny
2017-01-08 15:01:53 -05:00
parent 4481560c41
commit 488dc9da4c
17 changed files with 1796 additions and 1182 deletions

View File

@@ -1,291 +1,278 @@
package alias;
import alias.AliasEvent.Event;
import gui.editor.Editor;
import icon.Icon;
import icon.IconCellRenderer;
import icon.IconManager;
import map.MapIcon;
import net.miginfocom.swing.MigLayout;
import settings.SettingsManager;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
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.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import map.IconManager;
import map.MapIcon;
import map.MapIconListCellRenderer;
import net.miginfocom.swing.MigLayout;
import settings.SettingsManager;
import alias.AliasEvent.Event;
public class AliasNameEditor extends Editor<Alias>
{
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
private static ComboBoxModel<String> EMPTY_MODEL = new DefaultComboBoxModel<>();
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 JComboBox<MapIcon> mMapIconCombo;
private JComboBox<String> mListCombo = new JComboBox<>(EMPTY_MODEL);
private JComboBox<String> mGroupCombo = new JComboBox<>(EMPTY_MODEL);
private JComboBox<Icon> mIconCombo;
private JTextField mName;
private JButton mButtonColor;
private JButton mBtnIconManager;
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]" ) );
private IconManager mIconManager;
add( new JLabel( "Name:" ) );
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" );
public AliasNameEditor(AliasModel aliasModel, IconManager iconManager)
{
mAliasModel = aliasModel;
mIconManager = iconManager;
add( new JLabel( "List:" ) );
mListCombo.setEditable( true );
mListCombo.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
if( mListCombo.getSelectedItem() != null )
{
List<String> groups = mAliasModel
.getGroupNames( (String)mListCombo.getSelectedItem() );
if( groups.isEmpty() )
{
mGroupCombo.setModel( EMPTY_MODEL );
}
else
{
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
groups.toArray( new String[ groups.size() ] ) ) );;
}
}
setModified( true );
}
} );
add( mListCombo, "wrap" );
init();
}
add( new JLabel( "Group:" ) );
mGroupCombo.setEditable( true );
mGroupCombo.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
setModified( true );
}
} );
add( mGroupCombo, "wrap" );
private void init()
{
setLayout(new MigLayout("fill,wrap 2", "[right][grow,fill]",
"[][][][][][][grow]"));
add( new JLabel( "Color:" ) );
mButtonColor = new JButton( "Select ..." );
mButtonColor.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
add(new JLabel("Name:"));
mName = new JTextField();
mName.getDocument().addDocumentListener(new DocumentListener()
{
@Override
public void removeUpdate(DocumentEvent e)
{
Color newColor = JColorChooser.showDialog(
AliasNameEditor.this,
"Choose color for this alias",
( hasItem() ? getItem().getMapColor() : null ) );
if( newColor != null )
{
mButtonColor.setForeground( newColor );
mButtonColor.setBackground( newColor );
setModified( true );
}
setModified(true);
}
} );
add( mButtonColor, "wrap" );
add( new JLabel( "Icon:" ) );
mMapIconCombo = new JComboBox<MapIcon>( mSettingsManager.getMapIcons() );
MapIconListCellRenderer renderer = new MapIconListCellRenderer();
renderer.setPreferredSize( new Dimension( 200, 30 ) );
mMapIconCombo.setRenderer( renderer );
mMapIconCombo.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
setModified( true );
}
} );
add( mMapIconCombo, "wrap" );
//Dummy place holder
add( new JLabel() );
mBtnIconManager = new JButton( "Icon Manager" );
mBtnIconManager.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent arg0 )
@Override
public void insertUpdate(DocumentEvent e)
{
final IconManager iconManager =
new IconManager( mSettingsManager, AliasNameEditor.this );
EventQueue.invokeLater( new Runnable()
{
@Override
public void run()
{
iconManager.setVisible( true );
}
} );
setModified(true);
}
} );
add( mBtnIconManager, "span 2,wrap" );
setModified( false );
}
@Override
public void changedUpdate(DocumentEvent e)
{
}
});
add(mName, "wrap");
@Override
public void setItem( Alias alias )
{
super.setItem( alias );
if( hasItem() )
{
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( alias.getList() );
List<String> groupNames = mAliasModel.getGroupNames( alias.getList() );
if( groupNames.isEmpty() )
{
mGroupCombo.setModel( EMPTY_MODEL );
}
else
{
mGroupCombo.setModel( new DefaultComboBoxModel<String>(
groupNames.toArray( new String[ groupNames.size() ] ) ) );;
}
mGroupCombo.setSelectedItem( alias.getGroup() );
Color color = alias.getMapColor();
mButtonColor.setBackground( color );
mButtonColor.setForeground( color );
String iconName = alias.getIconName();
if( iconName == null )
{
iconName = SettingsManager.DEFAULT_ICON;
}
MapIcon savedIcon = mSettingsManager.getMapIcon( iconName );
if( savedIcon != null )
{
mMapIconCombo.setSelectedItem( savedIcon );
}
}
else
{
mListCombo.setModel( EMPTY_MODEL );
mGroupCombo.setModel( EMPTY_MODEL );
mName.setText( null );
mButtonColor.setBackground( getBackground() );
mButtonColor.setForeground( getForeground() );
}
repaint();
setModified( false );
}
add(new JLabel("List:"));
mListCombo.setEditable(true);
mListCombo.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(mListCombo.getSelectedItem() != null)
{
List<String> groups = mAliasModel
.getGroupNames((String) mListCombo.getSelectedItem());
@Override
public void save()
{
if( hasItem() && isModified() )
{
Alias alias = getItem();
if( mListCombo.getSelectedItem() != null )
{
alias.setList( (String)mListCombo.getSelectedItem() );
}
if( mGroupCombo.getSelectedItem() != null )
{
alias.setGroup( (String)mGroupCombo.getSelectedItem() );
}
if(groups.isEmpty())
{
mGroupCombo.setModel(EMPTY_MODEL);
}
else
{
mGroupCombo.setModel(new DefaultComboBoxModel<String>(
groups.toArray(new String[groups.size()])));
;
}
}
alias.setName( mName.getText() );
setModified(true);
}
});
add(mListCombo, "wrap");
alias.setColor( mButtonColor.getBackground().getRGB() );
add(new JLabel("Group:"));
mGroupCombo.setEditable(true);
mGroupCombo.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
setModified(true);
}
});
add(mGroupCombo, "wrap");
if( mMapIconCombo.getSelectedItem() != null )
{
alias.setIconName( ((MapIcon)mMapIconCombo.getSelectedItem()).getName() );
}
setModified( false );
add(new JLabel("Color:"));
//Broadcast an alias change event to save the updates
mAliasModel.broadcast( new AliasEvent( getItem(), Event.CHANGE ) );
}
}
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",
(hasItem() ? getItem().getMapColor() : null));
if(newColor != null)
{
mButtonColor.setForeground(newColor);
mButtonColor.setBackground(newColor);
setModified(true);
}
}
});
add(mButtonColor, "wrap");
add(new JLabel("Icon:"));
mIconCombo = new JComboBox<Icon>(mIconManager.getIcons());
IconCellRenderer renderer = new IconCellRenderer(mIconManager);
renderer.setPreferredSize(new Dimension(200, 30));
mIconCombo.setRenderer( renderer );
mIconCombo.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
setModified(true);
}
});
add(mIconCombo, "wrap");
//Dummy place holder
add(new JLabel());
mBtnIconManager = new JButton("Icon Manager");
mBtnIconManager.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
mIconManager.showEditor(AliasNameEditor.this);
}
});
add(mBtnIconManager, "span 2,wrap");
setModified(false);
}
@Override
public void setItem(Alias alias)
{
super.setItem(alias);
if(hasItem())
{
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(alias.getList());
List<String> groupNames = mAliasModel.getGroupNames(alias.getList());
if(groupNames.isEmpty())
{
mGroupCombo.setModel(EMPTY_MODEL);
}
else
{
mGroupCombo.setModel(new DefaultComboBoxModel<String>(
groupNames.toArray(new String[groupNames.size()])));
;
}
mGroupCombo.setSelectedItem(alias.getGroup());
Color color = alias.getMapColor();
mButtonColor.setBackground(color);
mButtonColor.setForeground(color);
String iconName = alias.getIconName();
if(iconName == null)
{
iconName = SettingsManager.DEFAULT_ICON;
}
Icon savedIcon = mIconManager.getModel().getIcon(iconName);
if(savedIcon != null)
{
mIconCombo.setSelectedItem(savedIcon);
}
}
else
{
mListCombo.setModel(EMPTY_MODEL);
mGroupCombo.setModel(EMPTY_MODEL);
mName.setText(null);
mButtonColor.setBackground(getBackground());
mButtonColor.setForeground(getForeground());
}
repaint();
setModified(false);
}
@Override
public void save()
{
if(hasItem() && isModified())
{
Alias alias = getItem();
if(mListCombo.getSelectedItem() != null)
{
alias.setList((String) mListCombo.getSelectedItem());
}
if(mGroupCombo.getSelectedItem() != null)
{
alias.setGroup((String) mGroupCombo.getSelectedItem());
}
alias.setName(mName.getText());
alias.setColor(mButtonColor.getBackground().getRGB());
if(mIconCombo.getSelectedItem() != null)
{
alias.setIconName(((MapIcon) mIconCombo.getSelectedItem()).getName());
}
setModified(false);
//Broadcast an alias change event to save the updates
mAliasModel.broadcast(new AliasEvent(getItem(), Event.CHANGE));
}
}
}