View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2010 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.support.swing;
14  
15  import java.io.Serializable;
16  import java.util.Vector;
17  
18  import javax.swing.AbstractListModel;
19  import javax.swing.MutableComboBoxModel;
20  
21  public class ExtendedComboBoxModel extends AbstractListModel implements MutableComboBoxModel, Serializable
22  {
23  	Vector objects;
24  	Object selectedObject;
25  
26  	/***
27  	 * Constructs an empty DefaultComboBoxModel object.
28  	 */
29  	public ExtendedComboBoxModel()
30  	{
31  		objects = new Vector();
32  	}
33  
34  	/***
35  	 * Constructs a DefaultComboBoxModel object initialized with an array of
36  	 * objects.
37  	 * 
38  	 * @param items
39  	 *           an array of Object objects
40  	 */
41  	public ExtendedComboBoxModel( final Object items[] )
42  	{
43  		objects = new Vector();
44  		objects.ensureCapacity( items.length );
45  
46  		int i, c;
47  		for( i = 0, c = items.length; i < c; i++ )
48  			objects.addElement( items[i] );
49  
50  		if( getSize() > 0 )
51  		{
52  			selectedObject = getElementAt( 0 );
53  		}
54  	}
55  
56  	/***
57  	 * Constructs a DefaultComboBoxModel object initialized with a vector.
58  	 * 
59  	 * @param v
60  	 *           a Vector object ...
61  	 */
62  	public ExtendedComboBoxModel( Vector<?> v )
63  	{
64  		objects = v;
65  
66  		if( getSize() > 0 )
67  		{
68  			selectedObject = getElementAt( 0 );
69  		}
70  	}
71  
72  	// implements javax.swing.ComboBoxModel
73  	/***
74  	 * Set the value of the selected item. The selected item may be null.
75  	 * <p>
76  	 * 
77  	 * @param anObject
78  	 *           The combo box value or null for no selection.
79  	 */
80  	public void setSelectedItem( Object anObject )
81  	{
82  		if( ( selectedObject != null && !selectedObject.equals( anObject ) ) || selectedObject == null
83  				&& anObject != null )
84  		{
85  			selectedObject = anObject;
86  			fireContentsChanged( this, -1, -1 );
87  		}
88  	}
89  
90  	// implements javax.swing.ComboBoxModel
91  	public Object getSelectedItem()
92  	{
93  		return selectedObject;
94  	}
95  
96  	// implements javax.swing.ListModel
97  	public int getSize()
98  	{
99  		return objects.size();
100 	}
101 
102 	// implements javax.swing.ListModel
103 	public Object getElementAt( int index )
104 	{
105 		if( index >= 0 && index < objects.size() )
106 			return objects.elementAt( index );
107 		else
108 			return null;
109 	}
110 
111 	/***
112 	 * Returns the index-position of the specified object in the list.
113 	 * 
114 	 * @param anObject
115 	 * @return an int representing the index position, where 0 is the first
116 	 *         position
117 	 */
118 	public int getIndexOf( Object anObject )
119 	{
120 		return objects.indexOf( anObject );
121 	}
122 
123 	// implements javax.swing.MutableComboBoxModel
124 	public void addElement( Object anObject )
125 	{
126 		objects.addElement( anObject );
127 		fireIntervalAdded( this, objects.size() - 1, objects.size() - 1 );
128 		if( objects.size() == 1 && selectedObject == null && anObject != null )
129 		{
130 			setSelectedItem( anObject );
131 		}
132 	}
133 
134 	// implements javax.swing.MutableComboBoxModel
135 	public void insertElementAt( Object anObject, int index )
136 	{
137 		objects.insertElementAt( anObject, index );
138 		fireIntervalAdded( this, index, index );
139 	}
140 
141 	// implements javax.swing.MutableComboBoxModel
142 	public void removeElementAt( int index )
143 	{
144 		if( getElementAt( index ) == selectedObject )
145 		{
146 			if( index == 0 )
147 			{
148 				setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1 ) );
149 			}
150 			else
151 			{
152 				setSelectedItem( getElementAt( index - 1 ) );
153 			}
154 		}
155 
156 		objects.removeElementAt( index );
157 
158 		fireIntervalRemoved( this, index, index );
159 	}
160 
161 	// implements javax.swing.MutableComboBoxModel
162 	public void removeElement( Object anObject )
163 	{
164 		int index = objects.indexOf( anObject );
165 		if( index != -1 )
166 		{
167 			removeElementAt( index );
168 		}
169 	}
170 
171 	/***
172 	 * Empties the list.
173 	 */
174 	public void removeAllElements()
175 	{
176 		if( objects.size() > 0 )
177 		{
178 			int firstIndex = 0;
179 			int lastIndex = objects.size() - 1;
180 			objects.removeAllElements();
181 			selectedObject = null;
182 			fireIntervalRemoved( this, firstIndex, lastIndex );
183 		}
184 		else
185 		{
186 			selectedObject = null;
187 		}
188 	}
189 
190 	public void setElementAt( Object obj, int index )
191 	{
192 		objects.setElementAt( obj, index );
193 		fireContentsChanged( this, index, index );
194 	}
195 }