//(c) Copyright 2008, Scott Vorthmann. All rights reserved. package org.vorthmann.zome.ui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import org.vorthmann.ui.Controller; public class ToolsPanel extends JPanel implements PropertyChangeListener { private final Controller controller; private JPanel instances; private JScrollPane scroller; private static final Logger logger = Logger .getLogger( "org.vorthmann.zome.ui" ); public ToolsPanel( final JFrame frame, final Controller controller ) { this .controller = controller; controller .addPropertyListener( this ); setLayout( new BorderLayout() ); JPanel types = new JPanel(); { JButton newButton = new JButton( "+" ); newButton .addActionListener( new ActionListener() { @Override public void actionPerformed( ActionEvent arg0 ) { final NewToolDialog newToolDialog = new NewToolDialog( frame, controller ); newToolDialog .setVisible( true ); } } ); newButton .setPreferredSize( new Dimension( 40, 20 ) ); types .add( newButton ); } add( types, BorderLayout .NORTH ); instances = new JPanel(); instances .setMaximumSize( new Dimension( 350, 0 ) ); // instances .setLayout( new BoxLayout( instances, BoxLayout .Y_AXIS ) ); instances .setLayout( new GridLayout( 0,4 ) ); JPanel instancesBorder = new JPanel( new BorderLayout() ); instancesBorder .add( instances, BorderLayout.PAGE_START ); scroller = new JScrollPane( instancesBorder, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); add( scroller, BorderLayout .CENTER ); } protected static Component createButton( String action, ActionListener listener ) { int delim = action .indexOf( "." ); String group = action .substring( 0, delim ); delim = action .indexOf( "/" ); String name = action .substring( delim + 1 ); String iconPath = "/icons/tools/" + group + ".png"; JButton button = new JButton(); java.net.URL imgURL = LessonPanel.class .getResource( iconPath ); if ( imgURL != null ) button .setIcon( new ImageIcon( imgURL ) ); else { button .setText( name ); logger .warning( "Couldn't find resource: " + iconPath ); } button .addActionListener( listener ); button .setActionCommand( action ); Dimension dim = new Dimension( 55, 52 ); button .setMinimumSize( dim ); button .setPreferredSize( dim ); button .setMaximumSize( dim ); button .setToolTipText( name ); return button; } @Override public void propertyChange( PropertyChangeEvent evt ) { if ( evt .getPropertyName() .equals( "tool.instances" ) ) { if ( evt .getOldValue() == null ) { String idAndName = (String) evt .getNewValue(); // will be "group.N/label" Component button = createButton( idAndName, controller ); instances .add( button ); scroller .revalidate(); } } } }