001 package com.croftsoft.core.gui;
002
003 import java.awt.*;
004 import java.awt.event.*;
005
006 import com.croftsoft.core.lang.NullArgumentException;
007
008 /*********************************************************************
009 * Allows the user to manipulate a list of items via control buttons.
010 *
011 * <p>
012 * Java 1.1 compatible.
013 * </p>
014 *
015 * @version
016 * 2001-08-08
017 * @since
018 * 2001-06-04
019 * @author
020 * <a href="http://croftsoft.com/">David Wallace Croft</a>
021 *********************************************************************/
022
023 public class ListControlPanel
024 extends Panel
025 implements ItemListener
026 //////////////////////////////////////////////////////////////////////
027 //////////////////////////////////////////////////////////////////////
028 {
029
030 private Button [ ] buttons;
031
032 private Color backgroundColor;
033
034 //
035
036 private Label panelLabel;
037
038 private List list;
039
040 //
041
042 private int selectedIndex = -1;
043
044 //////////////////////////////////////////////////////////////////////
045 //////////////////////////////////////////////////////////////////////
046
047 /*********************************************************************
048 * Main constructor.
049 *
050 * @param buttons
051 *
052 * Must not be null.
053 *
054 * @param items
055 *
056 * May be null.
057 *
058 * @param title
059 *
060 * May be null.
061 *
062 * @param backgroundColor
063 *
064 * May be null.
065 *********************************************************************/
066 public ListControlPanel (
067 Button [ ] buttons,
068 String [ ] items,
069 String title,
070 Color backgroundColor )
071 //////////////////////////////////////////////////////////////////////
072 {
073 super ( new BorderLayout ( ) );
074
075 NullArgumentException.check ( this.buttons = buttons );
076
077 setTitle ( title );
078
079 this.backgroundColor = backgroundColor;
080
081 if ( backgroundColor != null )
082 {
083 setBackground ( backgroundColor );
084 }
085
086 // create button panel
087
088 Panel buttonPanel = new ButtonPanel1 ( buttons, backgroundColor );
089
090 add ( buttonPanel, BorderLayout.SOUTH );
091
092 //
093
094 setItems ( items );
095 }
096
097 public ListControlPanel (
098 String [ ] buttonLabels,
099 String title,
100 Color backgroundColor )
101 //////////////////////////////////////////////////////////////////////
102 {
103 this ( ButtonLib.createButtonArray ( buttonLabels ),
104 null, title, backgroundColor );
105 }
106
107 //////////////////////////////////////////////////////////////////////
108 //////////////////////////////////////////////////////////////////////
109
110 public Button [ ] getButtons ( )
111 //////////////////////////////////////////////////////////////////////
112 {
113 return buttons;
114 }
115
116 public int getSelectedIndex ( )
117 //////////////////////////////////////////////////////////////////////
118 {
119 return list.getSelectedIndex ( );
120 }
121
122 public String getSelectedItem ( )
123 //////////////////////////////////////////////////////////////////////
124 {
125 return list.getSelectedItem ( );
126 }
127
128 //////////////////////////////////////////////////////////////////////
129 //////////////////////////////////////////////////////////////////////
130
131 public synchronized void setTitle ( String title )
132 //////////////////////////////////////////////////////////////////////
133 {
134 if ( title == null )
135 {
136 if ( panelLabel != null )
137 {
138 remove ( panelLabel );
139 }
140 }
141 else
142 {
143 if ( panelLabel == null )
144 {
145 panelLabel = new Label ( title );
146
147 add ( panelLabel, BorderLayout.NORTH );
148 }
149 else
150 {
151 panelLabel.setText ( title );
152 }
153 }
154 }
155
156 public synchronized void setItems ( String [ ] items )
157 //////////////////////////////////////////////////////////////////////
158 {
159 resetList ( );
160
161 if ( items != null )
162 {
163 for ( int i = 0; i < items.length; i++ )
164 {
165 list.add ( items [ i ] );
166 }
167 }
168 }
169
170 //////////////////////////////////////////////////////////////////////
171 //////////////////////////////////////////////////////////////////////
172
173 public synchronized void itemStateChanged ( ItemEvent itemEvent )
174 //////////////////////////////////////////////////////////////////////
175 {
176 int selectedIndex = list.getSelectedIndex ( );
177
178 if ( selectedIndex > -1 )
179 {
180 if ( selectedIndex == this.selectedIndex )
181 {
182 list.deselect ( selectedIndex );
183
184 this.selectedIndex = -1;
185 }
186 else
187 {
188 this.selectedIndex = selectedIndex;
189 }
190 }
191 }
192
193 //////////////////////////////////////////////////////////////////////
194 // private methods
195 //////////////////////////////////////////////////////////////////////
196
197 private synchronized void resetList ( )
198 //////////////////////////////////////////////////////////////////////
199 {
200 if ( list != null )
201 {
202 remove ( list );
203 }
204
205 selectedIndex = -1;
206
207 list = new List ( 4, false );
208
209 if ( backgroundColor != null )
210 {
211 list.setBackground ( backgroundColor );
212 }
213
214 list.addItemListener ( this );
215
216 add ( list, BorderLayout.CENTER );
217
218 validate ( );
219 }
220
221 //////////////////////////////////////////////////////////////////////
222 //////////////////////////////////////////////////////////////////////
223 }