/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.core.ui.util;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Window;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import org.weasis.core.api.media.data.ImageElement;
import org.weasis.core.api.util.StringUtil;
import org.weasis.core.ui.Messages;
import org.weasis.core.ui.editor.image.ImageViewerEventManager;
import org.weasis.core.ui.editor.image.ImageViewerPlugin;
import org.weasis.core.ui.editor.image.ViewCanvas;
/**
*
* @author Marcelo Porto (marcelo@animati.com.br), Nicolas Roduit
*/
@SuppressWarnings("serial")
public class PrintDialog<I extends ImageElement> extends javax.swing.JDialog {
private javax.swing.JCheckBox annotationsCheckBox;
private javax.swing.JButton cancelButton;
private javax.swing.JComboBox<String> positionComboBox;
private javax.swing.JLabel positionLabel;
private javax.swing.JButton printButton;
private JLabel label;
private JCheckBox chckbxSelectedView;
private JComboBox<PrintOptions.DotPerInches> comboBoxDPI;
private ImageViewerEventManager<I> eventManager;
/** Creates new form PrintDialog */
public PrintDialog(Window parent, String title, ImageViewerEventManager<I> eventManager) {
super(parent, title, ModalityType.APPLICATION_MODAL);
this.eventManager = eventManager;
boolean layout = eventManager.getSelectedView2dContainer().getLayoutModel().getConstraints().size() > 1;
initComponents(layout);
pack();
}
private void initComponents(boolean layout) {
GridBagLayout gridBagLayout = new GridBagLayout();
getContentPane().setLayout(gridBagLayout);
positionLabel = new javax.swing.JLabel();
positionLabel.setText(Messages.getString("PrintDialog.pos") + StringUtil.COLON); //$NON-NLS-1$
GridBagConstraints gbcPositionLabel = new GridBagConstraints();
gbcPositionLabel.anchor = GridBagConstraints.EAST;
gbcPositionLabel.insets = new Insets(15, 20, 10, 5);
gbcPositionLabel.gridx = 0;
gbcPositionLabel.gridy = 0;
getContentPane().add(positionLabel, gbcPositionLabel);
positionComboBox = new javax.swing.JComboBox<>();
positionComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(
new String[] { Messages.getString("PrintDialog.center"), Messages.getString("PrintDialog.top") })); //$NON-NLS-1$ //$NON-NLS-2$
GridBagConstraints gbcPositionComboBox = new GridBagConstraints();
gbcPositionComboBox.anchor = GridBagConstraints.WEST;
gbcPositionComboBox.insets = new Insets(15, 0, 10, 5);
gbcPositionComboBox.gridx = 1;
gbcPositionComboBox.gridy = 0;
getContentPane().add(positionComboBox, gbcPositionComboBox);
label = new JLabel();
label.setText(Messages.getString("PrintDialog.dpi") + StringUtil.COLON); //$NON-NLS-1$
GridBagConstraints gbcLabel = new GridBagConstraints();
gbcLabel.anchor = GridBagConstraints.EAST;
gbcLabel.insets = new Insets(0, 20, 10, 5);
gbcLabel.gridx = 0;
gbcLabel.gridy = 1;
getContentPane().add(label, gbcLabel);
comboBoxDPI = new JComboBox<>();
GridBagConstraints gbcComboBoxDPI = new GridBagConstraints();
gbcComboBoxDPI.anchor = GridBagConstraints.NORTHWEST;
gbcComboBoxDPI.insets = new Insets(0, 0, 10, 5);
gbcComboBoxDPI.gridx = 1;
gbcComboBoxDPI.gridy = 1;
comboBoxDPI.setModel(new DefaultComboBoxModel<>(PrintOptions.DotPerInches.values()));
comboBoxDPI.setSelectedItem(PrintOptions.DotPerInches.DPI_150);
getContentPane().add(comboBoxDPI, gbcComboBoxDPI);
annotationsCheckBox = new javax.swing.JCheckBox();
annotationsCheckBox.setText(Messages.getString("PrintDialog.annotate")); //$NON-NLS-1$
annotationsCheckBox.setSelected(true);
GridBagConstraints gbcAnnotationsCheckBox = new GridBagConstraints();
gbcAnnotationsCheckBox.anchor = GridBagConstraints.WEST;
gbcAnnotationsCheckBox.insets = new Insets(0, 17, 10, 0);
gbcAnnotationsCheckBox.gridwidth = 3;
gbcAnnotationsCheckBox.gridx = 0;
gbcAnnotationsCheckBox.gridy = 2;
getContentPane().add(annotationsCheckBox, gbcAnnotationsCheckBox);
cancelButton = new javax.swing.JButton();
cancelButton.setText(Messages.getString("PrintDialog.cancel")); //$NON-NLS-1$
cancelButton.addActionListener(e -> dispose());
printButton = new javax.swing.JButton();
printButton.setText(Messages.getString("PrintDialog.print")); //$NON-NLS-1$
printButton.addActionListener(e-> printAction());
if (layout) {
chckbxSelectedView = new JCheckBox(Messages.getString("PrintDialog.selected_view")); //$NON-NLS-1$
GridBagConstraints gbcChckbxNewCheckBox = new GridBagConstraints();
gbcChckbxNewCheckBox.anchor = GridBagConstraints.WEST;
gbcChckbxNewCheckBox.gridwidth = 3;
gbcChckbxNewCheckBox.insets = new Insets(0, 15, 10, 5);
gbcChckbxNewCheckBox.gridx = 0;
gbcChckbxNewCheckBox.gridy = 3;
getContentPane().add(chckbxSelectedView, gbcChckbxNewCheckBox);
}
getRootPane().setDefaultButton(printButton);
GridBagConstraints gbcPrintButton = new GridBagConstraints();
gbcPrintButton.anchor = GridBagConstraints.EAST;
gbcPrintButton.insets = new Insets(25, 0, 15, 5);
gbcPrintButton.gridx = 1;
gbcPrintButton.gridy = 4;
getContentPane().add(printButton, gbcPrintButton);
GridBagConstraints gbcCancelButton = new GridBagConstraints();
gbcCancelButton.insets = new Insets(25, 10, 15, 15);
gbcCancelButton.anchor = GridBagConstraints.NORTHWEST;
gbcCancelButton.gridx = 2;
gbcCancelButton.gridy = 4;
getContentPane().add(cancelButton, gbcCancelButton);
pack();
}
private void printAction() {
PrintOptions printOptions = new PrintOptions();
printOptions.setShowingAnnotations(annotationsCheckBox.isSelected());
printOptions.setDpi((PrintOptions.DotPerInches) comboBoxDPI.getSelectedItem());
if (positionComboBox.getSelectedItem().equals(Messages.getString("PrintDialog.center"))) { //$NON-NLS-1$
printOptions.setCenter(true);
} else {
printOptions.setCenter(false);
}
ImageViewerPlugin<I> container = eventManager.getSelectedView2dContainer();
List<ViewCanvas<I>> views = container.getImagePanels();
if (views.isEmpty()) {
JOptionPane.showMessageDialog(this, Messages.getString("PrintDialog.no_print"), null, //$NON-NLS-1$
JOptionPane.ERROR_MESSAGE);
dispose();
return;
}
dispose();
ExportLayout<I> layout;
if (chckbxSelectedView != null && !chckbxSelectedView.isSelected()) {
// Several views
layout = new ExportLayout<>(container.getLayoutModel());
} else {
// One View
layout = new ExportLayout<>(eventManager.getSelectedViewPane());
}
ImagePrint print = new ImagePrint(layout, printOptions);
print.print();
layout.dispose();
}
}