Package org.pentaho.reporting.tools.configeditor.editor

Source Code of org.pentaho.reporting.tools.configeditor.editor.TextKeyEditor$DocumentChangeHandler

/*
* 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) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors.  All rights reserved.
*/

package org.pentaho.reporting.tools.configeditor.editor;

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import org.pentaho.reporting.libraries.base.config.HierarchicalConfiguration;
import org.pentaho.reporting.tools.configeditor.model.ConfigDescriptionEntry;

/**
* The text key editor is used to edit a free form text.
*
* @author Thomas Morgner
*/
public class TextKeyEditor extends AbstractKeyEditor
{
  /**
   * An handler class that validates the content whenever a change in the text document occurs.
   *
   * @author Thomas Morgner
   */
  private class DocumentChangeHandler implements DocumentListener
  {
    /**
     * Default Constructor.
     */
    private DocumentChangeHandler()
    {
    }

    /**
     * Gives notification that an attribute or set of attributes changed.
     *
     * @param e the document event
     */
    public void changedUpdate(final DocumentEvent e)
    {
      validateContent();
    }

    /**
     * Gives notification that a portion of the document has been removed.  The range is given in terms of what the view
     * last saw (that is, before updating sticky positions).
     *
     * @param e the document event
     */
    public void removeUpdate(final DocumentEvent e)
    {
      validateContent();
    }

    /**
     * Gives notification that there was an insert into the document.  The range given by the DocumentEvent bounds the
     * freshly inserted region.
     *
     * @param e the document event
     */
    public void insertUpdate(final DocumentEvent e)
    {
      validateContent();
    }
  }

  /**
   * The editor component for the key content.
   */
  private final JTextField content;
  /**
   * the label that names the content.
   */
  private final JLabel entryLabel;
  /**
   * a carrier component that acts as content pane.
   */
  private final JPanel entryLabelCarrier;

  /**
   * Creates a new text key editor for the given configuration and description entry. The given display name will be
   * used as label text.
   *
   * @param config      the report configuration from where to read the configuration values.
   * @param entry       the entry description supplies the meta data.
   * @param displayName the label content.
   */
  public TextKeyEditor(final HierarchicalConfiguration config,
                       final ConfigDescriptionEntry entry,
                       final String displayName)
  {
    super(config, entry);

    final JPanel contentPane = new JPanel();
    contentPane.setLayout(new BorderLayout(5, 0));
    entryLabel = new JLabel(displayName);
    entryLabel.setToolTipText(entry.getDescription());

    entryLabelCarrier = new JPanel();
    entryLabelCarrier.setLayout(new BorderLayout());
    entryLabelCarrier.add(entryLabel);
    contentPane.add(entryLabelCarrier, BorderLayout.WEST);

    content = new JTextField();
    content.getDocument().addDocumentListener(new DocumentChangeHandler());

    contentPane.add(content, BorderLayout.CENTER);
    setContentPane(contentPane);
    reset();
  }

  /**
   * This method validates the content of the text field. In this implementation no validation is done and all text is
   * accepted.
   */
  public void validateContent()
  {
    setValidInput(true);
  }

  /**
   * Resets the value to the defaults from the report configuration.
   */
  public void reset()
  {
    content.setText(loadValue());
  }

  /**
   * Stores the input as new value for the report configuration. This method does nothing, if the content is not valid.
   */
  public void store()
  {
    if (isValidInput())
    {
      if (isEnabled())
      {
        storeValue(content.getText());
      }
      else
      {
        deleteValue();
      }
    }
  }

  /**
   * Returns the content from the input field.
   *
   * @return the input field text.
   */
  public String getContent()
  {
    return content.getText();
  }

  /**
   * Sets whether or not this component is enabled. A component which is enabled may respond to user input, while a
   * component which is not enabled cannot respond to user input.  Some components may alter their visual representation
   * when they are disabled in order to provide feedback to the user that they cannot take input.
   *
   * @param enabled defines, whether this editor will be enabled.
   * @see java.awt.Component#isEnabled
   */
  public void setEnabled(final boolean enabled)
  {
    super.setEnabled(enabled);
    content.setEnabled(enabled);
  }

  /**
   * Defines the preferred width of the label.
   *
   * @param width the new preferred width.
   */
  public void setLabelWidth(final int width)
  {
    final Dimension prefSize = entryLabel.getPreferredSize();
    entryLabelCarrier.setPreferredSize(new Dimension(width, prefSize.height));
  }

  /**
   * Returns the preferred width of the label.
   *
   * @return the preferred width.
   */
  public int getLabelWidth()
  {
    final Dimension prefSize = entryLabel.getPreferredSize();
    if (prefSize != null)
    {
      return prefSize.width;
    }
    return 0;
  }
}
TOP

Related Classes of org.pentaho.reporting.tools.configeditor.editor.TextKeyEditor$DocumentChangeHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.