package generator;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.filechooser.FileFilter;
import basic.CPoint2D;
public class MetaballGenerator extends JFrame implements MouseListener, ActionListener {
private MetaballsPanel result;
private JSplitPane splitter;
private JPanel tools;
private JScrollPane toolsscroller;
private JToggleButton tool_selector;
private JToggleButton tool_newball;
private JMenuBar menubar;
private JMenu menu_file;
private JMenuItem menu_file_new;
private JMenuItem menu_file_save;
private final int width = 400, height = 400;
private final double xrange = 5, yrange = 5;
private CPoint2D moving;
public MetaballGenerator() {
super("Metaballs!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(700, 500);
Container p = getContentPane();
p.setLayout(new BorderLayout());
splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitter.setResizeWeight(1.0);
result = new MetaballsPanel(width, height, xrange, yrange);
result.setMinimumSize(new Dimension(width, height));
result.setHorizontalAlignment(SwingConstants.CENTER);
result.addMouseListener(this);
splitter.setLeftComponent(result);
tools = new JPanel();
tools.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.CENTER;
toolsscroller = new JScrollPane(tools);
toolsscroller.setMinimumSize(new Dimension(200,300));
splitter.setRightComponent(toolsscroller);
p.add(splitter, BorderLayout.CENTER);
tool_selector = new JToggleButton("selector");
tool_selector.setSelected(true);
tool_selector.addMouseListener(this);
tools.add(tool_selector, c);
c.gridy++;
tool_newball = new JToggleButton("new");
tool_newball.addMouseListener(this);
tools.add(tool_newball, c);
ButtonGroup toolgroup = new ButtonGroup();
toolgroup.add(tool_selector);
toolgroup.add(tool_newball);
menubar = new JMenuBar();
menu_file = new JMenu("File");
menubar.add(menu_file);
menu_file_new = new JMenuItem("New");
menu_file_new.addActionListener(this);
menu_file.add(menu_file_new);
menu_file_save = new JMenuItem("Save");
menu_file_save.addActionListener(this);
menu_file.add(menu_file_save);
setJMenuBar(menubar);
moving = null;
result.clear();
setVisible(true);
}
public void mousePressed(MouseEvent e) {
if (e.getSource().equals(result)) {
if (tool_newball.isSelected()) {
CPoint2D p = new CPoint2D(e.getX() * (xrange/width) - (xrange/2),
e.getY() * (yrange/height) - (yrange/2), 1.0);
result.addPoint(p);
result.repaint();
System.out.println("woot");
} else if (tool_selector.isSelected()) {
}
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
if (e.getSource().equals(tool_selector)) {
result.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
} else if (e.getSource().equals(tool_newball)) {
result.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
}
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(menu_file_new)) {
result.clear();
} else if (e.getSource().equals(menu_file_save)) {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new GraphicsFileFilter());
int res = chooser.showSaveDialog(this);
if (res == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
try {
ImageIO.write(result.getImage(), "png", f);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
MetaballGenerator ide = new MetaballGenerator();
}
private class GraphicsFileFilter extends FileFilter {
public boolean accept(File f) {
String fname = f.getName().toLowerCase();
if (fname.endsWith(".png") || f.isDirectory()) {
return true;
}
return false;
}
public String getDescription() {
return "PNG files (*.png)";
}
}
}