/*! * 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 org.pentaho.reporting.designer.core.Messages; import org.pentaho.reporting.engine.classic.core.style.BorderStyle; import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys; import org.pentaho.reporting.engine.classic.core.style.ElementStyleSheet; import org.pentaho.reporting.libraries.designtime.swing.ColorComboBox; import org.pentaho.reporting.libraries.designtime.swing.EllipsisButton; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class BorderPropertiesPane extends JPanel { private class BorderSelectionUpdateHandler implements BorderSelectionListener { private BorderSelectionUpdateHandler() { } public void selectionAdded( final BorderSelectionEvent event ) { final BorderSelection borderSelection = event.getSelection(); applyBorder( borderSelection ); } public void selectionRemoved( final BorderSelectionEvent event ) { // ignored .. } } private class BorderStyleUpdateHandler implements ListSelectionListener, ActionListener, ChangeListener { private BorderStyleUpdateHandler() { } public void actionPerformed( final ActionEvent e ) { final BorderSelection[] selections = borderEditorPanel.getSelectionModel().getSelections(); for ( int i = 0; i < selections.length; i++ ) { final BorderSelection borderSelection = selections[ i ]; applyBorder( borderSelection ); } } public void valueChanged( final ListSelectionEvent e ) { final BorderSelection[] selections = borderEditorPanel.getSelectionModel().getSelections(); for ( int i = 0; i < selections.length; i++ ) { final BorderSelection borderSelection = selections[ i ]; applyBorder( borderSelection ); } } public void stateChanged( final ChangeEvent e ) { final BorderSelection[] selections = borderEditorPanel.getSelectionModel().getSelections(); for ( int i = 0; i < selections.length; i++ ) { final BorderSelection borderSelection = selections[ i ]; applyBorder( borderSelection ); } } } private class SelectNoneBordersAction extends AbstractAction { private SelectNoneBordersAction() { putValue( Action.NAME, Messages.getString( "BorderPropertiesPane.None" ) ); } public void actionPerformed( final ActionEvent e ) { borderEditorPanel.getSelectionModel().clearSelection(); } } private class SelectAllBordersAction extends AbstractAction { private SelectAllBordersAction() { putValue( Action.NAME, Messages.getString( "BorderPropertiesPane.All" ) ); } public void actionPerformed( final ActionEvent e ) { borderEditorPanel.getSelectionModel().clearSelection(); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_RIGHT ); } } private class SelectHorizontalBordersAction extends AbstractAction { private SelectHorizontalBordersAction() { putValue( Action.NAME, Messages.getString( "BorderPropertiesPane.Horizontal" ) ); } public void actionPerformed( final ActionEvent e ) { borderEditorPanel.getSelectionModel().clearSelection(); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_RIGHT ); } } private class SelectVerticalBordersAction extends AbstractAction { private SelectVerticalBordersAction() { putValue( Action.NAME, Messages.getString( "BorderPropertiesPane.Vertical" ) ); } public void actionPerformed( final ActionEvent e ) { borderEditorPanel.getSelectionModel().clearSelection(); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_RIGHT ); } } private class SelectLeftBordersAction extends AbstractAction { private SelectLeftBordersAction() { putValue( Action.NAME, Messages.getString( "BorderPropertiesPane.Left" ) ); } public void actionPerformed( final ActionEvent e ) { borderEditorPanel.getSelectionModel().clearSelection(); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.LEFT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_LEFT ); } } private class SelectRightBordersAction extends AbstractAction { private SelectRightBordersAction() { putValue( Action.NAME, Messages.getString( "BorderPropertiesPane.Right" ) ); } public void actionPerformed( final ActionEvent e ) { borderEditorPanel.getSelectionModel().clearSelection(); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.TOP_RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.RIGHT ); borderEditorPanel.getSelectionModel().addSelection( BorderSelection.BOTTOM_RIGHT ); } } private static class FloatSpinner extends JSpinner { public FloatSpinner() { super( createSpinnerModel() ); } protected JComponent createEditor( final SpinnerModel model ) { return new NumberEditor( this, "0.0##" ); } protected static SpinnerNumberModel createSpinnerModel() { return new SpinnerNumberModel( new Float( 0 ), new Float( 0 ), new Float( Short.MAX_VALUE ), new Float( 1 ) ); } } private JSpinner cornerWidth; private JSpinner cornerHeight; private JSpinner paddingLeft; private JSpinner paddingTop; private JSpinner paddingBottom; private JSpinner paddingRight; private JComboBox colorSelectorBox; private JList styleList; private BorderRenderPanel borderEditorPanel; private JSpinner borderWidth; private JTextField minimumWidth; private JTextField minimumHeight; public BorderPropertiesPane() { final BorderStyleUpdateHandler updateHandler = new BorderStyleUpdateHandler(); styleList = new JList( createBorderStyleModel() ); styleList.addListSelectionListener( updateHandler ); colorSelectorBox = new ColorComboBox(); colorSelectorBox.addActionListener( updateHandler ); minimumWidth = new JTextField(); minimumHeight = new JTextField(); paddingTop = new FloatSpinner(); paddingLeft = new FloatSpinner(); paddingBottom = new FloatSpinner(); paddingRight = new FloatSpinner(); cornerWidth = new FloatSpinner(); cornerWidth.addChangeListener( updateHandler ); cornerHeight = new FloatSpinner(); cornerHeight.addChangeListener( updateHandler ); borderEditorPanel = new BorderRenderPanel(); borderEditorPanel.setMinimumSize( new Dimension( 100, 100 ) ); borderEditorPanel.setPreferredSize( new Dimension( 250, 250 ) ); borderEditorPanel.setMaximumSize( new Dimension( 250, 250 ) ); borderEditorPanel.getSelectionModel().addBorderSelectionListener( new BorderSelectionUpdateHandler() ); borderWidth = new FloatSpinner(); borderWidth.addChangeListener( updateHandler ); final JPanel borderCornerCarrier = new JPanel( new GridBagLayout() ); borderCornerCarrier .setBorder( BorderFactory.createTitledBorder( Messages.getString( "BorderPropertiesPane.RoundedCorners" ) ) ); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 0 ); borderCornerCarrier.add( new JLabel( Messages.getString( "BorderPropertiesPane.Width" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 0, 5 ); borderCornerCarrier.add( cornerWidth, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 5, 0 ); borderCornerCarrier.add( new JLabel( Messages.getString( "BorderPropertiesPane.Height" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 5, 5 ); borderCornerCarrier.add( cornerHeight, gbc ); final JPanel arrangementPanel = new JPanel(); arrangementPanel.setLayout( new FlowLayout() ); arrangementPanel.add( new JButton( new SelectNoneBordersAction() ) ); arrangementPanel.add( new JButton( new SelectAllBordersAction() ) ); arrangementPanel.add( new JButton( new SelectHorizontalBordersAction() ) ); arrangementPanel.add( new JButton( new SelectVerticalBordersAction() ) ); arrangementPanel.add( new JButton( new SelectLeftBordersAction() ) ); arrangementPanel.add( new JButton( new SelectRightBordersAction() ) ); final JPanel borderPanel = new JPanel(); borderPanel.setLayout( new BorderLayout() ); borderPanel.setBorder( BorderFactory.createTitledBorder( Messages.getString( "BorderPropertiesPane.Borders" ) ) ); borderPanel.add( arrangementPanel, BorderLayout.NORTH ); borderPanel.add( borderEditorPanel, BorderLayout.CENTER ); final JPanel borderEditorCarrier = new JPanel( new BorderLayout() ); borderEditorCarrier.add( borderPanel, BorderLayout.CENTER ); borderEditorCarrier.add( borderCornerCarrier, BorderLayout.SOUTH ); final JPanel styleListPanel = new JPanel(); styleListPanel.setLayout( new BorderLayout() ); styleListPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Style" ) ), BorderLayout.NORTH ); styleListPanel.add( new JScrollPane( styleList ), BorderLayout.CENTER ); final JPanel styleColorPanel = new JPanel(); styleColorPanel.setLayout( new GridBagLayout() ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 2; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 5 ); styleColorPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Width" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 2; gbc.weightx = 1; gbc.gridwidth = 2; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 5 ); styleColorPanel.add( borderWidth, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 5 ); styleColorPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Color" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 5 ); styleColorPanel.add( colorSelectorBox, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 5 ); gbc.fill = GridBagConstraints.VERTICAL; styleColorPanel.add( new EllipsisButton( new SelectCustomColorAction( colorSelectorBox ) ), gbc ); final JPanel linestylePanel = new JPanel(); linestylePanel.setLayout( new BorderLayout() ); linestylePanel .setBorder( BorderFactory.createTitledBorder( Messages.getString( "BorderPropertiesPane.LineStyle" ) ) ); linestylePanel.add( styleListPanel, BorderLayout.CENTER ); linestylePanel.add( styleColorPanel, BorderLayout.SOUTH ); final JPanel paddingPanel = new JPanel(); paddingPanel.setLayout( new GridBagLayout() ); paddingPanel.setBorder( BorderFactory.createTitledBorder( Messages.getString( "BorderPropertiesPane.Paddings" ) ) ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 0 ); paddingPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Left" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 0, 5 ); paddingPanel.add( paddingLeft, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 0 ); paddingPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Right" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 0, 5 ); paddingPanel.add( paddingRight, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 2; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 0 ); paddingPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Top" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 2; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 0, 5 ); paddingPanel.add( paddingTop, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 3; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 5, 0 ); paddingPanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Bottom" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 3; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 5, 5 ); paddingPanel.add( paddingBottom, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 5; gbc.gridwidth = 2; gbc.weighty = 100; gbc.anchor = GridBagConstraints.WEST; paddingPanel.add( new JPanel(), gbc ); final JPanel minSizePanel = new JPanel(); minSizePanel.setLayout( new GridBagLayout() ); minSizePanel .setBorder( BorderFactory.createTitledBorder( Messages.getString( "BorderPropertiesPane.MinimumSize" ) ) ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 0, 0 ); minSizePanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Width" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 0, 5 ); minSizePanel.add( minimumWidth, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 5, 5, 5, 0 ); minSizePanel.add( new JLabel( Messages.getString( "BorderPropertiesPane.Height" ) ), gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.anchor = GridBagConstraints.WEST; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets( 5, 5, 5, 5 ); minSizePanel.add( minimumHeight, gbc ); final JPanel paddingsAndSizePanel = new JPanel(); paddingsAndSizePanel.setLayout( new BorderLayout() ); paddingsAndSizePanel.add( minSizePanel, BorderLayout.NORTH ); paddingsAndSizePanel.add( paddingPanel, BorderLayout.CENTER ); setLayout( new GridBagLayout() ); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.NORTHEAST; gbc.weightx = 1; gbc.weighty = 1; gbc.fill = GridBagConstraints.BOTH; add( paddingsAndSizePanel, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 0; gbc.anchor = GridBagConstraints.NORTH; gbc.weightx = 3; gbc.weighty = 1; gbc.fill = GridBagConstraints.BOTH; add( borderEditorCarrier, gbc ); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 0; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.weightx = 1; gbc.weighty = 1; gbc.fill = GridBagConstraints.BOTH; add( linestylePanel, gbc ); } /** * The model's item index matches the AWT-font-style flags. * * @return */ private DefaultListModel createBorderStyleModel() { final DefaultListModel model = new DefaultListModel(); model.addElement( BorderStyle.SOLID ); model.addElement( BorderStyle.DASHED ); model.addElement( BorderStyle.DOT_DASH ); model.addElement( BorderStyle.DOT_DOT_DASH ); model.addElement( BorderStyle.DOTTED ); model.addElement( BorderStyle.HIDDEN ); model.addElement( BorderStyle.NONE ); model.addElement( BorderStyle.DOUBLE ); model.addElement( BorderStyle.GROOVE ); model.addElement( BorderStyle.INSET ); model.addElement( BorderStyle.OUTSET ); model.addElement( BorderStyle.RIDGE ); model.addElement( BorderStyle.WAVE ); return model; } protected void applyBorder( final BorderSelection borderSelection ) { final ElementStyleSheet styleSheet = borderEditorPanel.getElementStyleSheet(); if ( BorderSelection.TOP.equals( borderSelection ) ) { final Color color = (Color) colorSelectorBox.getSelectedItem(); final Number width = (Number) borderWidth.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_COLOR, color ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_WIDTH, new Float( width.floatValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_STYLE, styleList.getSelectedValue() ); } else if ( BorderSelection.LEFT.equals( borderSelection ) ) { final Color color = (Color) colorSelectorBox.getSelectedItem(); final Number width = (Number) borderWidth.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_LEFT_COLOR, color ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_LEFT_WIDTH, new Float( width.floatValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_LEFT_STYLE, styleList.getSelectedValue() ); } else if ( BorderSelection.BOTTOM.equals( borderSelection ) ) { final Color color = (Color) colorSelectorBox.getSelectedItem(); final Number width = (Number) borderWidth.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_COLOR, color ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_WIDTH, new Float( width.floatValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_STYLE, styleList.getSelectedValue() ); } else if ( BorderSelection.RIGHT.equals( borderSelection ) ) { final Color color = (Color) colorSelectorBox.getSelectedItem(); final Number width = (Number) borderWidth.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_RIGHT_COLOR, color ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_RIGHT_WIDTH, new Float( width.floatValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_RIGHT_STYLE, styleList.getSelectedValue() ); } else if ( BorderSelection.TOP_LEFT.equals( borderSelection ) ) { final Number width = (Number) cornerWidth.getValue(); final Number height = (Number) cornerHeight.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_WIDTH, new Float( width.floatValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_HEIGHT, new Float( height.floatValue() ) ); } else if ( BorderSelection.TOP_RIGHT.equals( borderSelection ) ) { final Number width = (Number) cornerWidth.getValue(); final Number height = (Number) cornerHeight.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_WIDTH, new Float( width.floatValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_HEIGHT, new Float( height.floatValue() ) ); } else if ( BorderSelection.BOTTOM_LEFT.equals( borderSelection ) ) { final Number width = (Number) cornerWidth.getValue(); final Number height = (Number) cornerHeight.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_WIDTH, new Float( width.floatValue() ) ); styleSheet .setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_HEIGHT, new Float( height.floatValue() ) ); } else if ( BorderSelection.BOTTOM_RIGHT.equals( borderSelection ) ) { final Number width = (Number) cornerWidth.getValue(); final Number height = (Number) cornerHeight.getValue(); styleSheet.setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_WIDTH, new Float( width.floatValue() ) ); styleSheet .setStyleProperty( ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_HEIGHT, new Float( height.floatValue() ) ); } borderEditorPanel.repaint(); } public void initializeFromStyle( final ElementStyleSheet styleSheet ) { borderEditorPanel.updateElementStyleSheet( styleSheet ); minimumWidth.setText( printLength( (Number) styleSheet.getStyleProperty( ElementStyleKeys.MIN_WIDTH ) ) ); minimumHeight.setText( printLength( (Number) styleSheet.getStyleProperty( ElementStyleKeys.MIN_HEIGHT ) ) ); paddingTop.setValue( styleSheet.getStyleProperty( ElementStyleKeys.PADDING_TOP, 0f ) ); paddingLeft.setValue( styleSheet.getStyleProperty( ElementStyleKeys.PADDING_LEFT, 0f ) ); paddingBottom.setValue( styleSheet.getStyleProperty( ElementStyleKeys.PADDING_BOTTOM, 0f ) ); paddingRight.setValue( styleSheet.getStyleProperty( ElementStyleKeys.PADDING_RIGHT, 0f ) ); } public void commitValues( final ElementStyleSheet styleSheet ) { styleSheet.setStyleProperty( ElementStyleKeys.PADDING_TOP, parseLength( (Number) paddingTop.getValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.PADDING_LEFT, parseLength( (Number) paddingLeft.getValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.PADDING_BOTTOM, parseLength( (Number) paddingBottom.getValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.PADDING_RIGHT, parseLength( (Number) paddingRight.getValue() ) ); styleSheet.setStyleProperty( ElementStyleKeys.MIN_WIDTH, parseLength( minimumWidth.getText() ) ); styleSheet.setStyleProperty( ElementStyleKeys.MIN_HEIGHT, parseLength( minimumHeight.getText() ) ); borderEditorPanel.commitValues( styleSheet ); } public static String printLength( final Number length ) { if ( length == null ) { return null; } if ( length.floatValue() >= 0 ) { return String.valueOf( length ); } return -length.floatValue() + "%"; } public static Float parseLength( final Number value ) { if ( value instanceof Float ) { return (Float) value; } if ( value != null ) { return new Float( value.floatValue() ); } return null; } public static Float parseLength( final String value ) { if ( value == null ) { return null; } try { final String tvalue = value.trim(); //noinspection MagicCharacter if ( tvalue.length() > 0 && tvalue.charAt( tvalue.length() - 1 ) == '%' ) { final String number = tvalue.substring( 0, tvalue.length() - 1 ); return Float.parseFloat( number ) * -1.0f; } else { return Float.parseFloat( tvalue ); } } catch ( NumberFormatException e ) { // ignore exception return null; } } }