Package com.sun.dtv.lwuit

Source Code of com.sun.dtv.lwuit.Label

/*
* Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.  Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package com.sun.dtv.lwuit;

import com.sun.dtv.lwuit.animations.Animation;
import com.sun.dtv.lwuit.geom.*;
import com.sun.dtv.lwuit.plaf.DefaultLookAndFeel;
import com.sun.dtv.lwuit.plaf.LookAndFeel;
import com.sun.dtv.lwuit.plaf.Style;
import com.sun.dtv.lwuit.plaf.UIManager;
import java.util.Hashtable;

/**
* Allows displaying labels and images with different alignment options, this class
* is a base class for several components allowing them to declare alignement/icon
* look in a similar way.
*
* @author Chen Fishbein
*/
public class Label extends Component {
   
    private String text = "";
   
    private Image icon;
   
    private int align = LEFT;
    private int valign = BOTTOM;

    private int textPosition = RIGHT;
   
    private String id = "Label";
   
    private int gap = 2;
   
    private int shiftText = 0;
   
    private boolean tickerRunning = false;
   
    private boolean tickerEnabled = true;
   
    private long tickerStartTime;
   
    private long tickerDelay;
   
    private boolean rightToLeft;
   
    private boolean endsWith3Points = true;
   
    /**
     * Constructs a new label with the specified string of text, left justified.
     *
     * @param text the string that the label presents.
     */
    public Label(String text) {
        this.text = text;
        localize();
        setFocusable(false);
    }

    Label(String text, String uiid) {
        this.text = text;
        localize();
        setFocusable(false);
        id = uiid;
        Style s = UIManager.getInstance().getComponentStyle(uiid);
        s.setBgPainter(getStyle().getBgPainter());
        setStyle(s);
        setAlignment(CENTER);
    }
   
    /**
     * Construct an empty label
     */
    public Label() {
        this("");
    }

    /**
     * Constructs a new label with the specified icon
     *
     * @param icon the image that the label presents.
     */
    public Label(Image icon) {
        this("");
        this.icon = icon;
    }

    /**
     * @inheritDoc
     */
    public int getBaselineResizeBehavior() {
        switch(valign) {
        case TOP:
            return BRB_CONSTANT_ASCENT;
        case BOTTOM:
            return BRB_CONSTANT_DESCENT;
        case CENTER:
            return BRB_CENTER_OFFSET;
        }
        return BRB_OTHER;
    }

    /**
     * Sets the Label text
     *
     * @param text the string that the label presents.
     */
    public void setText(String text){
        this.text = text;
        localize();
        setShouldCalcPreferredSize(true);
        repaint();
    }
   
    private void localize() {
        Hashtable t =  UIManager.getInstance().getResourceBundle();
        if(t != null && text != null) {
            Object o = t.get(text);
            if(o != null) {
                this.text = (String)o;
            }
        }
    }
   
    /**
     * @inheritDoc
     */
    void initComponentImpl() {
        super.initComponentImpl();
        if(hasFocus()) {
            LookAndFeel lf = UIManager.getInstance().getLookAndFeel();
            if(lf instanceof DefaultLookAndFeel) {
                ((DefaultLookAndFeel)lf).focusGained(this);
            }
        }
    }
   
    /**
     * Returns the label text
     *
     * @return the label text
     */
    public String getText(){
        return text;
    }
   
    /**
     * Sets the Label icon
     *
     * @param icon the image that the label presents.
     */
    public void setIcon(Image icon){
        this.icon = icon;
        setShouldCalcPreferredSize(true);
        checkAnimation();
        repaint();
    }
   
    void checkAnimation() {
        super.checkAnimation();
        if(icon != null && icon.isAnimation()) {
            Form parent = getComponentForm();
            if(parent != null) {
                parent.registerAnimated(this);
            }
        }
    }
   
    /**
     * Returns the labels icon
     *
     * @return the labels icon
     */
    public Image getIcon(){
        return icon;
    }
   
    /**
     * Sets the Aligment of the Label to one of: CENTER, LEFT, RIGHT
     *
     * @param align alignment value
     * @see #CENTER
     * @see #LEFT
     * @see #RIGHT
     */
    public void setAlignment(int align){
        if(align != CENTER && align != RIGHT && align != LEFT){
            throw new IllegalArgumentException("Aligment can't be set to " + align);
        }
        this.align = align;
    }
   
    /**
     * Sets the vertical aligment of the Label to one of: CENTER, TOP, BOTTOM
     *
     * @param valign alignment value
     * @see #CENTER
     * @see #TOP
     * @see #BOTTOM
     */
    public void setVerticalAlignment(int valign) {
        if(valign != CENTER && valign != TOP && valign != BOTTOM){
            throw new IllegalArgumentException("Aligment can't be set to " + valign);
        }
        this.valign = valign;
    }

    /**
     * Returns the vertical aligment of the Label, this will only work when the icon
     * is in the side of the text and not above or bellow it.
     *
     * @return the vertical aligment of the Label one of: CENTER, TOP, BOTTOM
     * @see #CENTER
     * @see #TOP
     * @see #BOTTOM
     */
    public int getVerticalAlignment(){
        return valign;
    }
   
