001 package com.croftsoft.core.gui.list;
002
003 import java.awt.*;
004 import java.awt.event.*;
005
006 /*********************************************************************
007 * @version
008 * $Id: DoubleListDialog.java,v 1.2 2008/09/20 07:57:24 croft Exp $
009 * @since
010 * 1998-04-12
011 * @author
012 * <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
013 *********************************************************************/
014
015 public class DoubleListDialog extends Dialog
016 implements ActionListener, ItemListener, WindowListener
017 //////////////////////////////////////////////////////////////////////
018 //////////////////////////////////////////////////////////////////////
019 {
020
021 private DoubleListDialogListener doubleListDialogListener;
022 private List list_l;
023 private List list_r;
024 private Button accept_Button;
025 private Button cancel_Button;
026
027 //////////////////////////////////////////////////////////////////////
028 //////////////////////////////////////////////////////////////////////
029
030 public DoubleListDialog (
031 Frame parent,
032 String title,
033 boolean modal,
034 boolean multipleMode_left,
035 boolean multipleMode_right,
036 String [ ] items_left,
037 String [ ] items_right,
038 String accept_label,
039 String cancel_label,
040 int x,
041 int y,
042 int w,
043 int h,
044 DoubleListDialogListener doubleListDialogListener )
045 //////////////////////////////////////////////////////////////////////
046 {
047 super ( parent, title, modal );
048 this.doubleListDialogListener = doubleListDialogListener;
049 setLayout ( null );
050 accept_Button = new Button ( accept_label );
051 cancel_Button = new Button ( cancel_label );
052 int rows = items_left.length > items_right.length
053 ? items_left.length : items_right.length;
054 list_l = new List ( rows, multipleMode_left );
055 list_r = new List ( rows, multipleMode_right );
056 for ( int i = 0; i < items_left.length; i++ )
057 list_l.add ( items_left [ i ] );
058 for ( int i = 0; i < items_right.length; i++ )
059 list_r.add ( items_right [ i ] );
060 add ( accept_Button );
061 add ( cancel_Button );
062 add ( list_l );
063 add ( list_r );
064 accept_Button.setEnabled ( false );
065 accept_Button.addActionListener ( this );
066 cancel_Button.addActionListener ( this );
067 list_l.addItemListener ( this );
068 list_r.addItemListener ( this );
069 addWindowListener ( this );
070 setBounds ( x, y, w, h );
071 show ( );
072 }
073
074 public synchronized void itemStateChanged ( ItemEvent e )
075 //////////////////////////////////////////////////////////////////////
076 {
077 Object source = e.getSource ( );
078 if ( ( source == list_l ) || ( source == list_r ) )
079 {
080 accept_Button.setEnabled (
081 ( list_l.getSelectedItems ( ).length > 0 )
082 && ( list_r.getSelectedItems ( ).length > 0 ) );
083 }
084 }
085
086 public synchronized void actionPerformed ( ActionEvent e )
087 //////////////////////////////////////////////////////////////////////
088 {
089 Object source = e.getSource ( );
090 if ( source == accept_Button )
091 {
092 doubleListDialogListener.doubleListDialogAccept (
093 list_l.getSelectedItems ( ),
094 list_r.getSelectedItems ( ) );
095 dispose ( );
096 }
097 else if ( source == cancel_Button )
098 {
099 dispose ( );
100 }
101 }
102
103 public void windowClosing ( WindowEvent e )
104 //////////////////////////////////////////////////////////////////////
105 {
106 dispose ( );
107 }
108
109 public synchronized void dispose ( )
110 //////////////////////////////////////////////////////////////////////
111 {
112 doubleListDialogListener.doubleListDialogAccept ( null, null );
113 super.dispose ( );
114 }
115
116 public void doLayout ( )
117 //////////////////////////////////////////////////////////////////////
118 {
119 Rectangle bounds = getBounds ( );
120 Insets insets = getInsets ( );
121
122 Rectangle r = new Rectangle ( insets.left, insets.top,
123 bounds.width - insets.left - insets.right,
124 bounds.height - insets.top - insets.bottom );
125
126 int button_height = accept_Button.getMinimumSize ( ).height;
127 int list_height = r.height - button_height;
128
129 list_l.setBounds ( r.x, r.y, r.width / 2, list_height );
130 list_r.setBounds (
131 r.x + r.width / 2, r.y, r.width / 2, list_height );
132 accept_Button.setBounds ( r.x, r.y + list_height,
133 r.width / 2, button_height );
134 cancel_Button.setBounds ( r.x + r.width / 2, r.y + list_height,
135 r.width / 2, button_height );
136 }
137
138 public void windowActivated ( WindowEvent e ) { }
139 public void windowClosed ( WindowEvent e ) { }
140 public void windowDeactivated ( WindowEvent e ) { }
141 public void windowDeiconified ( WindowEvent e ) { }
142 public void windowIconified ( WindowEvent e ) { }
143 public void windowOpened ( WindowEvent e ) { }
144
145 //////////////////////////////////////////////////////////////////////
146 //////////////////////////////////////////////////////////////////////
147 }