Compare commits
7 Commits
master
...
Nano/Serve
| Author | SHA1 | Date |
|---|---|---|
|
|
ba420d91aa | 2 months ago |
|
|
7fa6a4c531 | 2 months ago |
|
|
03ce5a99e1 | 2 months ago |
|
|
20f00b0abd | 10 months ago |
|
|
0715ccb3e9 | 10 months ago |
|
|
2f02138e39 | 11 months ago |
|
|
878a44b78d | 11 months ago |
@ -0,0 +1,6 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding//src/test/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
||||
@ -0,0 +1,5 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.ui.exception.name=e
|
||||
org.eclipse.jdt.ui.gettersetter.use.is=false
|
||||
org.eclipse.jdt.ui.keywordthis=false
|
||||
org.eclipse.jdt.ui.overrideannotation=true
|
||||
@ -0,0 +1,32 @@
|
||||
package de.examples;
|
||||
|
||||
import de.tvo.database.tables.NLCONNECT.Nlconnect;
|
||||
import de.tvo.database.tables.NLCONNECT.NlconnectWorker;
|
||||
import de.tvo.nanoleaf.enums.NanoTypeEnum;
|
||||
|
||||
public class NanoDBTest {
|
||||
|
||||
public NanoDBTest() {
|
||||
Nlconnect nlconnect = new Nlconnect();
|
||||
|
||||
nlconnect.setNchostname("Canvas-72FA.fritz.box");
|
||||
nlconnect.setNcipadress("192.168.178.141");
|
||||
nlconnect.setNcport(16021);
|
||||
nlconnect.setNccountpanel(15);
|
||||
nlconnect.setNctoken("LAG28BQWrXK2p79NbHMQsvcYYCN1TcD4");
|
||||
nlconnect.setNctype(NanoTypeEnum.CANVAS);
|
||||
|
||||
try {
|
||||
NlconnectWorker worker = new NlconnectWorker();
|
||||
worker.insertNlconnect(nlconnect);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new NanoDBTest();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
package de.examples;
|
||||
|
||||
import de.tvo.nanoleaf.oclasses.MatrixInfo;
|
||||
import de.tvo.tools.StringUtil;
|
||||
|
||||
public class StringTesterClass {
|
||||
|
||||
public StringTesterClass() {
|
||||
String ref = "#{d.PanelConfigBean.paneRepeatList[1].panelInfoList[2].panelID}";
|
||||
|
||||
|
||||
MatrixInfo info = createMatrixInfo(ref);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new StringTesterClass();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private MatrixInfo createMatrixInfo(String ref) {
|
||||
MatrixInfo matrixInfo = null;
|
||||
// #{d.PanelConfigBean.paneRepeatList[1].panelInfoList[2].panelID}
|
||||
int x = -1;
|
||||
int y = -1;
|
||||
|
||||
int lastPointStart = 0;
|
||||
int lastPointEnde = 0;
|
||||
String lastString = "";
|
||||
int counterStart = 0;
|
||||
int counterEnde = 0;
|
||||
|
||||
counterStart = StringUtil.getCountLetter(ref, '[');
|
||||
counterEnde = StringUtil.getCountLetter(ref, ']');
|
||||
|
||||
if (counterStart == counterEnde) {
|
||||
for (int p = 0; p < counterStart; p++) {
|
||||
lastPointStart = ref.indexOf("[");
|
||||
lastPointEnde = ref.indexOf("]");
|
||||
|
||||
if (x == -1) {
|
||||
lastString = ref.substring(lastPointStart +1, lastPointEnde);
|
||||
|
||||
x = Integer.parseInt(lastString);
|
||||
//System.out.println("X: " + x);
|
||||
} else {
|
||||
lastString = ref.substring(lastPointStart +1, lastPointEnde);
|
||||
y = Integer.parseInt(lastString);
|
||||
//System.out.println("Y: " + y);
|
||||
}
|
||||
ref = ref.substring(lastPointEnde +1);
|
||||
//System.out.println(ref);
|
||||
}
|
||||
matrixInfo = new MatrixInfo(x, y);
|
||||
}
|
||||
return matrixInfo;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,266 @@
|
||||
package de.examples.components;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import org.eclnt.editor.annotations.CCGenClass;
|
||||
import org.eclnt.jsfserver.defaultscreens.Statusbar;
|
||||
import org.eclnt.jsfserver.elements.events.BaseActionEventDrop;
|
||||
import org.eclnt.jsfserver.elements.events.BaseActionEventInvoke;
|
||||
import org.eclnt.jsfserver.pagebean.PageBean;
|
||||
|
||||
@CCGenClass (expressionBase="#{d.DragDropPaneBean}")
|
||||
|
||||
public class DragDropPaneBean
|
||||
extends PageBean
|
||||
implements Serializable
|
||||
{
|
||||
public void onDropSendPaneTarget(org.eclnt.jsfserver.base.faces.event.ActionEvent event) {
|
||||
if (event instanceof BaseActionEventDrop)
|
||||
{
|
||||
|
||||
Statusbar.outputSuccess("Drop-Event was processed: " + event.getClass().getName());
|
||||
BaseActionEventDrop baed = (BaseActionEventDrop)event;
|
||||
String dragInfo = baed.getDragInfo();
|
||||
|
||||
System.out.println(baed.getSourceReference());
|
||||
|
||||
if (dragInfo.startsWith("NANOLEAF:"))
|
||||
{
|
||||
String nanoID = dragInfo.substring("NANOLEAF:".length());
|
||||
System.out.println("NanoLeaf ID: " + nanoID);
|
||||
int paneID = 0;
|
||||
try {
|
||||
//
|
||||
paneID = getPaneIDSourceMap().get(nanoID);
|
||||
//
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
System.out.println("Pane ID " + paneID);
|
||||
//
|
||||
PaneInfoTest paneInfoTest = getPanelSourceList().get(paneID);
|
||||
|
||||
int posX = 1;
|
||||
int posY = 2;
|
||||
|
||||
getPaneRepeatList().get(posX).getPaneInfoList().set(posY, paneInfoTest);
|
||||
|
||||
System.out.println("Ziel: ");
|
||||
System.out.println("Drop: " + dragInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HashMap<String, Integer> m_paneIDSourceMap = null;
|
||||
|
||||
public HashMap<String, Integer> getPaneIDSourceMap() {
|
||||
if (m_paneIDSourceMap == null) {
|
||||
m_paneIDSourceMap = new HashMap<String, Integer>();
|
||||
}
|
||||
return m_paneIDSourceMap;
|
||||
}
|
||||
|
||||
int m_yMatrix = 7;
|
||||
public int getYMatrix() { return m_yMatrix; }
|
||||
public void setYMatrix(int value) { this.m_yMatrix = value; }
|
||||
|
||||
int m_xMatrix = 7;
|
||||
public int getXMatrix() { return m_xMatrix; }
|
||||
public void setXMatrix(int value) { this.m_xMatrix = value; }
|
||||
|
||||
int m_countPanels = 15;
|
||||
public int getCountPanels() { return m_countPanels; }
|
||||
public void setCountPanels(int value) { this.m_countPanels = value; }
|
||||
|
||||
|
||||
List<PaneRepeat> m_paneRepeatList = new ArrayList<PaneRepeat>();
|
||||
public List<PaneRepeat> getPaneRepeatList() { return m_paneRepeatList; }
|
||||
|
||||
List<PaneInfoTest> m_panelSourceList = new ArrayList<PaneInfoTest>();
|
||||
public List<PaneInfoTest> getPanelSourceList() { return m_panelSourceList; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// inner classes
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
public class PaneRepeat {
|
||||
private int i_paneRepeatID = 0;
|
||||
private List<PaneInfoTest> i_paneInfoList = null;
|
||||
public int getPaneRepeatID() {
|
||||
return i_paneRepeatID;
|
||||
}
|
||||
public void setPaneRepeatID(int paneRepeatID) {
|
||||
i_paneRepeatID = paneRepeatID;
|
||||
}
|
||||
public List<PaneInfoTest> getPaneInfoList() {
|
||||
return i_paneInfoList;
|
||||
}
|
||||
public void setPaneInfoList(List<PaneInfoTest> paneInfoList) {
|
||||
i_paneInfoList = paneInfoList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class PaneInfoTest {
|
||||
|
||||
private int i_paneID = 0;
|
||||
private String i_color = null;
|
||||
private String i_border = null;
|
||||
private String i_reference = null;
|
||||
Integer i_nanoleafID;
|
||||
String i_drangsendSource;
|
||||
|
||||
|
||||
public int getPaneID() { return i_paneID; }
|
||||
public void setPaneID(int paneID) { i_paneID = paneID; }
|
||||
|
||||
public String getColor() { return i_color; }
|
||||
public void setColor(String color) {
|
||||
i_color = color;
|
||||
createBorder();
|
||||
}
|
||||
|
||||
public String getBorder() { return i_border; }
|
||||
public void setBorder(String border) { i_border = border; }
|
||||
|
||||
public String getReference() { return i_reference; }
|
||||
public void setReference(String reference) { i_reference = reference; }
|
||||
|
||||
public Integer getNanoleafID() { return i_nanoleafID; }
|
||||
public void setNanoleafID(Integer value) { this.i_nanoleafID = value; }
|
||||
|
||||
public String getDrangsendSource() { return i_drangsendSource; }
|
||||
public void setDrangsendSource(String value) { this.i_drangsendSource = value; }
|
||||
|
||||
|
||||
public void createBorder() {
|
||||
String border = "left:1;right:1;top:1;bottom:1;color:" + getColor();
|
||||
|
||||
setBorder(border);
|
||||
}
|
||||
|
||||
public PaneInfoTest(int paneID) {
|
||||
this.i_paneID = paneID;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Listener to the user of the page bean. */
|
||||
public interface IListener extends Serializable
|
||||
{
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// members
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
private IListener m_listener;
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// constructors & initialization
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
public DragDropPaneBean() {
|
||||
|
||||
createSourcePanels(getCountPanels());
|
||||
try {
|
||||
createDynTargetPanels(getXMatrix(), getYMatrix());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void createDynTargetPanels(int matrixX, int matrixY) throws Exception {
|
||||
System.out.println("createDynTargetPanels: " + matrixX + "-" + matrixY);
|
||||
|
||||
List<PaneInfoTest> paneInfoList = null;
|
||||
PaneRepeat paneRepeat = new PaneRepeat();
|
||||
int panelID = 0;
|
||||
|
||||
for (int x = 0; x < matrixX; x++) {
|
||||
|
||||
paneInfoList = new ArrayList<PaneInfoTest>();
|
||||
paneRepeat = new PaneRepeat();
|
||||
|
||||
for (int y = 0; y < matrixY; y++) {
|
||||
PaneInfoTest paneInfoTest = new PaneInfoTest(panelID);
|
||||
paneInfoTest.setReference("REF_XY|" + x + "|" + y);
|
||||
paneInfoTest.setColor("#a5a5a5");
|
||||
paneInfoTest.setNanoleafID(panelID);
|
||||
|
||||
// paneInfoTest.setDrangsendSource("#{d.DragDropPaneBean.onDragSendPaneSource}");
|
||||
|
||||
paneInfoList.add(paneInfoTest);
|
||||
|
||||
|
||||
panelID++;
|
||||
|
||||
}
|
||||
paneRepeat.setPaneRepeatID(x);
|
||||
paneRepeat.setPaneInfoList(paneInfoList);
|
||||
|
||||
getPaneRepeatList().add(paneRepeat);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private void createSourcePanels(int countPanels) {
|
||||
|
||||
ThreadLocalRandom random = ThreadLocalRandom.current();
|
||||
|
||||
for (int p = 0; p < countPanels; p++) {
|
||||
PaneInfoTest paneInfoTest = null;
|
||||
Integer randomID = random.nextInt(100000, 999999);
|
||||
paneInfoTest = new PaneInfoTest(p);
|
||||
paneInfoTest.setNanoleafID(randomID);
|
||||
paneInfoTest.setColor("#a5a5a5");
|
||||
paneInfoTest.setDrangsendSource("NANOLEAF:" + randomID);
|
||||
|
||||
getPaneIDSourceMap().put(randomID.toString(), Integer.valueOf(p));
|
||||
|
||||
getPanelSourceList().add(paneInfoTest);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getPageName() { return "/examples/componets/dragDropPane.xml"; }
|
||||
public String getRootExpressionUsedInPage() { return "#{d.DragDropPaneBean}"; }
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// public usage
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Initialization of the bean. Add any parameter that is required within your scenario. */
|
||||
public void prepare(IListener listener)
|
||||
{
|
||||
m_listener = listener;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// private usage
|
||||
// ------------------------------------------------------------------------
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
<dispatcherinfo>
|
||||
|
||||
|
||||
|
||||
<managedpackage name="de.games.nanoleaf.lightsswitch"/>
|
||||
|
||||
<managedpackage name="de.games.nanoleaf.panelconfig"/>
|
||||
|
||||
<managedpackage name="de.games.nanoleaf.tictactoe"/>
|
||||
|
||||
</dispatcherinfo>
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
package de.games.nanoleaf.panelconfig;
|
||||
|
||||
public class MatrixInfo {
|
||||
|
||||
int m_matrixCountX = 0;
|
||||
int m_matrixCountY = 0;
|
||||
int m_countPanels = 1;
|
||||
|
||||
public MatrixInfo(int countPanels, int matrixCountX, int matrixCountY) {
|
||||
this.m_countPanels = countPanels;
|
||||
this.m_matrixCountX = matrixCountX;
|
||||
this.m_matrixCountY = matrixCountY;
|
||||
}
|
||||
|
||||
public int getMatrixCountX() {
|
||||
return m_matrixCountX;
|
||||
}
|
||||
|
||||
public void setMatrixCountX(int matrixCountX) {
|
||||
m_matrixCountX = matrixCountX;
|
||||
}
|
||||
|
||||
public int getMatrixCountY() {
|
||||
return m_matrixCountY;
|
||||
}
|
||||
|
||||
public void setMatrixCountY(int matrixCountY) {
|
||||
m_matrixCountY = matrixCountY;
|
||||
}
|
||||
|
||||
public int getCountPanels() {
|
||||
return m_countPanels;
|
||||
}
|
||||
|
||||
public void setCountPanels(int countPanels) {
|
||||
m_countPanels = countPanels;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
package de.games.nanoleaf.panelconfig;
|
||||
|
||||
import org.eclnt.jsfserver.elements.componentnodes.COLDISTANCENode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.LABELNode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.PANENode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.ROWDISTANCENode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.ROWNode;
|
||||
|
||||
public class NanoPANENode extends PANENode {
|
||||
|
||||
private PanelInfo m_panelInfo = null;
|
||||
|
||||
public PanelInfo getPanelInfo() {
|
||||
return m_panelInfo;
|
||||
}
|
||||
|
||||
public void setPanelInfo(PanelInfo panelInfo) {
|
||||
m_panelInfo = panelInfo;
|
||||
}
|
||||
|
||||
public NanoPANENode(PanelInfo panelInfo) {
|
||||
this.m_panelInfo = panelInfo;
|
||||
|
||||
createInnerPane();
|
||||
}
|
||||
|
||||
private void createInnerPane() {
|
||||
|
||||
this.setDragsend("NANOLEAF:ID_" + getPanelInfo().getPanelID());
|
||||
this.setHeight(80);
|
||||
this.setWidth(80);
|
||||
this.setBorder("left:2;right:2;top:2;bottom:2;color:#ff0000");
|
||||
ROWDISTANCENode rowdistanceNode = new ROWDISTANCENode();
|
||||
this.addSubNode(rowdistanceNode);
|
||||
|
||||
ROWNode row = new ROWNode();
|
||||
|
||||
COLDISTANCENode coldistanceNode = new COLDISTANCENode();
|
||||
row.addSubNode(coldistanceNode);
|
||||
|
||||
LABELNode labelPaneID = new LABELNode();
|
||||
labelPaneID.setText("ID: " + getPanelInfo().getPanelID());
|
||||
|
||||
row.addSubNode(labelPaneID);
|
||||
|
||||
this.addSubNode(row);
|
||||
|
||||
row = new ROWNode();
|
||||
coldistanceNode = new COLDISTANCENode();
|
||||
row.addSubNode(coldistanceNode);
|
||||
labelPaneID = new LABELNode();
|
||||
labelPaneID.setText("Nano ID: ");
|
||||
|
||||
row.addSubNode(labelPaneID);
|
||||
|
||||
this.addSubNode(row);
|
||||
|
||||
row = new ROWNode();
|
||||
coldistanceNode = new COLDISTANCENode();
|
||||
row.addSubNode(coldistanceNode);
|
||||
labelPaneID = new LABELNode();
|
||||
if (getPanelInfo().getPanelNanoleafID() == null) {
|
||||
labelPaneID.setText("unbek.");
|
||||
} else {
|
||||
labelPaneID.setText(getPanelInfo().getPanelNanoleafID());
|
||||
}
|
||||
|
||||
row.addSubNode(labelPaneID);
|
||||
|
||||
this.addSubNode(row);
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,217 +0,0 @@
|
||||
package de.games.nanoleaf.panelconfig;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclnt.editor.annotations.CCGenClass;
|
||||
import org.eclnt.jsfserver.base.faces.event.ActionEvent;
|
||||
import org.eclnt.jsfserver.defaultscreens.Statusbar;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.COLDISTANCENode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.LABELNode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.PANENode;
|
||||
import org.eclnt.jsfserver.elements.componentnodes.ROWNode;
|
||||
import org.eclnt.jsfserver.elements.events.BaseActionEventDrop;
|
||||
import org.eclnt.jsfserver.elements.events.BaseActionEventInvoke;
|
||||
import org.eclnt.jsfserver.elements.impl.DYNAMICCONTENTBinding;
|
||||
import org.eclnt.jsfserver.elements.impl.ROWDYNAMICCONTENTBinding;
|
||||
import org.eclnt.jsfserver.pagebean.PageBean;
|
||||
|
||||
@CCGenClass (expressionBase="#{d.PanelConfigBean}")
|
||||
|
||||
public class PanelConfigBean extends PageBean implements Serializable {
|
||||
ROWDYNAMICCONTENTBinding m_dynMatrixPanels = new ROWDYNAMICCONTENTBinding();
|
||||
public ROWDYNAMICCONTENTBinding getDynMatrixPanels() { return m_dynMatrixPanels; }
|
||||
|
||||
public void onPanelsOff(org.eclnt.jsfserver.base.faces.event.ActionEvent event) {}
|
||||
|
||||
public void onPanelsOn(org.eclnt.jsfserver.base.faces.event.ActionEvent event) {}
|
||||
|
||||
|
||||
String m_nanoleafToken = "LAG28BQWrXK2p79NbHMQsvcYYCN1TcD4";
|
||||
public String getNanoleafToken() { return m_nanoleafToken; }
|
||||
public void setNanoleafToken(String value) { this.m_nanoleafToken = value; }
|
||||
|
||||
int m_port = 16021;
|
||||
public int getPort() { return m_port; }
|
||||
public void setPort(int value) { this.m_port = value; }
|
||||
|
||||
String m_ipAdresse = "192.168.178.141";
|
||||
public String getIpAdresse() { return m_ipAdresse; }
|
||||
public void setIpAdresse(String value) { this.m_ipAdresse = value; }
|
||||
|
||||
String m_hostname = "Canvas-72FA.fritz.box";
|
||||
public String getHostname() { return m_hostname; }
|
||||
public void setHostname(String value) { this.m_hostname = value; }
|
||||
|
||||
private List<NanoPANENode> m_nanoPaneNodeList = null;
|
||||
public List<NanoPANENode> getNanoPaneNodeList() {
|
||||
if (m_nanoPaneNodeList == null) {
|
||||
m_nanoPaneNodeList = new ArrayList<NanoPANENode>();
|
||||
}
|
||||
return m_nanoPaneNodeList;
|
||||
}
|
||||
|
||||
public NanoPANENode getNanoPaneNode(int id) {
|
||||
return getNanoPaneNodeList().get(id);
|
||||
}
|
||||
|
||||
DYNAMICCONTENTBinding m_dynPanelList = new DYNAMICCONTENTBinding();
|
||||
public DYNAMICCONTENTBinding getDynPanelList() { return m_dynPanelList; }
|
||||
|
||||
public void onPanelsCreate(org.eclnt.jsfserver.base.faces.event.ActionEvent event) {
|
||||
createPanelsList(getAnzahlPanels());
|
||||
}
|
||||
|
||||
public void onCheckAndCreate(org.eclnt.jsfserver.base.faces.event.ActionEvent event) {
|
||||
|
||||
createPanelMatrix(getAnzahlPanels(), getMatrixX(), getMatrixY());
|
||||
}
|
||||
|
||||
int m_matrixY = 3;
|
||||
public int getMatrixY() { return m_matrixY; }
|
||||
public void setMatrixY(int value) { this.m_matrixY = value; }
|
||||
|
||||
int m_matrixX = 3;
|
||||
public int getMatrixX() { return m_matrixX; }
|
||||
public void setMatrixX(int value) { this.m_matrixX = value; }
|
||||
|
||||
int m_anzahlPanels = 1;
|
||||
public int getAnzahlPanels() { return m_anzahlPanels; }
|
||||
public void setAnzahlPanels(int value) { this.m_anzahlPanels = value; }
|
||||
|
||||
int m_anzahlPanelsMax = 0;
|
||||
public int getAnzahlPanelsMax() { return m_anzahlPanelsMax; }
|
||||
public void setAnzahlPanelsMax(int value) { this.m_anzahlPanelsMax = value; }
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// inner classes
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Listener to the user of the page bean. */
|
||||
public interface IListener extends Serializable {
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// members
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
private IListener m_listener;
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// constructors & initialization
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
public PanelConfigBean() {
|
||||
createPanelsList(1);
|
||||
}
|
||||
|
||||
private void createPanelsList(int countPanels) {
|
||||
|
||||
ROWNode row = new ROWNode();
|
||||
COLDISTANCENode coldistanceNode = null;
|
||||
PANENode paneNode = null;
|
||||
PanelInfo panelInfo = null;
|
||||
LABELNode labelNode = null;
|
||||
|
||||
for (int p = 0; p < countPanels; p++) {
|
||||
panelInfo = new PanelInfo(p);
|
||||
paneNode = new NanoPANENode(panelInfo);
|
||||
paneNode.setHeight(60);
|
||||
paneNode.setWidth(60);
|
||||
paneNode.setBorder("left:2;right:2;top:2;bottom:2;color:#ff0000");
|
||||
paneNode.setDragsend("Nanoleaf:" + panelInfo.getPanelID());
|
||||
ROWNode rowInt = new ROWNode();
|
||||
paneNode.addSubNode(rowInt);
|
||||
coldistanceNode = new COLDISTANCENode();
|
||||
coldistanceNode.setWidth("50%");
|
||||
rowInt.addSubNode(coldistanceNode);
|
||||
labelNode = new LABELNode();
|
||||
labelNode.setText(panelInfo.getPanelID() + "");
|
||||
rowInt.addSubNode(labelNode);
|
||||
|
||||
row.addSubNode(paneNode);
|
||||
coldistanceNode = new COLDISTANCENode();
|
||||
coldistanceNode.setWidth(20);
|
||||
row.addSubNode(coldistanceNode);
|
||||
}
|
||||
|
||||
getDynPanelList().setContentNode(row);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void createPanelMatrix(int anzahlPanels, int matrixX, int matrixY) {
|
||||
|
||||
int anzahlPanelMatrix = 0;
|
||||
|
||||
anzahlPanelMatrix = matrixX * matrixY;
|
||||
|
||||
//List<ComponentNode> componentNodeList = new ArrayList<ComponentNode>();
|
||||
ROWNode row = null;
|
||||
PANENode rootPaneNode = new PANENode();
|
||||
rootPaneNode.setRowdistance("5");
|
||||
PANENode paneNode = null;
|
||||
COLDISTANCENode coldistanceNode = null;
|
||||
|
||||
for (int x = 0; x < matrixX; x++) {
|
||||
row = new ROWNode();
|
||||
for (int y = 0; y < matrixY; y++) {
|
||||
paneNode = new PANENode();
|
||||
paneNode.setWidth(50);
|
||||
paneNode.setHeight(50);
|
||||
paneNode.setBorder("left:2;right:2;top:2;bottom:2;color:#000000");
|
||||
paneNode.setDropreceive("NANOLEAF");
|
||||
paneNode.setReference("REF_XY:" + x + "|" + y);
|
||||
paneNode.setActionListener("#{d.PanelConfigBean.onCashierActions}");
|
||||
coldistanceNode = new COLDISTANCENode();
|
||||
coldistanceNode.setWidth(5);
|
||||
|
||||
row.addSubNode(paneNode);
|
||||
row.addSubNode(coldistanceNode);
|
||||
}
|
||||
|
||||
rootPaneNode.addSubNode(row);
|
||||
}
|
||||
|
||||
getDynMatrixPanels().setContentNode(rootPaneNode);
|
||||
|
||||
}
|
||||
|
||||
public void onCashierActions(ActionEvent event) {
|
||||
if (event instanceof BaseActionEventDrop)
|
||||
{
|
||||
Statusbar.outputSuccess("Drop-Event was processed: " + event.getClass().getName());
|
||||
BaseActionEventDrop baed = (BaseActionEventDrop)event;
|
||||
String dragInfo = baed.getDragInfo();
|
||||
if (dragInfo.startsWith("NANOLEAF:"))
|
||||
{
|
||||
System.out.println("Ziel: ");
|
||||
System.out.println("Drop: " + dragInfo);
|
||||
}
|
||||
}
|
||||
else if (event instanceof BaseActionEventInvoke)
|
||||
{
|
||||
Statusbar.outputSuccess("Cashier Icon was pressed!");
|
||||
}
|
||||
}
|
||||
|
||||
public String getPageName() { return "/games/nanoleaf/panelconfig/panelconfig.xml"; }
|
||||
public String getRootExpressionUsedInPage() { return "#{d.PanelConfigBean}"; }
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// public usage
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Initialization of the bean. Add any parameter that is required within your scenario. */
|
||||
public void prepare(IListener listener)
|
||||
{
|
||||
m_listener = listener;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// private usage
|
||||
// ------------------------------------------------------------------------
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
package de.games.nanoleaf.tictactoe;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.eclnt.editor.annotations.CCGenClass;
|
||||
import org.eclnt.jsfserver.pagebean.PageBean;
|
||||
|
||||
import org.eclnt.jsfserver.base.faces.event.ActionEvent;
|
||||
|
||||
@CCGenClass (expressionBase="#{d.TicTacToeBean}")
|
||||
|
||||
public class TicTacToeBean
|
||||
extends PageBean
|
||||
implements Serializable
|
||||
{
|
||||
// ------------------------------------------------------------------------
|
||||
// inner classes
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Listener to the user of the page bean. */
|
||||
public interface IListener extends Serializable
|
||||
{
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// members
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
private IListener m_listener;
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// constructors & initialization
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
public TicTacToeBean()
|
||||
{
|
||||
}
|
||||
|
||||
public String getPageName() { return "/games/nanoleaf/tictactoe/tictactoe.xml"; }
|
||||
public String getRootExpressionUsedInPage() { return "#{d.TicTacToeBean}"; }
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// public usage
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Initialization of the bean. Add any parameter that is required within your scenario. */
|
||||
public void prepare(IListener listener)
|
||||
{
|
||||
m_listener = listener;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// private usage
|
||||
// ------------------------------------------------------------------------
|
||||
}
|
||||
@ -0,0 +1,119 @@
|
||||
package de.nanoleaf.games.tictactoe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CheckTicTacToe {
|
||||
|
||||
private class Fields {
|
||||
|
||||
List<Integer> fieldsList = null;
|
||||
|
||||
|
||||
|
||||
|
||||
public List<Integer> getFieldsList() {
|
||||
return fieldsList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public Fields(int field1, int field2, int field3) {
|
||||
fieldsList = new ArrayList<Integer>();
|
||||
fieldsList.add(field1);
|
||||
fieldsList.add(field2);
|
||||
fieldsList.add(field3);
|
||||
}
|
||||
}
|
||||
|
||||
List<Fields> m_checkList = null;
|
||||
public List<Fields> getCheckList() {
|
||||
if (m_checkList == null) {
|
||||
m_checkList = new ArrayList<Fields>();
|
||||
}
|
||||
return m_checkList;
|
||||
}
|
||||
|
||||
|
||||
public CheckTicTacToe() {
|
||||
initCheckList();
|
||||
}
|
||||
|
||||
|
||||
private void initCheckList() {
|
||||
|
||||
/**
|
||||
* ###
|
||||
* ###
|
||||
* ###
|
||||
*
|
||||
*/
|
||||
|
||||
getCheckList().add(new Fields(1, 2, 3));
|
||||
getCheckList().add(new Fields(4, 5, 6));
|
||||
getCheckList().add(new Fields(7, 8, 9));
|
||||
|
||||
getCheckList().add(new Fields(1, 4, 7));
|
||||
getCheckList().add(new Fields(2, 5, 6));
|
||||
getCheckList().add(new Fields(3, 6, 9));
|
||||
|
||||
getCheckList().add(new Fields(1, 5, 9));
|
||||
getCheckList().add(new Fields(3, 5, 7));
|
||||
|
||||
}
|
||||
|
||||
|
||||
public boolean checkFinal(int[] playerArray) {
|
||||
|
||||
boolean finish = false;
|
||||
Integer playerlast = 0;
|
||||
boolean next = false;
|
||||
//System.out.println("Start Check...");
|
||||
List<Integer> playerList = new ArrayList<Integer>();
|
||||
for (Fields fields: getCheckList()) {
|
||||
next = false;
|
||||
finish = false;
|
||||
playerList = new ArrayList<Integer>();
|
||||
//System.out.println("List: " + fields.getFieldsList().toString());
|
||||
for (int f = 0; f < fields.getFieldsList().size(); f++) {
|
||||
int field = fields.getFieldsList().get(f).intValue();
|
||||
|
||||
int player = playerArray[field];
|
||||
//System.out.println("Find Player: " + player);
|
||||
if (player == 0) {
|
||||
next = true;
|
||||
finish = false;
|
||||
//System.out.println("NEXT");
|
||||
} else {
|
||||
if (f == 0) {
|
||||
playerlast = player;
|
||||
playerList.add(playerlast);
|
||||
} else {
|
||||
if (playerlast == player) {
|
||||
playerList.add(playerlast);
|
||||
} else {
|
||||
next = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (next) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (next == false) {
|
||||
//System.out.println("FINISH");
|
||||
finish = true;
|
||||
//System.out.println("List: " + fields.getFieldsList().toString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return finish;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,325 @@
|
||||
package de.nanoleaf.games.tictactoe;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.eclnt.editor.annotations.CCGenClass;
|
||||
import org.eclnt.jsfserver.base.faces.event.ActionEvent;
|
||||
import org.eclnt.jsfserver.pagebean.PageBean;
|
||||
|
||||
import de.tools.ReflectClass;
|
||||
|
||||
@CCGenClass (expressionBase="#{d.TicTacToeBean}")
|
||||
|
||||
public class TicTacToeBean extends PageBean implements Serializable {
|
||||
|
||||
int[] playerArray = new int[10];
|
||||
|
||||
String m_colorButton1;
|
||||
public String getColorButton1() { return m_colorButton1; }
|
||||
public void setColorButton1(String value) { this.m_colorButton1 = value; }
|
||||
|
||||
String m_colorButton2;
|
||||
public String getColorButton2() { return m_colorButton2; }
|
||||
public void setColorButton2(String value) { this.m_colorButton2 = value; }
|
||||
|
||||
String m_colorButton3;
|
||||
public String getColorButton3() { return m_colorButton3; }
|
||||
public void setColorButton3(String value) { this.m_colorButton3 = value; }
|
||||
|
||||
String m_colorButton4;
|
||||
public String getColorButton4() { return m_colorButton4; }
|
||||
public void setColorButton4(String value) { this.m_colorButton4 = value; }
|
||||
|
||||
String m_colorButton5;
|
||||
public String getColorButton5() { return m_colorButton5; }
|
||||
public void setColorButton5(String value) { this.m_colorButton5 = value; }
|
||||
|
||||
String m_colorButton6;
|
||||
public String getColorButton6() { return m_colorButton6; }
|
||||
public void setColorButton6(String value) { this.m_colorButton6 = value; }
|
||||
|
||||
String m_colorButton7;
|
||||
public String getColorButton7() { return m_colorButton7; }
|
||||
public void setColorButton7(String value) { this.m_colorButton7 = value; }
|
||||
|
||||
String m_colorButton8;
|
||||
public String getColorButton8() { return m_colorButton8; }
|
||||
public void setColorButton8(String value) { this.m_colorButton8 = value; }
|
||||
|
||||
String m_colorButton9;
|
||||
public String getColorButton9() { return m_colorButton9; }
|
||||
public void setColorButton9(String value) { this.m_colorButton9 = value; }
|
||||
|
||||
boolean m_enabledButton1;
|
||||
public boolean getEnabledButton1() { return m_enabledButton1; }
|
||||
public void setEnabledButton1(boolean value) { this.m_enabledButton1 = value; }
|
||||
|
||||
boolean m_enabledButton2;
|
||||
public boolean getEnabledButton2() { return m_enabledButton2; }
|
||||
public void setEnabledButton2(boolean value) { this.m_enabledButton2 = value; }
|
||||
|
||||
boolean m_enabledButton3;
|
||||
public boolean getEnabledButton3() { return m_enabledButton3; }
|
||||
public void setEnabledButton3(boolean value) { this.m_enabledButton3 = value; }
|
||||
|
||||
boolean m_enabledButton4;
|
||||
public boolean getEnabledButton4() { return m_enabledButton4; }
|
||||
public void setEnabledButton4(boolean value) { this.m_enabledButton4 = value; }
|
||||
|
||||
boolean m_enabledButton5;
|
||||
public boolean getEnabledButton5() { return m_enabledButton5; }
|
||||
public void setEnabledButton5(boolean value) { this.m_enabledButton5 = value; }
|
||||
|
||||
boolean m_enabledButton6;
|
||||
public boolean getEnabledButton6() { return m_enabledButton6; }
|
||||
public void setEnabledButton6(boolean value) { this.m_enabledButton6 = value; }
|
||||
|
||||
boolean m_enabledButton7;
|
||||
public boolean getEnabledButton7() { return m_enabledButton7; }
|
||||
public void setEnabledButton7(boolean value) { this.m_enabledButton7 = value; }
|
||||
|
||||
boolean m_enabledButton8;
|
||||
public boolean getEnabledButton8() { return m_enabledButton8; }
|
||||
public void setEnabledButton8(boolean value) { this.m_enabledButton8 = value; }
|
||||
|
||||
boolean m_enabledButton9;
|
||||
public boolean getEnabledButton9() { return m_enabledButton9; }
|
||||
public void setEnabledButton9(boolean value) { this.m_enabledButton9 = value; }
|
||||
|
||||
private void changeColor() {
|
||||
|
||||
if (getLightPlayerNext().equals(getLightPlayer1())) {
|
||||
setLightPlayerNext(getLightPlayer2());
|
||||
setNextPlayer(2);
|
||||
} else {
|
||||
setLightPlayerNext(getLightPlayer1());
|
||||
setNextPlayer(1);
|
||||
}
|
||||
}
|
||||
|
||||
public void onButton1(ActionEvent event) {
|
||||
if (getEnabledButton1() == true) {
|
||||
setColorButton1(getLightPlayerNext());
|
||||
setEnabledButton1(false);
|
||||
playerArray[1] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
|
||||
public void onButton2(ActionEvent event) {
|
||||
if (getEnabledButton2() == true) {
|
||||
setColorButton2(getLightPlayerNext());
|
||||
setEnabledButton2(false);
|
||||
playerArray[2] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton3(ActionEvent event) {
|
||||
if (getEnabledButton3() == true) {
|
||||
setColorButton3(getLightPlayerNext());
|
||||
setEnabledButton3(false);
|
||||
playerArray[3] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton4(ActionEvent event) {
|
||||
if (getEnabledButton4() == true) {
|
||||
setColorButton4(getLightPlayerNext());
|
||||
setEnabledButton4(false);
|
||||
playerArray[4] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton5(ActionEvent event) {
|
||||
if (getEnabledButton5() == true) {
|
||||
setColorButton5(getLightPlayerNext());
|
||||
setEnabledButton5(false);
|
||||
playerArray[5] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton6(ActionEvent event) {
|
||||
if (getEnabledButton6() == true) {
|
||||
setColorButton6(getLightPlayerNext());
|
||||
setEnabledButton6(false);
|
||||
playerArray[6] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton7(ActionEvent event) {
|
||||
if (getEnabledButton7() == true) {
|
||||
setColorButton7(getLightPlayerNext());
|
||||
setEnabledButton7(false);
|
||||
playerArray[7] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton8(ActionEvent event) {
|
||||
if (getEnabledButton8() == true) {
|
||||
setColorButton8(getLightPlayerNext());
|
||||
setEnabledButton8(false);
|
||||
playerArray[8] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public void onButton9(ActionEvent event) {
|
||||
if (getEnabledButton9() == true) {
|
||||
setColorButton9(getLightPlayerNext());
|
||||
setEnabledButton9(false);
|
||||
playerArray[9] = getNextPlayer();
|
||||
changeColor();
|
||||
}
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
public String m_lightPlayer1 = "#66FF00";
|
||||
public String getLightPlayer1() { return m_lightPlayer1; }
|
||||
|
||||
public String m_lightPlayer2 = "#FF0000";
|
||||
public String getLightPlayer2() { return m_lightPlayer2; }
|
||||
|
||||
public String m_lightPlayerNext = "#66FF00";
|
||||
public void setLightPlayerNext(String lightPlayerNext) { m_lightPlayerNext = lightPlayerNext; }
|
||||
public String getLightPlayerNext() { return m_lightPlayerNext; }
|
||||
|
||||
public int m_nextPlayer = 1;
|
||||
public int getNextPlayer() { return m_nextPlayer; }
|
||||
public void setNextPlayer(int nextPlayer) { m_nextPlayer = nextPlayer; }
|
||||
|
||||
String m_resultText;
|
||||
public String getResultText() { return m_resultText; }
|
||||
public void setResultText(String value) { this.m_resultText = value; }
|
||||
|
||||
public void onReset(ActionEvent event) {
|
||||
|
||||
enabledAllButtons(true);
|
||||
|
||||
playerArray = new int[10];
|
||||
for (int i = 0; i < 10; i++) {
|
||||
playerArray[i] = 0;
|
||||
}
|
||||
|
||||
m_colorButton1 = null;
|
||||
m_colorButton2 = null;
|
||||
m_colorButton3 = null;
|
||||
m_colorButton4 = null;
|
||||
m_colorButton5 = null;
|
||||
m_colorButton6 = null;
|
||||
m_colorButton7 = null;
|
||||
m_colorButton8 = null;
|
||||
m_colorButton9 = null;
|
||||
|
||||
setNextPlayer(1);
|
||||
setLightPlayerNext(getLightPlayer1());
|
||||
|
||||
resultTextSetter();
|
||||
}
|
||||
|
||||
private void enabledAllButtons(boolean enabled) {
|
||||
for (int i = 1; i <= 9; i++) {
|
||||
getReflectClass().setMethod("setEnabledButton" + i, enabled);
|
||||
}
|
||||
}
|
||||
|
||||
CheckTicTacToe m_checkTicTacToe = new CheckTicTacToe();
|
||||
|
||||
public CheckTicTacToe getCheckTicTacToe() {
|
||||
return m_checkTicTacToe;
|
||||
}
|
||||
private boolean checkFinish() {
|
||||
boolean finish = false;
|
||||
|
||||
finish = getCheckTicTacToe().checkFinal(playerArray);
|
||||
|
||||
return finish;
|
||||
}
|
||||
|
||||
ReflectClass m_reflectClass;
|
||||
public ReflectClass getReflectClass() { return m_reflectClass; }
|
||||
|
||||
private void resultTextSetter() {
|
||||
|
||||
if (checkFinish()) {
|
||||
m_resultText = " GEWONNEN. :-)";
|
||||
enabledAllButtons(false);
|
||||
|
||||
} else {
|
||||
m_resultText = "Player "+ getNextPlayer();
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
// inner classes
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Listener to the user of the page bean. */
|
||||
public interface IListener extends Serializable
|
||||
{
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// members
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
private IListener m_listener;
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// constructors & initialization
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
public TicTacToeBean() {
|
||||
m_reflectClass = new ReflectClass(this);
|
||||
onReset(null);
|
||||
}
|
||||
|
||||
public TicTacToeBean(String lightPlayer1, String lightPlayer2) {
|
||||
this.m_lightPlayer1 = lightPlayer1;
|
||||
this.m_lightPlayer2 = lightPlayer2;
|
||||
|
||||
m_reflectClass = new ReflectClass(this);
|
||||
onReset(null);
|
||||
}
|
||||
|
||||
|
||||
public String getPageName() { return "/nanoleaf/games/tictactoe/tictactoe.xml"; }
|
||||
public String getRootExpressionUsedInPage() { return "#{d.TicTacToeBean}"; }
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// public usage
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/* Initialization of the bean. Add any parameter that is required within your scenario. */
|
||||
public void prepare(IListener listener)
|
||||
{
|
||||
m_listener = listener;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// private usage
|
||||
// ------------------------------------------------------------------------
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
<dispatcherinfo>
|
||||
|
||||
<managedpackage name="de.nanoleaf.games.lightswitch"/>
|
||||
|
||||
<managedpackage name="de.nanoleaf.tools.panelconfig"/>
|
||||
|
||||
<managedpackage name="de.nanoleaf.games.tictactoe"/>
|
||||
|
||||
</dispatcherinfo>
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
package de.nanoleaf.server;
|
||||
|
||||
public class ChangeColorMod {
|
||||
|
||||
public ChangeColorMod() {
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
package de.nanoleaf.server;
|
||||
|
||||
import io.github.rowak.nanoleafapi.Color;
|
||||
|
||||
public enum ColorEnum {
|
||||
|
||||
BLACK(Color.BLACK),
|
||||
|
||||
WHITE(Color.WHITE),
|
||||
|
||||
RED(Color.RED),
|
||||
|
||||
GREEN(Color.GREEN),
|
||||
|
||||
BLUE(Color.BLUE),
|
||||
|
||||
MAGENTA(Color.MAGENTA),
|
||||
|
||||
YELLOW(Color.YELLOW),
|
||||
|
||||
CYAN(Color.CYAN),
|
||||
|
||||
GRAY(Color.GRAY),
|
||||
|
||||
LIGHT_GRAY(Color.LIGHT_GRAY),
|
||||
|
||||
DARK_GRAY(Color.DARK_GRAY),
|
||||
|
||||
PINK(Color.PINK),
|
||||
|
||||
ORANGE(Color.ORANGE),
|
||||
|
||||
;
|
||||
|
||||
private Color m_color;
|
||||
public Color getColor() { return m_color; }
|
||||
|
||||
ColorEnum(Color color) {
|
||||
this.m_color = color;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package de.nanoleaf.server;
|
||||
|
||||
public enum ColorModEnum {
|
||||
|
||||
NANOLEAF_LIGHT_SWITCH_PANEL_9_GAME,
|
||||
|
||||
NANOLEAF_TIC_TAC_TOE_PANEL_9_GAME,
|
||||
|
||||
NANOLEAF_ON_OFF_TEST,
|
||||
|
||||
|
||||
|
||||
;
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
Funktionen Nanoleaf Server
|
||||
|
||||
-
|
||||
@ -0,0 +1,209 @@
|
||||
package de.nanoleaf.server;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import io.github.rowak.nanoleafapi.Color;
|
||||
import io.github.rowak.nanoleafapi.NanoleafDevice;
|
||||
import io.github.rowak.nanoleafapi.NanoleafException;
|
||||
import io.github.rowak.nanoleafapi.Panel;
|
||||
import io.github.rowak.nanoleafapi.event.DetailedTouchEvent;
|
||||
import io.github.rowak.nanoleafapi.event.NanoleafTouchEventListener;
|
||||
import io.github.rowak.nanoleafapi.event.TouchEvent;
|
||||
|
||||
public class NanoleafDeviceServer {
|
||||
|
||||
private String m_nanoleafHostname = "Canvas-72FA.fritz.box";
|
||||
public String getNanoleafHostname() { return m_nanoleafHostname; }
|
||||
|
||||
private String m_nanoleafHostIP = "";
|
||||
public String getNanoleafHostIP() { return m_nanoleafHostIP; }
|
||||
|
||||
private int m_nanoleafPort = 16021;
|
||||
public int getNanoleafPort() { return m_nanoleafPort; }
|
||||
|
||||
private String m_nanoleafApiLevel = "v1";
|
||||
public String getNanoleafApiLevel() { return m_nanoleafApiLevel; }
|
||||
|
||||
private String m_nanoleafAccessToken = "LAG28BQWrXK2p79NbHMQsvcYYCN1TcD4";
|
||||
public String getNanoleafAccessToken() { return m_nanoleafAccessToken; }
|
||||
|
||||
private NanoleafDevice m_nanoleafDevice = null;
|
||||
public NanoleafDevice getNanoleafDevice() { return m_nanoleafDevice; }
|
||||
|
||||
private int m_nanoleafTouchTimer = 50;
|
||||
public int getNanoleafTouchTimer() { return m_nanoleafTouchTimer; }
|
||||
public void setNanoleafTouchTimer(int nanoleafTouchTimer) { m_nanoleafTouchTimer = nanoleafTouchTimer; }
|
||||
|
||||
private Integer m_nanoleafLastID = null;
|
||||
public Integer getNanoleafLastID() { return m_nanoleafLastID; }
|
||||
public void setNanoleafLastID(Integer nanoleafLastID) { m_nanoleafLastID = nanoleafLastID; }
|
||||
|
||||
private List<Panel> m_nanoLeafPanels = null;
|
||||
public List<Panel> getNanoLeafPanels() { return m_nanoLeafPanels; }
|
||||
|
||||
|
||||
public NanoleafDeviceServer() {
|
||||
|
||||
}
|
||||
|
||||
public NanoleafDeviceServer(String nanoleafHostname, String nanoleafHostIP, int nanoleafPort, String nanoleafAccessToken) {
|
||||
this.m_nanoleafHostname = nanoleafHostname;
|
||||
this.m_nanoleafHostIP = nanoleafHostIP;
|
||||
this.m_nanoleafPort = nanoleafPort;
|
||||
this.m_nanoleafAccessToken = nanoleafAccessToken;
|
||||
}
|
||||
|
||||
public boolean deConnectNanoLeaf() throws NanoleafException, IOException {
|
||||
boolean finish = false;
|
||||
try {
|
||||
getNanoleafDevice().closeEventListeners();
|
||||
getNanoleafDevice().closeTouchEventListeners();
|
||||
getNanoleafDevice().closeAsync();
|
||||
m_nanoleafDevice = null;
|
||||
getNanoLeafPanels().clear();
|
||||
|
||||
finish = true;
|
||||
} catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
|
||||
return finish;
|
||||
}
|
||||
|
||||
public boolean connectNanoLeaf() throws NanoleafException, IOException {
|
||||
boolean connected = false;
|
||||
|
||||
try {
|
||||
m_nanoleafDevice = NanoleafDevice.createDevice(getNanoleafHostname(), getNanoleafPort(), getNanoleafAccessToken());
|
||||
|
||||
if (m_nanoleafDevice != null) {
|
||||
connected = true;
|
||||
refreshPanels();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
return connected;
|
||||
}
|
||||
|
||||
private void refreshPanels() throws NanoleafException, IOException {
|
||||
|
||||
if (getNanoleafDevice() != null) {
|
||||
m_nanoLeafPanels = getNanoleafDevice().getPanels();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkLastIdActiv(Integer lastID) {
|
||||
|
||||
if (getNanoleafLastID() == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return getNanoleafLastID().equals(lastID);
|
||||
}
|
||||
|
||||
public void startNanoLeafEvent() {
|
||||
|
||||
|
||||
|
||||
try {
|
||||
getNanoleafDevice().setColor(Color.BLACK);
|
||||
|
||||
getNanoleafDevice().enableExternalStreaming();
|
||||
|
||||
getNanoleafDevice().enableTouchEventStreaming(getNanoleafPort()); // You need to specify a port to listen on
|
||||
getNanoleafDevice().registerTouchEventStreamingListener(new NanoleafTouchEventListener() {
|
||||
@Override
|
||||
public void onOpen() {
|
||||
// Called when the listener is created
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClosed() {
|
||||
// Called when the listener is closed
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(DetailedTouchEvent[] events) {
|
||||
// Called when a touch event occurs
|
||||
//System.out.println("Events: " + events.length);
|
||||
|
||||
DetailedTouchEvent event = events[0];
|
||||
|
||||
Integer lastID = event.getPanelId();
|
||||
|
||||
|
||||
|
||||
|
||||
//TouchEvent touch = event.getTouchType();
|
||||
|
||||
switch (event.getTouchType()) {
|
||||
case TouchEvent.DOUBLE_TAP:
|
||||
//System.out.println("DOUBLE_TAP");
|
||||
break;
|
||||
|
||||
case TouchEvent.SINGLE_TAP:
|
||||
//System.out.println("SINGLE_TAP");
|
||||
if (checkLastIdActiv(lastID)) {
|
||||
return;
|
||||
} else {
|
||||
setNanoleafLastID(lastID);
|
||||
|
||||
try {
|
||||
|
||||
getNanoleafDevice().setPanelExternalStreaming(lastID, Color.RED, 1);
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
|
||||
System.out.println("ID: " + event.getPanelId());
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case TouchEvent.HOLD:
|
||||
//System.out.println("HOLD");
|
||||
break;
|
||||
|
||||
case TouchEvent.UNKNOWN_ATTRIBUTE:
|
||||
//System.out.println("UNKNOWN_ATTRIBUTE");
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
System.out.println("Unexpected value: " + event.getTouchType());
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
NanoleafDeviceServer nanoleafDeviceServer = new NanoleafDeviceServer();
|
||||
try {
|
||||
boolean nanoLeafActiv = nanoleafDeviceServer.connectNanoLeaf();
|
||||
|
||||
if (nanoLeafActiv) {
|
||||
nanoleafDeviceServer.startNanoLeafEvent();
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package de.games.nanoleaf.server;
|
||||
package de.nanoleaf.server.test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
@ -1,4 +1,4 @@
|
||||
package de.games.nanoleaf.server;
|
||||
package de.nanoleaf.server.test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package de.games.nanoleaf.server;
|
||||
package de.nanoleaf.server.test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package de.games.nanoleaf.server;
|
||||
package de.nanoleaf.server.test;
|
||||
|
||||
import io.github.rowak.nanoleafapi.Aurora;
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
package de.nanoleaf.tools.panelconfig;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import de.tools.ReflectClass;
|
||||
import io.github.rowak.nanoleafapi.Color;
|
||||
|
||||
public class TestClass {
|
||||
|
||||
public TestClass() {
|
||||
|
||||
Color color = new Color();
|
||||
|
||||
ReflectClass reflectClass = new ReflectClass(color);
|
||||
|
||||
List<String> fieldsList = reflectClass.getAllFields();
|
||||
|
||||
for (String field: fieldsList) {
|
||||
|
||||
System.out.println(field);
|
||||
|
||||
}
|
||||
|
||||
Color farbe = Color.BLUE;
|
||||
|
||||
System.out.println(farbe);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new TestClass();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
package de.tvo.workplace;
|
||||
|
||||
import org.eclnt.jsfserver.pagebean.PageBean;
|
||||
import org.eclnt.jsfserver.resources.ResourceManager;
|
||||
|
||||
public class DefaultPageBean extends PageBean {
|
||||
|
||||
public DefaultPageBean() {
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
public String getLiteral(String module, String key) {
|
||||
String ausgabe = "";
|
||||
|
||||
try {
|
||||
if (key == null)
|
||||
return "";
|
||||
|
||||
ausgabe = ResourceManager.getRuntimeInstance().readProperty("literals" + module, key.toLowerCase());
|
||||
// ausgabe = readProperty("literals" + module, name.toLowerCase());
|
||||
// System.out.println("module: " + module + " key: " + key + " ausgabe: " +
|
||||
// ausgabe);
|
||||
// System.out.println("Language: " +
|
||||
// FacesContext.getCurrentInstance().getViewRoot().getLocale());
|
||||
|
||||
} catch (Exception e) {
|
||||
ausgabe = key;
|
||||
}
|
||||
if (ausgabe.equals("literalstable is not defined"))
|
||||
ausgabe = key;
|
||||
|
||||
if (ausgabe.startsWith("{literals"))
|
||||
ausgabe = key;
|
||||
|
||||
return ausgabe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPageName() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRootExpressionUsedInPage() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package de.geis.portal.workplace.layout;
|
||||
package de.tvo.workplace.layout;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package de.geis.portal.workplace.layout;
|
||||
package de.tvo.workplace.layout;
|
||||
|
||||
public interface LayoutInterface {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package de.geis.portal.workplace.layout;
|
||||
package de.tvo.workplace.layout;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
|
||||
<!--
|
||||
Must be set to "false" for runtime purposes - especially when using the RISC
|
||||
Client: CapatainCasa uses URL rewriting for session management.
|
||||
|
||||
If session id cookies are passed to the browser, then multiple browser instances
|
||||
will share the same session id cookie - which may have server side problems as
|
||||
consequence.
|
||||
|
||||
hbm2ddl.auto="create-drop"
|
||||
|
||||
cookies='false'
|
||||
-->
|
||||
<Context>
|
||||
|
||||
|
||||
<!-- MariaDB CRM Verbindung -->
|
||||
<Resource name="jdbc/mariadbnl"
|
||||
global="jdbc/mariadb"
|
||||
auth="Container"
|
||||
factory="com.zaxxer.hikari.HikariJNDIFactory"
|
||||
type="javax.sql.DataSource"
|
||||
maximumPoolSize="15"
|
||||
minimumIdle="1"
|
||||
dataSource.user="root"
|
||||
dataSource.password="jhi1nPw."
|
||||
show_sql="true"
|
||||
hbm2ddl.auto="create-drop"
|
||||
driverClassName="org.mariadb.jdbc.Driver"
|
||||
testOnBorrow="true"
|
||||
jdbcUrl="jdbc:mariadb://ZITNB014.de.geis-group.net:3306/nanoleafdb"
|
||||
connectionTestQuery = "select 1"
|
||||
allowPoolSuspension="true"
|
||||
/>
|
||||
|
||||
</Context>
|
||||
@ -0,0 +1,3 @@
|
||||
load=Laden
|
||||
reset=Zu\u00FCcksetzen
|
||||
save=Speichern
|
||||
@ -0,0 +1,5 @@
|
||||
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
|
||||
#Created by cctranslate
|
||||
#Tue Jul 04 07:04:10 CEST 2017
|
||||
|
||||
|
||||
@ -0,0 +1,4 @@
|
||||
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
|
||||
#Created by cctranslate
|
||||
#Tue Jul 04 07:04:10 CEST 2017
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
|
||||
#Created by cctranslate
|
||||
#Tue Jul 04 07:04:10 CEST 2017
|
||||
|
||||
|
||||
@ -0,0 +1,4 @@
|
||||
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
|
||||
#Created by cctranslate
|
||||
#Tue Jul 04 07:04:10 CEST 2017
|
||||
|
||||
@ -0,0 +1,4 @@
|
||||
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
|
||||
#Created by org.eclnt.editor.resourceeditor.ResourceEditor
|
||||
#Fri Aug 18 14:40:38 CEST 2017
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
## Properties f\u00fcr Geisportal
|
||||
|
||||
## Workplace Umgebung
|
||||
[WORKPLACE]
|
||||
TEST=true
|
||||
## Anzahl der Login Versuche.
|
||||
MAX_LOGIN_ATTEMPTS=8
|
||||
## Send Email fail Login
|
||||
SEND_EMAIL_FAIL_LOGIN=4
|
||||
##
|
||||
SESSION_DIFF_TIME=2
|
||||
## Mail from Portal
|
||||
SEND_EMAIL_FROM_PORTAL=webportal-test-admin@geis-group.de
|
||||
SEND_EMAIL_TO_LOGIN=java-fehlermeldungen@geis-group.de
|
||||
SEND_EMAIL_ERROR_MSG=java-fehlermeldungen@geis-group.de
|
||||
##thomas.vogel@geis-group.de;markus.kirchner@geis-group.de
|
||||
## Auto Logout
|
||||
SESSION_AUTO_LOGOUT_TIME=60
|
||||
##
|
||||
RIGHTS_UPDATE_NEXT_INTERVAL=10
|
||||
## Portal Messages Delete Status nach ... Tagen
|
||||
MSG_DELETE_STATUS_SET=14
|
||||
## Portal Messages Typen Delete Status
|
||||
MSG_DELETE_TYPEN_SET=TEXT_MSG;TEXT_MSG_PUSH;EMAIL_MSG
|
||||
## Portal Messages Delete from DB ... Tagen
|
||||
MSG_DELETE_FROM_DB=360
|
||||
## Portal Message delete from Database Activ
|
||||
MSG_DELETE_FROM_DB_ACTIV=false
|
||||
## LoginTyp fuer Portal
|
||||
PORTAL_LOGINTYP=WEB_USER;INTRANET_USER;CLIENT_USER
|
||||
## TEST PORTAL URL
|
||||
PORTAL_URL_TEST=https://webportal-test.geis-group.de
|
||||
## PORTAL URL
|
||||
PORTAL_URL=https://webportal.geis-group.de
|
||||
## SESSION_TYP fuer Hostname
|
||||
SESSION_TYP=PORTAL_SESSION
|
||||
|
||||
[DEFAULT]
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
<logging level="INFO"
|
||||
console="false"
|
||||
plaintext="false"
|
||||
outputclassmethod="false">
|
||||
|
||||
<!--
|
||||
************************************************************************
|
||||
loglevel that is used if errors occur when resolving an
|
||||
property-access via expression resolution. And: decision of
|
||||
a stack trace is output.
|
||||
|
||||
Possible values for level: SEVERE, WARNING(default), INFO, FINE
|
||||
Possible values for stacktrace: true/false(default)
|
||||
************************************************************************
|
||||
-->
|
||||
<!--
|
||||
<loglevelmissingpropertyget level="WARNING" stacktrace="false"/>
|
||||
-->
|
||||
</logging>
|
||||
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<t:layoutdefinition xmlns:t="http://www.CaptainCasa.com/controllibrary/t" >
|
||||
|
||||
<t:beanprocessing id="g_1" beanbinding="#{d.DragDropPaneBean}" />
|
||||
<t:rowtitlebar id="g_2" />
|
||||
<t:rowheader id="g_3" />
|
||||
<t:rowbodypane id="g_4" >
|
||||
<t:row id="g_7" >
|
||||
<t:repeat id="g_8" listbinding="#{d.DragDropPaneBean.panelSourceList}" >
|
||||
<t:pane id="g_9" border=".{border}" dragsend=".{drangsendSource}" height="60" reference=".{paneID}" width="60" >
|
||||
<t:rowdistance id="g_13" />
|
||||
<t:row id="g_10" >
|
||||
<t:coldistance id="g_11" width="50%" />
|
||||
<t:label id="g_12" text=".{nanoleafID}" />
|
||||
</t:row>
|
||||
</t:pane>
|
||||
<t:coldistance id="g_14" />
|
||||
</t:repeat>
|
||||
</t:row>
|
||||
<t:rowdistance id="g_43" height="40" />
|
||||
<t:repeat id="g_45" listbinding="#{d.DragDropPaneBean.paneRepeatList}" >
|
||||
<t:row id="g_47" >
|
||||
<t:repeat id="g_49" listbinding=".{paneInfoList}" >
|
||||
<t:pane id="g_51" actionListener="#{d.DragDropPaneBean.onDropSendPaneTarget}" border=".{border}" dragsend=".{drangsendSource}" dropreceive="NANOLEAF" height="60" reference=".{reference}" tooltip=".{reference}" width="60" >
|
||||
<t:rowdistance id="g_52" />
|
||||
<t:row id="g_53" >
|
||||
<t:coldistance id="g_54" width="50%" />
|
||||
<t:label id="g_55" text=".{nanoleafID}" />
|
||||
</t:row>
|
||||
</t:pane>
|
||||
</t:repeat>
|
||||
</t:row>
|
||||
</t:repeat>
|
||||
</t:rowbodypane>
|
||||
|
||||
</t:layoutdefinition>
|
||||
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<t:layoutdefinition xmlns:t="http://www.CaptainCasa.com/controllibrary/t" >
|
||||
|
||||
<t:beanprocessing id="g_1" beanbinding="#{d.TicTacToeBean}" />
|
||||
<t:rowbodypane id="g_4" />
|
||||
|
||||
</t:layoutdefinition>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 664 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 949 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 477 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 627 B |
|
After Width: | Height: | Size: 1000 B |
|
After Width: | Height: | Size: 981 B |
|
After Width: | Height: | Size: 897 B |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 963 B |
|
After Width: | Height: | Size: 855 B |
|
After Width: | Height: | Size: 817 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 502 B |
|
After Width: | Height: | Size: 981 B |
|
After Width: | Height: | Size: 990 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 759 B |
|
After Width: | Height: | Size: 561 B |
|
After Width: | Height: | Size: 1009 B |
|
After Width: | Height: | Size: 605 B |
|
After Width: | Height: | Size: 799 B |
|
After Width: | Height: | Size: 527 B |
|
After Width: | Height: | Size: 801 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 405 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 964 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 759 B |
|
After Width: | Height: | Size: 629 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 996 B |
|
After Width: | Height: | Size: 421 B |
|
After Width: | Height: | Size: 941 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 864 B |
|
After Width: | Height: | Size: 516 B |
|
After Width: | Height: | Size: 601 B |