Package com.google.gdt.eclipse.designer.uibinder.model.widgets

Source Code of com.google.gdt.eclipse.designer.uibinder.model.widgets.CellPanelInfo

/*******************************************************************************
* Copyright 2011 Google Inc. All Rights Reserved.
*
* 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
*
* 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.gdt.eclipse.designer.uibinder.model.widgets;

import org.eclipse.wb.internal.core.model.property.ComplexProperty;
import org.eclipse.wb.internal.core.model.property.Property;
import org.eclipse.wb.internal.core.model.property.category.PropertyCategory;
import org.eclipse.wb.internal.core.model.property.editor.string.StringPropertyEditor;
import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils;
import org.eclipse.wb.internal.core.xml.model.EditorContext;
import org.eclipse.wb.internal.core.xml.model.XmlObjectInfo;
import org.eclipse.wb.internal.core.xml.model.broadcast.XmlObjectAddProperties;
import org.eclipse.wb.internal.core.xml.model.creation.CreationSupport;
import org.eclipse.wb.internal.core.xml.model.description.ComponentDescription;
import org.eclipse.wb.internal.core.xml.model.description.GenericPropertyDescription;
import org.eclipse.wb.internal.core.xml.model.property.GenericPropertyImpl;
import org.eclipse.wb.internal.core.xml.model.property.accessor.ExpressionAccessor;
import org.eclipse.wb.internal.core.xml.model.property.converter.StringConverter;
import org.eclipse.wb.internal.core.xml.model.property.editor.StaticFieldPropertyEditor;

import org.apache.commons.lang.StringUtils;

import java.util.List;

/**
* Model for <code>com.google.gwt.user.client.ui.CellPanel</code> in GWT UiBinder.
*
* @author scheglov_ke
* @coverage GWT.UiBinder.model
*/
public class CellPanelInfo extends ComplexPanelInfo {
  ////////////////////////////////////////////////////////////////////////////
  //
  // Constructor
  //
  ////////////////////////////////////////////////////////////////////////////
  public CellPanelInfo(EditorContext context,
      ComponentDescription description,
      CreationSupport creationSupport) throws Exception {
    super(context, description, creationSupport);
    contributeCellProperties();
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // "Cell" complex property
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Contributes <code>"Cell"</code> complex property for each {@link WidgetInfo} child of this
   * {@link CellPanelInfo}.
   */
  private void contributeCellProperties() {
    final CellPanelInfo panel = this;
    addBroadcastListener(new XmlObjectAddProperties() {
      public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
        if (object instanceof WidgetInfo && object.getParent() == panel) {
          WidgetInfo widget = (WidgetInfo) object;
          // prepare "Cell" property
          Property cellProperty = (Property) widget.getArbitraryValue(this);
          if (cellProperty == null) {
            cellProperty = getCellComplexProperty(widget);
            widget.putArbitraryValue(this, cellProperty);
          }
          // add "Cell" property
          properties.add(cellProperty);
        }
      }

      private Property getCellComplexProperty(WidgetInfo widget) throws Exception {
        ClassLoader editorLoader = getContext().getClassLoader();
        String namespace = StringUtils.substringBefore(getElement().getTag(), ":") + ":";
        // "width"
        Property widthProperty;
        {
          ExpressionAccessor expressionAccessor = new CellExpressionAccessor(namespace, "width");
          GenericPropertyDescription propertyDescription =
              new GenericPropertyDescription(null, "width", String.class, expressionAccessor);
          propertyDescription.setEditor(StringPropertyEditor.INSTANCE);
          propertyDescription.setConverter(StringConverter.INSTANCE);
          widthProperty = new GenericPropertyImpl(widget, propertyDescription);
        }
        // "height"
        Property heightProperty;
        {
          ExpressionAccessor expressionAccessor = new CellExpressionAccessor(namespace, "height");
          GenericPropertyDescription propertyDescription =
              new GenericPropertyDescription(null, "height", String.class, expressionAccessor);
          propertyDescription.setEditor(StringPropertyEditor.INSTANCE);
          propertyDescription.setConverter(StringConverter.INSTANCE);
          heightProperty = new GenericPropertyImpl(widget, propertyDescription);
        }
        // "horizontalAlignment"
        Property horizontalAlignmentProperty;
        {
          StaticFieldPropertyEditor propertyEditor = new StaticFieldPropertyEditor();
          Class<?> hasHorizontalAlignmentClass =
              editorLoader.loadClass("com.google.gwt.user.client.ui.HasHorizontalAlignment");
          propertyEditor.configure(hasHorizontalAlignmentClass, new String[]{
              "ALIGN_LEFT",
              "ALIGN_CENTER",
              "ALIGN_RIGHT"});
          Object defaultValue =
              ReflectionUtils.getFieldObject(hasHorizontalAlignmentClass, "ALIGN_LEFT");
          // create property
          ExpressionAccessor expressionAccessor =
              new CellExpressionAccessor(namespace, "horizontalAlignment");
          GenericPropertyDescription propertyDescription =
              new GenericPropertyDescription(null,
                  "horizontalAlignment",
                  String.class,
                  expressionAccessor);
          propertyDescription.setEditor(propertyEditor);
          propertyDescription.setDefaultValue(defaultValue);
          horizontalAlignmentProperty = new GenericPropertyImpl(widget, propertyDescription);
        }
        // "verticalAlignment"
        Property verticalAlignmentProperty;
        {
          StaticFieldPropertyEditor propertyEditor = new StaticFieldPropertyEditor();
          Class<?> hasVerticalAlignmentClass =
              editorLoader.loadClass("com.google.gwt.user.client.ui.HasVerticalAlignment");
          propertyEditor.configure(hasVerticalAlignmentClass, new String[]{
              "ALIGN_TOP",
              "ALIGN_MIDDLE",
              "ALIGN_BOTTOM"});
          Object defaultValue =
              ReflectionUtils.getFieldObject(hasVerticalAlignmentClass, "ALIGN_TOP");
          // create property
          ExpressionAccessor expressionAccessor =
              new CellExpressionAccessor(namespace, "verticalAlignment");
          GenericPropertyDescription propertyDescription =
              new GenericPropertyDescription(null,
                  "verticalAlignment",
                  String.class,
                  expressionAccessor);
          propertyDescription.setEditor(propertyEditor);
          propertyDescription.setDefaultValue(defaultValue);
          verticalAlignmentProperty = new GenericPropertyImpl(widget, propertyDescription);
        }
        // create complex "Cell" property
        ComplexProperty cellProperty = new ComplexProperty("Cell", "(cell properties)");
        cellProperty.setCategory(PropertyCategory.system(7));
        cellProperty.setProperties(new Property[]{
            widthProperty,
            heightProperty,
            horizontalAlignmentProperty,
            verticalAlignmentProperty});
        return cellProperty;
      }
    });
  }
}
TOP

Related Classes of com.google.gdt.eclipse.designer.uibinder.model.widgets.CellPanelInfo

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.