mirror of
https://github.com/arduino/Arduino.git
synced 2024-11-29 10:24:12 +01:00
Category filters for libraries and cores
This commit is contained in:
parent
0110fd8ff1
commit
d0817f7142
@ -0,0 +1,20 @@
|
||||
package cc.arduino.libraries.contributions.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import cc.arduino.ui.filters.NoopPredicate;
|
||||
import cc.arduino.ui.DropdownItem;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public class DropdownAllLibrariesItem implements DropdownItem<ContributedLibrary> {
|
||||
|
||||
public String toString() {
|
||||
return _("All");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<ContributedLibrary> getFilterPredicate() {
|
||||
return new NoopPredicate<ContributedLibrary>();
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cc.arduino.libraries.contributions.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import cc.arduino.libraries.contributions.ui.filters.BuiltInPredicate;
|
||||
import cc.arduino.ui.DropdownItem;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public class DropdownBuiltInLibrariesItem implements DropdownItem<ContributedLibrary> {
|
||||
|
||||
public String toString() {
|
||||
return _("Built-in");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<ContributedLibrary> getFilterPredicate() {
|
||||
return new BuiltInPredicate();
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cc.arduino.libraries.contributions.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import cc.arduino.libraries.contributions.ui.filters.InstalledPredicate;
|
||||
import cc.arduino.ui.DropdownItem;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public class DropdownInstalledLibrariesItem implements DropdownItem<ContributedLibrary> {
|
||||
|
||||
public String toString() {
|
||||
return _("Installed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<ContributedLibrary> getFilterPredicate() {
|
||||
return new InstalledPredicate();
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package cc.arduino.libraries.contributions.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import cc.arduino.libraries.contributions.ui.filters.CategoryPredicate;
|
||||
import cc.arduino.ui.DropdownItem;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class DropdownLibraryOfCategoryItem implements DropdownItem<ContributedLibrary> {
|
||||
|
||||
private final String category;
|
||||
|
||||
public DropdownLibraryOfCategoryItem(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return category;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<ContributedLibrary> getFilterPredicate() {
|
||||
return new CategoryPredicate(category);
|
||||
}
|
||||
}
|
@ -30,7 +30,6 @@ package cc.arduino.libraries.contributions.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import cc.arduino.libraries.contributions.LibrariesIndexer;
|
||||
import cc.arduino.packages.contributions.ContributedPackage;
|
||||
import cc.arduino.packages.contributions.ContributedPlatform;
|
||||
import cc.arduino.packages.contributions.VersionComparator;
|
||||
import cc.arduino.ui.FilteredAbstractTableModel;
|
||||
@ -39,14 +38,12 @@ import com.google.common.collect.Collections2;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static cc.arduino.packages.contributions.VersionComparator.VERSION_COMPARATOR;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class LibrariesIndexTableModel extends FilteredAbstractTableModel {
|
||||
public class LibrariesIndexTableModel extends FilteredAbstractTableModel<ContributedLibrary> {
|
||||
|
||||
public final static int DESCRIPTION_COL = 0;
|
||||
|
||||
public static class ContributedLibraryReleases implements Comparable<ContributedLibraryReleases> {
|
||||
public static class ContributedLibraryReleases implements Comparable<ContributedLibraryReleases> {
|
||||
public String name;
|
||||
public List<ContributedLibrary> releases = new ArrayList<ContributedLibrary>();
|
||||
public List<String> versions = new ArrayList<String>();
|
||||
@ -139,11 +136,11 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel {
|
||||
indexer = _index;
|
||||
}
|
||||
|
||||
String selectedCategory = null;
|
||||
Predicate<ContributedLibrary> selectedCategoryFilter = null;
|
||||
String selectedFilters[] = null;
|
||||
|
||||
public void updateIndexFilter(String category, String filters[]) {
|
||||
selectedCategory = category;
|
||||
public void updateIndexFilter(Predicate<ContributedLibrary> categoryFilter, String filters[]) {
|
||||
selectedCategoryFilter = categoryFilter;
|
||||
selectedFilters = filters;
|
||||
update();
|
||||
}
|
||||
@ -245,10 +242,8 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel {
|
||||
}
|
||||
|
||||
private void applyFilterToLibrary(ContributedLibrary lib) {
|
||||
if (selectedCategory != null && !selectedCategory.isEmpty()) {
|
||||
if (lib.getCategory() == null || !lib.getCategory().equals(selectedCategory)) {
|
||||
return;
|
||||
}
|
||||
if (selectedCategoryFilter != null && !selectedCategoryFilter.apply(lib)) {
|
||||
return;
|
||||
}
|
||||
if (!stringContainsAll(lib.getName(), selectedFilters) && !stringContainsAll(lib.getParagraph(), selectedFilters) && !stringContainsAll(lib.getSentence(), selectedFilters)) {
|
||||
return;
|
||||
|
@ -31,13 +31,9 @@ package cc.arduino.libraries.contributions.ui;
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import cc.arduino.libraries.contributions.LibrariesIndexer;
|
||||
import cc.arduino.packages.contributions.ui.InstallerJDialogUncaughtExceptionHandler;
|
||||
import cc.arduino.ui.DropdownALLItem;
|
||||
import cc.arduino.ui.FilteredAbstractTableModel;
|
||||
import cc.arduino.ui.InstallerJDialog;
|
||||
import cc.arduino.ui.InstallerTableCell;
|
||||
import cc.arduino.ui.*;
|
||||
import cc.arduino.utils.Progress;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collection;
|
||||
|
||||
@ -87,17 +83,20 @@ public class LibraryManagerUI extends InstallerJDialog {
|
||||
// return a FilteredAbstractTableModel
|
||||
getContribModel().setIndexer(indexer);
|
||||
|
||||
category = null;
|
||||
categoryFilter = null;
|
||||
categoryChooser.removeAllItems();
|
||||
|
||||
getContribModel().addTableModelListener(tableModelListener);
|
||||
categoryChooser.addActionListener(categoryChooserActionListener);
|
||||
|
||||
// Load categories
|
||||
categoryChooser.addItem(new DropdownAllLibrariesItem());
|
||||
categoryChooser.addItem(new DropdownInstalledLibrariesItem());
|
||||
categoryChooser.addItem(new DropdownBuiltInLibrariesItem());
|
||||
Collection<String> categories = indexer.getIndex().getCategories();
|
||||
categoryChooser.addItem(new DropdownALLItem());
|
||||
for (String s : categories)
|
||||
categoryChooser.addItem(s);
|
||||
for (String category : categories) {
|
||||
categoryChooser.addItem(new DropdownLibraryOfCategoryItem(category));
|
||||
}
|
||||
|
||||
// Enable categories combo only if there are two or more choices
|
||||
int count = categoryChooser.getItemCount();
|
||||
|
@ -0,0 +1,17 @@
|
||||
package cc.arduino.libraries.contributions.ui.filters;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class BuiltInPredicate implements Predicate<ContributedLibrary> {
|
||||
|
||||
@Override
|
||||
public boolean apply(ContributedLibrary input) {
|
||||
return input.isReadOnly();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof BuiltInPredicate;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package cc.arduino.libraries.contributions.ui.filters;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class CategoryPredicate implements Predicate<ContributedLibrary> {
|
||||
|
||||
private final String category;
|
||||
|
||||
public CategoryPredicate(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(ContributedLibrary input) {
|
||||
return input.getCategory() != null && category.equals(input.getCategory());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof CategoryPredicate && ((CategoryPredicate) obj).category.equals(category);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package cc.arduino.libraries.contributions.ui.filters;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class InstalledPredicate implements Predicate<ContributedLibrary> {
|
||||
@Override
|
||||
public boolean apply(ContributedLibrary input) {
|
||||
return input.isInstalled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof InstalledPredicate;
|
||||
}
|
||||
|
||||
}
|
@ -32,6 +32,7 @@ import cc.arduino.packages.contributions.ContributedPackage;
|
||||
import cc.arduino.packages.contributions.ContributedPlatform;
|
||||
import cc.arduino.packages.contributions.ContributionsIndex;
|
||||
import cc.arduino.ui.FilteredAbstractTableModel;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
@ -40,7 +41,7 @@ import java.util.List;
|
||||
import static processing.app.I18n._;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class ContributionIndexTableModel extends FilteredAbstractTableModel {
|
||||
public class ContributionIndexTableModel extends FilteredAbstractTableModel<ContributedPlatform> {
|
||||
|
||||
public final static int DESCRIPTION_COL = 0;
|
||||
|
||||
@ -137,13 +138,12 @@ public class ContributionIndexTableModel extends FilteredAbstractTableModel {
|
||||
index = _index;
|
||||
}
|
||||
|
||||
public void updateIndexFilter(String category, String filters[]) {
|
||||
public void updateIndexFilter(Predicate<ContributedPlatform> categoryFilter, String filters[]) {
|
||||
contributions.clear();
|
||||
for (ContributedPackage pack : index.getPackages()) {
|
||||
for (ContributedPlatform platform : pack.getPlatforms()) {
|
||||
if (category != null) {
|
||||
if (!category.equals(platform.getCategory()))
|
||||
continue;
|
||||
if (!categoryFilter.apply(platform)) {
|
||||
continue;
|
||||
}
|
||||
if (!stringContainsAll(platform.getName(), filters))
|
||||
continue;
|
||||
|
@ -28,15 +28,16 @@
|
||||
*/
|
||||
package cc.arduino.packages.contributions.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ui.DropdownLibraryOfCategoryItem;
|
||||
import cc.arduino.packages.contributions.ContributedPlatform;
|
||||
import cc.arduino.packages.contributions.ContributionInstaller;
|
||||
import cc.arduino.packages.contributions.ContributionsIndexer;
|
||||
import cc.arduino.libraries.contributions.ui.DropdownAllLibrariesItem;
|
||||
import cc.arduino.ui.FilteredAbstractTableModel;
|
||||
import cc.arduino.ui.InstallerJDialog;
|
||||
import cc.arduino.ui.InstallerTableCell;
|
||||
import cc.arduino.utils.Progress;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collection;
|
||||
|
||||
@ -86,7 +87,7 @@ public class ContributionManagerUI extends InstallerJDialog {
|
||||
|
||||
getContribModel().setIndex(indexer.getIndex());
|
||||
|
||||
category = null;
|
||||
categoryFilter = null;
|
||||
categoryChooser.removeAllItems();
|
||||
|
||||
filterField.setEnabled(getContribModel().getRowCount() > 0);
|
||||
@ -95,12 +96,11 @@ public class ContributionManagerUI extends InstallerJDialog {
|
||||
categoryChooser.addActionListener(categoryChooserActionListener);
|
||||
|
||||
// Enable categories combo only if there are two or more choices
|
||||
categoryChooser.addItem(new DropdownAllCoresItem());
|
||||
Collection<String> categories = indexer.getIndex().getCategories();
|
||||
int count = categories.size();
|
||||
categoryChooser.setEnabled(count > 1);
|
||||
|
||||
for (String s : categories)
|
||||
categoryChooser.addItem(s);
|
||||
for (String s : categories) {
|
||||
categoryChooser.addItem(new DropdownCoreOfCategoryItem(s));
|
||||
}
|
||||
|
||||
// Create ConstributionInstaller tied with the provided index
|
||||
installer = new ContributionInstaller(indexer) {
|
||||
|
@ -0,0 +1,20 @@
|
||||
package cc.arduino.packages.contributions.ui;
|
||||
|
||||
import cc.arduino.ui.filters.NoopPredicate;
|
||||
import cc.arduino.packages.contributions.ContributedPlatform;
|
||||
import cc.arduino.ui.DropdownItem;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public class DropdownAllCoresItem implements DropdownItem<ContributedPlatform> {
|
||||
|
||||
public String toString() {
|
||||
return _("All");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<ContributedPlatform> getFilterPredicate() {
|
||||
return new NoopPredicate<ContributedPlatform>();
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package cc.arduino.packages.contributions.ui;
|
||||
|
||||
import cc.arduino.packages.contributions.ContributedPlatform;
|
||||
import cc.arduino.packages.contributions.ui.filters.CategoryPredicate;
|
||||
import cc.arduino.ui.DropdownItem;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class DropdownCoreOfCategoryItem implements DropdownItem<ContributedPlatform> {
|
||||
|
||||
private final String category;
|
||||
|
||||
public DropdownCoreOfCategoryItem(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return category;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate<ContributedPlatform> getFilterPredicate() {
|
||||
return new CategoryPredicate(category);
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package cc.arduino.packages.contributions.ui.filters;
|
||||
|
||||
import cc.arduino.packages.contributions.ContributedPlatform;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class CategoryPredicate implements Predicate<ContributedPlatform> {
|
||||
|
||||
private final String category;
|
||||
|
||||
public CategoryPredicate(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(ContributedPlatform input) {
|
||||
return input.getCategory() != null && category.equals(input.getCategory());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof CategoryPredicate && ((CategoryPredicate) obj).category.equals(category);
|
||||
}
|
||||
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package cc.arduino.ui;
|
||||
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public class DropdownALLItem implements DropdownItem {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return _("All");
|
||||
}
|
||||
|
||||
public String getItemValue() {
|
||||
return "";
|
||||
}
|
||||
}
|
@ -1,6 +1,9 @@
|
||||
package cc.arduino.ui;
|
||||
|
||||
public interface DropdownItem {
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public interface DropdownItem<T> {
|
||||
|
||||
Predicate<T> getFilterPredicate();
|
||||
|
||||
String getItemValue();
|
||||
}
|
||||
|
@ -28,10 +28,13 @@
|
||||
*/
|
||||
package cc.arduino.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
|
||||
public abstract class FilteredAbstractTableModel extends AbstractTableModel {
|
||||
public abstract class FilteredAbstractTableModel<T> extends AbstractTableModel {
|
||||
|
||||
abstract public void updateIndexFilter(String category, String[] filters);
|
||||
abstract public void updateIndexFilter(Predicate<T> categoryFilter, String[] filters);
|
||||
|
||||
}
|
||||
|
@ -28,6 +28,8 @@
|
||||
*/
|
||||
package cc.arduino.ui;
|
||||
|
||||
import cc.arduino.libraries.contributions.ContributedLibrary;
|
||||
import com.google.common.base.Predicate;
|
||||
import processing.app.Base;
|
||||
import processing.app.Theme;
|
||||
|
||||
@ -46,7 +48,7 @@ import java.awt.event.WindowEvent;
|
||||
import static cc.arduino.packages.contributions.ui.ContributionIndexTableModel.DESCRIPTION_COL;
|
||||
import static processing.app.I18n._;
|
||||
|
||||
public abstract class InstallerJDialog extends JDialog {
|
||||
public abstract class InstallerJDialog<T> extends JDialog {
|
||||
|
||||
// Toolbar on top of the window:
|
||||
// - Categories drop-down menu
|
||||
@ -58,7 +60,7 @@ public abstract class InstallerJDialog extends JDialog {
|
||||
// - Search text-field
|
||||
protected FilterJTextField filterField;
|
||||
// Currently selected category and filters
|
||||
protected String category;
|
||||
protected Predicate<T> categoryFilter;
|
||||
protected String[] filters;
|
||||
|
||||
// Real contribution table
|
||||
@ -118,7 +120,7 @@ public abstract class InstallerJDialog extends JDialog {
|
||||
protected void onFilter(String[] _filters) {
|
||||
filters = _filters;
|
||||
cellEditor.stopCellEditing();
|
||||
contribModel.updateIndexFilter(category, filters);
|
||||
contribModel.updateIndexFilter(categoryFilter, filters);
|
||||
}
|
||||
};
|
||||
|
||||
@ -271,22 +273,13 @@ public abstract class InstallerJDialog extends JDialog {
|
||||
|
||||
protected ActionListener categoryChooserActionListener = new ActionListener() {
|
||||
|
||||
public String getSelectedItem() {
|
||||
Object obj = categoryChooser.getSelectedItem();
|
||||
if (obj instanceof String) {
|
||||
return (String) obj;
|
||||
}
|
||||
DropdownItem item = (DropdownItem) obj;
|
||||
return item.getItemValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
String selected = getSelectedItem();
|
||||
if (category == null || !category.equals(selected)) {
|
||||
category = selected;
|
||||
DropdownItem<T> selected = (DropdownItem<T>) categoryChooser.getSelectedItem();
|
||||
if (categoryFilter == null || !categoryFilter.equals(selected)) {
|
||||
categoryFilter = selected.getFilterPredicate();
|
||||
cellEditor.stopCellEditing();
|
||||
contribModel.updateIndexFilter(category, filters);
|
||||
contribModel.updateIndexFilter(categoryFilter, filters);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
18
app/src/cc/arduino/ui/filters/NoopPredicate.java
Normal file
18
app/src/cc/arduino/ui/filters/NoopPredicate.java
Normal file
@ -0,0 +1,18 @@
|
||||
package cc.arduino.ui.filters;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
public class NoopPredicate<T> implements Predicate<T> {
|
||||
|
||||
@Override
|
||||
public boolean apply(T input) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof NoopPredicate;
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user