//(c) Copyright 2005, Scott Vorthmann. All rights reserved. package org.vorthmann.zome.ui; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.FileDialog; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import org.vorthmann.ui.Controller; public class Snapshot2dFrame extends JFrame { private final Controller controller; private final Snapshot2dPanel snapshotPanel; private final String SAVE_AS_PDF = "as PDF"; private final String SAVE_AS_POSTSCRIPT = "as Postscript"; private final String SAVE_AS_SVG = "as SVG"; private final String[] FORMATS = new String[]{ SAVE_AS_PDF, SAVE_AS_POSTSCRIPT, SAVE_AS_SVG }; public Snapshot2dFrame( final Controller controller, final FileDialog mFileChooser ) { super( "vZome 2D snapshot" ); this.controller = controller; final ActionListener actions = new ActionListener() { @Override public void actionPerformed( ActionEvent ae ) { controller .actionPerformed( ae ); snapshotPanel .repaint(); } }; snapshotPanel = new Snapshot2dPanel(); Container contentPane = getContentPane(); contentPane .setLayout( new BorderLayout() ); JPanel buttonPanel = new JPanel(); JButton button = new JButton( "Refresh" ); button .setActionCommand( "refresh.2d" ); button .addActionListener( actions ); button .setToolTipText( "Refresh the snapshot." ); buttonPanel .add( button ); String[] drawStyles = controller .getCommandList( "draw.styles" ); JComboBox<String> drawStylesCombo = new JComboBox<>( drawStyles ); drawStylesCombo .setSelectedItem( controller .getProperty( "drawStyle" ) ); drawStylesCombo .addActionListener( new ActionListener() { @Override public void actionPerformed( ActionEvent e ) { JComboBox<?> cb = (JComboBox<?>) e .getSource(); String drawStyle = cb .getSelectedItem().toString(); actions .actionPerformed( new ActionEvent( cb, 0, "setDrawStyle." + drawStyle ) ); } } ); buttonPanel .add( drawStylesCombo ); boolean setting = Boolean .valueOf( controller .getProperty( "showBackground" ) ) .booleanValue(); JCheckBox checkbox = new JCheckBox( "show background", setting ); checkbox .setActionCommand( "toggleBackground" ); checkbox .addActionListener( actions ); buttonPanel .add( checkbox ); final JComboBox<String> formatsCombo = new JComboBox<>( FORMATS ); final JButton saveButton = new JButton( "Save..." ); saveButton .addActionListener( new ActionListener() { @Override public void actionPerformed( ActionEvent e ) { String tail = "pdf"; switch ( formatsCombo .getSelectedIndex() ) { case 1: tail = "ps"; break; case 2: tail = "svg"; break; default: break; } ActionListener delegate = new ControllerFileAction( mFileChooser, false, "export.2d."+tail, tail, controller ); delegate .actionPerformed( e ); } }); saveButton .setToolTipText( "Save a PDF file." ); buttonPanel .add( saveButton ); formatsCombo .setSelectedItem( SAVE_AS_PDF ); formatsCombo .addActionListener( new ActionListener() { @Override public void actionPerformed( ActionEvent e ) { String format = "a PDF"; switch ( formatsCombo .getSelectedIndex() ) { case 1: format = "a Postscript"; break; case 2: format = "an SVG"; break; default: break; } saveButton .setToolTipText( "Save " + format + " file" ); } } ); buttonPanel .add( formatsCombo ); // button = new JButton( "Save as PDF" ); // button .addActionListener( new ControllerFileAction( mFileChooser, false, "export.2d.pdf", "pdf", controller ) ); // button .setToolTipText( "Save a PDF file." ); // buttonPanel .add( button ); // // button = new JButton( "Save as PS" ); // button .addActionListener( new ControllerFileAction( mFileChooser, false, "export.2d.ps", "ps", controller ) ); // button .setToolTipText( "Save a PostScript file." ); // buttonPanel .add( button ); // // button = new JButton( "Save as SVG" ); // button .addActionListener( new ControllerFileAction( mFileChooser, false, "export.2d.svg", "svg", controller ) ); // button .setToolTipText( "Save an SVG file." ); // buttonPanel .add( button ); // setting = Boolean .valueOf( controller .getProperty( "lineDrawing" ) ) .booleanValue(); // checkbox = new JCheckBox( "line drawing", setting ); // checkbox .setActionCommand( "toggleLineDrawing" ); // checkbox.addActionListener( actions ); // buttonPanel .add( checkbox ); // // setting = Boolean .valueOf( controller .getProperty( "monochrome" ) ) .booleanValue(); // checkbox = new JCheckBox( "monochrome", setting ); // checkbox .setActionCommand( "toggleMonochrome" ); // checkbox.addActionListener( actions ); // buttonPanel .add( checkbox ); contentPane .add( buttonPanel, BorderLayout.NORTH ); contentPane .add( snapshotPanel, BorderLayout.CENTER ); } public void setPanelSize( Dimension dims ) { snapshotPanel .setPreferredSize( dims ); controller .actionPerformed( new ActionEvent( this, ActionEvent.ACTION_PERFORMED, "refresh.2d" ) ); } @Override public void repaint() { this .snapshotPanel .repaint(); } private class Snapshot2dPanel extends JPanel { @Override protected void paintComponent( Graphics g ) { controller .repaintGraphics( "snapshot.2d", g, getSize() ); } } }