35
35
import java .awt .Frame ;
36
36
import java .awt .event .ActionEvent ;
37
37
import java .awt .event .ActionListener ;
38
+ import java .util .ArrayList ;
38
39
import java .util .Collection ;
39
40
import java .util .Collections ;
40
41
import java .util .LinkedList ;
41
42
import java .util .List ;
42
43
import java .util .Optional ;
43
- import java .util .function .Predicate ;
44
44
45
45
import javax .swing .Box ;
46
46
import javax .swing .JComboBox ;
@@ -66,7 +66,6 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibraryRelease
66
66
67
67
private final JComboBox typeChooser ;
68
68
private final LibraryInstaller installer ;
69
- private Predicate <ContributedLibraryReleases > typeFilter ;
70
69
71
70
@ Override
72
71
protected FilteredAbstractTableModel createContribModel () {
@@ -115,63 +114,60 @@ public LibraryManagerUI(Frame parent, LibraryInstaller installer) {
115
114
}
116
115
117
116
protected final ActionListener typeChooserActionListener = new ActionListener () {
118
-
119
117
@ Override
120
118
public void actionPerformed (ActionEvent event ) {
121
119
DropdownItem <ContributedLibraryReleases > selected = (DropdownItem <ContributedLibraryReleases >) typeChooser .getSelectedItem ();
122
120
previousRowAtPoint = -1 ;
123
- if (selected != null && typeFilter != selected .getFilterPredicate ()) {
124
- typeFilter = selected .getFilterPredicate ();
121
+ if (selected != null && extraFilter != selected .getFilterPredicate ()) {
122
+ extraFilter = selected .getFilterPredicate ();
125
123
if (contribTable .getCellEditor () != null ) {
126
124
contribTable .getCellEditor ().stopCellEditing ();
127
125
}
128
- updateIndexFilter (filters , categoryFilter .and (typeFilter ));
126
+ updateIndexFilter (filters , categoryFilter .and (extraFilter ));
129
127
}
130
128
}
131
129
};
132
130
131
+ private Collection <String > oldCategories = new ArrayList <>();
132
+ private Collection <String > oldTypes = new ArrayList <>();
133
+
133
134
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 ());
136
139
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 ;
139
145
140
146
// Load categories
141
147
categoryFilter = x -> true ;
148
+ categoryChooser .removeActionListener (categoryChooserActionListener );
142
149
categoryChooser .removeAllItems ();
143
150
categoryChooser .addItem (new DropdownAllLibraries ());
144
- Collection <String > categories = BaseNoGui .librariesIndexer .getIndex ().getCategories ();
145
151
for (String category : categories ) {
146
152
categoryChooser .addItem (new DropdownLibraryOfCategoryItem (category ));
147
153
}
148
-
149
154
categoryChooser .setEnabled (categoryChooser .getItemCount () > 1 );
150
-
151
155
categoryChooser .addActionListener (categoryChooserActionListener );
152
- if (previouslySelectedCategory != null ) {
153
- categoryChooser .setSelectedItem (previouslySelectedCategory );
154
- } else {
155
- categoryChooser .setSelectedIndex (0 );
156
- }
156
+ categoryChooser .setSelectedIndex (0 );
157
157
158
- typeFilter = x -> true ;
158
+ // Load types
159
+ extraFilter = x -> true ;
160
+ typeChooser .removeActionListener (typeChooserActionListener );
159
161
typeChooser .removeAllItems ();
160
162
typeChooser .addItem (new DropdownAllLibraries ());
161
163
typeChooser .addItem (new DropdownUpdatableLibrariesItem ());
162
164
typeChooser .addItem (new DropdownInstalledLibraryItem ());
163
- List <String > types = new LinkedList <>(BaseNoGui .librariesIndexer .getIndex ().getTypes ());
164
- Collections .sort (types , new LibraryTypeComparator ());
165
165
for (String type : types ) {
166
166
typeChooser .addItem (new DropdownLibraryOfTypeItem (type ));
167
167
}
168
168
typeChooser .setEnabled (typeChooser .getItemCount () > 1 );
169
169
typeChooser .addActionListener (typeChooserActionListener );
170
- if (previouslySelectedType != null ) {
171
- typeChooser .setSelectedItem (previouslySelectedType );
172
- } else {
173
- typeChooser .setSelectedIndex (0 );
174
- }
170
+ typeChooser .setSelectedIndex (0 );
175
171
176
172
filterField .setEnabled (contribModel .getRowCount () > 0 );
177
173
}
0 commit comments