/* * Copyright 2008 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.core.client.GWT; import com.google.gwt.i18n.client.HasDirection.Direction; import com.google.gwt.i18n.client.LocaleInfo; /** * Characteristic interface which indicates that a widget can be aligned * horizontally. * * <h3>Use in UiBinder Templates</h3> * * <p> * The names of the static members of {@link HorizontalAlignmentConstant}, as * well as simple alignment names (<code>left</code>, <code>center</code>, * <code>right</code>, <code>justify</code>), can be used as values for a * <code>horizontalAlignment</code> attribute of any widget that implements this * interface. (In fact, this will work for any widget method that takes a single * HorizontalAlignmentConstant value.) * <p> * For example, * * <pre> * <g:Label horizontalAlignment='ALIGN_RIGHT'>Hi there.</g:Label> * <g:Label horizontalAlignment='right'>Hi there.</g:Label> * </pre> */ public interface HasHorizontalAlignment { /** * Type for values defined and used in {@link HasAutoHorizontalAlignment}. * Defined here so that HorizontalAlignmentConstant can be derived from it, * thus allowing HasAutoHorizontalAlignment methods to accept and return both * AutoHorizontalAlignmentConstant and HorizontalAlignmentConstant values - * without allowing the methods defined here to accept or return * AutoHorizontalAlignmentConstant values. */ public static class AutoHorizontalAlignmentConstant { // The constructor is package-private to prevent uncontrolled inheritance // and instantiation of this class. AutoHorizontalAlignmentConstant() { } } /** * Possible return values for {@link #getHorizontalAlignment}, and parameter * values for {@link #setHorizontalAlignment}. */ public static class HorizontalAlignmentConstant extends AutoHorizontalAlignmentConstant { public static HorizontalAlignmentConstant endOf(Direction direction) { return direction == Direction.LTR ? ALIGN_RIGHT : direction == Direction.RTL ? ALIGN_LEFT : ALIGN_LOCALE_END; } public static HorizontalAlignmentConstant startOf(Direction direction) { return direction == Direction.LTR ? ALIGN_LEFT : direction == Direction.RTL ? ALIGN_RIGHT : ALIGN_LOCALE_START; } private final String textAlignString; private HorizontalAlignmentConstant(String textAlignString) { this.textAlignString = textAlignString; } /** * Gets the CSS 'text-align' string associated with this constant. * * @return the CSS 'text-align' value */ public String getTextAlignString() { return textAlignString; } } /** * Specifies that the widget's contents should be aligned in the center. */ HorizontalAlignmentConstant ALIGN_CENTER = new HorizontalAlignmentConstant( "center"); /** * Specifies that the widget's contents should be aligned as justify. */ HorizontalAlignmentConstant ALIGN_JUSTIFY = new HorizontalAlignmentConstant( "justify"); /** * Specifies that the widget's contents should be aligned to the left. */ HorizontalAlignmentConstant ALIGN_LEFT = new HorizontalAlignmentConstant( "left"); /** * Specifies that the widget's contents should be aligned to the right. */ HorizontalAlignmentConstant ALIGN_RIGHT = new HorizontalAlignmentConstant( "right"); /** * In a RTL layout, specifies that the widget's contents should be aligned to * the right. In a LTR layout, specifies that the widget's constants should be * aligned to the left. */ HorizontalAlignmentConstant ALIGN_LOCALE_START = GWT.isClient() && LocaleInfo.getCurrentLocale().isRTL() ? ALIGN_RIGHT : ALIGN_LEFT; /** * In a RTL layout, specifies that the widget's contents should be aligned to * the left. In a LTR layout, specifies that the widget's constants should be * aligned to the right. */ HorizontalAlignmentConstant ALIGN_LOCALE_END = GWT.isClient() && LocaleInfo.getCurrentLocale().isRTL() ? ALIGN_LEFT : ALIGN_RIGHT; /** * Synonym of {@link #ALIGN_LOCALE_START}. */ HorizontalAlignmentConstant ALIGN_DEFAULT = ALIGN_LOCALE_START; /** * Gets the horizontal alignment. * * @return the current horizontal alignment ( * {@link HasHorizontalAlignment#ALIGN_LEFT}, * {@link HasHorizontalAlignment#ALIGN_CENTER}, * {@link HasHorizontalAlignment#ALIGN_RIGHT}, * {@link HasHorizontalAlignment#ALIGN_JUSTIFY}, or * null). */ HorizontalAlignmentConstant getHorizontalAlignment(); /** * Sets the horizontal alignment. * <p> Use {@code null} to clear horizontal alignment, allowing it to be * determined by the standard HTML mechanisms such as inheritance and CSS * rules. * * @param align the horizontal alignment ( * {@link HasHorizontalAlignment#ALIGN_LEFT}, * {@link HasHorizontalAlignment#ALIGN_CENTER}, * {@link HasHorizontalAlignment#ALIGN_RIGHT}, * {@link HasHorizontalAlignment#ALIGN_JUSTIFY}, * {@link HasHorizontalAlignment#ALIGN_LOCALE_START}, or * {@link HasHorizontalAlignment#ALIGN_LOCALE_END}). */ void setHorizontalAlignment(HorizontalAlignmentConstant align); }