diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java index e8b5e13..ce530a7 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java @@ -7,6 +7,7 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.MouseEvent; import java.util.EventObject; public class DependencyCellEditor extends FlowCellEditor { @@ -17,9 +18,47 @@ @Override public void startEditing(Object cellObj, EventObject eventObj) { + // セルがnull、または頂点以外なら編集しない + if (cellObj == null || !(cellObj instanceof mxCell)) { + return; + } + mxCell cell = (mxCell) cellObj; + + // エッジの場合もスキップ + if (cell.isEdge()) { + return; + } + + // ダブルクリック以外では編集しない + if (eventObj instanceof MouseEvent) { + MouseEvent e = (MouseEvent) eventObj; + if (e.getClickCount() < 2) { + return; + } + } + + // 現在のラベルを取得 + String currentName = (cell.getValue() != null) ? cell.getValue().toString() : ""; + + // 入力ダイアログを表示 + String newName = JOptionPane.showInputDialog( + null, + "Edit Interface Name:", + currentName + ); + + // OKが押されて、入力が空でなければラベルを更新 + if (newName != null && !newName.trim().isEmpty()) { + graphComponent.getGraph().getModel().beginUpdate(); + try { + cell.setValue(newName); + } finally { + graphComponent.getGraph().getModel().endUpdate(); + } + graphComponent.refresh(); + } } - @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 b55fe3c..a20f2b0 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -1,48 +1,32 @@ package application.editor.stages; -import algorithms.Validation; import application.editor.Editor; import application.editor.FlowCellEditor; import application.editor.Stage; -import com.mxgraph.canvas.mxGraphics2DCanvas; import com.mxgraph.model.mxCell; import com.mxgraph.model.mxGeometry; import com.mxgraph.model.mxGraphModel; -import com.mxgraph.model.mxGraphModel.mxTerminalChange; -import com.mxgraph.shape.mxBasicShape; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.util.mxEventSource.mxIEventListener; -import com.mxgraph.util.mxPoint; -import com.mxgraph.util.mxUtils; -import com.mxgraph.view.mxCellState; -import models.algebra.Expression; +import com.mxgraph.view.mxGraph; +import com.mxgraph.view.mxStylesheet; import models.controlFlowModel.ControlFlowGraph; -import models.dataConstraintModel.Channel; -import models.dataConstraintModel.ChannelMember; -import models.dataConstraintModel.ResourcePath; -import models.dataConstraintModel.Selector; -import models.dataFlowModel.DataFlowGraph; -import models.dataFlowModel.DataTransferChannel; -import models.dataFlowModel.DataTransferModel; -import models.dataFlowModel.ResourceNode; -import models.dependencyModel.DependencyFlowGraph; -import models.visualModel.FormulaChannel; -import parser.Parser; -import parser.exceptions.*; +import models.dataFlowModel.*; +import models.dependencyModel.DependencyGraph; -import java.awt.*; +import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; public class DependencyModelingStage extends Stage { public final int PORT_DIAMETER = 8; public final int PORT_RADIUS = PORT_DIAMETER / 2; + public final int DEPENDENCY_NODE_SIZE = 40; - private DependencyFlowGraph dependencyFlowGraph = null; + private DependencyGraph dependencyGraph = null; private List nodes = new ArrayList<>(); @@ -70,8 +54,10 @@ DataFlowGraph dataFlowGraph = ((PushPullSelectionStage) prevStage).getDataFlowGraph(); ControlFlowGraph controlFlowGraph = new ControlFlowGraph(dataFlowGraph, model); - dependencyFlowGraph = new DependencyFlowGraph(controlFlowGraph, model); + dependencyGraph = new DependencyGraph(controlFlowGraph, model); + } + } @Override @@ -86,7 +72,58 @@ @Override public MouseListener createMouseEventListener(Editor editor) { - return null; + return new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON1) { + + Object cell = graphComponent.getCellAt(e.getX(), e.getY()); + if (cell == null) { + insertDependencyNodeAt(e.getX(), e.getY()); + } + } + } + }; + } + + private void insertDependencyNodeAt(int mouseX, int mouseY) { + mxGraphModel model = (mxGraphModel) graph.getModel(); + mxCell parent = (mxCell) graph.getDefaultParent(); + mxGraph graph = graphComponent.getGraph(); + + double scale = graph.getView().getScale(); + double translateX = graph.getView().getTranslate().getX(); + double translateY = graph.getView().getTranslate().getY(); + + double graphX = (mouseX / scale) - translateX; + double graphY = (mouseY / scale) - translateY; + + // ノードを中心合わせで配置 + mxGeometry geometry = new mxGeometry( + graphX - (double) DEPENDENCY_NODE_SIZE / 2, + graphY - (double) DEPENDENCY_NODE_SIZE / 2, + DEPENDENCY_NODE_SIZE, + DEPENDENCY_NODE_SIZE + ); + + model.beginUpdate(); + try { + mxCell newNodeCell = (mxCell) graph.insertVertex( + parent, + null, + "Interface", + geometry.getX(), geometry.getY(), + DEPENDENCY_NODE_SIZE, DEPENDENCY_NODE_SIZE, + "shape=rhombus;fillColor=#BBFFBB;perimeter=ellipsePerimeter;resizable=0;" + ); + + graph.setSelectionCell(newNodeCell); + + nodes.add(newNodeCell); + + } finally { + model.endUpdate(); + } } @@ -96,3 +133,4 @@ } } + diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDependencyFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDependencyFlowGraph.java index 09f7024..58b6fe7 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDependencyFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDependencyFlowGraph.java @@ -5,7 +5,7 @@ import models.dataConstraintModel.ResourceHierarchy; import models.dataFlowModel.DataTransferModel; import models.dataFlowModel.IFlowGraph; -import models.dependencyModel.DependencyFlowGraph; +import models.dependencyModel.DependencyGraph; import java.util.ArrayList; import java.util.Collection; @@ -15,6 +15,6 @@ public class CodeGeneratorFromDependencyFlowGraph extends CodeGenerator{ @Override public void generateCodeFromFlowGraph(DataTransferModel model, IFlowGraph flowGraph, Collection> components, ArrayList codes, Map> dependedRootComponentGraph, IPlatformSpecific platformSpec, ILanguageSpecific langSpec) { - DependencyFlowGraph dependencyFlowGraph = (DependencyFlowGraph) flowGraph; + DependencyGraph dependencyFlowGraph = (DependencyGraph) flowGraph; } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyFlowGraph.java deleted file mode 100644 index cb2e5ba..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyFlowGraph.java +++ /dev/null @@ -1,27 +0,0 @@ -package models.dependencyModel; - -import models.Node; -import models.controlFlowModel.ControlFlowGraph; -import models.dataFlowModel.DataFlowGraph; -import models.dataFlowModel.DataTransferModel; -import models.dataFlowModel.IFlowGraph; - -import java.util.Map; -import java.util.Set; - -public class DependencyFlowGraph implements IFlowGraph { - private DataFlowGraph dataFlowGraph; - - public DependencyFlowGraph(ControlFlowGraph controlFlowGraph, DataTransferModel model) { - this.dataFlowGraph = controlFlowGraph.getDataFlowGraph(); - } - - public DataFlowGraph getDataFlowGraph(){ - return dataFlowGraph; - } - - @Override - public Map> getAllComponentNodes() { - return null; - } -} \ No newline at end of file diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java new file mode 100644 index 0000000..6fdf98d --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java @@ -0,0 +1,32 @@ +package models.dependencyModel; + +import models.Node; +import models.controlFlowModel.CallGraph; +import models.controlFlowModel.ControlFlowGraph; +import models.dataFlowModel.DataFlowGraph; +import models.dataFlowModel.DataTransferModel; +import models.dataFlowModel.IFlowGraph; + +import java.util.Map; +import java.util.Set; + +public class DependencyGraph implements IFlowGraph { + private DataFlowGraph dataFlowGraph; + private final CallGraph pushCallGraph; + private final CallGraph pullCallGraph; + + public DependencyGraph(ControlFlowGraph controlFlowGraph, DataTransferModel model) { + this.dataFlowGraph = controlFlowGraph.getDataFlowGraph(); + pushCallGraph = new CallGraph(); + pullCallGraph = new CallGraph(); + } + + public DataFlowGraph getDataFlowGraph(){ + return dataFlowGraph; + } + + @Override + public Map> getAllComponentNodes() { + return null; + } +} \ No newline at end of file