diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/Stage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/Stage.java index 44ac06e..8b549fe 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/Stage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/Stage.java @@ -73,6 +73,7 @@ mxCell rootCell = (mxCell) graph.getDefaultParent(); if(rootCell == null) return; if(rootCell.getChildCount() <= 0) return; + if(rootCell.getChildCount() <= layerNo) return; graph.getModel().setVisible(rootCell.getChildAt(layerNo), isEnable); graph.refresh(); diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java index 6de3df5..7049633 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java @@ -4,8 +4,10 @@ import com.mxgraph.model.mxCell; import com.mxgraph.model.mxGeometry; import com.mxgraph.swing.mxGraphComponent; +import models.dependencyModel.InterfaceNode; import javax.swing.*; +import java.awt.*; import java.awt.event.MouseEvent; import java.util.EventObject; @@ -44,7 +46,7 @@ isInterfaceNode(cell) && mouseEvent.getClickCount() == 2) { - editInterfaceName(cell, eventObj); + showInterfaceEditDialog(cell, eventObj); } } @@ -255,29 +257,79 @@ } } - public void editInterfaceName(mxCell cell, EventObject eventObj){ - // Get the current label - String currentName = (cell.getValue() != null) ? cell.getValue().toString() : ""; + /** + * Show dialog to edit interface name and method code + */ + private void showInterfaceEditDialog(mxCell cell, EventObject eventObj) { + DependencyModelingStage ddmStage = (DependencyModelingStage) stage; - // Show input dialog - String newName = JOptionPane.showInputDialog( - null, - "Edit Interface Name:", - currentName - ); - - // If OK is pressed and input is not empty, update the label - if (newName != null && !newName.trim().isEmpty()) { - graphComponent.getGraph().getModel().beginUpdate(); - try { - cell.setValue(newName); - } finally { - graphComponent.getGraph().getModel().endUpdate(); - } - graphComponent.refresh(); + // Get or create InterfaceNode + InterfaceNode interfaceNode = ddmStage.getInterfaceNode(cell); + if (interfaceNode == null) { + String currentName = (cell.getValue() != null) ? cell.getValue().toString() : "Interface"; + interfaceNode = new InterfaceNode(currentName); + ddmStage.setInterfaceNode(cell, interfaceNode); } + + // Create dialog + JDialog dialog = new JDialog((Frame) null, "Interface Settings", true); + dialog.setLayout(new BorderLayout(10, 10)); + + // Name field + JPanel namePanel = new JPanel(new BorderLayout(5, 5)); + namePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); + namePanel.add(new JLabel("Interface Name:"), BorderLayout.WEST); + JTextField nameField = new JTextField(interfaceNode.getName(), 20); + namePanel.add(nameField, BorderLayout.CENTER); + + // Method code area + JPanel codePanel = new JPanel(new BorderLayout(5, 5)); + codePanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 10, 10)); + codePanel.add(new JLabel("Method Code:"), BorderLayout.NORTH); + JTextArea codeArea = new JTextArea(interfaceNode.getMethodCode(), 20, 40); + codeArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); + JScrollPane scrollPane = new JScrollPane(codeArea); + codePanel.add(scrollPane, BorderLayout.CENTER); + + // Buttons + JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + JButton okButton = new JButton("OK"); + JButton cancelButton = new JButton("Cancel"); + + InterfaceNode finalInterfaceNode = interfaceNode; + okButton.addActionListener(e -> { + String newName = nameField.getText().trim(); + if (!newName.isEmpty()) { + finalInterfaceNode.setName(newName); + finalInterfaceNode.setMethodCode(codeArea.getText()); + + graphComponent.getGraph().getModel().beginUpdate(); + try { + cell.setValue(newName); + } finally { + graphComponent.getGraph().getModel().endUpdate(); + } + graphComponent.refresh(); + } + dialog.dispose(); + }); + + cancelButton.addActionListener(e -> dialog.dispose()); + + buttonPanel.add(okButton); + buttonPanel.add(cancelButton); + + // Add components to dialog + dialog.add(namePanel, BorderLayout.NORTH); + dialog.add(codePanel, BorderLayout.CENTER); + dialog.add(buttonPanel, BorderLayout.SOUTH); + + dialog.pack(); + dialog.setLocationRelativeTo(graphComponent); + dialog.setVisible(true); } + @Override public void stopEditing(boolean cancel) { diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java index 0887d60..d96d090 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -22,6 +22,7 @@ import models.dataConstraintModel.ResourcePath; import models.dataFlowModel.*; import models.dependencyModel.DependencyGraph; +import models.dependencyModel.InterfaceNode; import models.dependencyModel.mxInterfaceShape; import java.awt.event.MouseAdapter; @@ -46,6 +47,7 @@ private HashMap resNodeToCell; private HashMap eventChannelToCell; + private HashMap cellToInterfaceNode = new HashMap<>(); //-------------------------------------------------- // コンストラクタ @@ -66,6 +68,13 @@ curState = nextState; } + public InterfaceNode getInterfaceNode(mxCell cell) { + return cellToInterfaceNode.get(cell); + } + + public void setInterfaceNode(mxCell cell, InterfaceNode interfaceNode) { + cellToInterfaceNode.put(cell, interfaceNode); + } @Override public void init(Stage prevStage) { diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/InterfaceNode.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/InterfaceNode.java new file mode 100644 index 0000000..645ff11 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/InterfaceNode.java @@ -0,0 +1,27 @@ +package models.dependencyModel; + +public class InterfaceNode { + private String name; + private String methodCode; + + public InterfaceNode(String name) { + this.name = name; + this.methodCode = ""; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMethodCode() { + return methodCode; + } + + public void setMethodCode(String methodCode) { + this.methodCode = methodCode; + } +} \ No newline at end of file