Package org.eclipse.jst.pagedesigner.css2.widget

Source Code of org.eclipse.jst.pagedesigner.css2.widget.TextInputWidgetProvider

/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
*     Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.css2.widget;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
import org.eclipse.jst.pagedesigner.css2.font.ICSSFont;
import org.eclipse.jst.pagedesigner.css2.layout.TextLayoutSupport;
import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID;
import org.eclipse.jst.pagedesigner.css2.provider.DimensionInfo;
import org.eclipse.jst.pagedesigner.css2.style.DefaultStyle;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;

/**
* @author mengbo
* @version 1.5
*/
public class TextInputWidgetProvider extends AbstractWidgetProvider {
  private static final int VERTICAL_INCREMENT = 2;

  /**
   * password size
   */
  public static final int PWD_SIZE = 18;

  private int DEFAULTSIZE = 20;

  private int _size = DEFAULTSIZE;

  private String _value;

  /**
   * @param style
   */
  public TextInputWidgetProvider(ICSSStyle style) {
    this(style, 20);
  }

  /**
   * @param style
   * @param size
   */
  public TextInputWidgetProvider(ICSSStyle style, int size) {
    super(style);
    DEFAULTSIZE = size;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider#getPreferredDimension(int,
   *      int)
   */
  public DimensionInfo getPreferredDimension(int width, int height) {
    if (width <= 0) {
      width = getDefaultWidth();

    }
    if (height <= 0) {
      height = getDefaultHeight();
    }
    return new DimensionInfo(width, height, -1);
  }

  /**
   * @return
   */
  private int getDefaultHeight() {
    ICSSStyle style = this.getCSSStyle();
    if (style == null) {
      style = DefaultStyle.getInstance();
    }
    ICSSFont font = style.getCSSFont();
    Font swtfont = font.getSwtFont();
    int fontSize = FigureUtilities.getFontMetrics(swtfont).getHeight();
    return fontSize + VERTICAL_INCREMENT;
  }

  /**
   * @return the default width
   */
  public int getDefaultWidth() {
    ICSSStyle style = this.getCSSStyle();
    if (style == null) {
      style = DefaultStyle.getInstance();
    }
    return computeWidth(style.getCSSFont());
  }

  private int computeWidth(ICSSFont font) {
    int fontWidth = FigureUtilities
        .getTextWidth("abcde", font.getSwtFont());//$NON-NLS-1$
    return (fontWidth + 1) * _size / 5;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider#paintFigure(org.eclipse.draw2d.Graphics,
   *      org.eclipse.draw2d.geometry.Rectangle)
   */
  public void paintFigure(Graphics g, Rectangle rect) {
    String value = getValue();
    if (value != null) {
      ICSSStyle style = this.getCSSStyle();
      if (style == null) {
        style = DefaultStyle.getInstance();
      }
      Object textAlign = style
          .getStyleProperty(ICSSPropertyID.ATTR_TEXTALIGN);

      Font font = style.getCSSFont().getSwtFont();
      g.setFont(font);

      Color newColor = null;
      Object color = style.getColor();
      if (color instanceof Color) {
        g.setForegroundColor((Color) color);
      } else if (color instanceof RGB) {
        newColor = new Color(Display.getCurrent(), (RGB) color);
        g.setForegroundColor(newColor);
      } else {
        g.setForegroundColor(ColorConstants.black);
      }
      g.clipRect(rect);
      int width = FigureUtilities.getTextWidth(value, g.getFont());
      int x = TextLayoutSupport.getBeginX(textAlign, rect, width);
      int y = rect.y + VERTICAL_INCREMENT / 2;

      g.drawString(value, x, y);
      TextLayoutSupport.paintTextDecoration(g, new Rectangle(x, y, width,
          g.getFontMetrics().getHeight()), ((Integer) getCSSStyle()
          .getStyleProperty(ICSSPropertyID.ATTR_TEXTDECORATION))
          .intValue());
      if (newColor != null) {
        newColor.dispose();
      }
    }
  }

  /**
   * set the value in this text input control
   *
   * @param value
   */
  public void setValue(String value) {
    this._value = value;
  }

  /**
   * @param size
   */
  public void setSize(int size) {
    this._size = (size <= 0 ? DEFAULTSIZE : size);
  }

  /**
   * get current value in this text input control
   *
   * @return the value
   */
  public String getValue() {
    return _value;
  }
}
TOP

Related Classes of org.eclipse.jst.pagedesigner.css2.widget.TextInputWidgetProvider

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.