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