/*
Violet - A program for editing UML diagrams.
Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com)
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
*/
package com.horstmann.violet.framework;
import java.awt.BorderLayout;
import java.awt.Container;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.util.ResourceBundle;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
/**
A frame for showing a graphical editor
*/
public class GraphFrame extends JInternalFrame
{
/**
Constructs a graph frame with an empty tool bar
@param aGraph the initial graph
*/
public GraphFrame(Graph aGraph)
{
graph = aGraph;
toolBar = new ToolBar(graph);
panel = new GraphPanel(toolBar);
Container contentPane = getContentPane();
contentPane.add(toolBar, BorderLayout.NORTH);
contentPane.add(new JScrollPane(panel), BorderLayout.CENTER);
// add listener to confirm frame closing
addVetoableChangeListener(new
VetoableChangeListener()
{
public void vetoableChange(PropertyChangeEvent event)
throws PropertyVetoException
{
String name = event.getPropertyName();
Object value = event.getNewValue();
// we only want to check attempts to close a frame
if (name.equals("closed")
&& value.equals(Boolean.TRUE) && panel.isModified())
{
ResourceBundle editorResources =
ResourceBundle.getBundle("com.horstmann.violet.framework.EditorStrings");
// ask user if it is ok to close
int result
= JOptionPane.showInternalConfirmDialog(
GraphFrame.this,
editorResources.getString("dialog.close.ok"),
null,
JOptionPane.YES_NO_OPTION);
// if the user doesn't agree, veto the close
if (result != JOptionPane.YES_OPTION)
throw new PropertyVetoException(
"User canceled close", event);
}
}
});
panel.setGraph(graph);
}
/**
Gets the graph that is being edited in this frame.
@return the graph
*/
public Graph getGraph()
{
return graph;
}
/**
Gets the graph panel that is contained in this frame.
@return the graph panel
*/
public GraphPanel getGraphPanel()
{
return panel;
}
/**
Gets the fileName property.
@return the file name
*/
public String getFileName()
{
return fileName;
}
/**
Sets the fileName property.
@param newValue the file name
*/
public void setFileName(String newValue)
{
fileName = newValue;
setTitle(newValue);
}
private Graph graph;
private GraphPanel panel;
private ToolBar toolBar;
private String fileName;
}