Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 22 additions & 26 deletions
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‎

Lines changed: 2 additions & 3 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /