Java tutorial
/* * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.user.client.ui; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.i18n.shared.DirectionEstimator; import com.google.gwt.i18n.shared.HasDirectionEstimator; /** * Abstract base class for all text display widgets. * * <h3>Use in UiBinder Templates</h3> * * @param <T> the value type */ public class LabelBase<T> extends Widget implements HasWordWrap, HasDirectionEstimator, HasAutoHorizontalAlignment { /** * The widget's DirectionalTextHelper object. */ final DirectionalTextHelper directionalTextHelper; /** * The widget's auto horizontal alignment policy. * * @see HasAutoHorizontalAlignment */ private AutoHorizontalAlignmentConstant autoHorizontalAlignment; /** * The widget's horizontal alignment. */ private HorizontalAlignmentConstant horzAlign; protected LabelBase(boolean inline) { this(inline ? Document.get().createSpanElement() : Document.get().createDivElement(), inline); } protected LabelBase(Element element) { this(element, "span".equalsIgnoreCase(element.getTagName())); } private LabelBase(Element element, boolean isElementInline) { assert (isElementInline ? "span" : "div").equalsIgnoreCase(element.getTagName()); setElement(element); directionalTextHelper = new DirectionalTextHelper(getElement(), isElementInline); } public AutoHorizontalAlignmentConstant getAutoHorizontalAlignment() { return autoHorizontalAlignment; } public DirectionEstimator getDirectionEstimator() { return directionalTextHelper.getDirectionEstimator(); } public HorizontalAlignmentConstant getHorizontalAlignment() { return horzAlign; } public boolean getWordWrap() { return !getElement().getStyle().getProperty("whiteSpace").equals("nowrap"); } public void setAutoHorizontalAlignment(AutoHorizontalAlignmentConstant autoAlignment) { autoHorizontalAlignment = autoAlignment; updateHorizontalAlignment(); } /** * {@inheritDoc} * <p> * See note at {@link #setDirectionEstimator(DirectionEstimator)}. */ public void setDirectionEstimator(boolean enabled) { directionalTextHelper.setDirectionEstimator(enabled); updateHorizontalAlignment(); } /** * {@inheritDoc} * <p> * Note: DirectionEstimator should be set before the widget has any content; * it's highly recommended to set it using a constructor. Reason: if the * widget already has non-empty content, this will update its direction * according to the new estimator's result. This may cause flicker, and thus * should be avoided. */ public void setDirectionEstimator(DirectionEstimator directionEstimator) { directionalTextHelper.setDirectionEstimator(directionEstimator); updateHorizontalAlignment(); } /** * {@inheritDoc} * * <p> * Note: A subsequent call to {@link #setAutoHorizontalAlignment} may override * the horizontal alignment set by this method. * <p> * Note: For {@code null}, the horizontal alignment is cleared, allowing it to * be determined by the standard HTML mechanisms such as inheritance and CSS * rules. * * @see #setAutoHorizontalAlignment */ public void setHorizontalAlignment(HorizontalAlignmentConstant align) { setAutoHorizontalAlignment(align); } public void setWordWrap(boolean wrap) { getElement().getStyle().setProperty("whiteSpace", wrap ? "normal" : "nowrap"); } /** * Sets the horizontal alignment of the widget according to the current * AutoHorizontalAlignment setting. Should be invoked whenever the horizontal * alignment may be affected, i.e. on every modification of the content or its * direction. */ protected void updateHorizontalAlignment() { HorizontalAlignmentConstant align; if (autoHorizontalAlignment == null) { align = null; } else if (autoHorizontalAlignment instanceof HorizontalAlignmentConstant) { align = (HorizontalAlignmentConstant) autoHorizontalAlignment; } else { /* * autoHorizontalAlignment is a truly automatic policy, i.e. either * ALIGN_CONTENT_START or ALIGN_CONTENT_END */ align = autoHorizontalAlignment == ALIGN_CONTENT_START ? HorizontalAlignmentConstant.startOf(directionalTextHelper.getTextDirection()) : HorizontalAlignmentConstant.endOf(directionalTextHelper.getTextDirection()); } if (align != horzAlign) { horzAlign = align; getElement().getStyle().setProperty("textAlign", horzAlign == null ? "" : horzAlign.getTextAlignString()); } } }