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

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

/*******************************************************************************
* 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.Graphics;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
import org.eclipse.jst.pagedesigner.css2.provider.DimensionInfo;

/**
* @author mengbo
* @version 1.5
*/
public class RadioWidgetProvider extends AbstractWidgetProvider {
  private boolean isChecked;

  /**
   * @param style
   */
  public RadioWidgetProvider(ICSSStyle style) {
    super(style);
  }

  /*
   * (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 = getDefaultWidth();
    }
    return new DimensionInfo(width, height, height * 4 / 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) {
    int centerX = rect.x + rect.width / 2;
    int centerY = rect.y + rect.height / 2;

    // we always draw it as a circle.
    int width = Math.min(rect.width, rect.height);
    int cycleWidth = width * 3 / 5;

    // FIXME: when the size of the radio is big, the line width may need
    // calculate to be bigger.
    int lineWidth = 2;
    g.setLineWidth(lineWidth);

    g.setForegroundColor(ColorConstants.buttonDarker);
    g.drawArc(centerX - cycleWidth / 2, centerY - cycleWidth + 1,
        cycleWidth, cycleWidth, 45, 180);

    g.setForegroundColor(ColorConstants.button);
    g.drawArc(centerX - cycleWidth / 2, centerY - cycleWidth + 1,
        cycleWidth, cycleWidth, 225, 180);

    // since the two cycle may not overlap very well, some space between
    // them will be displayed.
    // so we make the bigger cycle to be a little thicker.
    cycleWidth += (2 * lineWidth - 2);
    lineWidth += 1;

    if (cycleWidth < width) {
      g.setForegroundColor(ColorConstants.buttonDarkest);
      g.drawArc(centerX - cycleWidth / 2, centerY - cycleWidth + 1,
          cycleWidth, cycleWidth, 45, 180);
    }

    if (isChecked()) {
      g.setBackgroundColor(ColorConstants.black);
      g.fillArc(centerX - 1, centerY - cycleWidth / 2 - 1, 4, 4, 0, 360);
    }
  }

  /**
   * @return the default width
   */
  public final int getDefaultWidth() {
    // FIXME: don't know the how to define the default width yet.
    return 15;
  }

  /**
   * @return Returns the checked.
   */
  public boolean isChecked() {
    return isChecked;
  }

  /**
   * @param checked
   */
  public void setChecked(boolean checked) {
    this.isChecked = checked;
  }

}
TOP

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

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.