package com.c2kernel.graph.controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable; import java.util.Observer; import javax.swing.JButton; import com.c2kernel.graph.event.SelectionChangedEvent; import com.c2kernel.graph.model.GraphModelManager; import com.c2kernel.graph.model.Vertex; // The start vertex controller is responsible for selecting // the vertex at the start of the graph. // // The controller listens to: // * The graph model to determine if there is a single // vertex selected // * The start vertex button // // The controller modifies: // * The graph model to select the start vertex // * The start button to enable it only when there is a // single vertex selected public class StartVertexController implements Observer, ActionListener { private GraphModelManager mGraphModelManager = null; private JButton mStartButton = null; public void setGraphModelManager(GraphModelManager graphModelManager) { mGraphModelManager = graphModelManager; mGraphModelManager.addObserver(this); } public void setStartButton(JButton startButton) { mStartButton = startButton; mStartButton.addActionListener(this); } public void update(Observable o, Object arg) { SelectionChangedEvent event = null; Vertex[] selectedVertices = null; // If the selected vertex has changed if(arg instanceof SelectionChangedEvent && mStartButton != null) { event = (SelectionChangedEvent)arg; selectedVertices = event.mSelection.mVertices; if(selectedVertices == null) { mStartButton.setEnabled(false); } else if (mGraphModelManager.isEditable()) { mStartButton.setEnabled(selectedVertices.length == 1); } } } public void actionPerformed(ActionEvent ae) { if(mGraphModelManager != null) { mGraphModelManager.getModel().setSelectedVertexToBeStart(); } } }