Package com.vk.gwt.designer.client.ui.panel.vkHorizontalPanel

Source Code of com.vk.gwt.designer.client.ui.panel.vkHorizontalPanel.VkHorizontalPanelEngine

/*
* Copyright 2011 Gaurav Saxena < gsaxena81 AT gmail.com >
*
* 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.vk.gwt.designer.client.ui.panel.vkHorizontalPanel;

import java.util.Iterator;
import java.util.List;

import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.kiouri.sliderbar.client.event.BarValueChangedEvent;
import com.kiouri.sliderbar.client.event.BarValueChangedHandler;
import com.kiouri.sliderbar.client.solution.simplehorizontal.SliderBarSimpleHorizontal;
import com.kiouri.sliderbar.client.view.SliderBarHorizontal;
import com.vk.gwt.designer.client.api.attributes.HasVkHorizontalAlignment;
import com.vk.gwt.designer.client.api.attributes.HasVkVerticalAlignment;
import com.vk.gwt.designer.client.api.component.IVkPanel;
import com.vk.gwt.designer.client.api.component.IVkWidget;
import com.vk.gwt.designer.client.designer.VkAbstractWidgetEngine;
import com.vk.gwt.designer.client.designer.VkDesignerUtil;
import com.vk.gwt.designer.client.designer.VkStateHelper;

public class VkHorizontalPanelEngine extends VkAbstractWidgetEngine<VkHorizontalPanel> {
  private static final String CHANGE_CELL_WIDTH = "Change Cell Width";
  @Override
  public VkHorizontalPanel getWidget() {
    VkHorizontalPanel widget = new VkHorizontalPanel();
    init(widget);
    return widget;
  }
  @Override
  public List<String> getAttributesList(Widget invokingWidget)
  {
    List<String> attributesList = VkStateHelper.getInstance().getEngine().getAttributesList(invokingWidget);
    attributesList.add(CHANGE_CELL_WIDTH);
    return attributesList;
  }
  @Override
  public void applyAttribute(String attributeName, Widget invokingWidget) {
    if(attributeName.equals(HasVkHorizontalAlignment.NAME))
      ((VkHorizontalPanel)invokingWidget).setHorizontalAlignment(attributeName);
    else if(attributeName.equals(HasVkVerticalAlignment.NAME))
      ((VkHorizontalPanel)invokingWidget).setVerticalAlignment(attributeName);
    else if(attributeName.equals(CHANGE_CELL_WIDTH))
      showChangeWidthDialog((VkHorizontalPanel) invokingWidget);
    else
      VkStateHelper.getInstance().getEngine().applyAttribute(attributeName, invokingWidget);
  }
  private void showChangeWidthDialog(final VkHorizontalPanel invokingWidget) {
    final DialogBox origDialog = new DialogBox();
    origDialog.setText("Change width of widget holders");
    DOM.setStyleAttribute(origDialog.getElement(), "zIndex", Integer.toString(Integer.MAX_VALUE));
    final VerticalPanel dialog = new VerticalPanel();
    origDialog.add(dialog);
    dialog.add(new Label("Please choose the Widget :"));
    final ListBox widgetIndexLb = new ListBox();
    for (Iterator<Widget> iterator = invokingWidget.iterator(); iterator.hasNext();) {
      Widget next = iterator.next();
      widgetIndexLb.addItem(((IVkWidget)next).getWidgetName() + " - at index - " + invokingWidget.getWidgetIndex(next));
    }
    final SliderBarHorizontal sliderBar = new SliderBarSimpleHorizontal(invokingWidget.getOffsetWidth(), "300px", false);
    widgetIndexLb.addChangeHandler(new ChangeHandler(){
      @Override
      public void onChange(ChangeEvent event) {
        sliderBar.setValue(invokingWidget.getWidget(widgetIndexLb.getSelectedIndex()).getElement().getParentElement().getOffsetWidth());
      }});
    widgetIndexLb.setWidth("300px");
    dialog.add(widgetIndexLb);
    dialog.add(new Label("Drag to change width:"));
    dialog.add(sliderBar);
    sliderBar.addBarValueChangedHandler(new BarValueChangedHandler() {
      @Override
      public void onBarValueChanged(BarValueChangedEvent event) {
        DOM.setStyleAttribute((com.google.gwt.user.client.Element) invokingWidget.getWidget(widgetIndexLb.getSelectedIndex()).getElement().getParentElement(), "width", event.getValue() + "px");
      }
    });
    sliderBar.setValue(invokingWidget.getWidget(0).getElement().getParentElement().getOffsetWidth());
    sliderBar.setMinMarkStep(50);
    Button okButton = new Button("OK");
    dialog.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
    dialog.add(okButton);
    okButton.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        origDialog.hide();
      }
    });
    origDialog.center();
  }
  @Override
  public Widget deepClone(Widget sourceWidget, Widget targetWidget) {
    boolean isVkDesignerMode = VkStateHelper.getInstance().isDesignerMode();
    VkStateHelper.getInstance().setDesignerMode(false);
    ((IVkWidget)sourceWidget).clone(targetWidget);
    //VkStateHelper.getInstance().getWidgetEngineMapping().getEngineMap().get(((IVkWidget)targetWidget).getWidgetName()).copyAttributes(sourceWidget, targetWidget);
    copyAttributes(sourceWidget, targetWidget);
    VkStateHelper.getInstance().setDesignerMode(isVkDesignerMode);
    if(sourceWidget instanceof IVkPanel && targetWidget instanceof IVkPanel) {
      Iterator<Widget> widgets = ((IVkPanel)sourceWidget).iterator();
      while(widgets.hasNext()) {
        Widget currentWidget = widgets.next();
        if(currentWidget instanceof IVkWidget) {
          Element tdParentElement = currentWidget.getElement().getParentElement();
          setHorizontalAlignment(tdParentElement, (HorizontalPanel) targetWidget, DOM.getElementAttribute((com.google.gwt.user.client.Element) tdParentElement, "align"));
          setVerticalAlignment(tdParentElement, (HorizontalPanel) targetWidget, DOM.getStyleAttribute((com.google.gwt.user.client.Element) tdParentElement, "verticalAlign"));
          Widget tdWidget = VkStateHelper.getInstance().getEngine().getWidget(((IVkWidget)currentWidget).getWidgetName());
          VkStateHelper.getInstance().getEngine().addWidget(VkStateHelper.getInstance().getWidgetEngineMapping().getEngineMap().get(((IVkWidget) currentWidget).getWidgetName()).deepClone(currentWidget, tdWidget), (IVkPanel)targetWidget);
          String width = DOM.getStyleAttribute((com.google.gwt.user.client.Element) tdParentElement, "width");
          if(width != null && !width.isEmpty())
             DOM.setStyleAttribute((com.google.gwt.user.client.Element) tdWidget.getElement().getParentElement(), "width", width);
        }
      }
    }
    return targetWidget;
  }
  private void setVerticalAlignment(Element tdParentElement, HorizontalPanel targetWidget, String vAlign) {
    if(vAlign != null){
      if(vAlign.equals("top"))
        targetWidget.setVerticalAlignment(HorizontalPanel.ALIGN_TOP);
      else if(vAlign.equals("middle"))
        targetWidget.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
      else
        targetWidget.setVerticalAlignment(HorizontalPanel.ALIGN_BOTTOM);
    }
  }
  private void setHorizontalAlignment(Element tdParentElement, HorizontalPanel targetWidget, String align) {
    if(align != null){
      if(align.equals("left"))
        targetWidget.setHorizontalAlignment(HorizontalPanel.ALIGN_LEFT);
      else if(align.equals("center"))
        targetWidget.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
      else
        targetWidget.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT);
    }
  }
  @Override
  public void copyAttributes(Widget widgetSource, Widget widgetTarget)
  {
    DOM.setElementAttribute(widgetTarget.getElement(), "style", DOM.getElementAttribute(widgetSource.getElement(), "style"));
    widgetTarget.setStyleName(widgetSource.getStyleName());
    widgetTarget.setTitle(widgetSource.getTitle());
  }
  @Override
  public String serialize(IVkWidget widget)
  {
    StringBuffer buffer = new StringBuffer("{");
    buffer.append("widgetName:'").append(widget.getWidgetName()).append("'");
    buffer.append(",style:'").append(VkDesignerUtil.getCssText((Widget) widget)).append("'");
    serializeAttributes(buffer, (Widget) widget);
    buffer.append(",attrs:[");
    Iterator<Widget> widgetList = ((IVkPanel)widget).iterator();
    while(widgetList.hasNext())
    {
      Widget child = widgetList.next();
      com.google.gwt.user.client.Element tdParentElement = (com.google.gwt.user.client.Element) child.getElement().getParentElement();
      buffer.append("{align:'").append(DOM.getElementAttribute(tdParentElement, "align")).append("'")
      .append(",vAlign:'").append(DOM.getStyleAttribute(tdParentElement, "verticalAlign")).append("'")
      .append(",width:'").append(DOM.getStyleAttribute(tdParentElement, "width")).append("'},");
    }
    if(buffer.charAt(buffer.length() - 1) == ',')
      buffer.deleteCharAt(buffer.length() - 1);
    buffer.append("],children:[");
    widgetList = ((IVkPanel)widget).iterator();
    while(widgetList.hasNext())
    {
      Widget child = widgetList.next();
      if(child instanceof IVkWidget)
        buffer.append(VkStateHelper.getInstance().getWidgetEngineMapping().getEngineMap().get(((IVkWidget)child).getWidgetName()).serialize((IVkWidget) child)).append(",");
    }
    if(buffer.charAt(buffer.length() - 1) == ',')
      buffer.deleteCharAt(buffer.length() - 1);
    buffer.append("]}");
    return buffer.toString();
  }
  @Override
  protected void serializeAttributes(StringBuffer buffer, Widget widgetSource)
  {
    if(!widgetSource.getStyleName().isEmpty())
      buffer.append(",className:'" + widgetSource.getStyleName() + "'");
    if(!widgetSource.getTitle().isEmpty())
      buffer.append(",title:'" + widgetSource.getTitle() + "'");
    if(!widgetSource.getElement().getId().isEmpty())
      buffer.append(",id:'" + widgetSource.getElement().getId() + "'");
  }
  @Override
  public void buildWidget(JSONObject jsonObj, Widget parent) {
    JSONArray childrenArray = jsonObj.put("children", null).isArray();
    JSONArray attrs = jsonObj.put("attrs", null).isArray();
    addAttributes(jsonObj, parent);
    for(int i = 0; i < childrenArray.size(); i++) {
      JSONObject childObj = childrenArray.get(i).isObject();
      if(childObj == null)
        return;
      JSONString widgetName = childObj.get("widgetName").isString();
      Widget widget = VkStateHelper.getInstance().getEngine().getWidget(widgetName.stringValue());
      JSONObject attr = attrs.get(i).isObject();
      setHorizontalAlignment(widget.getElement().getParentElement(), (HorizontalPanel) parent, attr.get("align").isString().stringValue());
      if(attr.get("vAlign").isNull() == null)
        setVerticalAlignment(widget.getElement().getParentElement(), (HorizontalPanel) parent, attr.get("vAlign").isString().stringValue());
      else
        setVerticalAlignment(widget.getElement().getParentElement(), (HorizontalPanel) parent, "top");
      VkStateHelper.getInstance().getEngine().addWidget(widget, ((IVkPanel)parent));
      DOM.setStyleAttribute((com.google.gwt.user.client.Element) widget.getElement().getParentElement(), "width", attr.get("width").isString().stringValue());
      VkStateHelper.getInstance().getWidgetEngineMapping().getEngineMap().get(((IVkWidget)widget).getWidgetName()).buildWidget(childObj, widget);
    }
  }
  @Override
  protected void addAttributes(JSONObject childObj, Widget widget) {
    JSONString attributeStringObj;
    JSONValue attributeJsObj = childObj.get("style");
    if(attributeJsObj != null && (attributeStringObj = attributeJsObj.isString()) != null)
      DOM.setElementAttribute(widget.getElement(), "style", attributeStringObj.stringValue());
    attributeJsObj = childObj.get("title");
    if(attributeJsObj != null && (attributeStringObj = attributeJsObj.isString()) != null)
      DOM.setElementAttribute(widget.getElement(), "title", attributeStringObj.stringValue());
    attributeJsObj = childObj.get("id");
    if(attributeJsObj != null && (attributeStringObj = attributeJsObj.isString()) != null)
      DOM.setElementAttribute(widget.getElement(), "id", attributeStringObj.stringValue());
    attributeJsObj = childObj.get("className");
  }
}
TOP

Related Classes of com.vk.gwt.designer.client.ui.panel.vkHorizontalPanel.VkHorizontalPanelEngine

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.