/*
* Freeplane - mind map editor
* Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
*
* This file is modified by Dimitry Polivaev in 2008.
*
* 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, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.features.print;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.ui.MenuBuilder;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.TextUtils;
class PageAction extends AbstractPrintAction {
static final String NAME = "page";
/**
*
*/
private static final long serialVersionUID = 1L;
PageAction(final PrintController controller) {
super("PageAction", controller);
}
public void actionPerformed(final ActionEvent e) {
if (!getPrintController().acquirePrinterJobAndPageFormat(false)) {
return;
}
final FitMap fitMap = FitMap.valueOf();
//define controls
//ButtonGroup
final ButtonGroup fitButtons = new ButtonGroup();
//Fit to page
final JRadioButton fitToPage = new JRadioButton();
MenuBuilder.setLabelAndMnemonic(fitToPage, TextUtils.getRawText("fit_map_to_page"));
fitToPage.setSelected(fitMap == FitMap.PAGE);
fitButtons.add(fitToPage);
//Fit width
final JRadioButton fitToWidth = new JRadioButton();
MenuBuilder.setLabelAndMnemonic(fitToWidth, TextUtils.getRawText("fit_map_to_page_width"));
fitToWidth.setSelected(fitMap == FitMap.WIDTH);
fitButtons.add(fitToWidth);
//Fit to heighth
final JRadioButton fitToHeighth = new JRadioButton();
MenuBuilder.setLabelAndMnemonic(fitToHeighth, TextUtils.getRawText("fit_map_to_page_height"));
fitToHeighth.setSelected(fitMap == FitMap.HEIGHT);
fitButtons.add(fitToHeighth);
//User defined
final JRadioButton userDefaultScale = new JRadioButton();
MenuBuilder.setLabelAndMnemonic(userDefaultScale, TextUtils.getRawText("user_defined_scale"));
userDefaultScale.setSelected(fitMap == FitMap.USER_DEFINED);
fitButtons.add(userDefaultScale);
//User defined label
final JLabel userZoomL = new JLabel(TextUtils.getText("user_zoom"));
//User defined input field
final JTextField userZoom = new JTextField(ResourceController.getResourceController().getProperty("user_zoom"),
3);
userZoom.setPreferredSize(new Dimension(30, 21));
if (fitMap == FitMap.USER_DEFINED) {
userZoom.setEditable(true);
userZoom.setEnabled(true);
}
else {
userZoom.setEnabled(false);
userZoom.setEditable(false);
}
//Set up dialog content
final JPanel panel = new JPanel();
final GridBagLayout gridbag = new GridBagLayout();
panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(),
BorderFactory.createEmptyBorder(10, 0, 10, 0)));
//Action listener if user defined zoom is selected/ deselected
userDefaultScale.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent e) {
final boolean selected = e.getStateChange() == ItemEvent.SELECTED;
userZoom.setEditable(selected);
userZoom.setEnabled(selected);
if (selected) {
userZoom.requestFocusInWindow();
}
}
});
//GridbagLayout
final GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 3;
c.ipady = 10;
c.ipadx = 4;
c.anchor = GridBagConstraints.LINE_START;
c.insets = new Insets(0, 10, 0, 10);
//fit to page
gridbag.setConstraints(fitToPage, c);
panel.add(fitToPage);
c.gridy++;
//fit to width
gridbag.setConstraints(fitToWidth, c);
panel.add(fitToWidth);
c.gridy++;
//fit to heigth
gridbag.setConstraints(fitToHeighth, c);
panel.add(fitToHeighth);
c.gridy++;
//user defined
gridbag.setConstraints(userDefaultScale, c);
panel.add(userDefaultScale);
c.gridy++;
c.ipady = 1;
c.gridx = 0;
c.gridwidth = 1;
c.insets = new Insets(0, 0, 0, 0);
//spacer
final Component b = Box.createRigidArea(new Dimension(25, 1));
gridbag.setConstraints(b, c);
panel.add(b);
c.ipadx = 4;
c.gridx = 1;
c.gridwidth = 1;
//Label
gridbag.setConstraints(userZoomL, c);
panel.add(userZoomL);
c.gridx = 2;
c.gridwidth = 1;
c.ipadx = 10;
c.insets = new Insets(0, 0, 0, 10);
//input field
gridbag.setConstraints(userZoom, c);
panel.add(userZoom);
panel.setLayout(gridbag);
//show dialog
final int result = UITools.showConfirmDialog(null, panel, TextUtils.getText("printing_settings"),
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
//evaluate result
if (result == JOptionPane.OK_OPTION) {
ResourceController.getResourceController().setProperty("user_zoom", userZoom.getText());
final FitMap fitMapDecision;
if (fitToPage.isSelected()) {
fitMapDecision = FitMap.PAGE;
}
else if (fitToWidth.isSelected()) {
fitMapDecision = FitMap.WIDTH;
}
else if (fitToHeighth.isSelected()) {
fitMapDecision = FitMap.HEIGHT;
}
else {
fitMapDecision = FitMap.USER_DEFINED;
}
ResourceController.getResourceController().setProperty("fit_map", fitMapDecision.toString());
}
else {
return;
}
final PrintController printController = getPrintController();
printController.pageDialog();
}
}