From 0f1731dc97ad265d26f1e0b98262a95b054950aa Mon Sep 17 00:00:00 2001 From: Daniela Genius <genius@debussy.soc.lip6.fr> Date: Mon, 8 Jul 2019 14:00:30 +0200 Subject: [PATCH] added clocks in SystamC-AMS part --- .../java/syscamstranslator/SysCAMSTClock.java | 25 +- .../syscamstranslator/SysCAMSTPortClock.java | 171 ++ .../toSysCAMS/ClusterCode.java | 47 + .../toSysCAMS/PrimitiveCode.java | 228 +++ .../java/ui/syscams/SysCAMSPortClock.java | 130 ++ .../java/ui/window/JDialogSysCAMSClock.java | 1475 ++++++++++++++--- .../ui/window/JDialogSysCAMSPortClock.java | 451 +++++ 7 files changed, 2279 insertions(+), 248 deletions(-) create mode 100644 src/main/java/syscamstranslator/SysCAMSTPortClock.java create mode 100644 src/main/java/ui/syscams/SysCAMSPortClock.java create mode 100644 src/main/java/ui/window/JDialogSysCAMSPortClock.java diff --git a/src/main/java/syscamstranslator/SysCAMSTClock.java b/src/main/java/syscamstranslator/SysCAMSTClock.java index 369705e19b..ae05d481a7 100644 --- a/src/main/java/syscamstranslator/SysCAMSTClock.java +++ b/src/main/java/syscamstranslator/SysCAMSTClock.java @@ -43,7 +43,11 @@ import java.util.LinkedList; import javax.swing.DefaultListModel; /** - * Class SysCAMSTClock + * Class SysCAMSTClock + * Parameters of a SystemC-AMS Clock + * Creation: 08/07/2019 + * @version 1.0 08/07/2019 + * @author Daniela Genius */ public class SysCAMSTClock extends SysCAMSTComponent{ @@ -54,6 +58,10 @@ public class SysCAMSTClock extends SysCAMSTComponent{ private String startTime; private String posFirst; + //private SysCAMSTCluster cluster; + private LinkedList<SysCAMSTPortClock> portClock; + + public SysCAMSTClock(String _name, String _frequency, String _unit, String _dutyCycle, String _startTime, String _posFirst) { name = _name; @@ -61,7 +69,9 @@ public class SysCAMSTClock extends SysCAMSTComponent{ unit = _unit; dutyCycle = _dutyCycle; startTime = _startTime; - posFirst = _posFirst; + posFirst = _posFirst; + //cluster = _cluster; + portClock = new LinkedList<SysCAMSTPortClock>(); } @@ -116,5 +126,14 @@ public class SysCAMSTClock extends SysCAMSTComponent{ public void setPosFirst(String _posFirst) { posFirst = _posFirst; } - + + public LinkedList<SysCAMSTPortClock> getPortClock(){ + return portClock; + } + + public void addPortClock(SysCAMSTPortClock cl){ + portClock.add(cl); + } + + } diff --git a/src/main/java/syscamstranslator/SysCAMSTPortClock.java b/src/main/java/syscamstranslator/SysCAMSTPortClock.java new file mode 100644 index 0000000000..c36f23183b --- /dev/null +++ b/src/main/java/syscamstranslator/SysCAMSTPortClock.java @@ -0,0 +1,171 @@ +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + +package syscamstranslator; + +import elntranslator.*; + +/** + * Class SysCAMSTPortClock + * Parameters of a SystemC-AMS port Clock + * Creation: 07/05/2018 + * @version 1.0 07/05/2018 + * @author Irina Kit Yan LEE +*/ + +public class SysCAMSTPortClock extends SysCAMSTComponent { + + private String name; +// private int period; +// private String time; +// private int rate; +// private int delay; + private int origin; + private String ClockType; + private boolean sensitive; + private String sensitiveMethod; + + private SysCAMSTBlockClock blockClock; + private SysCAMSTBlockGPIO2VCI blockGPIO2VCI; + private ELNTCluster cluster; + private ELNTModule module; + + public SysCAMSTPortClock(String _name, int _origin, String _ClockType, boolean _sensitive, String _sensitiveMethod, SysCAMSTBlockClock _blockClock) { + name = _name; +// period = _period; +// time = _time; +// rate = _rate; +// delay = _delay; + origin = _origin; + ClockType = _ClockType; + sensitive = _sensitive; + sensitiveMethod = _sensitiveMethod; + blockClock = _blockClock; + } + + public SysCAMSTPortClock(String _name, int _origin, String _ClockType, boolean _sensitive, String _sensitiveMethod, SysCAMSTBlockGPIO2VCI _blockGPIO2VCI) { + name = _name; +// period = _period; +// time = _time; +// rate = _rate; +// delay = _delay; + origin = _origin; + ClockType = _ClockType; + sensitive = _sensitive; + sensitiveMethod = _sensitiveMethod; + blockGPIO2VCI = _blockGPIO2VCI; + } + + public SysCAMSTPortClock(String _name, int _origin, String _ClockType, boolean _sensitive, String _sensitiveMethod, ELNTCluster _cluster) { + name = _name; +// period = _period; +// time = _time; +// rate = _rate; +// delay = _delay;ELNTCluster + origin = _origin; + ClockType = _ClockType; + sensitive = _sensitive; + sensitiveMethod = _sensitiveMethod; + cluster = _cluster; + } + + public SysCAMSTPortClock(String _name, int _origin, String _ClockType, boolean _sensitive, String _sensitiveMethod, ELNTModule _module) { + name = _name; +// period = _period; +// time = _time; +// rate = _rate; +// delay = _delay;ELNTCluster + origin = _origin; + ClockType = _ClockType; + sensitive = _sensitive; + sensitiveMethod = _sensitiveMethod; + module = _module; + } + + public String getName() { + return name; + } + +// public int getPeriod() { +// return period; +// } +// +// public String getTime() { +// return time; +// } +// +// public int getRate() { +// return rate; +// } +// +// public int getDelay() { +// return delay; +// } + + public int getOrigin() { + return origin; + } + + public String getClockType() { + return ClockType; + } + + public boolean getSensitive() { + return sensitive; + } + + public String getSensitiveMethod() { + return sensitiveMethod; + } + + public SysCAMSTBlockClock getBlockClock() { + return blockClock; + } + + public SysCAMSTBlockGPIO2VCI getBlockGPIO2VCI() { + return blockGPIO2VCI; + } + + public ELNTCluster getCluster() { + return cluster; + } + + public ELNTModule getModule() { + return module; + } +} diff --git a/src/main/java/syscamstranslator/toSysCAMS/ClusterCode.java b/src/main/java/syscamstranslator/toSysCAMS/ClusterCode.java index 9eee38a252..c3b7513f1f 100644 --- a/src/main/java/syscamstranslator/toSysCAMS/ClusterCode.java +++ b/src/main/java/syscamstranslator/toSysCAMS/ClusterCode.java @@ -73,6 +73,7 @@ public class ClusterCode { if (cluster != null) { LinkedList<SysCAMSTBlockTDF> tdf = cluster.getBlockTDF(); LinkedList<SysCAMSTBlockDE> de = cluster.getBlockDE(); + LinkedList<SysCAMSTClock> clock = cluster.getClock(); corpsCluster = "// Simulation entry point." + CR + "int sc_main(int argc, char *argv[]) {" + CR2 + "\tusing namespace sc_core;" + CR + "\tusing namespace sca_util;" + CR2; @@ -202,6 +203,52 @@ public class ClusterCode { nb_block++; } + + + + //ajoute DG + + + + for (SysCAMSTClock t : clock) { + corpsCluster = corpsCluster + "\t sc_clock " + t.getName() + " (\"" + t.getName() + "\"," + t.getFrequency()+","+ t.getUnit()+","+ t.getDutyCycle()+","+ t.getStartTime()+","+ t.getUnit()+","+ t.getPosFirst()+");" + CR; + + LinkedList<SysCAMSTPortClock> portClock = t.getPortClock(); + + for (SysCAMSTPortClock p : portClock) { + for (int i = 0; i < connectors.size(); i++) { + if (connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortClock && connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortClock) { + if (((SysCAMSTPortClock) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortClock) connectors.get(i).get_p1().getComponent()).getClock().getName().equals(t.getName())) { + corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR; + } else if (((SysCAMSTPortClock) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortClock) connectors.get(i).get_p2().getComponent()).getClock().getName().equals(t.getName())) { + corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR; + } + } else if (connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortConverter && connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortClock) { + if (((SysCAMSTPortConverter) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortConverter) connectors.get(i).get_p1().getComponent()).getBlockTDF().getName().equals(t.getName())) { + corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR; + } else if (((SysCAMSTPortClock) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortClock) connectors.get(i).get_p2().getComponent()).getClock().getName().equals(t.getName())) { + corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR; + } + } else if (connectors.get(i).get_p2().getComponent() instanceof SysCAMSTPortConverter && connectors.get(i).get_p1().getComponent() instanceof SysCAMSTPortClock) { + if (((SysCAMSTPortConverter) connectors.get(i).get_p2().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortConverter) connectors.get(i).get_p2().getComponent()).getBlockTDF().getName().equals(t.getName())) { + corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR; + } else if (((SysCAMSTPortClock) connectors.get(i).get_p1().getComponent()).getName().equals(p.getName()) && ((SysCAMSTPortClock) connectors.get(i).get_p1().getComponent()).getClock().getName().equals(t.getName())) { + corpsCluster = corpsCluster + "\t" + t.getName() + "_" + nb_block + "." + p.getName() + "(" + names.get(i) + ");" + CR; + } + } + } + } + corpsCluster = corpsCluster + CR; + nb_block++; + } + + + //fin ajoute DG + + + + + corpsCluster = corpsCluster + "\t// Configure signal tracing." + CR + "\tsca_trace_file* tfp = sca_create_tabular_trace_file(\"" + cluster.getClusterName() + "_tb\");" + CR; diff --git a/src/main/java/syscamstranslator/toSysCAMS/PrimitiveCode.java b/src/main/java/syscamstranslator/toSysCAMS/PrimitiveCode.java index 03552b4092..289030f215 100644 --- a/src/main/java/syscamstranslator/toSysCAMS/PrimitiveCode.java +++ b/src/main/java/syscamstranslator/toSysCAMS/PrimitiveCode.java @@ -602,4 +602,232 @@ public class PrimitiveCode { } return corpsPrimitiveDE; } + + public static String getPrimitiveCodeClock(SysCAMSTBlockClock de) { + corpsPrimitiveClock = ""; + + if (de != null) { + LinkedList<SysCAMSTPortClock> deports = de.getPortClock(); + int cpt = 0; + int cpt2 = 0; + + if ((!de.getTypeTemplate().equals("")) && (!de.getNameTemplate().equals(""))) { + corpsPrimitiveClock = corpsPrimitiveClock + "template<" + de.getTypeTemplate() + " " + de.getNameTemplate() + ">" + CR; + } + //corpsPrimitive = "SCA_TDF_MODULE(" + de.getName() + ") {" + CR2; + corpsPrimitiveClock = corpsPrimitiveClock + "class " + de.getName() + " : public sca_core::sca_module {" + CR2 + "public:" + CR; + + if (!de.getListTypedef().isEmpty()) { + for (int i = 0; i < de.getListTypedef().getSize(); i++) { + String select = de.getListTypedef().get(i); + String[] split = select.split(" : "); + corpsPrimitiveClock = corpsPrimitiveClock + "\ttypedef " + split[1] + "<" + de.getNameTemplate() + "> " + split[0] + ";" + CR; + if (i == de.getListTypedef().getSize()-1) { + corpsPrimitiveClock = corpsPrimitiveClock + CR; + } + } + } + + if (de.getListStruct().getSize() != 0) { + corpsPrimitiveClock = corpsPrimitiveClock + "\tstruct parameters {" + CR; + + String identifier, value, type; + for (int i = 0; i < de.getListStruct().size(); i++) { + String select = de.getListStruct().get(i); + String[] splita = select.split(" = "); + identifier = splita[0]; + String[] splitb = splita[1].split(" : "); + value = splitb[0]; + String[] splitc = splitb[1].split(" "); + if (splitc[0].equals("const")) { + type = splitc[1]; + } else { + type = splitc[0]; + } + corpsPrimitiveClock = corpsPrimitiveClock + "\t\t" + type + " " + identifier + ";" + CR; + } + + corpsPrimitiveClock = corpsPrimitiveClock + "\t\tparameters()" + CR; + + for (int i = 0; i < de.getListStruct().size(); i++) { + String select = de.getListStruct().get(i); + String[] splita = select.split(" = "); + identifier = splita[0]; + String[] splitb = splita[1].split(" : "); + value = splitb[0]; + String[] splitc = splitb[1].split(" "); + if (splitc[0].equals("const")) { + type = splitc[1]; + } else { + type = splitc[0]; + } + if (i == 0) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t\t: " + identifier + "(" + value + ")" + CR; + } + if ((i > 0) && (i < de.getListStruct().getSize()-1)) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t\t, " + identifier + "(" + value + ")" + CR; + } + if (i == de.getListStruct().getSize()-1 && i != 0) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t\t, " + identifier + "(" + value + ")" + CR + "\t\t{}" + CR; + } else { + corpsPrimitiveClock = corpsPrimitiveClock + "\t\t{}" + CR; + } + } + corpsPrimitiveClock = corpsPrimitiveClock + "\t};" + CR2; + } + + if (!deports.isEmpty()) { + for (SysCAMSTPortClock t : deports) { + if (t.getOrigin() == 0) { + corpsPrimitiveClock = corpsPrimitiveClock + "\tsca_core::sca_in<" + t.getClockType() + "> " + t.getName() + ";" + CR; + } else if (t.getOrigin() == 1) { + corpsPrimitiveClock = corpsPrimitiveClock + "\tsca_core::sca_out<" + t.getClockType() + "> " + t.getName() + ";" + CR; + } + } + } + + corpsPrimitiveClock = corpsPrimitiveClock + CR + "\tSC_HAS_PROCESS(" + de.getName() + ");" + CR + + "\texplicit " + de.getName() + "(sc_core::sc_module_name nm"; + + if (de.getListStruct().getSize() != 0) { + corpsPrimitiveClock = corpsPrimitiveClock + ", const parameters& p = parameters())" + CR; + } else { + corpsPrimitiveClock = corpsPrimitiveClock + ")" + CR; + } + + if (!deports.isEmpty() || !de.getListStruct().isEmpty()) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t: "; + if (!deports.isEmpty()) { + for (int i = 0; i < deports.size(); i++) { + if (deports.size() >= 1) { + if (cpt == 0) { + corpsPrimitiveClock = corpsPrimitiveClock + deports.get(i).getName() + "(\"" + deports.get(i).getName() + "\")" + CR; + cpt++; + } else { + corpsPrimitiveClock = corpsPrimitiveClock + "\t, " + deports.get(i).getName() + "(\"" + deports.get(i).getName() + "\")" + CR; + } + } else { + corpsPrimitiveClock = corpsPrimitiveClock + deports.get(i).getName() + "(\"" + deports.get(i).getName() + "\")" + CR; + cpt++; + } + } + } + String identifier; + if (!de.getListStruct().isEmpty()) { + for (int i = 0; i < de.getListStruct().size(); i++) { + String select = de.getListStruct().get(i); + String[] splita = select.split(" = "); + identifier = splita[0]; + if (de.getListStruct().getSize() >= 1) { + if (cpt == 0) { + corpsPrimitiveClock = corpsPrimitiveClock + identifier + "(p." + identifier + ")" + CR; + cpt++; + } else { + corpsPrimitiveClock = corpsPrimitiveClock + "\t, " + identifier + "(p." + identifier + ")" + CR; + } + } else { + corpsPrimitiveClock = corpsPrimitiveClock + identifier + "(p." + identifier + ")" + CR; + cpt++; + } + } + } + } + + boolean sensitive = false, method = false; + if (!de.getCode().equals("")) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t{" + CR + "\t\tSC_METHOD(" + de.getNameFn() + ");" + CR; + method = true; + } + + for (SysCAMSTPortClock t : deports) { + if (t.getSensitive() == true) { + if (method == false) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t{" + CR; + } + corpsPrimitiveClock = corpsPrimitiveClock + "\t\tsensitive << " + t.getName() + "."; + if (t.getSensitiveMethod().equals("positive")) { + corpsPrimitiveClock = corpsPrimitiveClock + "pos();" + CR; + } else if (t.getSensitiveMethod().equals("negative")) { + corpsPrimitiveClock = corpsPrimitiveClock + "neg();" + CR; + } + sensitive = true; + } + } + if (sensitive == true || method == true) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t}" + CR2; + } else { + corpsPrimitiveClock = corpsPrimitiveClock + "\t{}" + CR2; + } + + corpsPrimitiveClock = corpsPrimitiveClock + "private:" + CR; + + if (de.getListStruct().getSize() != 0) { + String identifier, type, constant; + for (int i = 0; i < de.getListStruct().size(); i++) { + String select = de.getListStruct().get(i); + String[] splita = select.split(" = "); + identifier = splita[0]; + String[] splitb = splita[1].split(" : "); + String[] splitc = splitb[1].split(" "); + if (splitc[0].equals("const")) { + constant = splitc[0]; + type = splitc[1]; + } else { + constant = ""; + type = splitc[0]; + } + if (constant.equals("")) { + corpsPrimitiveClock = corpsPrimitiveClock + "\t" + type + " " + identifier + ";" + CR; + } else { + corpsPrimitiveClock = corpsPrimitiveClock + "\t" + constant + " " + type + " " + identifier + ";" + CR; + } + if (i == de.getListStruct().size()-1) { + corpsPrimitiveClock = corpsPrimitiveClock + CR; + } + } + } + + StringBuffer pcbuf = new StringBuffer(de.getCode()); + StringBuffer buffer = new StringBuffer(""); + int tab = 0; + int begin = 0; + + for(int pos = 0; pos != de.getCode().length(); pos++) { + char c = pcbuf.charAt(pos); + switch(c) { + case '\t': + begin = 1; + tab++; + break; + default: + if (begin == 1) { + int i = tab; + while (i >= 0) { + buffer.append("\t"); + i--; + } + buffer.append(pcbuf.charAt(pos)); + begin = 0; + tab = 0; + } else { + if (c == '}') { + buffer.append("\t"); + } + buffer.append(pcbuf.charAt(pos)); + } + break; + } + } + + String pc = buffer.toString(); + corpsPrimitiveClock = corpsPrimitiveClock + "\t" + pc; + + corpsPrimitiveClock = corpsPrimitiveClock + CR + "};" + CR2 + "#endif" + " // " + de.getName().toUpperCase() + "_H"; + } else { + corpsPrimitiveClock = ""; + } + return corpsPrimitiveClock; + } + + } diff --git a/src/main/java/ui/syscams/SysCAMSPortClock.java b/src/main/java/ui/syscams/SysCAMSPortClock.java new file mode 100644 index 0000000000..646d895759 --- /dev/null +++ b/src/main/java/ui/syscams/SysCAMSPortClock.java @@ -0,0 +1,130 @@ +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + +package ui.syscams; + +import java.awt.Graphics; + +import ui.TDiagramPanel; +import ui.TGComponent; + +/** + * Class SysCAMSPortClock + * Primitive port. To be used in SystemC-AMS diagrams + * Creation: 14/05/2018 + * @version 1.0 14/05/2018 + * @author Irina Kit Yan LEE +*/ + +public class SysCAMSPortClock extends SysCAMSPrimitivePort { +// private int period; +// private String time; +// private int rate; +// private int delay; + private int nbits;//DG + private String ClockType; + private boolean sensitive; + private String sensitiveMethod; + + public SysCAMSPortClock(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp) { + super(_x, _y, _minX, _maxX, _minY, _maxY, _pos, _father, _tdp); + } + +// public int getPeriod() { +// return period; +// } +// +// public void setPeriod(int period) { +// this.period = period; +// } +// +// public String getTime() { +// return time; +// } +// +// public void setTime(String time) { +// this.time = time; +// } +// +// public int getRate() { +// return rate; +// } +// +// public void setRate(int rate) { +// this.rate = rate; +// } +// +// public int getDelay() { +// return delay; +// } +// +// public void setDelay(int delay) { +// this.delay = delay; +// } + + public void drawParticularity(Graphics g) { + } + + public String getClockType() { + return ClockType; + } + + public void setClockType(String _ClockType) { + ClockType = _ClockType; + } + + public boolean getSensitive() { + return sensitive; + } + + public int getNbits() { + return nbits; + } + + public void setSensitive(boolean _sensitive) { + sensitive = _sensitive; + } + + public String getSensitiveMethod() { + return sensitiveMethod; + } + + public void setSensitiveMethod(String _sensitiveMethod) { + sensitiveMethod = _sensitiveMethod; + } +} diff --git a/src/main/java/ui/window/JDialogSysCAMSClock.java b/src/main/java/ui/window/JDialogSysCAMSClock.java index b9e1e5df6d..2bba9765c0 100644 --- a/src/main/java/ui/window/JDialogSysCAMSClock.java +++ b/src/main/java/ui/window/JDialogSysCAMSClock.java @@ -1,245 +1,1230 @@ -/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille - * - * ludovic.apvrille AT enst.fr - * - * This software is a computer program whose purpose is to allow the - * edition of TURTLE analysis, design and deployment diagrams, to - * allow the generation of RT-LOTOS or Java code from this diagram, - * and at last to allow the analysis of formal validation traces - * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP - * from INRIA Rhone-Alpes. - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ - -package ui.window; - -import ui.syscams.SysCAMSClock; -import ui.util.*; -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import javax.swing.*; - -/** - * Class JDialogSysCAMSClock - * Dialog for managing of SystemC-AMS Clock - * Creation: 04/06/2019 - * @version 1.0 04/06/2016 - * @author Daniela GENIUS - */ - -@SuppressWarnings("serial") - -public class JDialogSysCAMSClock extends JDialog implements ActionListener { - - private JTextField nameTextField; - private JTextField frequencyTextField; - private JTextField unitTextField; - private JTextField dutyCycleTextField; - - private JTextField startTimeTextField; - private String listUnitString[]; - private String posFirstString[]; - private JComboBox<String> unitComboBoxString; - private JComboBox<String> posFirstComboBoxString; - private SysCAMSClock clock; - - public JDialogSysCAMSClock(SysCAMSClock clock) { - this.setTitle("Setting Clock Attributes"); - this.setLocationRelativeTo(null); - this.setVisible(true); - this.setAlwaysOnTop(true); - this.setResizable(false); - - this.clock = clock; - - getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close"); - getRootPane().getActionMap().put("close", new AbstractAction() { - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - - dialog(); - } - - public void dialog() { - JPanel mainPanel = new JPanel(new BorderLayout()); - this.add(mainPanel); - - JPanel attributesMainPanel = new JPanel(); - mainPanel.add(attributesMainPanel, BorderLayout.NORTH); - - attributesMainPanel.setLayout(new BorderLayout()); - - Box attributesBox = Box.createVerticalBox(); - attributesBox.setBorder(BorderFactory.createTitledBorder("Setting clock attributes")); - - GridBagLayout gridBag = new GridBagLayout(); - GridBagConstraints constraints = new GridBagConstraints(); - JPanel attributesBoxPanel = new JPanel(); - attributesBoxPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); - attributesBoxPanel.setLayout(gridBag); - - JLabel labelName = new JLabel("Name : "); - constraints = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, - new Insets(15, 10, 5, 10), 0, 0); - gridBag.setConstraints(labelName, constraints); - attributesBoxPanel.add(labelName); - - if (clock.getValue().toString().equals("")) { - nameTextField = new JTextField(10); - } else { - nameTextField = new JTextField(clock.getValue().toString(), 10); - } - constraints = new GridBagConstraints(1, 0, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, - new Insets(15, 10, 5, 10), 0, 0); - gridBag.setConstraints(nameTextField, constraints); - attributesBoxPanel.add(nameTextField); - - - - JLabel labelFrequency = new JLabel("Frequency : "); - constraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, - new Insets(15, 10, 5, 10), 0, 0); - gridBag.setConstraints(labelFrequency, constraints); - attributesBoxPanel.add(labelFrequency); - - if (clock.getValue().toString().equals("")) { - nameTextField = new JTextField(10); - } else { - frequencyTextField = new JTextField(clock.getValue().toString(), 10); - } - constraints = new GridBagConstraints(1, 1, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, - new Insets(15, 10, 5, 10), 0, 0); - gridBag.setConstraints(frequencyTextField, constraints); - attributesBoxPanel.add(frequencyTextField); - - - JLabel labelDutyCycle = new JLabel("DutyCycle : "); - constraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, - new Insets(15, 10, 5, 10), 0, 0); - gridBag.setConstraints(labelDutyCycle, constraints); - attributesBoxPanel.add(labelDutyCycle); - - if (clock.getValue().toString().equals("")) { - nameTextField = new JTextField(10); - } else { - frequencyTextField = new JTextField(clock.getValue().toString(), 10); - } - constraints = new GridBagConstraints(1, 1, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, - new Insets(15, 10, 5, 10), 0, 0); - gridBag.setConstraints(frequencyTextField, constraints); - attributesBoxPanel.add(frequencyTextField); - - listUnitString = new String[4]; - listUnitString[0] = "s"; - listUnitString[1] = "ms"; - listUnitString[2] = "\u03BCs"; - listUnitString[3] = "ns"; - unitComboBoxString = new JComboBox<String>(listUnitString); - if (clock.getUnit().equals("") || clock.getUnit().equals("s")) { - unitComboBoxString.setSelectedIndex(0); - } else if (clock.getUnit().equals("ms")){ - unitComboBoxString.setSelectedIndex(1); - } else if (clock.getUnit().equals("\u03BCs")){ - unitComboBoxString.setSelectedIndex(2); - } else if (clock.getUnit().equals("ns")){ - unitComboBoxString.setSelectedIndex(3); - } - unitComboBoxString.setActionCommand("unit"); - unitComboBoxString.addActionListener(this); - constraints = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, - GridBagConstraints.CENTER, - GridBagConstraints.BOTH, - new Insets(5, 10, 5, 10), 0, 0); - gridBag.setConstraints(unitComboBoxString, constraints); - attributesBoxPanel.add(unitComboBoxString); - - posFirstString = new String[2]; - posFirstString[0] = "true"; - posFirstString[1] = "false"; - - posFirstComboBoxString = new JComboBox<String>(posFirstString); - if (clock.getPosFirst().equals("") || clock.getPosFirst().equals("true")) { - posFirstComboBoxString.setSelectedIndex(0); - } else if (clock.getPosFirst().equals("false")){ - posFirstComboBoxString.setSelectedIndex(1); - } - posFirstComboBoxString.setActionCommand("positive edge first"); - posFirstComboBoxString.addActionListener(this); - constraints = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, - GridBagConstraints.CENTER, - GridBagConstraints.BOTH, - new Insets(5, 10, 5, 10), 0, 0); - gridBag.setConstraints(posFirstComboBoxString, constraints); - attributesBoxPanel.add(posFirstComboBoxString); - - attributesBox.add(attributesBoxPanel); - - attributesMainPanel.add(attributesBox, BorderLayout.NORTH); - - JPanel downPanel = new JPanel(new FlowLayout()); - - JButton saveCloseButton = new JButton("Save and close"); - saveCloseButton.setIcon(IconManager.imgic25); - saveCloseButton.setActionCommand("Save_Close"); - saveCloseButton.addActionListener(this); - saveCloseButton.setPreferredSize(new Dimension(200, 30)); - downPanel.add(saveCloseButton); - - JButton cancelButton = new JButton("Cancel"); - cancelButton.setIcon(IconManager.imgic27); - cancelButton.setActionCommand("Cancel"); - cancelButton.addActionListener(this); - cancelButton.setPreferredSize(new Dimension(200, 30)); - downPanel.add(cancelButton); - - mainPanel.add(downPanel, BorderLayout.CENTER); - pack(); - this.getRootPane().setDefaultButton(saveCloseButton); - } - - public void actionPerformed(ActionEvent e) { - clock.setName(nameTextField.getText()); - clock.setFrequency(frequencyTextField.getText()); - clock.setDutyCycle(dutyCycleTextField.getText()); - clock.setStartTime(startTimeTextField.getText()); - clock.setPosFirst((String) posFirstComboBoxString.getSelectedItem()); - clock.setUnit((String) unitComboBoxString.getSelectedItem()); - - if ("Save_Close".equals(e.getActionCommand())) { - clock.setValue(new String(nameTextField.getText())); - this.dispose(); - } - - if ("Cancel".equals(e.getActionCommand())) { - this.dispose(); - } - } -} +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + +package ui.window; + +import ui.syscams.*; +import ui.util.*; +import java.awt.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.*; +import javax.swing.border.*; +import javax.swing.event.*; + +/** + * Class JDialogSystemCAMSBlockDE + * Dialog for managing of SystemC-AMS DE Block + * Creation: 26/04/2018 + * @version 1.0 26/04/2018 + * @author Irina Kit Yan LEE + */ + +@SuppressWarnings("serial") + +public class JDialogSysCAMSClock extends JDialog implements ActionListener, ListSelectionListener { + + private JTextField nameTextField; +// private JTextField periodTextField; +// private String listPeriodString[]; +// private JComboBox<String> periodComboBoxString; + + private JTextField frequencyTextField; + private JTextField unitTextField; + private JTextField dutyCycleTextField; + + private JTextField startTimeTextField; + private String listUnitString[]; + private String posFirstString[]; + private JComboBox<String> unitComboBoxString; + private JComboBox<String> posFirstComboBoxString; + private SysCAMSClock clock; + + private JPanel parametersMainPanel; + private JTextField nameStructTextField; + private JTextField valueStructTextField; + private JRadioButton constantStructRadioButton; + private String listTypeStructString[]; + private JComboBox<String> typeStructComboBoxString; + private ArrayList<String> listTmpStruct; + private JList<String> structList; + private DefaultListModel<String> structListModel; + private boolean structBool = false; + private JTextField nameTemplateTextField; + private JTextField valueTemplateTextField; + private String listTypeTemplateString[]; + private JComboBox<String> typeTemplateComboBoxString; + private JTextField nameTypedefTextField; + private String listTypeTypedefString[]; + private JComboBox<String> typeTypedefComboBoxString; + private JButton addModifyTypedefButton; + private ArrayList<String> listTmpTypedef; + private JList<String> typedefList; + private DefaultListModel<String> typedefListModel; + private boolean typedefBool = false; + + private JButton upButton, downButton, removeButton; + + private JPanel codeMainPanel; + private JTextField nameFnTextField; + private JButton nameFnButton; + private JTextArea codeTextArea; + private String finalString; + + // private SysCAMSClock block; + + public JDialogSysCAMSClock(SysCAMSClock clock) { + this.setTitle("Setting DE Clock Attributes"); + this.setLocationRelativeTo(null); + this.setVisible(true); + this.setAlwaysOnTop(true); + this.setResizable(false); + + this.clock = clock; + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close"); + getRootPane().getActionMap().put("close", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + dialog(); + } + + public StringBuffer encode(String data) { + StringBuffer databuf = new StringBuffer(data); + StringBuffer buffer = new StringBuffer(""); + int endline = 0; + int nb_arobase = 0; + int condition = 0; + + for (int pos = 0; pos != data.length(); pos++) { + char c = databuf.charAt(pos); + switch (c) { + case '\n': + break; + case '\t': + break; + case '{': + buffer.append("{\n"); + endline = 1; + nb_arobase++; + break; + case '}': + if (nb_arobase == 1) { + buffer.append("}\n"); + endline = 0; + } else { + int i = nb_arobase; + while (i >= 1) { + buffer.append("\t"); + i--; + } + buffer.append("}\n"); + endline = 1; + } + nb_arobase--; + break; + case ';': + if (condition == 1) { + buffer.append(";"); + } else { + buffer.append(";\n"); + endline = 1; + } + break; + case ' ': + if (endline == 0) { + buffer.append(databuf.charAt(pos)); + } + break; + case '(': + buffer.append("("); + condition = 1; + break; + case ')': + buffer.append(")"); + condition = 0; + break; + default: + if (endline == 1) { + endline = 0; + int i = nb_arobase; + while (i >= 1) { + buffer.append("\t"); + i--; + } + } + buffer.append(databuf.charAt(pos)); + break; + } + } + return buffer; + } + + public void dialog() { + JPanel mainPanel = new JPanel(new BorderLayout()); + this.add(mainPanel); + + JPanel attributesMainPanel = new JPanel(); + if (clock.getFather() != null) { + JTabbedPane tabbedPane = new JTabbedPane(); + parametersMainPanel = new JPanel(); + codeMainPanel = new JPanel(); + tabbedPane.add("Attributes", attributesMainPanel); + //tabbedPane.add("Parameters", parametersMainPanel); + //tabbedPane.add("Method Code", codeMainPanel); + + mainPanel.add(tabbedPane, BorderLayout.NORTH); + } else { + mainPanel.add(attributesMainPanel, BorderLayout.NORTH); + } + + // --- Attributes ---// + attributesMainPanel.setLayout(new BorderLayout()); + + Box attributesBox = Box.createVerticalBox(); + attributesBox.setBorder(BorderFactory.createTitledBorder("Setting DE clock attributes")); + + GridBagLayout gridBag = new GridBagLayout(); + GridBagConstraints constraints = new GridBagConstraints(); + JPanel attributesBoxPanel = new JPanel(); + attributesBoxPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + attributesBoxPanel.setLayout(gridBag); + + JLabel labelName = new JLabel("Name : "); + constraints = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(labelName, constraints); + attributesBoxPanel.add(labelName); + + if (clock.getValue().toString().equals("")) { + nameTextField = new JTextField(10); + } else { + nameTextField = new JTextField(clock.getValue().toString(), 10); + } + constraints = new GridBagConstraints(1, 0, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(nameTextField, constraints); + attributesBoxPanel.add(nameTextField); + + JLabel labelFrequency = new JLabel("Frequency : "); + constraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(labelFrequency, constraints); + attributesBoxPanel.add(labelFrequency); + + if (clock.getValue().toString().equals("")) { + nameTextField = new JTextField(10); + } else { + frequencyTextField = new JTextField(clock.getValue().toString(), 10); + } + constraints = new GridBagConstraints(1, 1, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(frequencyTextField, constraints); + attributesBoxPanel.add(frequencyTextField); + + + JLabel labelDutyCycle = new JLabel("DutyCycle : "); + constraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(labelDutyCycle, constraints); + attributesBoxPanel.add(labelDutyCycle); + + if (clock.getValue().toString().equals("")) { + nameTextField = new JTextField(10); + } else { + frequencyTextField = new JTextField(clock.getValue().toString(), 10); + } + constraints = new GridBagConstraints(1, 1, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(frequencyTextField, constraints); + attributesBoxPanel.add(frequencyTextField); + + listUnitString = new String[4]; + listUnitString[0] = "s"; + listUnitString[1] = "ms"; + listUnitString[2] = "\u03BCs"; + listUnitString[3] = "ns"; + unitComboBoxString = new JComboBox<String>(listUnitString); + if (clock.getUnit().equals("") || clock.getUnit().equals("s")) { + unitComboBoxString.setSelectedIndex(0); + } else if (clock.getUnit().equals("ms")){ + unitComboBoxString.setSelectedIndex(1); + } else if (clock.getUnit().equals("\u03BCs")){ + unitComboBoxString.setSelectedIndex(2); + } else if (clock.getUnit().equals("ns")){ + unitComboBoxString.setSelectedIndex(3); + } + unitComboBoxString.setActionCommand("unit"); + unitComboBoxString.addActionListener(this); + constraints = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, + GridBagConstraints.CENTER, + GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + gridBag.setConstraints(unitComboBoxString, constraints); + attributesBoxPanel.add(unitComboBoxString); + + posFirstString = new String[2]; + posFirstString[0] = "true"; + posFirstString[1] = "false"; + + posFirstComboBoxString = new JComboBox<String>(posFirstString); + if (clock.getPosFirst().equals("") || clock.getPosFirst().equals("true")) { + posFirstComboBoxString.setSelectedIndex(0); + } else if (clock.getPosFirst().equals("false")){ + posFirstComboBoxString.setSelectedIndex(1); + } + posFirstComboBoxString.setActionCommand("positive edge first"); + posFirstComboBoxString.addActionListener(this); + constraints = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, + GridBagConstraints.CENTER, + GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + gridBag.setConstraints(posFirstComboBoxString, constraints); + attributesBoxPanel.add(posFirstComboBoxString); + +// JLabel periodLabel = new JLabel("Period Tm : "); +// constraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, +// new Insets(5, 10, 15, 10), 0, 0); +// gridBag.setConstraints(periodLabel, constraints); +// attributesBoxPanel.add(periodLabel); +// +// if (clock.getPeriod() == -1) { +// periodTextField = new JTextField(10); +// } else { +// periodTextField = new JTextField("" + clock.getPeriod(), 10); +// } +// constraints = new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, +// new Insets(5, 10, 15, 10), 0, 0); +// gridBag.setConstraints(periodTextField, constraints); +// attributesBoxPanel.add(periodTextField); +// +// listPeriodString = new String[3]; +// listPeriodString[0] = "us"; +// listPeriodString[1] = "ms"; +// listPeriodString[2] = "s"; +// periodComboBoxString = new JComboBox<String>(listPeriodString); +// if (clock.getTime().equals("") || clock.getTime().equals("us")) { +// periodComboBoxString.setSelectedIndex(0); +// } else if (clock.getTime().equals("ms")) { +// periodComboBoxString.setSelectedIndex(1); +// } else if (clock.getTime().equals("s")) { +// periodComboBoxString.setSelectedIndex(2); +// } +// periodComboBoxString.setActionCommand("time"); +// periodComboBoxString.addActionListener(this); +// constraints = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, +// new Insets(5, 10, 15, 10), 0, 0); +// gridBag.setConstraints(periodComboBoxString, constraints); +// attributesBoxPanel.add(periodComboBoxString); + + attributesBox.add(attributesBoxPanel); + attributesMainPanel.add(attributesBox, BorderLayout.NORTH); + + /* if (clock.getFather() != null) { + // --- Parameters ---// + parametersMainPanel.setLayout(new BorderLayout()); + + Box parametersBox = Box.createVerticalBox(); + parametersBox.setBorder(BorderFactory.createTitledBorder("Setting TDF clock parameters")); + + JPanel clockPanel = new JPanel(new GridLayout(3, 1)); + + // Struct + JPanel structPanel = new JPanel(); + structPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + GridBagLayout gridBagParameter = new GridBagLayout(); + GridBagConstraints constraintParameter = new GridBagConstraints(); + structPanel.setLayout(gridBagParameter); + TitledBorder border = new TitledBorder("Struct :"); + border.setTitleJustification(TitledBorder.CENTER); + border.setTitlePosition(TitledBorder.TOP); + structPanel.setBorder(border); + + JLabel nameParameterLabel = new JLabel("identifier"); + constraintParameter = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(nameParameterLabel, constraintParameter); + structPanel.add(nameParameterLabel); + + nameStructTextField = new JTextField(); + constraintParameter = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(nameStructTextField, constraintParameter); + structPanel.add(nameStructTextField); + + JLabel egalLabel = new JLabel("="); + constraintParameter = new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(egalLabel, constraintParameter); + structPanel.add(egalLabel); + + JLabel valueParameterLabel = new JLabel("value"); + constraintParameter = new GridBagConstraints(2, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(valueParameterLabel, constraintParameter); + structPanel.add(valueParameterLabel); + + valueStructTextField = new JTextField(); + constraintParameter = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(valueStructTextField, constraintParameter); + structPanel.add(valueStructTextField); + + JLabel pointsLabel = new JLabel(":"); + constraintParameter = new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(pointsLabel, constraintParameter); + structPanel.add(pointsLabel); + + JLabel constantLabel = new JLabel("const"); + constraintParameter = new GridBagConstraints(4, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(constantLabel, constraintParameter); + structPanel.add(constantLabel); + + constantStructRadioButton = new JRadioButton(); + constantStructRadioButton.setActionCommand("Const"); + constantStructRadioButton.setSelected(false); + constantStructRadioButton.addActionListener(this); + constraintParameter = new GridBagConstraints(4, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(constantStructRadioButton, constraintParameter); + structPanel.add(constantStructRadioButton); + + JLabel typeParameterLabel = new JLabel("type"); + constraintParameter = new GridBagConstraints(5, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(typeParameterLabel, constraintParameter); + structPanel.add(typeParameterLabel); + + listTypeStructString = new String[6]; + listTypeStructString[0] = "bool"; + listTypeStructString[1] = "double"; + listTypeStructString[2] = "float"; + listTypeStructString[3] = "int"; + listTypeStructString[4] = "long"; + listTypeStructString[5] = "short"; + typeStructComboBoxString = new JComboBox<String>(listTypeStructString); + typeStructComboBoxString.setSelectedIndex(0); + typeStructComboBoxString.addActionListener(this); + constraintParameter = new GridBagConstraints(5, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(typeStructComboBoxString, constraintParameter); + structPanel.add(typeStructComboBoxString); + + JButton addModifyButton = new JButton("Add / Modify parameter"); + addModifyButton.setActionCommand("Add_Modify_Struct"); + addModifyButton.addActionListener(this); + constraintParameter = new GridBagConstraints(0, 2, 6, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + gridBagParameter.setConstraints(addModifyButton, constraintParameter); + structPanel.add(addModifyButton); + + clockPanel.add(structPanel); + + // Template + JPanel templatePanel = new JPanel(); + templatePanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + GridBagLayout templateGridBag = new GridBagLayout(); + GridBagConstraints templateConstraint = new GridBagConstraints(); + templatePanel.setLayout(templateGridBag); + TitledBorder templateBorder = new TitledBorder("Template :"); + templateBorder.setTitleJustification(TitledBorder.CENTER); + templateBorder.setTitlePosition(TitledBorder.TOP); + templatePanel.setBorder(templateBorder); + + JLabel nameTemplateLabel = new JLabel("identifier"); + templateConstraint = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(nameTemplateLabel, templateConstraint); + templatePanel.add(nameTemplateLabel); + + nameTemplateTextField = new JTextField(clock.getNameTemplate()); + templateConstraint = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(nameTemplateTextField, templateConstraint); + templatePanel.add(nameTemplateTextField); + + //CHANGES + JLabel egalTemplateLabel = new JLabel("="); + templateConstraint = new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(egalTemplateLabel, templateConstraint); + templatePanel.add(egalTemplateLabel); + + JLabel valueTemplateLabel = new JLabel("value"); + templateConstraint = new GridBagConstraints(2, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(valueTemplateLabel, templateConstraint); + templatePanel.add(valueTemplateLabel); + + valueTemplateTextField = new JTextField(clock.getValueTemplate()); + templateConstraint = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(valueTemplateTextField, templateConstraint); + templatePanel.add(valueTemplateTextField); + //CHANGES + + JLabel pointsTemplateLabel = new JLabel(":"); + templateConstraint = new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(pointsTemplateLabel, templateConstraint); + templatePanel.add(pointsTemplateLabel); + + JLabel typeTemplateLabel = new JLabel("type"); + templateConstraint = new GridBagConstraints(4, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(typeTemplateLabel, templateConstraint); + templatePanel.add(typeTemplateLabel); + + listTypeTemplateString = new String[1]; + listTypeTemplateString[0] = "int"; + typeTemplateComboBoxString = new JComboBox<String>(listTypeTemplateString); + if (clock.getTypeTemplate().equals("int") || clock.getTypeTemplate().equals("")) { + typeTemplateComboBoxString.setSelectedIndex(0); + } + typeTemplateComboBoxString.addActionListener(this); + templateConstraint = new GridBagConstraints(4, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(typeTemplateComboBoxString, templateConstraint); + templatePanel.add(typeTemplateComboBoxString); + + JButton OKButton = new JButton("OK"); + OKButton.setActionCommand("OK"); + OKButton.addActionListener(this); + templateConstraint = new GridBagConstraints(0, 2, 3, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + templateGridBag.setConstraints(OKButton, templateConstraint); + templatePanel.add(OKButton); + + clockPanel.add(templatePanel); + + // Typedef + JPanel typedefPanel = new JPanel(); + typedefPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + GridBagLayout typedefGridBag = new GridBagLayout(); + GridBagConstraints typedefConstraint = new GridBagConstraints(); + typedefPanel.setLayout(typedefGridBag); + TitledBorder typedefBorder = new TitledBorder("Typedef :"); + typedefBorder.setTitleJustification(TitledBorder.CENTER); + typedefBorder.setTitlePosition(TitledBorder.TOP); + typedefPanel.setBorder(typedefBorder); + + JLabel nameTypedefLabel = new JLabel("identifier"); + typedefConstraint = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + typedefGridBag.setConstraints(nameTypedefLabel, typedefConstraint); + typedefPanel.add(nameTypedefLabel); + + nameTypedefTextField = new JTextField(); + if (clock.getListTypedef().isEmpty()) { + nameTypedefTextField.setEditable(false); + } else { + nameTypedefTextField.setEditable(true); + } + typedefConstraint = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + typedefGridBag.setConstraints(nameTypedefTextField, typedefConstraint); + typedefPanel.add(nameTypedefTextField); + + JLabel pointsTypedefLabel = new JLabel(":"); + typedefConstraint = new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + typedefGridBag.setConstraints(pointsTypedefLabel, typedefConstraint); + typedefPanel.add(pointsTypedefLabel); + + JLabel typeTypedefLabel = new JLabel("type"); + typedefConstraint = new GridBagConstraints(2, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + typedefGridBag.setConstraints(typeTypedefLabel, typedefConstraint); + typedefPanel.add(typeTypedefLabel); + + listTypeTypedefString = new String[1]; + listTypeTypedefString[0] = "sc_dt::sc_int"; + typeTypedefComboBoxString = new JComboBox<String>(listTypeTypedefString); + typeTypedefComboBoxString.setSelectedIndex(0); + if (clock.getListTypedef().isEmpty()) { + typeTypedefComboBoxString.setEnabled(false); + } else { + typeTypedefComboBoxString.setEnabled(true); + } + typeTypedefComboBoxString.addActionListener(this); + typedefConstraint = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + typedefGridBag.setConstraints(typeTypedefComboBoxString, typedefConstraint); + typedefPanel.add(typeTypedefComboBoxString); + + addModifyTypedefButton = new JButton("Add / Modify typedef"); + addModifyTypedefButton.setActionCommand("Add_Modify_Typedef"); + addModifyTypedefButton.addActionListener(this); + if (clock.getListTypedef().isEmpty()) { + addModifyTypedefButton.setEnabled(false); + } else { + addModifyTypedefButton.setEnabled(true); + } + typedefConstraint = new GridBagConstraints(0, 2, 3, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + typedefGridBag.setConstraints(addModifyTypedefButton, typedefConstraint); + typedefPanel.add(addModifyTypedefButton); + + clockPanel.add(typedefPanel); + + parametersBox.add(clockPanel); + parametersMainPanel.add(parametersBox, BorderLayout.WEST); + + Box managingParametersBox = Box.createVerticalBox(); + + JPanel managingParameterBoxPanel = new JPanel(new GridLayout(3, 1)); + managingParameterBoxPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + + JPanel listStructPanel = new JPanel(); + TitledBorder listStructBorder = new TitledBorder("Managing struct :"); + listStructBorder.setTitleJustification(TitledBorder.CENTER); + listStructBorder.setTitlePosition(TitledBorder.TOP); + listStructPanel.setBorder(listStructBorder); + + structListModel = clock.getListStruct(); + structList = new JList<String>(structListModel); + structList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + structList.setLayoutOrientation(JList.VERTICAL); + structList.setSelectedIndex(-1); + structList.setVisibleRowCount(5); + structList.addListSelectionListener(this); + JScrollPane scrollPane = new JScrollPane(structList); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + scrollPane.setPreferredSize(new Dimension(300, 100)); + listStructPanel.add(scrollPane); + managingParameterBoxPanel.add(listStructPanel); + + JPanel listTypedefPanel = new JPanel(); + TitledBorder listTypedefBorder = new TitledBorder("Managing typedef :"); + listTypedefBorder.setTitleJustification(TitledBorder.CENTER); + listTypedefBorder.setTitlePosition(TitledBorder.TOP); + listTypedefPanel.setBorder(listTypedefBorder); + + typedefListModel = clock.getListTypedef(); + typedefList = new JList<String>(typedefListModel); + typedefList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + typedefList.setLayoutOrientation(JList.VERTICAL); + typedefList.setSelectedIndex(-1); + typedefList.setVisibleRowCount(5); + typedefList.addListSelectionListener(this); + JScrollPane typedefScrollPane = new JScrollPane(typedefList); + typedefScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + typedefScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + typedefScrollPane.setPreferredSize(new Dimension(300, 100)); + listTypedefPanel.add(typedefScrollPane); + managingParameterBoxPanel.add(listTypedefPanel); + + GridBagLayout buttonGridBag = new GridBagLayout(); + GridBagConstraints buttonconstraints = new GridBagConstraints(); + JPanel buttonPanel = new JPanel(); + buttonPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + buttonPanel.setLayout(buttonGridBag); + + upButton = new JButton("Up"); + upButton.setActionCommand("Up"); + upButton.setEnabled(false); + upButton.addActionListener(this); + buttonconstraints = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + buttonGridBag.setConstraints(upButton, buttonconstraints); + buttonPanel.add(upButton); + + downButton = new JButton("Down"); + downButton.setActionCommand("Down"); + downButton.setEnabled(false); + downButton.addActionListener(this); + buttonconstraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 5, 10), 0, 0); + buttonGridBag.setConstraints(downButton, buttonconstraints); + buttonPanel.add(downButton); + + removeButton = new JButton("Remove parameter"); + removeButton.setActionCommand("Remove"); + removeButton.setEnabled(false); + removeButton.addActionListener(this); + buttonconstraints = new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, + new Insets(5, 10, 15, 10), 0, 0); + buttonGridBag.setConstraints(removeButton, buttonconstraints); + buttonPanel.add(removeButton); + + managingParameterBoxPanel.add(buttonPanel); + + managingParametersBox.add(managingParameterBoxPanel); + parametersMainPanel.add(managingParametersBox, BorderLayout.EAST); + */ + // --- ProcessCode ---// + /* codeMainPanel.setLayout(new BorderLayout()); + + Box codeBox = Box.createVerticalBox(); + codeBox.setBorder(BorderFactory.createTitledBorder("Behavior function of DE clock")); + + JPanel codeBoxPanel = new JPanel(new BorderLayout()); + + GridBagLayout nameGridBag = new GridBagLayout(); + GridBagConstraints nameConstraints = new GridBagConstraints(); + JPanel namePanel = new JPanel(); + namePanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + namePanel.setLayout(nameGridBag); + + JLabel nameFnLabel = new JLabel("Name of the method :"); + nameConstraints = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + nameGridBag.setConstraints(nameFnLabel, nameConstraints); + namePanel.add(nameFnLabel); + + nameFnTextField = new JTextField(clock.getNameFn(), 20); + nameConstraints = new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + nameGridBag.setConstraints(nameFnTextField, nameConstraints); + namePanel.add(nameFnTextField); + + nameFnButton = new JButton("OK"); + nameFnButton.setActionCommand("Name_OK"); + nameFnButton.addActionListener(this); + nameConstraints = new GridBagConstraints(2, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + nameGridBag.setConstraints(nameFnButton, nameConstraints); + namePanel.add(nameFnButton); + + codeBoxPanel.add(namePanel, BorderLayout.NORTH); + + StringBuffer stringbuf = encode(clock.getCode()); + String beginString = stringbuf.toString(); + finalString = beginString.replaceAll("\t}", "}"); + + codeTextArea = new JTextArea(finalString); + codeTextArea.setSize(100, 100); + codeTextArea.setTabSize(2); + + codeTextArea.setFont(new Font("Arial", Font.PLAIN, 16)); + codeTextArea.setLineWrap(true); + codeTextArea.setWrapStyleWord(true); + + JScrollPane codeScrollPane = new JScrollPane(codeTextArea); + codeScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + codeScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + codeScrollPane.setPreferredSize(new Dimension(200, 300)); + codeScrollPane.setBorder(new EmptyBorder(15, 10, 15, 10)); + + codeBoxPanel.add(codeScrollPane, BorderLayout.SOUTH); + + codeBox.add(codeBoxPanel); + codeMainPanel.add(codeBox, BorderLayout.PAGE_START); + }*/ + + // -- Button -- / + JPanel downPanel = new JPanel(new FlowLayout()); + + JButton saveCloseButton = new JButton("Save and close"); + saveCloseButton.setIcon(IconManager.imgic25); + saveCloseButton.setActionCommand("Save_Close"); + saveCloseButton.addActionListener(this); + saveCloseButton.setPreferredSize(new Dimension(200, 30)); + downPanel.add(saveCloseButton); + + JButton cancelButton = new JButton("Cancel"); + cancelButton.setIcon(IconManager.imgic27); + cancelButton.setActionCommand("Cancel"); + cancelButton.addActionListener(this); + cancelButton.setPreferredSize(new Dimension(200, 30)); + downPanel.add(cancelButton); + + mainPanel.add(downPanel, BorderLayout.CENTER); + pack(); + this.getRootPane().setDefaultButton(saveCloseButton); + } + + public void actionPerformed(ActionEvent e) { + + clock.setName(nameTextField.getText()); + clock.setFrequency(frequencyTextField.getText()); + clock.setDutyCycle(dutyCycleTextField.getText()); + clock.setStartTime(startTimeTextField.getText()); + clock.setPosFirst((String) posFirstComboBoxString.getSelectedItem()); + clock.setUnit((String) unitComboBoxString.getSelectedItem()); + + if ("Name_OK".equals(e.getActionCommand())) { + if (!nameFnTextField.getText().equals("")) { + codeTextArea.setText("void " + nameFnTextField.getText() + "() {\n\n}"); + } else { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "This method has no name. Please add a name for this method.", "Warning !", + JOptionPane.WARNING_MESSAGE); + } + } + if (clock.getFather() != null) { + if ("OK".equals(e.getActionCommand())) { + nameTypedefTextField.setEditable(true); + typeTypedefComboBoxString.setEnabled(true); + addModifyTypedefButton.setEnabled(true); + } + + if ("Add_Modify_Struct".equals(e.getActionCommand())) { + listTmpStruct = new ArrayList<String>(); + Boolean alreadyExist = false; + int alreadyExistId = -1; + String type = (String) typeStructComboBoxString.getSelectedItem(); + String s = null; + + Boolean valueBoolean = false, valueInteger = false, valueDouble = false, valueLong = false, nameEmpty = false; + + if (nameStructTextField.getText().isEmpty()) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The name of struct is empty", "Warning !", + JOptionPane.WARNING_MESSAGE); + nameEmpty = true; + } + + for (int i = 0; i < structListModel.getSize(); i++) { + if (nameStructTextField.getText().equals(structListModel.elementAt(i).split("\\s")[0])) { + alreadyExist = true; + alreadyExistId = i; + } + } + + if (alreadyExist == false) { + try { + if (type.equals("bool")) { + Boolean.parseBoolean(valueStructTextField.getText()); + } else if (type.equals("double")) { + Double.parseDouble(valueStructTextField.getText()); + } else if (type.equals("float")) { + Float.parseFloat(valueStructTextField.getText()); + } else if (type.equals("int")) { + Integer.parseInt(valueStructTextField.getText()); + } else if (type.equals("long")) { + Long.parseLong(valueStructTextField.getText()); + } else if (type.equals("short")) { + Short.parseShort(valueStructTextField.getText()); + } + } catch (NumberFormatException e1) { + if (type.equals("bool")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Boolean", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueBoolean = true; + } else if (type.equals("double")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameteris not a Double", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueInteger = true; + } else if (type.equals("float")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameteris not a Float", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueInteger = true; + } else if (type.equals("int")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Integer", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueDouble = true; + } else if (type.equals("long")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Long", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueLong = true; + } else if (type.equals("short")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Short", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueLong = true; + } + } + + if ((valueBoolean == false) && (valueInteger == false) && (valueDouble == false) && (valueLong == false) && (nameEmpty == false)) { + s = nameStructTextField.getText() + " = "; + + if (type.equals("bool")) { + s = s + Boolean.parseBoolean(valueStructTextField.getText()) + " : "; + } else if (type.equals("double")) { + s = s + Double.parseDouble(valueStructTextField.getText()) + " : "; + } else if (type.equals("float")) { + s = s + Float.parseFloat(valueStructTextField.getText()) + " : "; + } else if (type.equals("int")) { + s = s + Integer.parseInt(valueStructTextField.getText()) + " : "; + } else if (type.equals("long")) { + s = s + Long.parseLong(valueStructTextField.getText()) + " : "; + } else if (type.equals("short")) { + s = s + Short.parseShort(valueStructTextField.getText()) + " : "; + } + + if (constantStructRadioButton.isSelected()) { + s = s + "const " + type; + } else { + s = s + type; + } + structListModel.addElement(s); + listTmpStruct.add(s); + } + } else { + try { + if (type.equals("bool")) { + Boolean.parseBoolean(valueStructTextField.getText()); + } else if (type.equals("double")) { + Double.parseDouble(valueStructTextField.getText()); + } else if (type.equals("float")) { + Float.parseFloat(valueStructTextField.getText()); + } else if (type.equals("int")) { + Integer.parseInt(valueStructTextField.getText()); + } else if (type.equals("long")) { + Long.parseLong(valueStructTextField.getText()); + } else if (type.equals("short")) { + Short.parseShort(valueStructTextField.getText()); + } + } catch (NumberFormatException e1) { + if (type.equals("bool")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Boolean", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueBoolean = true; + } else if (type.equals("double")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameteris not a Double", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueInteger = true; + } else if (type.equals("float")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameteris not a Float", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueInteger = true; + } else if (type.equals("int")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Integer", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueDouble = true; + } else if (type.equals("long")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Long", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueLong = true; + } else if (type.equals("short")) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The value of the parameter is not a Short", "Warning !", + JOptionPane.WARNING_MESSAGE); + valueLong = true; + } + } + + if ((valueBoolean == false) && (valueInteger == false) && (valueDouble == false) && (valueLong == false) && (nameEmpty == false)) { + s = nameStructTextField.getText() + " = "; + + if (type.equals("bool")) { + s = s + Boolean.parseBoolean(valueStructTextField.getText()) + " : "; + } else if (type.equals("double")) { + s = s + Double.parseDouble(valueStructTextField.getText()) + " : "; + } else if (type.equals("float")) { + s = s + Float.parseFloat(valueStructTextField.getText()) + " : "; + } else if (type.equals("int")) { + s = s + Integer.parseInt(valueStructTextField.getText()) + " : "; + } else if (type.equals("long")) { + s = s + Long.parseLong(valueStructTextField.getText()) + " : "; + } else if (type.equals("short")) { + s = s + Short.parseShort(valueStructTextField.getText()) + " : "; + } + + if (constantStructRadioButton.isSelected()) { + s = s + "const " + type; + } else { + s = s + type; + } + structListModel.setElementAt(s, alreadyExistId); + listTmpStruct.add(s); + } + } + } + + if ("Add_Modify_Typedef".equals(e.getActionCommand())) { + listTmpTypedef = new ArrayList<String>(); + Boolean alreadyExist = false; + int alreadyExistId = -1; + String type = (String) typeTypedefComboBoxString.getSelectedItem(); + String s = null; + + Boolean nameEmpty = false; + + if (nameTypedefTextField.getText().isEmpty()) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "The name of typedef is empty", "Warning !", + JOptionPane.WARNING_MESSAGE); + nameEmpty = true; + } + + if (nameEmpty == false) { + for (int i = 0; i < typedefListModel.getSize(); i++) { + if (nameTypedefTextField.getText().equals(typedefListModel.elementAt(i).split("\\s")[0])) { + alreadyExist = true; + alreadyExistId = i; + } + } + + if (alreadyExist == false) { + s = nameTypedefTextField.getText() + " : " + type; + typedefListModel.addElement(s); + listTmpTypedef.add(s); + } else { + s = nameTypedefTextField.getText() + " : " + type; + typedefListModel.setElementAt(s, alreadyExistId); + listTmpTypedef.add(s); + } + } + } + + + if ("Remove".equals(e.getActionCommand())) { + if (structBool == true) { + if (structListModel.getSize() >= 1) { + structListModel.remove(structList.getSelectedIndex()); + } + } + if (typedefBool == true) { + if (typedefListModel.getSize() >= 1) { + typedefListModel.remove(typedefList.getSelectedIndex()); + } + } + } + + if ("Up".equals(e.getActionCommand())) { + if (structBool == true) { + if (structList.getSelectedIndex() >= 1) { + String sprev = structListModel.get(structList.getSelectedIndex()-1); + structListModel.remove(structList.getSelectedIndex()-1); + structListModel.add(structList.getSelectedIndex()+1, sprev); + } else { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "Cannot move the parameter up", "Warning !", + JOptionPane.WARNING_MESSAGE); + } + } + if (typedefBool == true) { + if (typedefList.getSelectedIndex() >= 1) { + String sprev = typedefListModel.get(typedefList.getSelectedIndex()-1); + typedefListModel.remove(typedefList.getSelectedIndex()-1); + typedefListModel.add(typedefList.getSelectedIndex()+1, sprev); + } else { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "Cannot move the parameter up", "Warning !", + JOptionPane.WARNING_MESSAGE); + } + } + } + + if ("Down".equals(e.getActionCommand())) { + if (structBool == true) { + if (structList.getSelectedIndex() < structListModel.getSize()-1) { + String snext = structListModel.get(structList.getSelectedIndex()+1); + structListModel.remove(structList.getSelectedIndex()+1); + structListModel.add(structList.getSelectedIndex(), snext); + } else { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "Cannot move the parameter down", "Warning !", + JOptionPane.WARNING_MESSAGE); + } + } + if (typedefBool == true) { + if (typedefList.getSelectedIndex() < typedefListModel.getSize()-1) { + String snext = typedefListModel.get(typedefList.getSelectedIndex()+1); + typedefListModel.remove(typedefList.getSelectedIndex()+1); + typedefListModel.add(typedefList.getSelectedIndex(), snext); + } else { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "Cannot move the parameter down", "Warning !", + JOptionPane.WARNING_MESSAGE); + } + } + } + } + + if ("Save_Close".equals(e.getActionCommand())) { + clock.setValue(new String(nameTextField.getText())); + +// if (!(periodTextField.getText().isEmpty())) { +// Boolean periodValueInteger = false; +// try { +// Integer.parseInt(periodTextField.getText()); +// } catch (NumberFormatException e1) { +// JDialog msg = new JDialog(this); +// msg.setLocationRelativeTo(null); +// JOptionPane.showMessageDialog(msg, "Period Tm is not a Integer", "Warning !", +// JOptionPane.WARNING_MESSAGE); +// periodValueInteger = true; +// } +// if (periodValueInteger == false) { +// clock.setPeriod(Integer.parseInt(periodTextField.getText())); +// clock.setTime((String) periodComboBoxString.getSelectedItem()); +// } +// } else { +// clock.setPeriod(-1); +// clock.setTime(""); +// } + + if (clock.getFather() != null) { + clock.setListStruct(structListModel); + clock.setNameTemplate(nameTemplateTextField.getText()); + clock.setTypeTemplate((String) typeTemplateComboBoxString.getSelectedItem()); + clock.setValueTemplate(valueTemplateTextField.getText()); + clock.setListTypedef(typedefListModel); + clock.setNameFn(nameFnTextField.getText()); + clock.setCode(codeTextArea.getText()); + } + + this.dispose(); + } + + if ("Cancel".equals(e.getActionCommand())) { + if (clock.getFather() != null) { + if (listTmpStruct != null) { + for (String s : listTmpStruct) { + structListModel.removeElement(s); + } + } + if (listTmpTypedef != null) { + for (String s : listTmpTypedef) { + typedefListModel.removeElement(s); + } + } + } + this.dispose(); + } + } + + public void valueChanged(ListSelectionEvent e) { + JList listTmp = (JList) e.getSource(); + if (listTmp.equals(structList)) { + structBool = true; + typedefBool = false; + } + if (listTmp.equals(typedefList)) { + typedefBool = true; + structBool = false; + } + + if (e.getValueIsAdjusting() == false) { + if (structBool == true) { + if (structList.getSelectedIndex() != -1) { + String select = structListModel.get(structList.getSelectedIndex()); + String[] splita = select.split(" = "); + nameStructTextField.setText(splita[0]); + String[] splitb = splita[1].split(" : "); + valueStructTextField.setText(splitb[0]); + String[] splitc = splitb[1].split(" "); + + if (splitc[0].equals("const")) { + constantStructRadioButton.setSelected(true); + if (splitc[1].equals("bool")) { + typeStructComboBoxString.setSelectedIndex(0); + } else if (splitc[1].equals("double")) { + typeStructComboBoxString.setSelectedIndex(1); + } else if (splitc[1].equals("float")) { + typeStructComboBoxString.setSelectedIndex(2); + } else if (splitc[1].equals("int")) { + typeStructComboBoxString.setSelectedIndex(3); + } else if (splitc[1].equals("long")) { + typeStructComboBoxString.setSelectedIndex(4); + } else if (splitc[1].equals("short")) { + typeStructComboBoxString.setSelectedIndex(5); + } + } else { + constantStructRadioButton.setSelected(false); + if (splitc[0].equals("bool")) { + typeStructComboBoxString.setSelectedIndex(0); + } else if (splitc[0].equals("double")) { + typeStructComboBoxString.setSelectedIndex(1); + } else if (splitc[0].equals("float")) { + typeStructComboBoxString.setSelectedIndex(2); + } else if (splitc[0].equals("int")) { + typeStructComboBoxString.setSelectedIndex(3); + } else if (splitc[0].equals("long")) { + typeStructComboBoxString.setSelectedIndex(4); + } else if (splitc[0].equals("short")) { + typeStructComboBoxString.setSelectedIndex(5); + } + } + + if (structListModel.getSize() >= 2) { + upButton.setEnabled(true); + downButton.setEnabled(true); + } + removeButton.setEnabled(true); + } + } + + if (typedefBool == true) { + if (typedefList.getSelectedIndex() != -1) { + String select = typedefListModel.get(typedefList.getSelectedIndex()); + String[] split = select.split(" : "); + nameTypedefTextField.setText(split[0]); + + if (split[1].equals("sc_dt::sc_int")) { + typeTypedefComboBoxString.setSelectedIndex(0); + } + + if (typedefListModel.getSize() >= 2) { + upButton.setEnabled(true); + downButton.setEnabled(true); + } + removeButton.setEnabled(true); + } + } + } + } +} diff --git a/src/main/java/ui/window/JDialogSysCAMSPortClock.java b/src/main/java/ui/window/JDialogSysCAMSPortClock.java new file mode 100644 index 0000000000..0052a88aa2 --- /dev/null +++ b/src/main/java/ui/window/JDialogSysCAMSPortClock.java @@ -0,0 +1,451 @@ +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + +package ui.window; + +import ui.syscams.*; +import ui.util.*; +import java.awt.*; +import java.awt.event.*; +import java.util.ArrayList; + +import javax.swing.*; + +/** + * Class JDialogSystemCAMSPortClock + * Dialog for managing of SystemC-AMS Clock Port + * Creation: 07/05/2018 + * @version 1.0 07/05/2018 + * @author Irina Kit Yan LEE + */ + +@SuppressWarnings("serial") + +public class JDialogSysCAMSPortClock extends JDialog implements ActionListener { + private JTextField nameTextField; + + + // private JTextField periodTextField; + // private String listPeriodString[]; + // private JComboBox<String> periodComboBoxString; + // private JTextField rateTextField; + // private JTextField delayTextField; + private JTextField nbitsTextField; + private ArrayList<String> listArrayTypeString; + private JComboBox<String> typeComboBoxString; + private String listOriginString[]; + private JComboBox<String> originComboBoxString; + private JRadioButton sensitiveRadioButton; + private String listSensitiveString[]; + private JComboBox<String> sensitiveComboBoxString; + + private SysCAMSPortClock port; + + public JDialogSysCAMSPortClock(SysCAMSPortClock port) { + this.setTitle("Setting Clock Ports"); + this.setLocationRelativeTo(null); + this.setVisible(true); + this.setAlwaysOnTop(true); + this.setResizable(false); + + this.port = port; + + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close"); + getRootPane().getActionMap().put("close", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + dialog(); + } + + public void dialog() { + JPanel mainPanel = new JPanel(new BorderLayout()); + this.add(mainPanel); + + JPanel attributesMainPanel = new JPanel(new GridLayout()); + mainPanel.add(attributesMainPanel, BorderLayout.NORTH); + + Box box = Box.createVerticalBox(); + box.setBorder(BorderFactory.createTitledBorder("Setting Clock port attributes")); + + GridBagLayout gridBag = new GridBagLayout(); + GridBagConstraints constraints = new GridBagConstraints(); + JPanel boxPanel = new JPanel(); + boxPanel.setFont(new Font("Helvetica", Font.PLAIN, 14)); + boxPanel.setLayout(gridBag); + + JLabel labelName = new JLabel("Name : "); + constraints = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(labelName, constraints); + boxPanel.add(labelName); + + if (port.getPortName().toString().equals("")) { + nameTextField = new JTextField(10); + } else { + nameTextField = new JTextField(port.getPortName().toString(), 10); + } + constraints = new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(nameTextField, constraints); + boxPanel.add(nameTextField); + + JLabel nbitsLabel = new JLabel("Nbits : "); + constraints = new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, + GridBagConstraints.CENTER, + GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + gridBag.setConstraints(nbitsLabel, constraints); + boxPanel.add(nbitsLabel); + + if (port.getNbits() == -1) { + nbitsTextField = new JTextField(10); + } else { + nbitsTextField = new JTextField("" + port.getNbits(), 10); + } + constraints = new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, + GridBagConstraints.CENTER, + GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + gridBag.setConstraints(nbitsTextField, constraints); + boxPanel.add(nbitsTextField); + + // + // listPeriodString = new String[3]; + // listPeriodString[0] = "us"; + // listPeriodString[1] = "ms"; + // listPeriodString[2] = "s"; + // periodComboBoxString = new JComboBox<String>(listPeriodString); + // if (port.getTime().equals("") || port.getTime().equals("us")) { + // periodComboBoxString.setSelectedIndex(0); + // } else if (port.getTime().equals("ms")){ + // periodComboBoxString.setSelectedIndex(1); + // } else { + // periodComboBoxString.setSelectedIndex(2); + // } + // periodComboBoxString.setActionCommand("time"); + // periodComboBoxString.addActionListener(this); + // constraints = new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, + // GridBagConstraints.CENTER, + // GridBagConstraints.BOTH, + // new Insets(5, 10, 5, 10), 0, 0); + // gridBag.setConstraints(periodComboBoxString, constraints); + // boxPanel.add(periodComboBoxString); + // + // JLabel rateLabel = new JLabel("Rate : "); + // constraints = new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0, + // GridBagConstraints.CENTER, + // GridBagConstraints.BOTH, + // new Insets(5, 10, 5, 10), 0, 0); + // gridBag.setConstraints(rateLabel, constraints); + // boxPanel.add(rateLabel); + // + // if (port.getRate() == -1) { + // rateTextField = new JTextField(10); + // } else { + // rateTextField = new JTextField("" + port.getRate(), 10); + // } + // constraints = new GridBagConstraints(1, 2, 2, 1, 1.0, 1.0, + // GridBagConstraints.CENTER, + // GridBagConstraints.BOTH, + // new Insets(5, 10, 5, 10), 0, 0); + // gridBag.setConstraints(rateTextField, constraints); + // boxPanel.add(rateTextField); + // + // JLabel delayLabel = new JLabel("Delay : "); + // constraints = new GridBagConstraints(0, 3, 1, 1, 1.0, 1.0, + // GridBagConstraints.CENTER, + // GridBagConstraints.BOTH, + // new Insets(5, 10, 5, 10), 0, 0); + // gridBag.setConstraints(delayLabel, constraints); + // boxPanel.add(delayLabel); + // + // if (port.getDelay() == -1) { + // delayTextField = new JTextField(10); + // } else { + // delayTextField = new JTextField("" + port.getDelay(), 10); + // } + // constraints = new GridBagConstraints(1, 3, 2, 1, 1.0, 1.0, + // GridBagConstraints.CENTER, + // GridBagConstraints.BOTH, + // new Insets(5, 10, 5, 10), 0, 0); + // gridBag.setConstraints(delayTextField, constraints); + // boxPanel.add(delayTextField); + + JLabel typeLabel = new JLabel("Type : "); + constraints = new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + gridBag.setConstraints(typeLabel, constraints); + boxPanel.add(typeLabel); + + listArrayTypeString = new ArrayList<String>(); + listArrayTypeString.add("int"); + listArrayTypeString.add("bool"); + listArrayTypeString.add("double"); + listArrayTypeString.add("sc_uint<N>"); + if (port.getFather() != null) { + if (port.getFather() instanceof SysCAMSClock) { + if (!((SysCAMSClock) port.getFather()).getListTypedef().isEmpty()) { + for (int i = 0; i < ((SysCAMSClock) port.getFather()).getListTypedef().getSize(); i++) { + String select = ((SysCAMSClock) port.getFather()).getListTypedef().get(i); + String[] split = select.split(" : "); + listArrayTypeString.add(split[0]); + } + } + if ((!((SysCAMSClock) port.getFather()).getNameTemplate().equals("")) && (!((SysCAMSClock) port.getFather()).getTypeTemplate().equals("")) + && ((SysCAMSClock) port.getFather()).getListTypedef().isEmpty()) { + listArrayTypeString.add("sc_dt::sc_int<"+((SysCAMSClock) port.getFather()).getNameTemplate()+">"); + } + } + } + typeComboBoxString = new JComboBox<String>(); + for (int i = 0; i < listArrayTypeString.size(); i++) { + typeComboBoxString.addItem(listArrayTypeString.get(i)); + } + for (int i = 0; i < listArrayTypeString.size(); i++) { + if (port.getClockType().equals("")) { + typeComboBoxString.setSelectedIndex(0); + } + if (port.getClockType().equals(listArrayTypeString.get(i))) { + typeComboBoxString.setSelectedIndex(i); + } + } + typeComboBoxString.addActionListener(this); + constraints = new GridBagConstraints(1, 2, 2, 1, 1.0, 1.0, + GridBagConstraints.CENTER, + GridBagConstraints.BOTH, + new Insets(5, 10, 5, 10), 0, 0); + gridBag.setConstraints(typeComboBoxString, constraints); + boxPanel.add(typeComboBoxString); + + JLabel orginLabel = new JLabel("Origin : "); + constraints = new GridBagConstraints(0, 3, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(5, 10, 15, 10), 0, 0); + gridBag.setConstraints(orginLabel, constraints); + boxPanel.add(orginLabel); + + listOriginString = new String[2]; + listOriginString[0] = "Input"; + listOriginString[1] = "Output"; + originComboBoxString = new JComboBox<String>(listOriginString); + if (port.getOrigin() == 0 || port.getOrigin() == -1) { + originComboBoxString.setSelectedIndex(0); + } else { + originComboBoxString.setSelectedIndex(1); + } + originComboBoxString.setActionCommand("origin"); + originComboBoxString.addActionListener(this); + constraints = new GridBagConstraints(1, 3, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(5, 10, 15, 10), 0, 0); + gridBag.setConstraints(originComboBoxString, constraints); + boxPanel.add(originComboBoxString); + + box.add(boxPanel); + attributesMainPanel.add(box); + + JPanel sensitivePanel = new JPanel(new FlowLayout()); + + sensitiveRadioButton = new JRadioButton(); + sensitiveRadioButton.setActionCommand("Sensitive"); + sensitiveRadioButton.setSelected(port.getSensitive()); + sensitiveRadioButton.addActionListener(this); + sensitivePanel.add(sensitiveRadioButton); + + JLabel sensitiveLabel = new JLabel("Sensitive"); + sensitivePanel.add(sensitiveLabel); + + constraints = new GridBagConstraints(0, 4, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(sensitivePanel, constraints); + boxPanel.add(sensitivePanel); + + listSensitiveString = new String[3]; + listSensitiveString[0] = ""; + listSensitiveString[1] = "positive"; + listSensitiveString[2] = "negative"; + sensitiveComboBoxString = new JComboBox<String>(listSensitiveString); + if (port.getSensitiveMethod().equals("")) { + sensitiveComboBoxString.setSelectedIndex(0); + } else if (port.getSensitiveMethod().equals("positive")) { + sensitiveComboBoxString.setSelectedIndex(1); + } else if (port.getSensitiveMethod().equals("negative")) { + sensitiveComboBoxString.setSelectedIndex(2); + } + sensitiveComboBoxString.setActionCommand("Sensitive_method"); + sensitiveComboBoxString.setEnabled(port.getSensitive()); + sensitiveComboBoxString.addActionListener(this); + constraints = new GridBagConstraints(1, 4, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(15, 10, 5, 10), 0, 0); + gridBag.setConstraints(sensitiveComboBoxString, constraints); + boxPanel.add(sensitiveComboBoxString); + + // -- Button -- // + JPanel downPanel = new JPanel(new FlowLayout()); + + JButton saveCloseButton = new JButton("Save and close"); + saveCloseButton.setIcon(IconManager.imgic25); + saveCloseButton.setActionCommand("Save_Close"); + saveCloseButton.addActionListener(this); + saveCloseButton.setPreferredSize(new Dimension(200, 30)); + downPanel.add(saveCloseButton); + + JButton cancelButton = new JButton("Cancel"); + cancelButton.setIcon(IconManager.imgic27); + cancelButton.setActionCommand("Cancel"); + cancelButton.addActionListener(this); + cancelButton.setPreferredSize(new Dimension(200, 30)); + downPanel.add(cancelButton); + + mainPanel.add(downPanel, BorderLayout.CENTER); + pack(); + this.getRootPane().setDefaultButton(saveCloseButton); + } + + public void actionPerformed(ActionEvent e) { + if ("Sensitive".equals(e.getActionCommand())) { + if (sensitiveRadioButton.isSelected() == true) { + sensitiveComboBoxString.setEnabled(true); + } else { + sensitiveComboBoxString.setEnabled(false); + } + } + if ("Save_Close".equals(e.getActionCommand())) { + port.setPortName(new String(nameTextField.getText())); + + if (!(nbitsTextField.getText().isEmpty())) { + Boolean nbitsValueInteger = false; + try { + Integer.parseInt(nbitsTextField.getText()); + } catch (NumberFormatException e1) { + JDialog msg = new JDialog(this); + msg.setLocationRelativeTo(null); + JOptionPane.showMessageDialog(msg, "Nbits is not a Integer", "Warning !", + JOptionPane.WARNING_MESSAGE); + nbitsValueInteger = true; + } + /* if (nbitsValueInteger == false) { + port.setNbits(Integer.parseInt(nbitsTextField.getText())); + } + } else { + port.setNbits(-1); + }*/ + + } + // if (!(periodTextField.getText().isEmpty())) { + // Boolean periodValueInteger = false; + // try { + // Integer.parseInt(periodTextField.getText()); + // } catch (NumberFormatException e1) { + // JDialog msg = new JDialog(this); + // msg.setLocationRelativeTo(null); + // JOptionPane.showMessageDialog(msg, "Period is not a Integer", "Warning !", + // JOptionPane.WARNING_MESSAGE); + // periodValueInteger = true; + // } + // if (periodValueInteger == false) { + // port.setPeriod(Integer.parseInt(periodTextField.getText())); + // } + // } else { + // port.setPeriod(-1); + // } + // + // if (!(rateTextField.getText().isEmpty())) { + // Boolean rateValueInteger = false; + // try { + // Integer.parseInt(rateTextField.getText()); + // } catch (NumberFormatException e1) { + // JDialog msg = new JDialog(this); + // msg.setLocationRelativeTo(null); + // JOptionPane.showMessageDialog(msg, "Rate is not a Integer", "Warning !", + // JOptionPane.WARNING_MESSAGE); + // rateValueInteger = true; + // } + // if (rateValueInteger == false) { + // port.setRate(Integer.parseInt(rateTextField.getText())); + // } + // } else { + // port.setRate(-1); + // } + // + // if (!(delayTextField.getText().isEmpty())) { + // Boolean delayValueInteger = false; + // try { + // Integer.parseInt(delayTextField.getText()); + // } catch (NumberFormatException e1) { + // JDialog msg = new JDialog(this); + // msg.setLocationRelativeTo(null); + // JOptionPane.showMessageDialog(msg, "Delay is not a Integer", "Warning !", + // JOptionPane.WARNING_MESSAGE); + // delayValueInteger = true; + // } + // if (delayValueInteger == false) { + // port.setDelay(Integer.parseInt(delayTextField.getText())); + // } + // } else { + // port.setDelay(-1); + // } + + + + if(typeComboBoxString.getSelectedItem()=="sc_uint"){ + port.setClockType("sc_uint<"+nbitsTextField.getText()+">"); + } + else{ + port.setClockType((String) typeComboBoxString.getSelectedItem()); + // port.setTime((String) periodComboBoxString.getSelectedItem()); + } + + if ((String) originComboBoxString.getSelectedItem() == "Output") { + port.setOrigin(1); + } else { + port.setOrigin(0); + } + + port.setSensitive(sensitiveRadioButton.isSelected()); + port.setSensitiveMethod((String) sensitiveComboBoxString.getSelectedItem()); + + this.dispose(); + } + + if ("Cancel".equals(e.getActionCommand())) { + this.dispose(); + } + } +} -- GitLab