-
Daniela Genius authoredDaniela Genius authored
JDialogSysCAMSBlockTDF.java 44.54 KiB
/* 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 JDialogSystemCAMSBlockTDF
* Dialog for managing of SystemC-AMS TDF Block
* Creation: 26/04/2018
* @version 1.0 26/04/2018
* @author Irina Kit Yan LEE
*/
@SuppressWarnings("serial")
public class JDialogSysCAMSBlockTDF extends JDialog implements ActionListener, ListSelectionListener {
private JTextField nameTextField;
private JTextField periodTextField;
private String listPeriodString[];
private JComboBox<String> periodComboBoxString;
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 JTextArea processCodeTextArea;
private String finalString;
private JTextArea constructorCodeTextArea;
private SysCAMSBlockTDF block;
public JDialogSysCAMSBlockTDF(SysCAMSBlockTDF block) {
this.setTitle("Setting TDF 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");
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);
JTabbedPane tabbedPane = new JTabbedPane();
JPanel attributesMainPanel = new JPanel();
JPanel parametersMainPanel = new JPanel();
JPanel processMainPanel = new JPanel();
JPanel contructorMainPanel = new JPanel();
tabbedPane.add("Attributes", attributesMainPanel);
tabbedPane.add("Parameters", parametersMainPanel);
tabbedPane.add("Process Code", processMainPanel);
tabbedPane.add("Constructor Code", contructorMainPanel);
mainPanel.add(tabbedPane, BorderLayout.NORTH);
// --- Attributes ---//
attributesMainPanel.setLayout(new BorderLayout());
Box attributesBox = Box.createVerticalBox();
attributesBox.setBorder(BorderFactory.createTitledBorder("Setting TDF block 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 (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[4];
listPeriodString[0] = "s";
listPeriodString[1] = "ms";
listPeriodString[2] = "\u03BCs";
listPeriodString[3] = "ns";
periodComboBoxString = new JComboBox<String>(listPeriodString);
if (block.getTime().equals("") || block.getTime().equals("s")) {
periodComboBoxString.setSelectedIndex(0);
} else if (block.getTime().equals("ms")) {
periodComboBoxString.setSelectedIndex(1);
} else if (block.getTime().equals("\u03BCs")) {
periodComboBoxString.setSelectedIndex(2);
} else if (block.getTime().equals("ns")) {
periodComboBoxString.setSelectedIndex(3);
}
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);
// --- 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);
//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(":");
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 (block.getTypeTemplate().equals("int") || block.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);
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 ---//
processMainPanel.setLayout(new BorderLayout());
Box codeBox = Box.createVerticalBox();
codeBox.setBorder(BorderFactory.createTitledBorder("Behavior function of TDF block"));
JPanel codeBoxPanel = new JPanel(new BorderLayout());
StringBuffer stringbuf = encode(block.getProcessCode());
String beginString = stringbuf.toString();
finalString = beginString.replaceAll("\t}", "}");
processCodeTextArea = new JTextArea(finalString);
processCodeTextArea.setSize(100, 100);
processCodeTextArea.setTabSize(2);
processCodeTextArea.setFont(new Font("Arial", Font.PLAIN, 16));
processCodeTextArea.setLineWrap(true);
processCodeTextArea.setWrapStyleWord(true);
JScrollPane processScrollPane = new JScrollPane(processCodeTextArea);
processScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
processScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
processScrollPane.setPreferredSize(new Dimension(200, 300));
processScrollPane.setBorder(new EmptyBorder(15, 10, 15, 10));
codeBoxPanel.add(processScrollPane, BorderLayout.SOUTH);
codeBox.add(codeBoxPanel);
processMainPanel.add(codeBox, BorderLayout.PAGE_START);
// --- ContructorCode --- //
contructorMainPanel.setLayout(new BorderLayout());
Box codeBox2 = Box.createVerticalBox();
codeBox2.setBorder(BorderFactory.createTitledBorder("Contructor code of TDF block"));
JPanel codeBoxPanel2 = new JPanel(new BorderLayout());
//StringBuffer stringbuf2 = encode(block.getConstructorCode());
//String beginString2 = stringbuf2.toString();
//finalString = beginString2.replaceAll("\t}", "}");
finalString = block.getConstructorCode();
constructorCodeTextArea = new JTextArea(finalString);
constructorCodeTextArea.setSize(100, 100);
constructorCodeTextArea.setTabSize(2);
constructorCodeTextArea.setFont(new Font("Arial", Font.PLAIN, 16));
constructorCodeTextArea.setLineWrap(true);
constructorCodeTextArea.setWrapStyleWord(true);
JScrollPane constructorScrollPane = new JScrollPane(constructorCodeTextArea);
constructorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
constructorScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
constructorScrollPane.setPreferredSize(new Dimension(200, 300));
constructorScrollPane.setBorder(new EmptyBorder(15, 10, 15, 10));
codeBoxPanel2.add(constructorScrollPane, BorderLayout.SOUTH);
codeBox2.add(codeBoxPanel2);
contructorMainPanel.add(codeBox2, 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 ("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())) {
block.setValue(new String(nameTextField.getText()));
if (!(periodTextField.getText().isEmpty())) {
Boolean periodValueInteger = false;
try {
Double.parseDouble(periodTextField.getText());
} catch (NumberFormatException e1) {
JDialog msg = new JDialog(this);
msg.setLocationRelativeTo(null);
JOptionPane.showMessageDialog(msg, "Period Tm is not a Double", "Warning !",
JOptionPane.WARNING_MESSAGE);
periodValueInteger = true;
}
if (periodValueInteger == false) {
block.setPeriod(Double.parseDouble(periodTextField.getText()));
block.setTime((String) periodComboBoxString.getSelectedItem());
}
} else {
block.setPeriod(-1);
block.setTime("");
}
block.setProcessCode(processCodeTextArea.getText());
block.setConstructorCode(constructorCodeTextArea.getText());
block.setListStruct(structListModel);
block.setNameTemplate(nameTemplateTextField.getText());
block.setTypeTemplate((String) typeTemplateComboBoxString.getSelectedItem());
block.setValueTemplate(valueTemplateTextField.getText());
block.setListTypedef(typedefListModel);
this.dispose();
}
if ("Cancel".equals(e.getActionCommand())) {
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);
}
}
}
}
}