Kai did magic
This commit is contained in:
parent
a83600281d
commit
78a9027ad7
@ -4,6 +4,5 @@
|
|||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
<classpathentry kind="lib" path="libs/luaj-jme-3.0.1.jar" sourcepath="libs/luaj-3.0.1/src"/>
|
<classpathentry kind="lib" path="libs/luaj-jme-3.0.1.jar" sourcepath="libs/luaj-3.0.1/src"/>
|
||||||
<classpathentry kind="lib" path="libs/luaj-jse-3.0.1.jar"/>
|
<classpathentry kind="lib" path="libs/luaj-jse-3.0.1.jar"/>
|
||||||
<classpathentry kind="lib" path="libs/luaj-sources-3.0.1.jar"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
@ -9,5 +9,5 @@ package de.c3ma.ollo;
|
|||||||
*/
|
*/
|
||||||
public interface LuaSimulation {
|
public interface LuaSimulation {
|
||||||
|
|
||||||
public void reboottriggered();
|
public void rebootTriggered();
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
|
||||||
import javax.management.RuntimeErrorException;
|
import javax.management.RuntimeErrorException;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
import org.luaj.vm2.Globals;
|
import org.luaj.vm2.Globals;
|
||||||
import org.luaj.vm2.LuaValue;
|
import org.luaj.vm2.LuaValue;
|
||||||
@ -30,127 +31,130 @@ import de.c3ma.ollo.mockup.ESP8266Ws2812;
|
|||||||
*/
|
*/
|
||||||
public class WS2812Simulation implements LuaSimulation {
|
public class WS2812Simulation implements LuaSimulation {
|
||||||
|
|
||||||
private Globals globals = JsePlatform.standardGlobals();
|
private Globals globals = JsePlatform.standardGlobals();
|
||||||
private ESP8266Tmr espTmr = new ESP8266Tmr();
|
private ESP8266Tmr espTmr = new ESP8266Tmr();
|
||||||
private ESP8266File espFile = new ESP8266File();
|
private ESP8266File espFile = new ESP8266File();
|
||||||
private ESP8266Node espNode = new ESP8266Node(this);
|
private ESP8266Node espNode = new ESP8266Node(this);
|
||||||
private DoFileFunction doFile = new DoFileFunction(globals);
|
private DoFileFunction doFile = new DoFileFunction(globals);
|
||||||
private ESP8266Ws2812 ws2812 = new ESP8266Ws2812();
|
private ESP8266Ws2812 ws2812 = new ESP8266Ws2812();
|
||||||
private String scriptName;
|
private String scriptName;
|
||||||
|
|
||||||
public WS2812Simulation(File sourceFolder) {
|
|
||||||
globals.load(new ESP8266Uart());
|
|
||||||
globals.load(ws2812);
|
|
||||||
globals.load(espTmr);
|
|
||||||
globals.load(espFile);
|
|
||||||
globals.load(espNode);
|
|
||||||
globals.load(new ESP8266Wifi());
|
|
||||||
globals.load(new ESP8266Net());
|
|
||||||
globals.load(new ESP8266Time());
|
|
||||||
globals.set("dofile", doFile);
|
|
||||||
|
|
||||||
try {
|
|
||||||
File tempFile = File.createTempFile("NodemcuSimuFile", "");
|
|
||||||
File tempDir = new File(tempFile.getParent() + File.separator + "Nodemcu" + System.currentTimeMillis());
|
|
||||||
tempDir.mkdir();
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("[Nodemcu] Directory is " + tempDir.getAbsolutePath());
|
|
||||||
|
|
||||||
// Copy all files into the temporary folder
|
|
||||||
for (File f : sourceFolder.listFiles()) {
|
|
||||||
Files.copy(f.toPath(), new File(tempDir.getAbsolutePath() + File.separator + f.getName()).toPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
espFile.setWorkingDirectory(tempDir);
|
public WS2812Simulation(File sourceFolder) {
|
||||||
espNode.setWorkingDirectory(tempDir);
|
globals.load(new ESP8266Uart());
|
||||||
doFile.setWorkingDirectory(tempDir);
|
globals.load(ws2812);
|
||||||
} catch (IOException e) {
|
globals.load(espTmr);
|
||||||
System.err.println("[Nodemcu] " + e.getMessage());
|
globals.load(espFile);
|
||||||
espFile = null;
|
globals.load(espNode);
|
||||||
espNode = null;
|
globals.load(new ESP8266Wifi());
|
||||||
}
|
globals.load(new ESP8266Net());
|
||||||
}
|
globals.load(new ESP8266Time());
|
||||||
|
globals.set("dofile", doFile);
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
if (args.length == 0) {
|
|
||||||
printUsage();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length >= 1) {
|
|
||||||
File f = new File(args[0]);
|
|
||||||
if (f.exists()) {
|
|
||||||
WS2812Simulation simu = new WS2812Simulation(f.getParentFile());
|
|
||||||
System.out.println("File : " + f.getAbsolutePath());
|
|
||||||
|
|
||||||
if (args.length >= 2) {
|
|
||||||
simu.setWS2812Layout(new File(args[1]));
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
if (args.length >= 3) {
|
|
||||||
File additionalFile = new File(args[2]);
|
|
||||||
if (additionalFile.exists() && (simu.doFile != null)) {
|
|
||||||
|
|
||||||
Files.copy(additionalFile.toPath(),
|
|
||||||
new File(simu.doFile.getWorkingDirectory() + File.separator + additionalFile.getName()).toPath());
|
|
||||||
System.out.println("Integrate " + additionalFile.getName() + " into simulation");
|
|
||||||
} else {
|
|
||||||
System.err.println("Script " + args[2] + " cannot be found");
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
simu.callScript(f.getName());
|
|
||||||
} catch (IOException e) {
|
|
||||||
System.err.println("[Nodemcu] " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
printUsage();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setWS2812Layout(File file) {
|
try {
|
||||||
if (file.exists()) {
|
File tempFile = File.createTempFile("NodemcuSimuFile", "");
|
||||||
ws2812.setLayout(file);
|
File tempDir = new File(tempFile.getParent() + File.separator + "Nodemcu" + System.currentTimeMillis());
|
||||||
} else {
|
tempDir.mkdir();
|
||||||
throw new RuntimeException("WS2812 Layout: " + file.getAbsolutePath() + " does not exists");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void printUsage() {
|
System.out.println("[Nodemcu] Directory is " + tempDir.getAbsolutePath());
|
||||||
System.out.println("Usage:");
|
|
||||||
System.out.println("one argument required: file to execute.");
|
|
||||||
System.out.println(".e.g: init.lua");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
// Copy all files into the temporary folder
|
||||||
public void reboottriggered() {
|
for (File f : sourceFolder.listFiles()) {
|
||||||
System.out.println("=================== Reboot in Simulation -> call it again =================");
|
Files.copy(f.toPath(), new File(tempDir.getAbsolutePath() + File.separator + f.getName()).toPath());
|
||||||
this.espTmr.stopAllTimer();
|
}
|
||||||
try {
|
|
||||||
Thread.sleep(200);
|
|
||||||
if (this.scriptName != null) {
|
|
||||||
System.out.println("Reexecuting...");
|
|
||||||
callScript(this.scriptName);
|
|
||||||
}
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void callScript(String filename) {
|
espFile.setWorkingDirectory(tempDir);
|
||||||
this.scriptName=filename;
|
espNode.setWorkingDirectory(tempDir);
|
||||||
|
doFile.setWorkingDirectory(tempDir);
|
||||||
if ((espFile != null) && (espFile.getFileInWorkingDir(filename) != null)) {
|
} catch (IOException e) {
|
||||||
LuaValue chunk = globals.loadfile(espFile.getFileInWorkingDir(filename).getAbsolutePath());
|
System.err.println("[Nodemcu] " + e.getMessage());
|
||||||
chunk.call();
|
espFile = null;
|
||||||
} else {
|
espNode = null;
|
||||||
throw new RuntimeException("Copy into temporary folder failed; script not available");
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (args.length == 0) {
|
||||||
|
printUsage();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length >= 1) {
|
||||||
|
File f = new File(args[0]);
|
||||||
|
if (f.exists()) {
|
||||||
|
WS2812Simulation simu = new WS2812Simulation(f.getParentFile());
|
||||||
|
System.out.println("File : " + f.getAbsolutePath());
|
||||||
|
|
||||||
|
if (args.length >= 2) {
|
||||||
|
simu.setWS2812Layout(new File(args[1]));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (args.length >= 3) {
|
||||||
|
File additionalFile = new File(args[2]);
|
||||||
|
if (additionalFile.exists() && (simu.doFile != null)) {
|
||||||
|
|
||||||
|
Files.copy(additionalFile.toPath(), new File(simu.doFile.getWorkingDirectory()
|
||||||
|
+ File.separator + additionalFile.getName()).toPath());
|
||||||
|
System.out.println("Integrate " + additionalFile.getName() + " into simulation");
|
||||||
|
} else {
|
||||||
|
System.err.println("Script " + args[2] + " cannot be found");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simu.callScript(f.getName());
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("[Nodemcu] " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printUsage();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setWS2812Layout(File file) {
|
||||||
|
if (file.exists()) {
|
||||||
|
ws2812.setLayout(file);
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("WS2812 Layout: " + file.getAbsolutePath() + " does not exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printUsage() {
|
||||||
|
System.out.println("Usage:");
|
||||||
|
System.out.println("one argument required: file to execute.");
|
||||||
|
System.out.println(".e.g: init.lua");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rebootTriggered() {
|
||||||
|
System.out.println("=================== Reboot in Simulation -> call it again =================");
|
||||||
|
this.espTmr.stopAllTimer();
|
||||||
|
try {
|
||||||
|
Thread.sleep(200);
|
||||||
|
if (this.scriptName != null) {
|
||||||
|
System.out.println("Reexecuting...");
|
||||||
|
callScript(this.scriptName);
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void callScript(String filename) {
|
||||||
|
this.scriptName = filename;
|
||||||
|
|
||||||
|
if ((espFile != null) && (espFile.getFileInWorkingDir(filename) != null)) {
|
||||||
|
LuaValue chunk = globals.loadfile(espFile.getFileInWorkingDir(filename).getAbsolutePath());
|
||||||
|
chunk.call();
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Copy into temporary folder failed; script not available");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ public class ESP8266Node extends TwoArgFunction {
|
|||||||
@Override
|
@Override
|
||||||
public LuaValue call() {
|
public LuaValue call() {
|
||||||
System.out.println("[Node] Restart");
|
System.out.println("[Node] Restart");
|
||||||
nodemcuSimu.reboottriggered();
|
nodemcuSimu.rebootTriggered();
|
||||||
return LuaValue.valueOf(false);
|
return LuaValue.valueOf(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,9 @@ package de.c3ma.ollo.mockup;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
import org.luaj.vm2.LuaString;
|
||||||
import org.luaj.vm2.LuaTable;
|
import org.luaj.vm2.LuaTable;
|
||||||
import org.luaj.vm2.LuaValue;
|
import org.luaj.vm2.LuaValue;
|
||||||
import org.luaj.vm2.lib.OneArgFunction;
|
import org.luaj.vm2.lib.OneArgFunction;
|
||||||
@ -15,62 +18,70 @@ import de.c3ma.ollo.mockup.ui.WS2812Layout;
|
|||||||
* creator: ollo<br />
|
* creator: ollo<br />
|
||||||
* project: WS2812Emulation<br />
|
* project: WS2812Emulation<br />
|
||||||
* $Id: $<br />
|
* $Id: $<br />
|
||||||
|
*
|
||||||
* @author ollo<br />
|
* @author ollo<br />
|
||||||
*/
|
*/
|
||||||
public class ESP8266Ws2812 extends TwoArgFunction {
|
public class ESP8266Ws2812 extends TwoArgFunction {
|
||||||
|
|
||||||
private static WS2812Layout layout = null;
|
private static WS2812Layout layout = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LuaValue call(LuaValue modname, LuaValue env) {
|
public LuaValue call(LuaValue modname, LuaValue env) {
|
||||||
env.checkglobals();
|
env.checkglobals();
|
||||||
final LuaTable ws2812 = new LuaTable();
|
final LuaTable ws2812 = new LuaTable();
|
||||||
ws2812.set("init", new init());
|
ws2812.set("init", new init());
|
||||||
ws2812.set("write", new write());
|
ws2812.set("write", new write());
|
||||||
env.set("ws2812", ws2812);
|
env.set("ws2812", ws2812);
|
||||||
env.get("package").get("loaded").set("ws2812", ws2812);
|
env.get("package").get("loaded").set("ws2812", ws2812);
|
||||||
return ws2812;
|
return ws2812;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class init extends ZeroArgFunction {
|
private class init extends ZeroArgFunction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LuaValue call() {
|
public LuaValue call() {
|
||||||
System.out.println("[WS2812] init");
|
System.out.println("[WS2812] init");
|
||||||
return LuaValue.valueOf(true);
|
return LuaValue.valueOf(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private class write extends OneArgFunction {
|
|
||||||
|
|
||||||
@Override
|
}
|
||||||
public LuaValue call(LuaValue arg) {
|
|
||||||
if (arg.isstring()) {
|
|
||||||
int length = arg.checkstring().rawlen();
|
|
||||||
if ((length % 3) == 0) {
|
|
||||||
byte[] array = arg.toString().getBytes();
|
|
||||||
for (int i = 0; i < length; i+=3) {
|
|
||||||
if (ESP8266Ws2812.layout != null) {
|
|
||||||
ESP8266Ws2812.layout.updateLED(i/3, array[i+0], array[i+1], array[i+2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ESP8266Ws2812.layout == null) {
|
private class write extends OneArgFunction {
|
||||||
System.out.println("[WS2812] write length:" + length);
|
|
||||||
} else {
|
|
||||||
/*ESP8266Ws2812.layout.update(ESP8266Ws2812.layout.getGraphics());*/
|
|
||||||
ESP8266Ws2812.layout.repaint();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return LuaValue.valueOf(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLayout(File file) {
|
@Override
|
||||||
if (ESP8266Ws2812.layout == null) {
|
public LuaValue call(LuaValue arg) {
|
||||||
ESP8266Ws2812.layout = WS2812Layout.parse(file);
|
if (arg.isstring()) {
|
||||||
}
|
LuaString jstring = arg.checkstring();
|
||||||
}
|
int length = jstring.rawlen();
|
||||||
|
if ((length % 3) == 0) {
|
||||||
|
byte[] array = jstring.m_bytes;
|
||||||
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (int i = 0; i < length; i += 3) {
|
||||||
|
if (ESP8266Ws2812.layout != null) {
|
||||||
|
int r = array[i + 0]+(Byte.MIN_VALUE*-1);
|
||||||
|
int g = array[i + 1]+(Byte.MIN_VALUE*-1);
|
||||||
|
int b = array[i + 2]+(Byte.MIN_VALUE*-1);
|
||||||
|
ESP8266Ws2812.layout.updateLED(i / 3, r, g, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ESP8266Ws2812.layout == null) {
|
||||||
|
System.out.println("[WS2812] write length:" + length);
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return LuaValue.valueOf(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLayout(File file) {
|
||||||
|
if (ESP8266Ws2812.layout == null) {
|
||||||
|
ESP8266Ws2812.layout = WS2812Layout.parse(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import java.io.BufferedReader;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
@ -17,180 +18,177 @@ import javax.swing.JButton;
|
|||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* created at 02.01.2018 - 12:57:02<br />
|
* created at 02.01.2018 - 12:57:02<br />
|
||||||
* creator: ollo<br />
|
* creator: ollo<br />
|
||||||
* project: WS2812Emulation<br />
|
* project: WS2812Emulation<br />
|
||||||
* $Id: $<br />
|
* $Id: $<br />
|
||||||
|
*
|
||||||
* @author ollo<br />
|
* @author ollo<br />
|
||||||
*/
|
*/
|
||||||
public class WS2812Layout extends JFrame {
|
public class WS2812Layout extends JFrame {
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = -6815557232118826140L;
|
|
||||||
|
|
||||||
private ArrayList<String> mLines = new ArrayList<String>();
|
|
||||||
private int mColumn = 0;
|
|
||||||
private int mRow = 0;
|
|
||||||
private Element[][] mElements;
|
|
||||||
|
|
||||||
public static WS2812Layout parse(File file) {
|
/**
|
||||||
WS2812Layout layout = null;
|
*
|
||||||
try {
|
*/
|
||||||
BufferedReader br = new BufferedReader(new FileReader(file));
|
private static final long serialVersionUID = -6815557232118826140L;
|
||||||
try {
|
|
||||||
String line = br.readLine();
|
|
||||||
if (line != null) {
|
|
||||||
layout = new WS2812Layout();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (line != null) {
|
|
||||||
if (!line.startsWith("#")) {
|
|
||||||
layout.mLines.add(line);
|
|
||||||
layout.mRow++;
|
|
||||||
layout.mColumn = Math.max(layout.mColumn, line.length());
|
|
||||||
}
|
|
||||||
/* get the next line */
|
|
||||||
line = br.readLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* parse each line */
|
|
||||||
layout.parse();
|
|
||||||
layout.createAndDisplayGUI();
|
|
||||||
} finally {
|
|
||||||
if (br != null) {
|
|
||||||
br.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createAndDisplayGUI() {
|
private ArrayList<String> mLines = new ArrayList<String>();
|
||||||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
private int mColumn = 0;
|
||||||
|
private int mRow = 0;
|
||||||
|
private Element[][] mElements;
|
||||||
|
|
||||||
JPanel contentPane = new JPanel();
|
public static WS2812Layout parse(File file) {
|
||||||
contentPane.setLayout(new BorderLayout());
|
WS2812Layout layout = null;
|
||||||
contentPane.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));
|
try {
|
||||||
|
BufferedReader br = new BufferedReader(new FileReader(file));
|
||||||
|
try {
|
||||||
|
String line = br.readLine();
|
||||||
|
if (line != null) {
|
||||||
|
layout = new WS2812Layout();
|
||||||
|
}
|
||||||
|
|
||||||
JPanel ledPanel = new JPanel();
|
while (line != null) {
|
||||||
ledPanel.setLayout(new GridLayout(this.mRow, this.mColumn, 10, 10));
|
if (!line.startsWith("#")) {
|
||||||
for (int i = 0; i < this.mRow; i++)
|
layout.mLines.add(line);
|
||||||
{
|
layout.mRow++;
|
||||||
for (int j = 0; j < this.mColumn; j++)
|
layout.mColumn = Math.max(layout.mColumn, line.length());
|
||||||
{
|
}
|
||||||
if (this.mElements[i][j] != null) {
|
/* get the next line */
|
||||||
ledPanel.add(this.mElements[i][j]);
|
line = br.readLine();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
contentPane.add(ledPanel, BorderLayout.CENTER);
|
|
||||||
JButton button = new JButton("Do something");
|
|
||||||
button.setActionCommand("Do something");
|
|
||||||
button.addActionListener(new ActionListener()
|
|
||||||
{
|
|
||||||
public void actionPerformed(ActionEvent ae)
|
|
||||||
{
|
|
||||||
JButton but = (JButton) ae.getSource();
|
|
||||||
//FIXME some clever logic
|
|
||||||
}
|
|
||||||
});
|
|
||||||
contentPane.add(button, BorderLayout.SOUTH);
|
|
||||||
|
|
||||||
|
|
||||||
setContentPane(contentPane);
|
|
||||||
pack();
|
|
||||||
setLocationByPlatform(true);
|
|
||||||
setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void parse() {
|
/* parse each line */
|
||||||
this.mElements = new Element[this.mRow][this.mColumn];
|
layout.parse();
|
||||||
int row=0;
|
layout.createAndDisplayGUI();
|
||||||
for (String line : this.mLines) {
|
} finally {
|
||||||
for (int i = 0; i < line.length(); i++) {
|
if (br != null) {
|
||||||
char c = line.charAt(i);
|
br.close();
|
||||||
if ((('A' <= c) && (c <= 'Z')) ||
|
}
|
||||||
(('0' <= c) && (c <= '9')) ||
|
}
|
||||||
(c == 'Ä') || (c == 'Ö') || (c == 'Ü')) {
|
} catch (IOException ioe) {
|
||||||
this.mElements[row][i] = new Element(c);
|
|
||||||
} else {
|
|
||||||
this.mElements[row][i] = new Element();
|
|
||||||
}
|
|
||||||
this.mElements[row][i].setColor(0, 0, 0);
|
|
||||||
}
|
|
||||||
row++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Element extends JLabel {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = -3933903441113933637L;
|
|
||||||
|
|
||||||
private boolean noText=false;
|
|
||||||
|
|
||||||
/**
|
}
|
||||||
* Draw a simple rect
|
return layout;
|
||||||
*/
|
}
|
||||||
public Element() {
|
|
||||||
super();
|
private void createAndDisplayGUI() {
|
||||||
this.noText = true;
|
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
this.setBackground(Color.BLACK);
|
|
||||||
}
|
JPanel contentPane = new JPanel();
|
||||||
|
contentPane.setLayout(new BorderLayout());
|
||||||
/**
|
contentPane.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));
|
||||||
* Draw a character
|
|
||||||
* @param character to show
|
JPanel ledPanel = new JPanel();
|
||||||
*/
|
ledPanel.setLayout(new GridLayout(this.mRow, this.mColumn, 10, 10));
|
||||||
public Element(char character) {
|
for (int i = 0; i < this.mRow; i++) {
|
||||||
super(""+character);
|
for (int j = 0; j < this.mColumn; j++) {
|
||||||
setFont(new Font("Dialog", Font.BOLD, 24));
|
if (this.mElements[i][j] != null) {
|
||||||
setHorizontalAlignment(CENTER);
|
ledPanel.add(this.mElements[i][j]);
|
||||||
//FIXME: Background color is not updated:
|
}
|
||||||
this.setBackground(Color.BLACK);
|
}
|
||||||
}
|
}
|
||||||
|
contentPane.add(ledPanel, BorderLayout.CENTER);
|
||||||
public void setColor(int red, int green, int blue) {
|
JButton button = new JButton("Do something");
|
||||||
this.setForeground(new Color(red, green, blue));
|
button.setActionCommand("Do something");
|
||||||
//FIXME changing the color is not working
|
button.addActionListener(new ActionListener() {
|
||||||
this.repaint();
|
public void actionPerformed(ActionEvent ae) {
|
||||||
System.out.println( this.toString());
|
JButton but = (JButton) ae.getSource();
|
||||||
}
|
// FIXME some clever logic
|
||||||
|
}
|
||||||
@Override
|
});
|
||||||
public String toString() {
|
contentPane.add(button, BorderLayout.SOUTH);
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
if (noText) {
|
setContentPane(contentPane);
|
||||||
sb.append(" ");
|
pack();
|
||||||
} else {
|
setLocationByPlatform(true);
|
||||||
sb.append("" + this.getText());
|
setVisible(true);
|
||||||
}
|
}
|
||||||
sb.append("|" + Integer.toHexString(this.getForeground().getRed()) +
|
|
||||||
" " + Integer.toHexString(this.getForeground().getGreen()) +
|
private void parse() {
|
||||||
" " + Integer.toHexString(this.getForeground().getBlue()));
|
this.mElements = new Element[this.mRow][this.mColumn];
|
||||||
|
int row = 0;
|
||||||
return sb.toString();
|
for (String line : this.mLines) {
|
||||||
}
|
for (int i = 0; i < line.length(); i++) {
|
||||||
}
|
char c = line.charAt(i);
|
||||||
|
if ((('A' <= c) && (c <= 'Z')) || (('0' <= c) && (c <= '9')) || (c == 'Ä') || (c == 'Ö')
|
||||||
|
|| (c == 'Ü')) {
|
||||||
|
this.mElements[row][i] = new Element(c);
|
||||||
|
} else {
|
||||||
|
this.mElements[row][i] = new Element();
|
||||||
|
}
|
||||||
|
this.mElements[row][i].setColor(0, 0, 0);
|
||||||
|
}
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Element extends JLabel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -3933903441113933637L;
|
||||||
|
|
||||||
|
private boolean noText = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draw a simple rect
|
||||||
|
*/
|
||||||
|
public Element() {
|
||||||
|
super();
|
||||||
|
this.noText = true;
|
||||||
|
this.setBackground(Color.BLACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draw a character
|
||||||
|
*
|
||||||
|
* @param character
|
||||||
|
* to show
|
||||||
|
*/
|
||||||
|
public Element(char character) {
|
||||||
|
super("" + character);
|
||||||
|
setFont(new Font("Dialog", Font.BOLD, 24));
|
||||||
|
setHorizontalAlignment(CENTER);
|
||||||
|
// FIXME: Background color is not updated:
|
||||||
|
this.setBackground(Color.BLACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColor(int red, int green, int blue) {
|
||||||
|
this.setForeground(new Color(red, green, blue));
|
||||||
|
// FIXME changing the color is not working
|
||||||
|
this.repaint();
|
||||||
|
System.out.println(this.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (noText) {
|
||||||
|
sb.append(" ");
|
||||||
|
} else {
|
||||||
|
sb.append("" + this.getText());
|
||||||
|
}
|
||||||
|
sb.append("|" + Integer.toHexString(this.getForeground().getRed()) + " "
|
||||||
|
+ Integer.toHexString(this.getForeground().getGreen()) + " "
|
||||||
|
+ Integer.toHexString(this.getForeground().getBlue()));
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateLED(int index, int r, int g, int b) {
|
||||||
|
if (mElements != null) {
|
||||||
|
int i = (index / mColumn);
|
||||||
|
int j = (index % mColumn);
|
||||||
|
if ((i < mElements.length) && (j < mElements[i].length) && (mElements[i][j] != null)) {
|
||||||
|
Element curlbl = mElements[i][j];
|
||||||
|
curlbl.setColor(r, g, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void updateLED(int index, byte red, byte green, byte blue) {
|
|
||||||
if (this.mElements != null) {
|
|
||||||
int i = (index / this.mColumn);
|
|
||||||
int j = (index % this.mColumn);
|
|
||||||
if ((i < this.mElements.length) &&
|
|
||||||
(j < this.mElements[i].length) &&
|
|
||||||
(this.mElements[i][j] != null)) {
|
|
||||||
this.mElements[i][j].setColor(red, green, blue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user