// Medusa is a graph viewer which allows interactive editing of networks
// (edges and nodes) and also connects to databases.
//
// Copyright (C) 2006 Sean Hooper
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or (at
// your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the
// Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330,
// Boston, MA 02111-1307 USA
/*
* EditGraphDialog.java
*
* Created on August 7, 2006, 7:07 PM
*/
package medusa.graphedit;
import java.awt.Color;
import javax.swing.JOptionPane;
import javax.swing.table.TableColumn;
import medusa.graph.Edge;
import medusa.graph.Graph;
import medusa.graph.Node;
/**
*
* @author hooper
*/
public class EditGraphDialog extends javax.swing.JDialog {
private EdgeTableModel edgeTableModel;
private NodeTableModel nodeTableModel;
private NewEdgeDialog newEdgeDialog;
/** Creates new form EditGraphDialog */
public EditGraphDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
}
private void setModels(){
edgeTableModel=new EdgeTableModel(g);
nodeTableModel=new NodeTableModel(g);
newEdgeDialog = new NewEdgeDialog(null,true);
initComponents();
TableColumn col = nodeTable.getColumnModel().getColumn(0);
col.setCellEditor(new NodeNameEditor(g,this));
}
private Graph g;
private void updateTables(){
edgeTableModel.init();
edgeTable.updateUI();
nodeTableModel.init();
nodeTable.updateUI();
}
protected void notifyNodeNameChange(String oldLabel, String newLabel){
//g.renameNodes(oldLabel,newLabel);
edgeTableModel.init();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// //GEN-BEGIN:initComponents
private void initComponents() {
titleLabel = new javax.swing.JLabel();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
TableSorter edgeSorter = new TableSorter(edgeTableModel);
edgeTable = new javax.swing.JTable();
edgeTable.setModel(edgeSorter);
edgeSorter.setTableHeader(edgeTable.getTableHeader());
jPanel2 = new javax.swing.JPanel();
addButton = new javax.swing.JButton();
deleteButton = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
TableSorter nodeSorter = new TableSorter(nodeTableModel);
nodeTable = new javax.swing.JTable();
nodeTable.setModel(nodeSorter);
//jTable1.setModel(new NodeTableModel(g));
nodeSorter.setTableHeader(nodeTable.getTableHeader());
nodeTable.setDefaultRenderer(Color.class, new NodeColorRenderer(true));
nodeTable.setDefaultEditor(Color.class, new ColorEditor());
controlPanel = new javax.swing.JPanel();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
titleLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
titleLabel.setText("Graph editor");
getContentPane().add(titleLabel, java.awt.BorderLayout.NORTH);
jPanel1.setLayout(new java.awt.BorderLayout());
jScrollPane1.setViewportView(edgeTable);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS));
jPanel2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
addButton.setText("Add");
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addButtonActionPerformed(evt);
}
});
jPanel2.add(addButton);
deleteButton.setText("Delete");
deleteButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteButtonActionPerformed(evt);
}
});
jPanel2.add(deleteButton);
jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH);
jTabbedPane1.addTab("Edges", jPanel1);
jScrollPane2.setViewportView(nodeTable);
jTabbedPane1.addTab("Nodes", jScrollPane2);
getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);
okButton.setText("OK");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
controlPanel.add(okButton);
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
controlPanel.add(cancelButton);
getContentPane().add(controlPanel, java.awt.BorderLayout.SOUTH);
pack();
}// //GEN-END:initComponents
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
// TODO add your handling code here:
setVisible(false);
}//GEN-LAST:event_cancelButtonActionPerformed
private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed
// TODO add your handling code here:
//System.out.println("Remove edge");
edgeTableModel.removeEdges();
edgeTable.updateUI();
nodeTableModel.init();
//removeEdge();
}//GEN-LAST:event_deleteButtonActionPerformed
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
// TODO add your handling code here:
//System.out.println("Add an edge. Make a dialog!");
newEdgeDialog.setVisible(true);
Edge e =newEdgeDialog.getEdge();
g.addEdge(e);
//edgeTableModel.setG(g);
edgeTableModel.init();
TableSorter te= new TableSorter(edgeTableModel);
edgeTable.setModel(te);
te.setTableHeader(edgeTable.getTableHeader());
edgeTable.updateUI();
//nodeTableModel.setG(g);
nodeTableModel.init();
TableSorter tn = new TableSorter(nodeTableModel);
nodeTable.setModel(tn);
tn.setTableHeader(nodeTable.getTableHeader());
nodeTable.updateUI();
JOptionPane.showMessageDialog(null,"Edge added. Remember to set X and Y position of\n"+
"any new nodes that have resulted from this addition.");
}//GEN-LAST:event_addButtonActionPerformed
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
// TODO add your handling code here:
g=getGraph();
//System.out.println(g.report());
setVisible(false);
}//GEN-LAST:event_okButtonActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EditGraphDialog(new javax.swing.JFrame(), true).setVisible(true);
}
});
}
public void setGraph(Graph g) {
this.g = g;
setModels();
}
private Graph newGraph(){
//Graph g = getGraph();
return new Graph();
}
public Graph getGraph(){
Graph graph= edgeTableModel.getGraph();
Node[] n=nodeTableModel.getNodes();
for (int i = 0; i
Ads help maintain this website.