/*
* Preview Dialog - A Preview Dialog for your Swing Applications Copyright (C)
* 2003 Jens Kaiser. Created by Dimitry Polivaev. Written by: 2003 Jens Kaiser
* <jens.kaiser@web.de> This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU Library 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 Library General Public License for more details. You should have
* received a copy of the GNU Library General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
* Cambridge, MA 02139, USA.
*/
package org.freeplane.features.print;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Printable;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.ui.components.FreeplaneToolBar;
import org.freeplane.core.ui.components.UITools;
class PreviewDialog extends JDialog implements ActionListener {
final private static double DEFAULT_ZOOM_FACTOR_STEP = Math.sqrt(2);
/**
*
*/
private static final long serialVersionUID = 1L;
final private JLabel pageNumber;
protected Printable view;
public PreviewDialog(final PrintController printController, final String title, final Component c) {
super(JOptionPane.getFrameForComponent(c), title, true);
view = (Printable) c;
final Rectangle desktopBounds = UITools.getDesktopBounds(c);
Dimension previewSize = new Dimension(desktopBounds.width * 3/4, desktopBounds.height * 3/4);
final Preview preview = new Preview(printController, view, previewSize );
final JScrollPane scrollPane = new JScrollPane(preview, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
UITools.setScrollbarIncrement(scrollPane);
getContentPane().add(scrollPane, "Center");
final JToolBar toolbar = new FreeplaneToolBar("preview_toolbar", SwingConstants.HORIZONTAL);
getContentPane().add(toolbar, "North");
pageNumber = new JLabel("- 9999 -");
final JButton button = getButton("Back24.gif", new BrowseAction(preview, pageNumber, -1));
toolbar.add(button);
pageNumber.setPreferredSize(new Dimension(pageNumber.getPreferredSize().width, button.getPreferredSize().height));
pageNumber.setText("- 1 -");
pageNumber.setHorizontalAlignment(SwingConstants.CENTER);
toolbar.add(pageNumber);
toolbar.add(getButton("Forward24.gif", new BrowseAction(preview, pageNumber, 1)));
toolbar.add(new JToolBar.Separator());
toolbar.add(getButton("ZoomIn24.png", new ZoomAction(preview, PreviewDialog.DEFAULT_ZOOM_FACTOR_STEP)));
toolbar.add(getButton("ZoomOut24.png", new ZoomAction(preview, 1.0/PreviewDialog.DEFAULT_ZOOM_FACTOR_STEP)));
toolbar.add(new JToolBar.Separator());
final JPanel buttons = new JPanel();
buttons.setLayout(new FlowLayout(FlowLayout.RIGHT));
final JButton ok = new JButton("OK");
ok.addActionListener(this);
buttons.add(ok);
getContentPane().add(buttons, "South");
UITools.addEscapeActionToDialog(this);
}
public void actionPerformed(final ActionEvent e) {
dispose();
}
private JButton getButton(final String iconName, final AbstractAction action) {
return getButton(null, iconName, action);
}
private JButton getButton(final String name, final String iconName, final AbstractAction action) {
JButton result = null;
ImageIcon icon = null;
final URL imageURL = ResourceController.getResourceController().getResource("/images/" + iconName);
if (imageURL != null) {
icon = new ImageIcon(imageURL);
}
if (action != null) {
if (icon != null) {
action.putValue(Action.SMALL_ICON, new ImageIcon(imageURL));
}
if (name != null) {
action.putValue(Action.NAME, name);
}
result = new JButton(action);
}
else {
result = new JButton(name, icon);
}
return result;
}
}