37
37
import processing .app .helpers .PreferencesMap ;
38
38
import processing .app .helpers .filefilters .OnlyDirs ;
39
39
import processing .app .helpers .filefilters .OnlyFilesWithExtension ;
40
- import processing .app .javax .swing .filechooser .FileNameExtensionFilter ;import processing .app .tools .MapWithSubkeys ;
40
+ import processing .app .javax .swing .filechooser .FileNameExtensionFilter ;import processing .app .packages .Library ;
41
+ import processing .app .packages .LibraryList ;
42
+ import processing .app .tools .MapWithSubkeys ;
41
43
import processing .app .tools .ZipDeflater ;
42
44
import processing .core .*;
43
45
import static processing .app .I18n ._ ;
@@ -89,10 +91,10 @@ public class Base {
89
91
static private List <File > librariesFolders ;
90
92
91
93
// maps library name to their library folder
92
- static private Map < String , File > libraries ;
94
+ static private LibraryList libraries ;
93
95
94
96
// maps #included files to their library folder
95
- static Map <String , File > importToLibraryTable ;
97
+ static Map <String , Library > importToLibraryTable ;
96
98
97
99
// classpath for all known libraries for p5
98
100
// (both those in the p5/libs folder and those with lib subfolders
@@ -1038,26 +1040,26 @@ protected void rebuildSketchbookMenu(JMenu menu) {
1038
1040
}
1039
1041
}
1040
1042
1041
- public Map <String , File > getIDELibs () {
1043
+ public LibraryList getIDELibs () {
1044
+ LibraryList libs = new LibraryList ();
1042
1045
if (libraries == null )
1043
- return new HashMap <String , File >();
1044
- Map <String , File > ideLibs = new HashMap <String , File >(libraries );
1045
- for (String lib : libraries .keySet ()) {
1046
- if (FileUtils .isSubDirectory (getSketchbookFolder (), libraries .get (lib )))
1047
- ideLibs .remove (lib );
1046
+ return libs ;
1047
+ for (Library lib : libraries ) {
1048
+ if (!FileUtils .isSubDirectory (getSketchbookFolder (), lib .getRootFolder ()))
1049
+ libs .add (lib );
1048
1050
}
1049
- return ideLibs ;
1051
+ return libs ;
1050
1052
}
1051
1053
1052
- public Map <String , File > getUserLibs () {
1054
+ public LibraryList getUserLibs () {
1055
+ LibraryList libs = new LibraryList ();
1053
1056
if (libraries == null )
1054
- return new HashMap <String , File >();
1055
- Map <String , File > userLibs = new HashMap <String , File >(libraries );
1056
- for (String lib : libraries .keySet ()) {
1057
- if (!FileUtils .isSubDirectory (getSketchbookFolder (), libraries .get (lib )))
1058
- userLibs .remove (lib );
1057
+ return libs ;
1058
+ for (Library lib : libraries ) {
1059
+ if (FileUtils .isSubDirectory (getSketchbookFolder (), lib .getRootFolder ()))
1060
+ libs .add (lib );
1059
1061
}
1060
- return userLibs ;
1062
+ return libs ;
1061
1063
}
1062
1064
1063
1065
public void rebuildImportMenu (JMenu importMenu , final Editor editor ) {
@@ -1077,8 +1079,8 @@ public void actionPerformed(ActionEvent e) {
1077
1079
// Split between user supplied libraries and IDE libraries
1078
1080
TargetPlatform targetPlatform = getTargetPlatform ();
1079
1081
if (targetPlatform != null ) {
1080
- Map < String , File > ideLibs = getIDELibs ();
1081
- Map < String , File > userLibs = getUserLibs ();
1082
+ LibraryList ideLibs = getIDELibs ();
1083
+ LibraryList userLibs = getUserLibs ();
1082
1084
try {
1083
1085
// Find the current target. Get the platform, and then select the
1084
1086
// correct name and core path.
@@ -1118,24 +1120,24 @@ public void rebuildExamplesMenu(JMenu menu) {
1118
1120
if (found ) menu .addSeparator ();
1119
1121
1120
1122
// Add examples from libraries
1121
- Map < String , File > ideLibs = getIDELibs ();
1122
- List < String > names = new ArrayList < String > (ideLibs . keySet () );
1123
- Collections . sort ( names , String . CASE_INSENSITIVE_ORDER );
1124
- for ( String name : names ) {
1125
- File folder = ideLibs . get ( name );
1123
+ LibraryList ideLibs = getIDELibs ();
1124
+ Collections . sort (ideLibs , Library . CASE_INSENSITIVE_ORDER );
1125
+ for ( Library lib : ideLibs ) {
1126
+ File folder = lib . getRootFolder ();
1127
+ String name = lib . getName ( );
1126
1128
addSketchesSubmenu (menu , name , folder , false );
1127
1129
// Allows "fat" libraries to have examples in the root folder
1128
1130
if (folder .getName ().equals (Base .getTargetPlatform ().getName ()))
1129
1131
addSketchesSubmenu (menu , name , folder .getParentFile (), false );
1130
1132
}
1131
1133
1132
- Map < String , File > userLibs = getUserLibs ();
1134
+ LibraryList userLibs = getUserLibs ();
1133
1135
if (userLibs .size ()>0 ) {
1134
1136
menu .addSeparator ();
1135
- names = new ArrayList < String > (userLibs . keySet () );
1136
- Collections . sort ( names , String . CASE_INSENSITIVE_ORDER );
1137
- for ( String name : names ) {
1138
- File folder = userLibs . get ( name );
1137
+ Collections . sort (userLibs , Library . CASE_INSENSITIVE_ORDER );
1138
+ for ( Library lib : userLibs ) {
1139
+ File folder = lib . getRootFolder ();
1140
+ String name = lib . getName ( );
1139
1141
addSketchesSubmenu (menu , name , folder , false );
1140
1142
// Allows "fat" libraries to have examples in the root folder
1141
1143
if (folder .getName ().equals (Base .getTargetPlatform ().getName ()))
@@ -1147,15 +1149,16 @@ public void rebuildExamplesMenu(JMenu menu) {
1147
1149
}
1148
1150
}
1149
1151
1150
- public Map < String , File > scanLibraries (List <File > folders ) {
1151
- Map < String , File > res = new HashMap < String , File > ();
1152
+ public LibraryList scanLibraries (List <File > folders ) {
1153
+ LibraryList res = new LibraryList ();
1152
1154
for (File folder : folders )
1153
- res .putAll (scanLibraries (folder ));
1155
+ res .addAll (scanLibraries (folder ));
1154
1156
return res ;
1155
1157
}
1156
1158
1157
- public Map <String , File > scanLibraries (File folder ) {
1158
- Map <String , File > res = new HashMap <String , File >();
1159
+ public LibraryList scanLibraries (File folder ) {
1160
+ LibraryList res = new LibraryList ();
1161
+
1159
1162
String list [] = folder .list (new OnlyDirs ());
1160
1163
// if a bad folder or something like that, this might come back null
1161
1164
if (list == null )
@@ -1172,41 +1175,15 @@ public Map<String, File> scanLibraries(File folder) {
1172
1175
continue ;
1173
1176
}
1174
1177
1175
- subfolder = scanFatLibrary (subfolder );
1178
+ Library lib = Library . fromFolder (subfolder , Base . getTargetPlatform (). getName () );
1176
1179
1177
1180
// (also replace previously found libs with the same name)
1178
- if (subfolder != null )
1179
- res .put ( libName , subfolder );
1181
+ if (lib != null )
1182
+ res .addOrReplace ( lib );
1180
1183
}
1181
1184
return res ;
1182
1185
}
1183
1186
1184
- /**
1185
- * Scans inside a "FAT" (multi-platform) library folder to see if it contains
1186
- * a version suitable for the actual selected architecture. If a suitable
1187
- * version is found the folder containing that version is returned, otherwise
1188
- * <b>null</b> is returned.<br />
1189
- * <br />
1190
- * If a non-"FAT" library is detected, we assume that the library is suitable
1191
- * for the current architecture and the libFolder parameter is returned.<br />
1192
- *
1193
- * @param libFolder
1194
- * @return
1195
- */
1196
- public File scanFatLibrary (File libFolder ) {
1197
- // A library is considered "fat" if it contains a file called
1198
- // "library.properties"
1199
- File libraryPropFile = new File (libFolder , "library.properties" );
1200
- if (!libraryPropFile .exists () || !libraryPropFile .isFile ())
1201
- return libFolder ;
1202
-
1203
- // Search for a subfolder for actual architecture, return null if not found
1204
- File archSubfolder = new File (libFolder , Base .getTargetPlatform ().getName ());
1205
- if (!archSubfolder .exists () || !archSubfolder .isDirectory ())
1206
- return null ;
1207
- return archSubfolder ;
1208
- }
1209
-
1210
1187
public void onBoardOrPortChange () {
1211
1188
TargetPlatform targetPlatform = getTargetPlatform ();
1212
1189
if (targetPlatform == null )
@@ -1228,15 +1205,16 @@ public void onBoardOrPortChange() {
1228
1205
libraries = scanLibraries (librariesFolders );
1229
1206
1230
1207
// Populate importToLibraryTable
1231
- importToLibraryTable = new HashMap <String , File >();
1232
- for (File subfolder : libraries . values () ) {
1208
+ importToLibraryTable = new HashMap <String , Library >();
1209
+ for (Library lib : libraries ) {
1233
1210
try {
1234
- String packages [] = headerListFromIncludePath (subfolder );
1235
- for (String pkg : packages ) {
1236
- importToLibraryTable .put (pkg , subfolder );
1211
+ String headers [] = headerListFromIncludePath (lib . getRootFolder () );
1212
+ for (String header : headers ) {
1213
+ importToLibraryTable .put (header , lib );
1237
1214
}
1238
1215
} catch (IOException e ) {
1239
- showWarning (_ ("Error" ), I18n .format ("Unable to list header files in {0}" , subfolder ), e );
1216
+ showWarning (_ ("Error" ), I18n
1217
+ .format ("Unable to list header files in {0}" , lib .getRootFolder ()), e );
1240
1218
}
1241
1219
}
1242
1220
@@ -1580,10 +1558,10 @@ public void actionPerformed(ActionEvent e) {
1580
1558
return found ;
1581
1559
}
1582
1560
1583
- protected void addLibraries (JMenu menu , Map < String , File > libs ) throws IOException {
1561
+ protected void addLibraries (JMenu menu , LibraryList libs ) throws IOException {
1584
1562
1585
- List < String > list = new ArrayList < String > (libs . keySet () );
1586
- Collections .sort (list , String .CASE_INSENSITIVE_ORDER );
1563
+ LibraryList list = new LibraryList (libs );
1564
+ Collections .sort (list , Library .CASE_INSENSITIVE_ORDER );
1587
1565
1588
1566
ActionListener listener = new ActionListener () {
1589
1567
public void actionPerformed (ActionEvent event ) {
@@ -1596,11 +1574,11 @@ public void actionPerformed(ActionEvent event) {
1596
1574
}
1597
1575
};
1598
1576
1599
- for (String name : list ) {
1600
- File folder = libs . get ( name );
1577
+ for (Library lib : list ) {
1578
+ File folder = lib . getRootFolder ( );
1601
1579
1602
1580
// Add new element at the bottom
1603
- JMenuItem item = new JMenuItem (name );
1581
+ JMenuItem item = new JMenuItem (lib . getName () );
1604
1582
item .addActionListener (listener );
1605
1583
item .setActionCommand (folder .getAbsolutePath ());
1606
1584
menu .add (item );
@@ -1874,7 +1852,7 @@ static public File createTempFolder(String name) {
1874
1852
}
1875
1853
1876
1854
1877
- static public Map < String , File > getLibraries () {
1855
+ static public LibraryList getLibraries () {
1878
1856
return libraries ;
1879
1857
}
1880
1858
0 commit comments