All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.user.client.ui.HorizontalPanel Maven / Gradle / Ivy

There is a newer version: 2.10.0
Show newest version
/*
 * 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.user.client.DOM;
import com.google.gwt.user.client.Element;

/**
 * A panel that lays all of its widgets out in a single horizontal column.
 * 
 * 

* *

*/ public class HorizontalPanel extends CellPanel implements HasAlignment, InsertPanel.ForIsWidget { private HorizontalAlignmentConstant horzAlign = ALIGN_DEFAULT; private Element tableRow; private VerticalAlignmentConstant vertAlign = ALIGN_TOP; /** * Creates an empty horizontal panel. */ public HorizontalPanel() { tableRow = DOM.createTR(); DOM.appendChild(getBody(), tableRow); DOM.setElementProperty(getTable(), "cellSpacing", "0"); DOM.setElementProperty(getTable(), "cellPadding", "0"); } @Override public void add(Widget w) { Element td = createAlignedTd(); DOM.appendChild(tableRow, td); add(w, td); } public HorizontalAlignmentConstant getHorizontalAlignment() { return horzAlign; } public VerticalAlignmentConstant getVerticalAlignment() { return vertAlign; } public void insert(IsWidget w, int beforeIndex) { insert(asWidgetOrNull(w), beforeIndex); } public void insert(Widget w, int beforeIndex) { checkIndexBoundsForInsertion(beforeIndex); /* * The case where we reinsert an already existing child is tricky. * * For the WIDGET, it ultimately removes first and inserts second, so we * have to adjust the index within ComplexPanel.insert(). But for the DOM, * we insert first and remove second, which means we DON'T need to adjust * the index. */ Element td = createAlignedTd(); DOM.insertChild(tableRow, td, beforeIndex); insert(w, td, beforeIndex, false); } @Override public boolean remove(Widget w) { // Get the TD to be removed, before calling super.remove(), because // super.remove() will detach the child widget's element from its parent. Element td = DOM.getParent(w.getElement()); boolean removed = super.remove(w); if (removed) { DOM.removeChild(tableRow, td); } return removed; } /** * Sets the default horizontal alignment to be used for widgets added to this * panel. It only applies to widgets added after this property is set. * * @see HasHorizontalAlignment#setHorizontalAlignment(HasHorizontalAlignment.HorizontalAlignmentConstant) */ public void setHorizontalAlignment(HorizontalAlignmentConstant align) { horzAlign = align; } /** * Sets the default vertical alignment to be used for widgets added to this * panel. It only applies to widgets added after this property is set. * * @see HasVerticalAlignment#setVerticalAlignment(HasVerticalAlignment.VerticalAlignmentConstant) */ public void setVerticalAlignment(VerticalAlignmentConstant align) { vertAlign = align; } /** * Affected Elements: *
    *
  • -# = the cell at the given index.
  • *
* * @see UIObject#onEnsureDebugId(String) */ @Override protected void onEnsureDebugId(String baseID) { super.onEnsureDebugId(baseID); int numChildren = getWidgetCount(); for (int i = 0; i < numChildren; i++) { ensureDebugId(getWidgetTd(getWidget(i)), baseID, "" + i); } } private Element createAlignedTd() { Element td = DOM.createTD(); setCellHorizontalAlignment(td, horzAlign); setCellVerticalAlignment(td, vertAlign); return td; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy