mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-17 22:23:10 +03:00
By using syntax like file://./docs/index.html, editor will open file index.html stored in folder SKETCH_FOLDER/docs/. Fixes #224
This commit is contained in:
@ -1006,7 +1006,7 @@ public class Editor extends JFrame implements RunnerListener {
|
|||||||
@Override
|
@Override
|
||||||
public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
|
public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
|
||||||
try {
|
try {
|
||||||
platform.openURL(hyperlinkEvent.getURL().toExternalForm());
|
platform.openURL(sketch.getFolder(), hyperlinkEvent.getURL().toExternalForm());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Base.showWarning(e.getMessage(), e.getMessage(), e);
|
Base.showWarning(e.getMessage(), e.getMessage(), e);
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,12 @@ import processing.app.debug.TargetPlatform;
|
|||||||
import processing.app.legacy.PConstants;
|
import processing.app.legacy.PConstants;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.io.*;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static processing.app.I18n._;
|
import static processing.app.I18n._;
|
||||||
|
|
||||||
@ -38,13 +42,13 @@ import static processing.app.I18n._;
|
|||||||
/**
|
/**
|
||||||
* Used by Base for platform-specific tweaking, for instance finding the
|
* Used by Base for platform-specific tweaking, for instance finding the
|
||||||
* sketchbook location using the Windows registry, or OS X event handling.
|
* sketchbook location using the Windows registry, or OS X event handling.
|
||||||
*
|
* <p/>
|
||||||
* The methods in this implementation are used by default, and can be
|
* The methods in this implementation are used by default, and can be
|
||||||
* overridden by a subclass, if loaded by Base.main().
|
* overridden by a subclass, if loaded by Base.main().
|
||||||
*
|
* <p/>
|
||||||
* These methods throw vanilla-flavored Exceptions, so that error handling
|
* These methods throw vanilla-flavored Exceptions, so that error handling
|
||||||
* occurs inside Base.
|
* occurs inside Base.
|
||||||
*
|
* <p/>
|
||||||
* There is currently no mechanism for adding new platforms, as the setup is
|
* There is currently no mechanism for adding new platforms, as the setup is
|
||||||
* not automated. We could use getProperty("os.arch") perhaps, but that's
|
* not automated. We could use getProperty("os.arch") perhaps, but that's
|
||||||
* debatable (could be upper/lowercase, have spaces, etc.. basically we don't
|
* debatable (could be upper/lowercase, have spaces, etc.. basically we don't
|
||||||
@ -105,11 +109,20 @@ public class Platform {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void openURL(File folder, String url) throws Exception {
|
||||||
|
if (!url.startsWith("file://./")) {
|
||||||
|
openURL(url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
url = url.replaceAll("file://./", folder.getCanonicalFile().toURI().toASCIIString());
|
||||||
|
openURL(url);
|
||||||
|
}
|
||||||
|
|
||||||
public void openURL(String url) throws Exception {
|
public void openURL(String url) throws Exception {
|
||||||
String launcher = PreferencesData.get("launcher");
|
String launcher = PreferencesData.get("launcher");
|
||||||
if (launcher != null) {
|
if (launcher != null) {
|
||||||
Runtime.getRuntime().exec(new String[] { launcher, url });
|
Runtime.getRuntime().exec(new String[]{launcher, url});
|
||||||
} else {
|
} else {
|
||||||
showLauncherWarning();
|
showLauncherWarning();
|
||||||
}
|
}
|
||||||
@ -125,7 +138,7 @@ public class Platform {
|
|||||||
String launcher = PreferencesData.get("launcher");
|
String launcher = PreferencesData.get("launcher");
|
||||||
if (launcher != null) {
|
if (launcher != null) {
|
||||||
String folder = file.getAbsolutePath();
|
String folder = file.getAbsolutePath();
|
||||||
Runtime.getRuntime().exec(new String[] { launcher, folder });
|
Runtime.getRuntime().exec(new String[]{launcher, folder});
|
||||||
} else {
|
} else {
|
||||||
showLauncherWarning();
|
showLauncherWarning();
|
||||||
}
|
}
|
||||||
|
@ -34,11 +34,14 @@ import processing.app.legacy.PApplet;
|
|||||||
import processing.app.legacy.PConstants;
|
import processing.app.legacy.PConstants;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.*;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.lang.reflect.Method;
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.*;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,43 +101,11 @@ public class Platform extends processing.app.Platform {
|
|||||||
|
|
||||||
|
|
||||||
public void openURL(String url) throws Exception {
|
public void openURL(String url) throws Exception {
|
||||||
if (PApplet.javaVersion < 1.6f) {
|
Desktop desktop = Desktop.getDesktop();
|
||||||
if (url.startsWith("http")) {
|
if (url.startsWith("http") || url.startsWith("file:")) {
|
||||||
// formerly com.apple.eio.FileManager.openURL(url);
|
desktop.browse(new URI(url));
|
||||||
// but due to deprecation, instead loading dynamically
|
|
||||||
try {
|
|
||||||
Class<?> eieio = Class.forName("com.apple.eio.FileManager");
|
|
||||||
Method openMethod =
|
|
||||||
eieio.getMethod("openURL", new Class[] { String.class });
|
|
||||||
openMethod.invoke(null, new Object[] { url });
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Assume this is a file instead, and just open it.
|
desktop.open(new File(url));
|
||||||
// Extension of http://dev.processing.org/bugs/show_bug.cgi?id=1010
|
|
||||||
PApplet.open(url);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
Class<?> desktopClass = Class.forName("java.awt.Desktop");
|
|
||||||
Method getMethod = desktopClass.getMethod("getDesktop");
|
|
||||||
Object desktop = getMethod.invoke(null, new Object[] { });
|
|
||||||
|
|
||||||
// for Java 1.6, replacing with java.awt.Desktop.browse()
|
|
||||||
// and java.awt.Desktop.open()
|
|
||||||
if (url.startsWith("http")) { // browse to a location
|
|
||||||
Method browseMethod =
|
|
||||||
desktopClass.getMethod("browse", new Class[] { URI.class });
|
|
||||||
browseMethod.invoke(desktop, new Object[] { new URI(url) });
|
|
||||||
} else { // open a file
|
|
||||||
Method openMethod =
|
|
||||||
desktopClass.getMethod("open", new Class[] { File.class });
|
|
||||||
openMethod.invoke(desktop, new Object[] { new File(url) });
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ public class Platform extends processing.app.Platform {
|
|||||||
// "Access is denied" in both cygwin and the "dos" prompt.
|
// "Access is denied" in both cygwin and the "dos" prompt.
|
||||||
//Runtime.getRuntime().exec("cmd /c " + currentDir + "\\reference\\" +
|
//Runtime.getRuntime().exec("cmd /c " + currentDir + "\\reference\\" +
|
||||||
// referenceFile + ".html");
|
// referenceFile + ".html");
|
||||||
if (url.startsWith("http")) {
|
if (url.startsWith("http") || url.startsWith("file:")) {
|
||||||
// open dos prompt, give it 'start' command, which will
|
// open dos prompt, give it 'start' command, which will
|
||||||
// open the url properly. start by itself won't work since
|
// open the url properly. start by itself won't work since
|
||||||
// it appears to need cmd
|
// it appears to need cmd
|
||||||
|
Reference in New Issue
Block a user