3535import java .awt .Frame ;
3636import java .awt .event .ActionEvent ;
3737import java .awt .event .ActionListener ;
38+ import java .util .ArrayList ;
3839import java .util .Collection ;
3940import java .util .Collections ;
4041import java .util .LinkedList ;
4142import java .util .List ;
4243import java .util .Optional ;
43- import java .util .function .Predicate ;
4444
4545import javax .swing .Box ;
4646import javax .swing .JComboBox ;
@@ -66,7 +66,6 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease
6666
6767 private final JComboBox typeChooser ;
6868 private final LibraryInstaller installer ;
69- private Predicate <ContributedLibraryReleases > typeFilter ;
7069
7170 @ Override
7271 protected FilteredAbstractTableModel createContribModel () {
@@ -115,63 +114,60 @@ public LibraryManagerUI(Frame parent, LibraryInstaller installer) {
115114 }
116115
117116 protected final ActionListener typeChooserActionListener = new ActionListener () {
118-
119117 @ Override
120118 public void actionPerformed (ActionEvent event ) {
121119 DropdownItem <ContributedLibraryReleases > selected = (DropdownItem <ContributedLibraryReleases >) typeChooser .getSelectedItem ();
122120 previousRowAtPoint = -1 ;
123- if (selected != null && typeFilter != selected .getFilterPredicate ()) {
124- typeFilter = selected .getFilterPredicate ();
121+ if (selected != null && extraFilter != selected .getFilterPredicate ()) {
122+ extraFilter = selected .getFilterPredicate ();
125123 if (contribTable .getCellEditor () != null ) {
126124 contribTable .getCellEditor ().stopCellEditing ();
127125 }
128- updateIndexFilter (filters , categoryFilter .and (typeFilter ));
126+ updateIndexFilter (filters , categoryFilter .and (extraFilter ));
129127 }
130128 }
131129 };
132130
131+ private Collection <String > oldCategories = new ArrayList <>();
132+ private Collection <String > oldTypes = new ArrayList <>();
133+
133134 public void updateUI () {
134- DropdownItem <ContributedLibraryReleases > previouslySelectedCategory = (DropdownItem <ContributedLibraryReleases >) categoryChooser .getSelectedItem ();
135- DropdownItem <ContributedLibraryReleases > previouslySelectedType = (DropdownItem <ContributedLibraryReleases >) typeChooser .getSelectedItem ();
135+ // Check if categories or types have changed
136+ Collection <String > categories = BaseNoGui .librariesIndexer .getIndex ().getCategories ();
137+ List <String > types = new LinkedList <>(BaseNoGui .librariesIndexer .getIndex ().getTypes ());
138+ Collections .sort (types , new LibraryTypeComparator ());
136139
137- categoryChooser .removeActionListener (categoryChooserActionListener );
138- typeChooser .removeActionListener (typeChooserActionListener );
140+ if (categories .equals (oldCategories ) && types .equals (oldTypes )) {
141+ return ;
142+ }
143+ oldCategories = categories ;
144+ oldTypes = types ;
139145
140146 // Load categories
141147 categoryFilter = x -> true ;
148+ categoryChooser .removeActionListener (categoryChooserActionListener );
142149 categoryChooser .removeAllItems ();
143150 categoryChooser .addItem (new DropdownAllLibraries ());
144- Collection <String > categories = BaseNoGui .librariesIndexer .getIndex ().getCategories ();
145151 for (String category : categories ) {
146152 categoryChooser .addItem (new DropdownLibraryOfCategoryItem (category ));
147153 }
148-
149154 categoryChooser .setEnabled (categoryChooser .getItemCount () > 1 );
150-
151155 categoryChooser .addActionListener (categoryChooserActionListener );
152- if (previouslySelectedCategory != null ) {
153- categoryChooser .setSelectedItem (previouslySelectedCategory );
154- } else {
155- categoryChooser .setSelectedIndex (0 );
156- }
156+ categoryChooser .setSelectedIndex (0 );
157157
158- typeFilter = x -> true ;
158+ // Load types
159+ extraFilter = x -> true ;
160+ typeChooser .removeActionListener (typeChooserActionListener );
159161 typeChooser .removeAllItems ();
160162 typeChooser .addItem (new DropdownAllLibraries ());
161163 typeChooser .addItem (new DropdownUpdatableLibrariesItem ());
162164 typeChooser .addItem (new DropdownInstalledLibraryItem ());
163- List <String > types = new LinkedList <>(BaseNoGui .librariesIndexer .getIndex ().getTypes ());
164- Collections .sort (types , new LibraryTypeComparator ());
165165 for (String type : types ) {
166166 typeChooser .addItem (new DropdownLibraryOfTypeItem (type ));
167167 }
168168 typeChooser .setEnabled (typeChooser .getItemCount () > 1 );
169169 typeChooser .addActionListener (typeChooserActionListener );
170- if (previouslySelectedType != null ) {
171- typeChooser .setSelectedItem (previouslySelectedType );
172- } else {
173- typeChooser .setSelectedIndex (0 );
174- }
170+ typeChooser .setSelectedIndex (0 );
175171
176172 filterField .setEnabled (contribModel .getRowCount () > 0 );
177173 }
0 commit comments