From c2cac3e75da5d086c9ac5b5123c48845e5c30b83 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Sun, 24 May 2009 15:09:26 +0000 Subject: [PATCH] Adding support for user-installed libraries in the "libraries" sub-directory of the sketchbook folder. --- app/LibraryManager.java | 18 +++++++++++++----- app/Sketch.java | 1 + app/Sketchbook.java | 11 +++++++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/LibraryManager.java b/app/LibraryManager.java index 871f7fb1b..7a2d20d2d 100755 --- a/app/LibraryManager.java +++ b/app/LibraryManager.java @@ -34,7 +34,7 @@ import javax.swing.*; */ public class LibraryManager { - private File libDir; + private File coreLibDir, userLibDir; private List libraries = new ArrayList(); private Target target; @@ -44,9 +44,11 @@ public class LibraryManager { public LibraryManager() throws IOException { String userDir = System.getProperty("user.dir") + File.separator; - libDir = new File( + coreLibDir = new File( ((!Base.isMacOS()) ? "" : userDir) + "hardware" + File.separator + "libraries"); + userLibDir = + new File(Sketchbook.getSketchbookPath() + File.separator + "libraries"); target = new Target( System.getProperty("user.dir") + File.separator + "hardware" + File.separator + "cores", @@ -70,9 +72,15 @@ public class LibraryManager { } }; libraries.clear(); - File[] libs = libDir.listFiles(onlyDirs); - for(int i = 0; i < libs.length; ++i){ - libraries.add(new Library(this, libs[i])); + File[] userLibs = userLibDir.listFiles(onlyDirs); + if (userLibs != null) { + for(int i = 0; i < userLibs.length; ++i){ + libraries.add(new Library(this, userLibs[i])); + } + } + File[] coreLibs = coreLibDir.listFiles(onlyDirs); + for(int i = 0; i < coreLibs.length; ++i){ + libraries.add(new Library(this, coreLibs[i])); } } diff --git a/app/Sketch.java b/app/Sketch.java index 2e99f5468..5d99cb3aa 100644 --- a/app/Sketch.java +++ b/app/Sketch.java @@ -2238,6 +2238,7 @@ public class Sketch { public boolean isReadOnly() { String apath = folder.getAbsolutePath(); if (apath.startsWith(Sketchbook.examplesPath) || + apath.startsWith(Sketchbook.userLibrariesPath) || apath.startsWith(Sketchbook.librariesPath)) { return true; diff --git a/app/Sketchbook.java b/app/Sketchbook.java index 4c48d3ac0..1eb6a2e43 100644 --- a/app/Sketchbook.java +++ b/app/Sketchbook.java @@ -68,6 +68,9 @@ public class Sketchbook { static File librariesFolder; static String librariesPath; + + static File userLibrariesFolder; + static String userLibrariesPath; // maps imported packages to their library folder static Hashtable importToLibraryTable = new Hashtable(); @@ -131,11 +134,14 @@ public class Sketchbook { //System.out.println("resetting sketchbook path"); File sketchbookFolder = Base.getDefaultSketchbookFolder(); //System.out.println("default is " + sketchbookFolder); - Preferences.set("sketchbook.path", - sketchbookFolder.getAbsolutePath()); + sketchbookPath = sketchbookFolder.getAbsolutePath(); + Preferences.set("sketchbook.path", sketchbookPath); if (!sketchbookFolder.exists()) sketchbookFolder.mkdirs(); } + userLibrariesFolder = new File(sketchbookPath, "libraries"); + userLibrariesPath = userLibrariesFolder.getAbsolutePath(); + openMenu = new JMenu("Sketchbook"); popupMenu = new JMenu("Sketchbook"); importMenu = new JMenu("Import Library"); @@ -386,6 +392,7 @@ public class Sketchbook { if (addLibraries(importMenu, examplesFolder)) { importMenu.addSeparator(); } + addLibraries(importMenu, userLibrariesFolder); addLibraries(importMenu, librariesFolder); //System.out.println("libraries cp is now " + librariesClassPath);