//(c) Copyright 2007, Scott Vorthmann. All rights reserved. package org.vorthmann.zome.ui; import java.awt.BorderLayout; import java.awt.ComponentOrientation; import java.awt.Container; import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Logger; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.border.TitledBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.vorthmann.ui.Controller; public class NewToolDialog extends EscapeDialog implements ListSelectionListener { private final JTextField namePanel; private final JTextArea description; private final Controller controller; private final JList<String> toolsList; private int toolNum; private String toolId; public NewToolDialog( Frame frame, Controller controller ) { super( frame, "Create New Tool", true ); Container content = getContentPane(); content .setLayout( new BorderLayout() ); String numStr = controller .getProperty( "next.tool.number" ); try { toolNum = Integer .parseInt( numStr ); } catch (Exception e) { Logger .getLogger( "com.vzome.ui" ) .warning( "property 'next.tool.number' did not parse as an integer" ); toolNum = 99; } this .controller = controller; { toolsList = new JList<>( controller .getCommandList( "tool.templates" ) ); { toolsList .addListSelectionListener( this ); toolsList .setPreferredSize( new Dimension( 150, 300 ) ); toolsList .setSelectionMode( ListSelectionModel .SINGLE_SELECTION ); toolsList .setVisibleRowCount( -1 ); toolsList .setLayoutOrientation( JList. VERTICAL ); } JScrollPane scroller = new JScrollPane( toolsList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); content .add( scroller, BorderLayout.WEST ); JPanel centerPanel = new JPanel(); centerPanel .setLayout( new BorderLayout() ); { JPanel descrPanel = new JPanel( new BorderLayout() ); TitledBorder border = BorderFactory .createTitledBorder( "description" ); border .setTitleJustification( TitledBorder .RIGHT ); descrPanel .setBorder( border ); description = new JTextArea( 3, 1 ); description .setText( "Here you would see a description of the tool action." ); description .setLineWrap( true ); description .setWrapStyleWord( true ); description .setEditable( false ); descrPanel .add( description ); centerPanel .add( descrPanel, BorderLayout.NORTH ); JPanel parameters = new JPanel(); border = BorderFactory .createTitledBorder( "parameters" ); parameters .setBorder( border ); { } centerPanel .add( parameters, BorderLayout.CENTER ); JPanel actionPanel = new JPanel( new BorderLayout() ); { JPanel labelPanel = new JPanel(); { JLabel label = new JLabel( "name: " ); labelPanel .add( label, BorderLayout.WEST ); namePanel = new JTextField( 17 ); labelPanel .add( namePanel, BorderLayout.CENTER ); } actionPanel .add( labelPanel, BorderLayout.CENTER ); JPanel buttons = new JPanel(); { buttons .setComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT ); final JButton okButton = new JButton( "Create" ); getRootPane() .setDefaultButton( okButton ); okButton .addActionListener( new ActionListener(){ @Override public void actionPerformed( ActionEvent e ) { String toolName = namePanel .getText(); ActionEvent ae = new ActionEvent( okButton, ActionEvent.ACTION_PERFORMED, "newTool/" + toolId + "/" + toolName ); NewToolDialog .this .controller .actionPerformed( ae ); NewToolDialog .this .setVisible( false ); } } ); buttons .add( okButton ); JButton cancelButton = new JButton( "Cancel" ); cancelButton .addActionListener( new ActionListener(){ @Override public void actionPerformed( ActionEvent e ) { NewToolDialog.this .setVisible( false ); } } ); buttons .add( cancelButton ); } actionPanel .add( buttons, BorderLayout.SOUTH ); } centerPanel .add( actionPanel, BorderLayout.SOUTH ); } content .add( centerPanel, BorderLayout.CENTER ); } toolsList .setSelectedIndex( 0 ); setSize( new Dimension( 550, 550 ) ); setLocationRelativeTo( frame ); } @Override public void valueChanged( ListSelectionEvent e ) { if ( e. getValueIsAdjusting() == false) adjustText(); } private void adjustText() { String groupName = toolsList .getSelectedValue(); toolId = groupName + "." + toolNum; namePanel .setText( toolId ); // TODO set description, parameters using a subcontroller String descrText = controller .getProperty( "tool.description." + groupName ); description .setText( descrText ); } public void setToolNum( int i ) { toolNum = i; adjustText(); } }