package com.c2kernel.gui.graph.controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Observable; import java.util.Observer; import javax.swing.JButton; import com.c2kernel.graph.event.SelectionChangedEvent; import com.c2kernel.graph.model.DirectedEdge; import com.c2kernel.graph.model.GraphModelManager; import com.c2kernel.graph.model.Vertex; // The deletion controller is responsible for deleting the present // selection within the graph. // // The controller listens to: // * The graph model to determine if there is a selection // * The delete button // * The graph panel for the typing of the delete key // // The controller modifies: // * The graph model to delete the current selection // * The delete button to enable it only when there is a selection public class DeletionController extends KeyAdapter implements Observer, ActionListener { private GraphModelManager mGraphModelManager = null; private JButton mDeleteButton = null; public void setGraphModelManager(GraphModelManager graphModelManager) { mGraphModelManager = graphModelManager; mGraphModelManager.addObserver(this); } public void setDeleteButton(JButton deleteButton) { mDeleteButton = deleteButton; mDeleteButton.addActionListener(this); } // Invoked by the graph model @Override public void update(Observable o, Object arg) { SelectionChangedEvent event = null; DirectedEdge selectedEdge = null; Vertex[] selectedVertices = null; // If the selected edge has changed if(arg instanceof SelectionChangedEvent && mDeleteButton != null && mGraphModelManager.isEditable()) { // Enable the button if a single edge or single vertex is selected event = (SelectionChangedEvent)arg; selectedEdge = event.mSelection.mEdge; selectedVertices = event.mSelection.mVertices; mDeleteButton.setEnabled((selectedEdge != null) || (selectedVertices != null)); } } // Invoked by the graph panel @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_DELETE && mGraphModelManager.isEditable()) { mGraphModelManager.getModel().deleteSelection(); } } // Invoked by the delete button @Override public void actionPerformed(ActionEvent ae) { if(mGraphModelManager != null && mGraphModelManager.isEditable()) { mGraphModelManager.getModel().deleteSelection(); } } }