2323import com .google .gwt .event .logical .shared .SelectionEvent ;
2424import com .google .gwt .event .logical .shared .SelectionHandler ;
2525import com .google .gwt .event .shared .HandlerRegistration ;
26+ import com .google .gwt .user .client .DOM ;
2627import com .google .gwt .user .client .Element ;
2728import com .google .gwt .user .client .ui .Widget ;
2829import gwt .material .design .client .base .DefaultMoreChipHandler ;
2930import gwt .material .design .client .base .MoreChipHandler ;
3031import gwt .material .design .client .base .mixin .ToggleStyleMixin ;
3132
3233import java .util .ArrayList ;
34+ import java .util .HashMap ;
3335import java .util .List ;
36+ import java .util .Map ;
3437
38+ //TODO: HasResetField
3539public class MaterialChipContainer extends MaterialPanel implements HasSelectionHandlers <List <MaterialChip >> {
3640
3741 private MoreChipHandler chipHandler = new DefaultMoreChipHandler (this );
38- private List <MaterialChip > chipList = new ArrayList ();
39- private List <MaterialChip > selected = new ArrayList ();
42+ private Map <String , MaterialChip > chipList = new HashMap <>();
4043 private boolean multiple = true ;
4144 private boolean enableToggle = true ;
4245
@@ -55,6 +58,7 @@ protected void add(Widget child, Element container) {
5558
5659 if (child instanceof MaterialChip ) {
5760 MaterialChip chip = (MaterialChip ) child ;
61+ chip .setId (DOM .createUniqueId ());
5862 chip .setTabIndex (0 );
5963 chip .registerHandler (chip .addClickHandler ((event ) -> {
6064 if (isEnableToggle ()) {
@@ -68,16 +72,7 @@ protected void add(Widget child, Element container) {
6872
6973 }));
7074 chipHandler .update (chip );
71- chipList .add (chip );
72- }
73- }
74-
75- protected void insert (Widget child , Element container , int beforeIndex , boolean domInsert ) {
76- super .insert (child , container , beforeIndex , domInsert );
77-
78- if (child instanceof MaterialChip ) {
79- chipList .add (beforeIndex , (MaterialChip ) child );
80- chipHandler .update ((MaterialChip ) child );
75+ chipList .put (chip .getId (), chip );
8176 }
8277 }
8378
@@ -91,19 +86,10 @@ public boolean remove(Widget w) {
9186 }
9287
9388 public void clear () {
94- for (Widget chip : getChildren ()) {
95- if (chip instanceof MaterialChip ) {
96- remove (chip );
97- }
89+ for (MaterialChip value : chipList .values ()) {
90+ value .removeFromParent ();
9891 }
99- }
100-
101- public void clearAllChips () {
102- selected .clear ();
10392 chipList .clear ();
104- for (Widget child : getChildren ()) {
105- child .removeFromParent ();
106- }
10793 }
10894
10995 public void reload () {
@@ -115,13 +101,7 @@ public void setActive(MaterialChip chip, boolean active) {
115101 clearActive ();
116102 }
117103 chip .setActive (active );
118- if (active && !selected .contains (chip )) {
119- selected .add (chip );
120- } else {
121- selected .remove (chip );
122- }
123-
124- SelectionEvent .fire (this , selected );
104+ SelectionEvent .fire (this , getSelected ());
125105 }
126106
127107 public void setVisibleChips (int visibleChips ) {
@@ -133,8 +113,10 @@ public void toggle(MaterialChip chip) {
133113 }
134114
135115 public void clearActive () {
136- chipList .forEach ((c ) -> c .setActive (false ));
137- selected .clear ();
116+ for (String s : chipList .keySet ()) {
117+ MaterialChip chip = chipList .get (s );
118+ if (chip != null ) chip .setActive (false );
119+ }
138120 }
139121
140122 public void collapse () {
@@ -166,12 +148,12 @@ public void setEnableToggle(boolean enableToggle) {
166148 }
167149
168150 public List <MaterialChip > getChipList () {
169- return chipList ;
151+ return new ArrayList <>( chipList . values ()) ;
170152 }
171153
172154 public List <MaterialChip > getSelected () {
173155 List <MaterialChip > selected = new ArrayList <>();
174- List <MaterialChip > chips = chipList ;
156+ List <MaterialChip > chips = getChipList () ;
175157 for (MaterialChip chip : chips ) {
176158 if (chip .isActive ()) {
177159 selected .add (chip );
0 commit comments