/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.designer.core.editor.format;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import org.pentaho.reporting.designer.core.Messages;
import org.pentaho.reporting.engine.classic.core.ElementAlignment;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleSheet;
import org.pentaho.reporting.engine.classic.core.style.TextStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.TextWrap;
import org.pentaho.reporting.engine.classic.core.style.VerticalTextAlign;
import org.pentaho.reporting.engine.classic.core.style.WhitespaceCollapse;
import org.pentaho.reporting.libraries.designtime.swing.KeyedComboBoxModel;
import org.pentaho.reporting.tools.configeditor.util.VerticalLayout;
/**
* Todo: Document Me
*
* @author Thomas Morgner
*/
public class ParagraphPropertiesPane extends JPanel
{
private JRadioButton leftAlignButton;
private JRadioButton centerAlignButton;
private JRadioButton rightAlignButton;
private JRadioButton topAlignButton;
private JRadioButton middleAlignButton;
private JRadioButton bottomAlignButton;
private JTextField lineHeightField;
private JCheckBox wrapTextCheckbox;
private KeyedComboBoxModel whitespaceModel;
private KeyedComboBoxModel textAlignModel;
public ParagraphPropertiesPane()
{
setLayout(new VerticalLayout());
leftAlignButton = new JRadioButton(Messages.getString("ParagraphPropertiesPane.Left"));
centerAlignButton = new JRadioButton(Messages.getString("ParagraphPropertiesPane.Center"));
rightAlignButton = new JRadioButton(Messages.getString("ParagraphPropertiesPane.Right"));
final ButtonGroup halignGroup = new ButtonGroup();
halignGroup.add(leftAlignButton);
halignGroup.add(centerAlignButton);
halignGroup.add(rightAlignButton);
topAlignButton = new JRadioButton(Messages.getString("ParagraphPropertiesPane.Top"));
middleAlignButton = new JRadioButton(Messages.getString("ParagraphPropertiesPane.Middle"));
bottomAlignButton = new JRadioButton(Messages.getString("ParagraphPropertiesPane.Bottom"));
final ButtonGroup valignGroup = new ButtonGroup();
valignGroup.add(topAlignButton);
valignGroup.add(middleAlignButton);
valignGroup.add(bottomAlignButton);
textAlignModel = createTextAlignmentModel();
whitespaceModel = createWhitspaceModel();
final JComboBox textAlignmentComboBox = new JComboBox(textAlignModel);
wrapTextCheckbox = new JCheckBox(Messages.getString("ParagraphPropertiesPane.AllowTextWrapping"));
lineHeightField = new JTextField();
lineHeightField.setColumns(10);
final JComboBox whitespaceComboBox = new JComboBox(whitespaceModel);
final JPanel halignPanel = new JPanel();
halignPanel.setLayout(new VerticalLayout());
halignPanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("ParagraphPropertiesPane.HorizontalAlignment")));
halignPanel.add(leftAlignButton);
halignPanel.add(centerAlignButton);
halignPanel.add(rightAlignButton);
final JPanel valignPanel = new JPanel();
valignPanel.setLayout(new VerticalLayout());
valignPanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("ParagraphPropertiesPane.VerticalAlignment")));
valignPanel.add(topAlignButton);
valignPanel.add(middleAlignButton);
valignPanel.add(bottomAlignButton);
final JPanel textToTextPanel = new JPanel();
textToTextPanel.setLayout(new GridBagLayout());
textToTextPanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("ParagraphPropertiesPane.TextToTextAlignment")));
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
textToTextPanel.add(new JLabel(Messages.getString("ParagraphPropertiesPane.Alignment")), gbc);
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1;
textToTextPanel.add(textAlignmentComboBox, gbc);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
textToTextPanel.add(new JLabel(Messages.getString("ParagraphPropertiesPane.LineHeight")), gbc);
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1;
textToTextPanel.add(lineHeightField, gbc);
final JPanel whitespacePanel = new JPanel();
whitespacePanel.setLayout(new GridBagLayout());
whitespacePanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("ParagraphPropertiesPane.WhitespaceProcessing")));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1;
whitespacePanel.add(wrapTextCheckbox, gbc);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
whitespacePanel.add(new JLabel(Messages.getString("ParagraphPropertiesPane.WhitespaceProcessing")), gbc);
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1;
whitespacePanel.add(whitespaceComboBox, gbc);
add(halignPanel);
add(valignPanel);
add(textToTextPanel);
add(whitespacePanel);
}
private KeyedComboBoxModel createTextAlignmentModel()
{
final KeyedComboBoxModel model = new KeyedComboBoxModel();
model.add(VerticalTextAlign.TOP, Messages.getString("ParagraphPropertiesPane.Top"));
model.add(VerticalTextAlign.CENTRAL, Messages.getString("ParagraphPropertiesPane.Central"));
model.add(VerticalTextAlign.MIDDLE, Messages.getString("ParagraphPropertiesPane.Middle"));
model.add(VerticalTextAlign.BASELINE, Messages.getString("ParagraphPropertiesPane.Baseline"));
model.add(VerticalTextAlign.USE_SCRIPT, Messages.getString("ParagraphPropertiesPane.UseScript"));
model.add(VerticalTextAlign.TEXT_TOP, Messages.getString("ParagraphPropertiesPane.TextTop"));
model.add(VerticalTextAlign.TEXT_BOTTOM, Messages.getString("ParagraphPropertiesPane.TextBottom"));
model.add(VerticalTextAlign.SUB, Messages.getString("ParagraphPropertiesPane.Subscript"));
model.add(VerticalTextAlign.SUPER, Messages.getString("ParagraphPropertiesPane.Superscript"));
model.add(VerticalTextAlign.BOTTOM, Messages.getString("ParagraphPropertiesPane.Bottom"));
return model;
}
private KeyedComboBoxModel createWhitspaceModel()
{
final KeyedComboBoxModel model = new KeyedComboBoxModel();
model.add(WhitespaceCollapse.COLLAPSE, Messages.getString("ParagraphPropertiesPane.CollapseWhitespaces"));
model.add(WhitespaceCollapse.DISCARD, Messages.getString("ParagraphPropertiesPane.DiscardAllWhitespaces"));
model.add(WhitespaceCollapse.PRESERVE, Messages.getString("ParagraphPropertiesPane.PreserveAllWhitespaces"));
model.add(WhitespaceCollapse.PRESERVE_BREAKS, Messages.getString("ParagraphPropertiesPane.PreserveBreaks"));
return model;
}
public void initializeFromStyle(final ElementStyleSheet styleSheet)
{
final ElementAlignment halign = (ElementAlignment) styleSheet.getStyleProperty(ElementStyleKeys.ALIGNMENT);
if (ElementAlignment.LEFT.equals(halign))
{
leftAlignButton.setSelected(true);
}
else if (ElementAlignment.CENTER.equals(halign))
{
centerAlignButton.setSelected(true);
}
else
{
rightAlignButton.setSelected(true);
}
final ElementAlignment valign = (ElementAlignment) styleSheet.getStyleProperty(ElementStyleKeys.VALIGNMENT);
if (ElementAlignment.BOTTOM.equals(valign))
{
bottomAlignButton.setSelected(true);
}
else if (ElementAlignment.MIDDLE.equals(valign))
{
middleAlignButton.setSelected(true);
}
else
{
topAlignButton.setSelected(true);
}
wrapTextCheckbox.setSelected(TextWrap.WRAP.equals(styleSheet.getStyleProperty(TextStyleKeys.TEXT_WRAP)));
lineHeightField.setText(BorderPropertiesPane.printLength((Number) styleSheet.getStyleProperty(
TextStyleKeys.LINEHEIGHT)));
textAlignModel.setSelectedKey(styleSheet.getStyleProperty(TextStyleKeys.VERTICAL_TEXT_ALIGNMENT));
whitespaceModel.setSelectedKey(styleSheet.getStyleProperty(TextStyleKeys.WHITE_SPACE_COLLAPSE));
}
public void commitValues(final ElementStyleSheet styleSheet)
{
if (centerAlignButton.isSelected())
{
styleSheet.setStyleProperty(ElementStyleKeys.ALIGNMENT, ElementAlignment.CENTER);
}
else if (rightAlignButton.isSelected())
{
styleSheet.setStyleProperty(ElementStyleKeys.ALIGNMENT, ElementAlignment.RIGHT);
}
else
{
styleSheet.setStyleProperty(ElementStyleKeys.ALIGNMENT, ElementAlignment.LEFT);
}
if (middleAlignButton.isSelected())
{
styleSheet.setStyleProperty(ElementStyleKeys.VALIGNMENT, ElementAlignment.MIDDLE);
}
else if (bottomAlignButton.isSelected())
{
styleSheet.setStyleProperty(ElementStyleKeys.VALIGNMENT, ElementAlignment.BOTTOM);
}
else
{
styleSheet.setStyleProperty(ElementStyleKeys.VALIGNMENT, ElementAlignment.TOP);
}
styleSheet.setStyleProperty(TextStyleKeys.VERTICAL_TEXT_ALIGNMENT, textAlignModel.getSelectedKey());
styleSheet.setStyleProperty(TextStyleKeys.LINEHEIGHT, BorderPropertiesPane.parseLength(lineHeightField.getText()));
if (wrapTextCheckbox.isSelected())
{
styleSheet.setStyleProperty(TextStyleKeys.TEXT_WRAP, TextWrap.WRAP);
}
else
{
styleSheet.setStyleProperty(TextStyleKeys.TEXT_WRAP, TextWrap.NONE);
}
styleSheet.setStyleProperty(TextStyleKeys.WHITE_SPACE_COLLAPSE, whitespaceModel.getSelectedKey());
}
}