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