/**
*
*/
package apu.scratch.converter;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
import apu.scratch.converter.IdeFrame.SaveCallback;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
/**
* @author MegaApuTurkUltra
*
*/
public class IdeMain {
static { // this static initializer will hopefully fix the OSX display bug
NativeInterface.open();
}
static JWebBrowser sb2;
public static void launch() {
System.out.println("Opening IDE [swt enabled]");
try {
ScratchConverter.init();
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"Failed to load Scratch built-ins file!", "Error",
JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
ToolTipManager.sharedInstance().setReshowDelay(0);
ToolTipManager.sharedInstance().setInitialDelay(0);
ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
try {
new File("scratchblocks2/block_images/").mkdirs();
String[] files = new String[] { "generator.js", "index.html",
"scratchblocks2-only.js", "scratchblocks2.css",
"scratchblocks2.js", "block_images/arrows.png",
"block_images/flag.png" };
for (String file : files) {
System.out.println("Copying out: "+file);
InputStream in = IdeMain.class
.getResourceAsStream("/scratchblocks2/" + file);
Files.copy(in,
Paths.get(new File("scratchblocks2/" + file).toURI()),
StandardCopyOption.REPLACE_EXISTING);
in.close();
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
IdeFrame.launch(true);
try {
sb2 = new JWebBrowser();
sb2.setBarsVisible(false);
sb2.setButtonBarVisible(false);
sb2.setJavascriptEnabled(true);
sb2.setMenuBarVisible(false);
sb2.setStatusBarVisible(false);
sb2.navigate(new File("scratchblocks2/index.html").toURI().toString());
IdeFrame.instance.sbRender.setLayout(new BorderLayout());
IdeFrame.instance.sbRender.add(sb2, BorderLayout.CENTER);
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(IdeFrame.instance,
"Unable to load Scratchblocks2", "Warning",
JOptionPane.WARNING_MESSAGE);
IdeFrame.instance.sbRender.add(new JLabel(
"Unable to load Scratchblocks2"));
}
IdeFrame.instance.callback = new SaveCallback() {
@Override
public void codeSaved(final String code, boolean save) {
String js = "window.showCode(\""
+ code.replace("\"", "\\\"") + "\");";
try {
sb2.executeJavascript(js);
} catch (Exception e) {
}
}
};
IdeFrame.instance.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
sb2.disposeNativePeer(false);
}
});
}
});
}
});
NativeInterface.runEventPump();
}
public static void main(String[] args) {
launch();
}
}