Skip to content

Commit 1d6e710

Browse files
author
Federico Fissore
committed
Rewritten library menu generation; libraries are now grouped by their type. Fixes #2879
1 parent 42b07f0 commit 1d6e710

File tree

3 files changed

+73
-27
lines changed

3 files changed

+73
-27
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package cc.arduino.contributions.libraries;
2+
3+
import java.util.Arrays;
4+
import java.util.Comparator;
5+
import java.util.List;
6+
7+
public class LibraryByTypeComparator implements Comparator<ContributedLibrary> {
8+
9+
private final List<String> types;
10+
11+
public LibraryByTypeComparator() {
12+
this("Arduino", "Recommended", "Contributed");
13+
}
14+
15+
public LibraryByTypeComparator(String... types) {
16+
this.types = Arrays.asList(types);
17+
}
18+
19+
@Override
20+
public int compare(ContributedLibrary o1, ContributedLibrary o2) {
21+
return types.indexOf(o1.getTypes().get(0)) - types.indexOf(o2.getTypes().get(0));
22+
}
23+
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cc.arduino.contributions.libraries;
2+
3+
import java.util.Comparator;
4+
5+
public class LibraryOfSameTypeComparator implements Comparator<ContributedLibrary> {
6+
7+
@Override
8+
public int compare(ContributedLibrary o1, ContributedLibrary o2) {
9+
if (!o1.getTypes().get(0).equals(o2.getTypes().get(0))) {
10+
return 0;
11+
}
12+
return o1.getName().compareTo(o2.getName());
13+
}
14+
15+
}

app/src/processing/app/Base.java

+34-27
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
import cc.arduino.contributions.BuiltInCoreIsNewerCheck;
2626
import cc.arduino.contributions.DownloadableContributionVersionComparator;
2727
import cc.arduino.contributions.VersionHelper;
28-
import cc.arduino.contributions.libraries.ContributedLibrary;
29-
import cc.arduino.contributions.libraries.LibrariesIndexer;
30-
import cc.arduino.contributions.libraries.LibraryInstaller;
28+
import cc.arduino.contributions.libraries.*;
3129
import cc.arduino.contributions.libraries.ui.LibraryManagerUI;
3230
import cc.arduino.contributions.packages.ContributedPlatform;
3331
import cc.arduino.contributions.packages.ContributionInstaller;
@@ -1195,6 +1193,13 @@ public LibraryList getUserLibs() {
11951193
return new LibraryList(libs);
11961194
}
11971195

1196+
private List<ContributedLibrary> getSortedLibraries() {
1197+
List<ContributedLibrary> installedLibraries = new LinkedList<ContributedLibrary>(BaseNoGui.librariesIndexer.getInstalledLibraries());
1198+
Collections.sort(installedLibraries, new LibraryByTypeComparator());
1199+
Collections.sort(installedLibraries, new LibraryOfSameTypeComparator());
1200+
return installedLibraries;
1201+
}
1202+
11981203
public void rebuildImportMenu(JMenu importMenu) {
11991204
if (importMenu == null)
12001205
return;
@@ -1225,33 +1230,35 @@ public void actionPerformed(ActionEvent e) {
12251230
TargetPlatform targetPlatform = getTargetPlatform();
12261231

12271232
if (targetPlatform != null) {
1228-
LibraryList ideLibs = getIDELibs();
1229-
LibraryList userLibs = getUserLibs();
1230-
try {
1231-
// Find the current target. Get the platform, and then select the
1232-
// correct name and core path.
1233-
String platformNameLabel;
1234-
platformNameLabel = StringUtils.capitalize(targetPlatform.getContainerPackage().getId()) + "/" + StringUtils.capitalize(targetPlatform.getId());
1235-
platformNameLabel = I18n.format(_("{0} libraries"), platformNameLabel);
1236-
JMenuItem platformItem = new JMenuItem(_(platformNameLabel));
1237-
platformItem.setEnabled(false);
1238-
importMenu.add(platformItem);
1239-
1240-
if (ideLibs.size() > 0) {
1241-
addLibraries(importMenu, ideLibs);
1242-
}
1243-
1244-
if (userLibs.size() > 0) {
1245-
if (ideLibs.size() > 0) {
1233+
List<ContributedLibrary> libs = getSortedLibraries();
1234+
String lastLibType = null;
1235+
for (ContributedLibrary lib : libs) {
1236+
if (lastLibType == null || !lastLibType.equals(lib.getTypes().get(0))) {
1237+
if (lastLibType != null) {
12461238
importMenu.addSeparator();
12471239
}
1248-
JMenuItem contributedLibraryItem = new JMenuItem(_("Contributed libraries"));
1249-
contributedLibraryItem.setEnabled(false);
1250-
importMenu.add(contributedLibraryItem);
1251-
addLibraries(importMenu, userLibs);
1240+
lastLibType = lib.getTypes().get(0);
1241+
JMenuItem platformItem = new JMenuItem(I18n.format(_("{0} libraries"), lastLibType));
1242+
platformItem.setEnabled(false);
1243+
importMenu.add(platformItem);
12521244
}
1253-
} catch (IOException e) {
1254-
e.printStackTrace();
1245+
1246+
AbstractAction action = new AbstractAction(lib.getName()) {
1247+
public void actionPerformed(ActionEvent event) {
1248+
UserLibrary l = (UserLibrary) getValue("library");
1249+
try {
1250+
activeEditor.getSketch().importLibrary(l);
1251+
} catch (IOException e) {
1252+
showWarning(_("Error"), I18n.format("Unable to list header files in {0}", l.getSrcFolder()), e);
1253+
}
1254+
}
1255+
};
1256+
action.putValue("library", lib);
1257+
1258+
// Add new element at the bottom
1259+
JMenuItem item = new JMenuItem(action);
1260+
item.putClientProperty("library", lib);
1261+
importMenu.add(item);
12551262
}
12561263
}
12571264
}

0 commit comments

Comments
 (0)