1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-27 21:54:30 +01:00

Rewritten library menu generation; libraries are now grouped by their type. Fixes #2879

This commit is contained in:
Federico Fissore 2015-05-19 12:57:06 +02:00
parent 42b07f0337
commit 1d6e710eac
3 changed files with 73 additions and 27 deletions

View File

@ -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));
}
}

View File

@ -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());
}
}

View File

@ -25,9 +25,7 @@ package processing.app;
import cc.arduino.contributions.BuiltInCoreIsNewerCheck; import cc.arduino.contributions.BuiltInCoreIsNewerCheck;
import cc.arduino.contributions.DownloadableContributionVersionComparator; import cc.arduino.contributions.DownloadableContributionVersionComparator;
import cc.arduino.contributions.VersionHelper; import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.*;
import cc.arduino.contributions.libraries.LibrariesIndexer;
import cc.arduino.contributions.libraries.LibraryInstaller;
import cc.arduino.contributions.libraries.ui.LibraryManagerUI; import cc.arduino.contributions.libraries.ui.LibraryManagerUI;
import cc.arduino.contributions.packages.ContributedPlatform; import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.packages.ContributionInstaller; import cc.arduino.contributions.packages.ContributionInstaller;
@ -1195,6 +1193,13 @@ public class Base {
return new LibraryList(libs); 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) { public void rebuildImportMenu(JMenu importMenu) {
if (importMenu == null) if (importMenu == null)
return; return;
@ -1225,33 +1230,35 @@ public class Base {
TargetPlatform targetPlatform = getTargetPlatform(); TargetPlatform targetPlatform = getTargetPlatform();
if (targetPlatform != null) { if (targetPlatform != null) {
LibraryList ideLibs = getIDELibs(); List<ContributedLibrary> libs = getSortedLibraries();
LibraryList userLibs = getUserLibs(); String lastLibType = null;
try { for (ContributedLibrary lib : libs) {
// Find the current target. Get the platform, and then select the if (lastLibType == null || !lastLibType.equals(lib.getTypes().get(0))) {
// correct name and core path. if (lastLibType != null) {
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) {
importMenu.addSeparator(); importMenu.addSeparator();
} }
JMenuItem contributedLibraryItem = new JMenuItem(_("Contributed libraries")); lastLibType = lib.getTypes().get(0);
contributedLibraryItem.setEnabled(false); JMenuItem platformItem = new JMenuItem(I18n.format(_("{0} libraries"), lastLibType));
importMenu.add(contributedLibraryItem); platformItem.setEnabled(false);
addLibraries(importMenu, userLibs); importMenu.add(platformItem);
} }
} catch (IOException e) {
e.printStackTrace(); AbstractAction action = new AbstractAction(lib.getName()) {
public void actionPerformed(ActionEvent event) {
UserLibrary l = (UserLibrary) getValue("library");
try {
activeEditor.getSketch().importLibrary(l);
} catch (IOException e) {
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);
} }
} }
} }