@@ -26,8 +26,8 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2626 */
2727package jme3utilities .nifty ;
2828
29- import java .util .ArrayList ;
30- import java .util .List ;
29+ import java .util .HashMap ;
30+ import java .util .Map ;
3131import java .util .logging .Logger ;
3232import jme3utilities .Validate ;
3333
@@ -49,13 +49,9 @@ public class PopupMenuBuilder {
4949 // fields
5050
5151 /**
52- * list of menu icon asset paths TODO implement as a Map instead of a List
52+ * map menu items to icon asset paths
5353 */
54- final protected List <String > iconAssetPaths = new ArrayList <>(40 );
55- /**
56- * list of menu items
57- */
58- final protected List <String > items = new ArrayList <>(40 );
54+ final protected Map <String , String > itemMap = new HashMap <>(40 );
5955 // *************************************************************************
6056 // new methods exposed
6157
@@ -66,9 +62,9 @@ public class PopupMenuBuilder {
6662 */
6763 public void add (String item ) {
6864 Validate .nonEmpty (item , "item" );
65+ assert !itemMap .containsKey (item ) : item ;
6966
70- items .add (item );
71- iconAssetPaths .add (null );
67+ itemMap .put (item , null );
7268 }
7369
7470 /**
@@ -79,9 +75,9 @@ public void add(String item) {
7975 */
8076 public void add (String item , String iconAssetPath ) {
8177 Validate .nonEmpty (item , "item" );
78+ assert !itemMap .containsKey (item ) : item ;
8279
83- items .add (item );
84- iconAssetPaths .add (iconAssetPath );
80+ itemMap .put (item , iconAssetPath );
8581 }
8682
8783 /**
@@ -103,10 +99,12 @@ public void addAll(Iterable<String> items) {
10399 * @return a new array
104100 */
105101 public String [] copyIconAssetPaths () {
106- int numIcons = iconAssetPaths .size ();
102+ int numIcons = itemMap .size ();
107103 String [] result = new String [numIcons ];
108- for (int i = 0 ; i < numIcons ; i ++) {
109- result [i ] = iconAssetPaths .get (i );
104+ int i = 0 ;
105+ for (String icontAssetPath : itemMap .values ()) {
106+ result [i ] = icontAssetPath ;
107+ ++i ;
110108 }
111109
112110 return result ;
@@ -118,10 +116,12 @@ public String[] copyIconAssetPaths() {
118116 * @return a new array
119117 */
120118 public String [] copyItems () {
121- int numItems = items .size ();
119+ int numItems = itemMap .size ();
122120 String [] result = new String [numItems ];
123- for (int i = 0 ; i < numItems ; i ++) {
124- result [i ] = items .get (i );
121+ int i = 0 ;
122+ for (String item : itemMap .keySet ()) {
123+ result [i ] = item ;
124+ ++i ;
125125 }
126126
127127 return result ;
@@ -135,7 +135,7 @@ public String[] copyItems() {
135135 */
136136 public boolean hasItem (String item ) {
137137 Validate .nonEmpty (item , "item" );
138- boolean result = items . contains (item );
138+ boolean result = itemMap . containsKey (item );
139139 return result ;
140140 }
141141
@@ -145,15 +145,14 @@ public boolean hasItem(String item) {
145145 * @return true if empty, otherwise false
146146 */
147147 public boolean isEmpty () {
148- boolean result = items .isEmpty ();
148+ boolean result = itemMap .isEmpty ();
149149 return result ;
150150 }
151151
152152 /**
153153 * Remove everything from the menu and start over.
154154 */
155155 public void reset () {
156- items .clear ();
157- iconAssetPaths .clear ();
156+ itemMap .clear ();
158157 }
159158}
0 commit comments