Skip to content

Commit bf24880

Browse files
committed
Merge branch 'lib_manager_filters_fix' of https://github.com/cmaglie/Arduino (#10440)
2 parents a0acb3e + b66ed5e commit bf24880

File tree

2 files changed

+24
-29
lines changed

2 files changed

+24
-29
lines changed

app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java

+22-26
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@
3535
import java.awt.Frame;
3636
import java.awt.event.ActionEvent;
3737
import java.awt.event.ActionListener;
38+
import java.util.ArrayList;
3839
import java.util.Collection;
3940
import java.util.Collections;
4041
import java.util.LinkedList;
4142
import java.util.List;
4243
import java.util.Optional;
43-
import java.util.function.Predicate;
4444

4545
import javax.swing.Box;
4646
import 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
}

app/src/cc/arduino/contributions/ui/InstallerJDialog.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171

7272
import cc.arduino.contributions.ui.listeners.AbstractKeyListener;
7373
import processing.app.Base;
74-
import processing.app.Theme;
7574

7675
public abstract class InstallerJDialog<T> extends JDialog {
7776

@@ -82,6 +81,7 @@ public abstract class InstallerJDialog<T> extends JDialog {
8281
protected final FilterJTextField filterField;
8382
protected final JPanel filtersContainer;
8483
// Currently selected category and filters
84+
protected Predicate<T> extraFilter = x -> true;
8585
protected Predicate<T> categoryFilter;
8686
protected String[] filters;
8787
protected final String noConnectionErrorMessage;
@@ -329,7 +329,6 @@ private void setErrorMessageVisible(boolean visible) {
329329
}
330330

331331
protected final ActionListener categoryChooserActionListener = new ActionListener() {
332-
333332
@Override
334333
public void actionPerformed(ActionEvent event) {
335334
DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem();
@@ -339,7 +338,7 @@ public void actionPerformed(ActionEvent event) {
339338
if (contribTable.getCellEditor() != null) {
340339
contribTable.getCellEditor().stopCellEditing();
341340
}
342-
updateIndexFilter(filters, categoryFilter);
341+
updateIndexFilter(filters, categoryFilter.and(extraFilter));
343342
}
344343
}
345344
};

0 commit comments

Comments
 (0)