Skip to content
Snippets Groups Projects
JDialogSysCAMSBlockDE.java 46.9 KiB
Newer Older
/* 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 JDialogSysCAMSBlockDE extends JDialog implements ActionListener, ListSelectionListener {

	private JTextField nameTextField;
Daniela Genius's avatar
Daniela Genius committed
        private JTextField clockTextField;
//	private JTextField periodTextField;
//	private String listPeriodString[];
//	private JComboBox<String> periodComboBoxString;
	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;
Daniela Genius's avatar
Daniela Genius committed
    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 SysCAMSBlockDE block;

	public JDialogSysCAMSBlockDE(SysCAMSBlockDE block) {
Irina LEE's avatar
Irina LEE committed
		this.setTitle("Setting DE Block Attributes");
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		this.setAlwaysOnTop(true);
		this.setResizable(false);

		this.block = block;
		getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close");
Irina LEE's avatar
Irina LEE committed
		getRootPane().getActionMap().put("close", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				dispose();
Irina LEE's avatar
Irina LEE committed
			}
		});
	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 (block.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 block attributes"));

		GridBagLayout gridBag = new GridBagLayout();
Irina LEE's avatar
Irina LEE committed
		GridBagConstraints constraints = new GridBagConstraints();
		JPanel attributesBoxPanel = new JPanel();
		attributesBoxPanel.setFont(new Font("Helvetica", Font.PLAIN, 14));
		attributesBoxPanel.setLayout(gridBag);
Irina LEE's avatar
Irina LEE committed

		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);
Irina LEE's avatar
Irina LEE committed
		gridBag.setConstraints(labelName, constraints);
		attributesBoxPanel.add(labelName);

		if (block.getValue().toString().equals("")) {
			nameTextField = new JTextField(10);
		} else {
			nameTextField = new JTextField(block.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 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 (block.getPeriod() == -1) { 
//			periodTextField = new JTextField(10);
//		} else {
//			periodTextField = new JTextField("" + block.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 (block.getTime().equals("") || block.getTime().equals("us")) {
//			periodComboBoxString.setSelectedIndex(0);
//		} else if (block.getTime().equals("ms")) {
//			periodComboBoxString.setSelectedIndex(1);
//		} else if (block.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);
Daniela Genius's avatar
Daniela Genius committed

		/*GridBagLayout gridBag = new GridBagLayout();
		GridBagConstraints constraints = new GridBagConstraints();
		JPanel attributesBoxPanel = new JPanel();
		attributesBoxPanel.setFont(new Font("Helvetica", Font.PLAIN, 14));
		attributesBoxPanel.setLayout(gridBag);*/

		JLabel labelClock = new JLabel("Clock : ");
		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(labelClock, constraints);
		attributesBoxPanel.add(labelClock);

		if (block.getValue().toString().equals("")) {
			clockTextField = new JTextField(10);
		} else {
Daniela Genius's avatar
Daniela Genius committed
			clockTextField = new JTextField(block.getClockName().toString(), 10); 
Daniela Genius's avatar
Daniela Genius committed
		}
		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(clockTextField, constraints);
		attributesBoxPanel.add(clockTextField);

		
		attributesBox.add(attributesBoxPanel);
		attributesMainPanel.add(attributesBox, BorderLayout.NORTH); 
		if (block.getFather() != null) {
			// --- Parameters ---//
			parametersMainPanel.setLayout(new BorderLayout());

			Box parametersBox = Box.createVerticalBox();
			parametersBox.setBorder(BorderFactory.createTitledBorder("Setting TDF block parameters"));

			JPanel blockPanel = 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);

			blockPanel.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(block.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);
Daniela Genius's avatar
Daniela Genius committed
            
            //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(block.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(":");
Daniela Genius's avatar
Daniela Genius committed
			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");
Daniela Genius's avatar
Daniela Genius committed
			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 (block.getTypeTemplate().equals("int") || block.getTypeTemplate().equals("")) {
				typeTemplateComboBoxString.setSelectedIndex(0);
			}
			typeTemplateComboBoxString.addActionListener(this);
Daniela Genius's avatar
Daniela Genius committed
			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);

			blockPanel.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 (block.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 (block.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 (block.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);

			blockPanel.add(typedefPanel);

			parametersBox.add(blockPanel); 
			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 = block.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 = block.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();
Irina LEE's avatar
Irina LEE committed
			codeBox.setBorder(BorderFactory.createTitledBorder("Behavior function of DE block"));

			JPanel codeBoxPanel = new JPanel(new BorderLayout());

Irina LEE's avatar
Irina LEE committed
			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);
Irina LEE's avatar
Irina LEE committed
			nameFnTextField = new JTextField(block.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);
Irina LEE's avatar
Irina LEE committed
			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);
Irina LEE's avatar
Irina LEE committed
			codeBoxPanel.add(namePanel, BorderLayout.NORTH);
			StringBuffer stringbuf = encode(block.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) {
		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);
			}
		}
Daniela Genius's avatar
Daniela Genius committed
		
		if (!(clockTextField.getText().isEmpty())) {
		    block.setClockName(clockTextField.getText());
		}
		
		if (block.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);
					}