mirror of
https://github.com/arduino/Arduino.git
synced 2024-11-29 10:24:12 +01:00
Rewritten library menu generation; libraries are now grouped by their type. Fixes #2879
This commit is contained in:
parent
42b07f0337
commit
1d6e710eac
@ -0,0 +1,24 @@
|
||||
package cc.arduino.contributions.libraries;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class LibraryByTypeComparator implements Comparator<ContributedLibrary> {
|
||||
|
||||
private final List<String> types;
|
||||
|
||||
public LibraryByTypeComparator() {
|
||||
this("Arduino", "Recommended", "Contributed");
|
||||
}
|
||||
|
||||
public LibraryByTypeComparator(String... types) {
|
||||
this.types = Arrays.asList(types);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(ContributedLibrary o1, ContributedLibrary o2) {
|
||||
return types.indexOf(o1.getTypes().get(0)) - types.indexOf(o2.getTypes().get(0));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package cc.arduino.contributions.libraries;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public class LibraryOfSameTypeComparator implements Comparator<ContributedLibrary> {
|
||||
|
||||
@Override
|
||||
public int compare(ContributedLibrary o1, ContributedLibrary o2) {
|
||||
if (!o1.getTypes().get(0).equals(o2.getTypes().get(0))) {
|
||||
return 0;
|
||||
}
|
||||
return o1.getName().compareTo(o2.getName());
|
||||
}
|
||||
|
||||
}
|
@ -25,9 +25,7 @@ package processing.app;
|
||||
import cc.arduino.contributions.BuiltInCoreIsNewerCheck;
|
||||
import cc.arduino.contributions.DownloadableContributionVersionComparator;
|
||||
import cc.arduino.contributions.VersionHelper;
|
||||
import cc.arduino.contributions.libraries.ContributedLibrary;
|
||||
import cc.arduino.contributions.libraries.LibrariesIndexer;
|
||||
import cc.arduino.contributions.libraries.LibraryInstaller;
|
||||
import cc.arduino.contributions.libraries.*;
|
||||
import cc.arduino.contributions.libraries.ui.LibraryManagerUI;
|
||||
import cc.arduino.contributions.packages.ContributedPlatform;
|
||||
import cc.arduino.contributions.packages.ContributionInstaller;
|
||||
@ -1195,6 +1193,13 @@ public class Base {
|
||||
return new LibraryList(libs);
|
||||
}
|
||||
|
||||
private List<ContributedLibrary> getSortedLibraries() {
|
||||
List<ContributedLibrary> installedLibraries = new LinkedList<ContributedLibrary>(BaseNoGui.librariesIndexer.getInstalledLibraries());
|
||||
Collections.sort(installedLibraries, new LibraryByTypeComparator());
|
||||
Collections.sort(installedLibraries, new LibraryOfSameTypeComparator());
|
||||
return installedLibraries;
|
||||
}
|
||||
|
||||
public void rebuildImportMenu(JMenu importMenu) {
|
||||
if (importMenu == null)
|
||||
return;
|
||||
@ -1225,33 +1230,35 @@ public class Base {
|
||||
TargetPlatform targetPlatform = getTargetPlatform();
|
||||
|
||||
if (targetPlatform != null) {
|
||||
LibraryList ideLibs = getIDELibs();
|
||||
LibraryList userLibs = getUserLibs();
|
||||
try {
|
||||
// Find the current target. Get the platform, and then select the
|
||||
// correct name and core path.
|
||||
String platformNameLabel;
|
||||
platformNameLabel = StringUtils.capitalize(targetPlatform.getContainerPackage().getId()) + "/" + StringUtils.capitalize(targetPlatform.getId());
|
||||
platformNameLabel = I18n.format(_("{0} libraries"), platformNameLabel);
|
||||
JMenuItem platformItem = new JMenuItem(_(platformNameLabel));
|
||||
platformItem.setEnabled(false);
|
||||
importMenu.add(platformItem);
|
||||
|
||||
if (ideLibs.size() > 0) {
|
||||
addLibraries(importMenu, ideLibs);
|
||||
}
|
||||
|
||||
if (userLibs.size() > 0) {
|
||||
if (ideLibs.size() > 0) {
|
||||
List<ContributedLibrary> libs = getSortedLibraries();
|
||||
String lastLibType = null;
|
||||
for (ContributedLibrary lib : libs) {
|
||||
if (lastLibType == null || !lastLibType.equals(lib.getTypes().get(0))) {
|
||||
if (lastLibType != null) {
|
||||
importMenu.addSeparator();
|
||||
}
|
||||
JMenuItem contributedLibraryItem = new JMenuItem(_("Contributed libraries"));
|
||||
contributedLibraryItem.setEnabled(false);
|
||||
importMenu.add(contributedLibraryItem);
|
||||
addLibraries(importMenu, userLibs);
|
||||
lastLibType = lib.getTypes().get(0);
|
||||
JMenuItem platformItem = new JMenuItem(I18n.format(_("{0} libraries"), lastLibType));
|
||||
platformItem.setEnabled(false);
|
||||
importMenu.add(platformItem);
|
||||
}
|
||||
|
||||
AbstractAction action = new AbstractAction(lib.getName()) {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
UserLibrary l = (UserLibrary) getValue("library");
|
||||
try {
|
||||
activeEditor.getSketch().importLibrary(l);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
showWarning(_("Error"), I18n.format("Unable to list header files in {0}", l.getSrcFolder()), e);
|
||||
}
|
||||
}
|
||||
};
|
||||
action.putValue("library", lib);
|
||||
|
||||
// Add new element at the bottom
|
||||
JMenuItem item = new JMenuItem(action);
|
||||
item.putClientProperty("library", lib);
|
||||
importMenu.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user