    /**
     * Returns the aligment of the Label
     *
     * @return the aligment of the Label one of: CENTER, LEFT, RIGHT
     * @see #CENTER
     * @see #LEFT
     * @see #RIGHT
     */
    public int getAlignment(){
        return align;
    }

    /**
     * Sets the position of the text relative to the icon if exists
     *
     * @param textPosition alignment value (LEFT, RIGHT, BOTTOM or TOP)
     * @see #LEFT
     * @see #RIGHT
     * @see #BOTTOM
     * @see #TOP
     */
    public void setTextPosition(int textPosition) {
        if (textPosition != this.LEFT && textPosition != this.RIGHT && textPosition != this.BOTTOM && textPosition != this.TOP) {
            throw new IllegalArgumentException("Text position can't be set to " + textPosition);
        }
        this.textPosition = textPosition;
    }

   
    /**
     * Returns The position of the text relative to the icon
     *
     * @return The position of the text relative to the icon, one of: LEFT, RIGHT, BOTTOM, TOP
     * @see #LEFT
     * @see #RIGHT
     * @see #BOTTOM
     * @see #TOP
     */
    public int getTextPosition(){
        return textPosition;
    }
   
    /**
     * Set the gap in pixels between the icon/text to the Label boundaries
     *
     * @param gap the gap in pixels
     */
    public void setGap(int gap) {
        this.gap = gap;
    }
   
    /**
     * Returns the gap in pixels between the icon/text to the Label boundaries
     *
     * @return the gap in pixels between the icon/text to the Label boundaries
     */
    public int getGap() {
        return gap;
    }
   
    /**
     * @inheritDoc
     */
    protected String getUIID() {
        if(id == null) {
            return "Label";
        }
        return id;
    }

    /**
     * @inheritDoc
     */
    protected String paramString() {
        return super.paramString() + ", text = " +getText() + ", gap = " + gap;
    }
   
    /**
     * @inheritDoc
     */
    public void paint(Graphics g) {
        UIManager.getInstance().getLookAndFeel().drawLabel(g, this);
    }

    /**
     * @inheritDoc
     */
    protected Dimension calcPreferredSize(){
        return UIManager.getInstance().getLookAndFeel().getLabelPreferredSize(this);
    }
   
    /**
     * Simple getter to return how many pixels to shift the text inside the Label

     * @return number of pixels to shift
     */
    public int getShiftText() {
        return shiftText;
    }

    /**
     * This method shifts the text from it's position in pixels.
     * The value can be positive/negative to move the text to the right/left
     *
     * @param shiftText The number of pixels to move the text
     */
    public void setShiftText(int shiftText) {
        this.shiftText = shiftText;
    }
   
    /**
     * This method will start the text ticker
     *
     * @param delay the delay in millisecods between animation intervals
     * @param rightToLeft if true move the text to the left
     */
    public void startTicker(long delay, boolean rightToLeft){
        //return if ticker is not enabled
        if(!tickerEnabled){
            return;
        }
        Form parent = getComponentForm();
        if(parent == null){
            throw new IllegalArgumentException("This method cannot be called" +
                    " before the Label is fully initialized");
        }
        parent.registerAnimated(this);
        tickerStartTime = System.currentTimeMillis();
        tickerDelay = delay;
        tickerRunning = true;
        this.rightToLeft = rightToLeft;
    }
   
    /**
     * Stops the text ticker
     */
    public void stopTicker(){
        tickerRunning = false;
        setShiftText(0);
    }

    /**
     * Returns true if the ticker is running
     *
     * @return true if the ticker is running
     */
    public boolean isTickerRunning() {
        return tickerRunning;
    }

    /**
     * Sets the Label to allow tickring of the text.
     * By default is true
     *
     * @param tickerEnabled
     */
    public void setTickerEnabled(boolean tickerEnabled) {
        this.tickerEnabled = tickerEnabled;
    }

    /**
     * This method return true if the ticker is enabled on this Label
     *
     * @return tickerEnabled
     */
    public boolean isTickerEnabled() {
        return tickerEnabled;
    }
  
    /**
     * If the Label text is too long fit the text to the widget and add "..."
     * points at the end.
     * By default this is set to true
     *
     * @param endsWith3Points true if text should add "..." at the end
     */
    public void setEndsWith3Points(boolean endsWith3Points){
        this.endsWith3Points = endsWith3Points;
    }

    /**
     * Simple getter
     *
     * @return true if this Label adds "..." when the text is too long
     */
    public boolean isEndsWith3Points() {
        return endsWith3Points;
    }
   
   
   
    /**
     * @inheritDoc
     */
    public boolean animate() {
        boolean animateTicker = false;
        if(tickerRunning && tickerStartTime + tickerDelay < System.currentTimeMillis()){
            tickerStartTime = System.currentTimeMillis();
            if(rightToLeft){
                shiftText-=2;
            }else{
                shiftText+=2;
            }    
            animateTicker = true;
        }               
        // if we have an animated icon then just let it do its thing...
        return icon != null && icon.isAnimation() && ((Animation)icon).animate() || super.animate() || animateTicker;
    }
}
TOP

Related Classes of com.sun.dtv.lwuit.Label

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.