diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/NewFormulaChannelAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/NewFormulaChannelAction.java index 90c58e8..7fb9299 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/NewFormulaChannelAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/NewFormulaChannelAction.java @@ -58,7 +58,5 @@ if(r == JOptionPane.OK_OPTION) { editor.addFormulaChannelGenerator(new FormulaChannelGenerator(channelName, editor.getModel().getSymbol(symbol))); } - } - } diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java index 37c57c9..688631e 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java @@ -1,5 +1,10 @@ package graphicalrefactor.views; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.Panel; import java.awt.Rectangle; import java.util.EventObject; import java.util.List; @@ -7,9 +12,12 @@ import javax.swing.BorderFactory; import javax.swing.JComboBox; import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; +import javax.swing.JTextField; import com.mxgraph.model.mxCell; import com.mxgraph.model.mxIGraphModel; @@ -20,12 +28,17 @@ import com.mxgraph.view.mxCellState; import graphicalrefactor.editor.Editor; +import models.algebra.Expression; import models.dataFlowModel.DataFlowModel; import models.dataFlowModel.DataflowChannelGenerator; import models.dataFlowModel.PushPullAttribute; import models.dataFlowModel.PushPullValue; +import models.visualModel.FormulaChannelGenerator; +import parser.ExpectedRightBracket; +import parser.Parser; +import parser.Parser.TokenStream; -public class GraphicalRefactorCellEditor implements mxICellEditor { +public class GraphicalRefactorCellEditor implements mxICellEditor { public int DEFAULT_MIN_WIDTH = 70; public int DEFAULT_MIN_HEIGHT = 30; public double DEFAULT_MINIMUM_EDITOR_SCALE = 1; @@ -66,6 +79,58 @@ return; } } + + if(ch instanceof FormulaChannelGenerator) { + + JPanel panel = new JPanel(); + JLabel label1 = new JLabel("Formula: "); + JLabel label2 = new JLabel("Source: "); + GridBagLayout layout = new GridBagLayout(); + panel.setLayout(layout); + GridBagConstraints gbc = new GridBagConstraints(); + + gbc.gridx = 0; + gbc.gridy = 0; + layout.setConstraints(label1, gbc); + panel.add(label1); + + gbc.gridx = 1; + gbc.gridy = 0; + JTextField formulaText = new JTextField(((FormulaChannelGenerator) ch).getFormula(),15); + layout.setConstraints(formulaText, gbc); + panel.add(formulaText); + + gbc.gridx = 0; + gbc.gridy = 1; + layout.setConstraints(label2, gbc); + panel.add(label2); + + gbc.gridx = 1; + gbc.gridy = 1; + JTextArea textArea = new JTextArea(ch.getSourceText(),7,15); + textArea.setEditable(false); + layout.setConstraints(textArea, gbc); + panel.add(textArea); + + int r = JOptionPane.showConfirmDialog( + null, // �I�[�i�[�E�B���h�E + panel, // ���b�Z�[�W + "Edit Formula Channel", // �E�B���h�E�^�C�g�� + JOptionPane.OK_CANCEL_OPTION, // �I�v�V�����i�{�^���̎�ށj + JOptionPane.QUESTION_MESSAGE); // ���b�Z�[�W�^�C�v�i�A�C�R���̎�ށj + if(r == JOptionPane.OK_OPTION) { + String formula = formulaText.getText(); + TokenStream stream = new TokenStream(); + stream.addLine(formula.split(Parser.EQUALS)[1]); + try { + Expression exp = Parser.parseTerm(stream, editor.getModel()); + ((FormulaChannelGenerator) ch).setFormula(formula); + ((FormulaChannelGenerator) ch).setFormulaTerm(exp); + } catch (ExpectedRightBracket e) { + e.printStackTrace(); + } + } + }else { JPanel panel = new JPanel(); JTextArea textArea = new JTextArea(ch.getSourceText(), 10, 20); panel.add(textArea); @@ -74,9 +139,10 @@ int ret = JOptionPane.showConfirmDialog(null, panel, "Channel Code", JOptionPane.OK_CANCEL_OPTION); if (ret == JOptionPane.OK_OPTION) { editor.setChannelCode(ch, textArea.getText()); - } + } + } return; - } + } mxCellState state = graphComponent.getGraph().getView().getState(cell); if (state != null && state.getLabel() != null && !state.getLabel().equals("")) {