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

Source Code of com.vk.gwt.designer.client.ui.panel.vkDecoratedTabPanel.VkDecoratedTabPanelEngine

/*
* 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.vkDecoratedTabPanel;

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

import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONBoolean;
import com.google.gwt.json.client.JSONNumber;
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.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Widget;
import com.vk.gwt.designer.client.api.attributes.HasVkAnimation;
import com.vk.gwt.designer.client.api.attributes.HasVkBeforeSelectionHandler;
import com.vk.gwt.designer.client.api.attributes.HasVkEnabled;
import com.vk.gwt.designer.client.api.attributes.HasVkEventHandler;
import com.vk.gwt.designer.client.api.attributes.HasVkSelectionHandler;
import com.vk.gwt.designer.client.api.attributes.HasVkSwitchNumberedWidget;
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.UndoHelper;
import com.vk.gwt.designer.client.designer.VkAbstractWidgetEngine;
import com.vk.gwt.designer.client.designer.VkDesignerUtil;
import com.vk.gwt.designer.client.designer.VkDesignerUtil.IDialogCallback;
import com.vk.gwt.designer.client.designer.VkStateHelper;

public class VkDecoratedTabPanelEngine extends VkAbstractWidgetEngine<VkDecoratedTabPanel> {
  private final String DISABLE_TAB = "Disable a Tab";
  private final String ENABLE_TAB = "Enable a Tab";
  @Override
  public VkDecoratedTabPanel getWidget() {
    VkDecoratedTabPanel widget = new VkDecoratedTabPanel();
    init(widget);
    return widget;
  }
  @Override
  public List<String> getAttributesList(Widget invokingWidget)
  {
    List<String> optionList = VkStateHelper.getInstance().getEngine().getAttributesList(invokingWidget);
    optionList.remove(HasVkEnabled.NAME);
    optionList.add(ENABLE_TAB);
    optionList.add(DISABLE_TAB);
    return optionList;
  }
  @Override
  public void applyAttribute(String attributeName, Widget invokingWidget) {
    final VkDecoratedTabPanel widget = (VkDecoratedTabPanel)invokingWidget;
    if(attributeName.equals(ENABLE_TAB))
      enableTab(widget);
    else if(attributeName.equals(DISABLE_TAB))
      disableTab(widget);
    else
      VkStateHelper.getInstance().getEngine().applyAttribute(attributeName, invokingWidget);
  }
 
  private void enableTab(final VkDecoratedTabPanel widget) {
    ListBox listBox = new ListBox();
    for(int i = 0, len = widget.getTabCount(); i < len; i++)
      listBox.addItem(widget.getTabHeaderText(i), Integer.toString(i));
    listBox.setWidth("300px");
    VkDesignerUtil.showAddListDialog("Add Tab number to enable", listBox, new IDialogCallback() {
      @Override
      public void save(String text) {
        final int tabNumber = Integer.parseInt(text);
        UndoHelper.getInstance().doCommand(new Command(){
          @Override
          public void execute() {
            widget.setTabEnabled(tabNumber, true);
          }}, new Command() {
          @Override
          public void execute() {
            widget.setTabEnabled(tabNumber, false);
          }
        });
      }
    });   
  }
  private void disableTab(final VkDecoratedTabPanel widget) {
    ListBox listBox = new ListBox();
    for(int i = 0, len = widget.getTabCount(); i < len; i++)
      listBox.addItem(widget.getTabHeaderText(i), Integer.toString(i));
    listBox.setWidth("300px");
    VkDesignerUtil.showAddListDialog("Add Tab number to disable", listBox, new IDialogCallback() {
      @Override
      public void save(String text) {
        final int tabNumber = Integer.parseInt(text);
        UndoHelper.getInstance().doCommand(new Command(){
          @Override
          public void execute() {
            widget.setTabEnabled(tabNumber, false);
            widget.selectTab(tabNumber);
          }}, new Command() {
          @Override
          public void execute() {
            widget.setTabEnabled(tabNumber, true);
          }
        });
      }
    });   
  }
  @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(",children:[");
    if(widget instanceof IVkPanel)
    {
      Iterator<Widget> widgetList = ((IVkPanel)widget).iterator();
      int widgetIndex = 0;
      while(widgetList.hasNext())
      {
        Widget child = widgetList.next();
        buffer.append("{headerHtml:'").append(((VkDecoratedTabPanel)widget).getTabHeaderHtml(widgetIndex)).append("'");
        buffer.append(",enabled:").append(((VkDecoratedTabPanel)widget).getTabEnabled(widgetIndex++));
        buffer.append(",child:");
        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 instanceof HasVkAnimation)
      buffer.append(",'" ).append(HasVkAnimation.NAME).append("':").append(((HasVkAnimation)widgetSource).isAnimationEnabled());
    if(widgetSource instanceof HasVkSwitchNumberedWidget)
      buffer.append(",'" ).append(HasVkSwitchNumberedWidget.NAME).append("':").append(((HasVkSwitchNumberedWidget)widgetSource).getCurrentlyShowingWidget());
   
    if(widgetSource instanceof HasVkBeforeSelectionHandler && !((HasVkEventHandler)widgetSource).getPriorJs(HasVkBeforeSelectionHandler.NAME).isEmpty())
      buffer.append(",'" ).append(HasVkBeforeSelectionHandler.NAME).append("':").append("'")
        .append(((HasVkEventHandler)widgetSource).getPriorJs(HasVkBeforeSelectionHandler.NAME).replace("'", "\\'")).append("'");
    if(widgetSource instanceof HasVkSelectionHandler && !((HasVkEventHandler)widgetSource).getPriorJs(HasVkSelectionHandler.NAME).isEmpty())
      buffer.append(",'" ).append(HasVkSelectionHandler.NAME).append("':").append("'")
        .append(((HasVkEventHandler)widgetSource).getPriorJs(HasVkSelectionHandler.NAME).replace("'", "\\'")).append("'");
  }
  @Override
  public void buildWidget(JSONObject jsonObj, Widget parent) {
    JSONArray childrenArray = jsonObj.put("children", null).isArray();
    for(int i = 0; i < childrenArray.size(); i++)
    {
      JSONObject childObj = childrenArray.get(i).isObject();
      JSONObject childWidgetObj = childObj.get("child").isObject();
      JSONString widgetName = childWidgetObj.get("widgetName").isString();
      Widget widget = VkStateHelper.getInstance().getEngine().getWidget(widgetName.stringValue());
      VkStateHelper.getInstance().getEngine().addWidget(widget, ((IVkPanel)parent));
      int tabIndex = ((VkDecoratedTabPanel)parent).getWidgetCount() - 1;
      ((VkDecoratedTabPanel)parent).setTabHeaderHtml(tabIndex, childObj.get("headerHtml").isString().stringValue());
      ((VkDecoratedTabPanel)parent).setTabEnabled(tabIndex, childObj.get("enabled").isBoolean().booleanValue());
      VkStateHelper.getInstance().getWidgetEngineMapping().getEngineMap().get(((IVkWidget)widget).getWidgetName()).buildWidget(childWidgetObj, widget);
    }
    addAttributes(jsonObj, parent);
  }
  @Override
  protected void addAttributes(JSONObject childObj, Widget widget) {
    JSONString attributeStringObj;
    JSONBoolean attributeBooleanObj;
    JSONNumber attributeNumberObj;
    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("className");
    if(attributeJsObj != null && (attributeStringObj = attributeJsObj.isString()) != null)
      DOM.setElementAttribute(widget.getElement(), "className", attributeStringObj.stringValue());
    attributeJsObj = childObj.get(HasVkAnimation.NAME);
    if(attributeJsObj != null && (attributeBooleanObj = attributeJsObj.isBoolean()) != null)
      ((HasVkAnimation)widget).setAnimationEnabled(attributeBooleanObj.booleanValue());
    attributeJsObj = childObj.get(HasVkSwitchNumberedWidget.NAME);
    if(attributeJsObj != null && (attributeNumberObj = attributeJsObj.isNumber()) != null)
      ((HasVkSwitchNumberedWidget)widget).showWidget((int)attributeNumberObj.doubleValue());
   
    attributeJsObj = childObj.get(HasVkBeforeSelectionHandler.NAME);
    if(attributeJsObj != null && (attributeStringObj = attributeJsObj.isString()) != null)
      ((HasVkBeforeSelectionHandler)widget).addBeforeSelectionHandler(attributeStringObj.stringValue());
    attributeJsObj = childObj.get(HasVkSelectionHandler.NAME);
    if(attributeJsObj != null && (attributeStringObj = attributeJsObj.isString()) != null)
      ((HasVkSelectionHandler)widget).addSelectionHandler(attributeStringObj.stringValue());
  }
  @Override
  public Widget deepClone(Widget sourceWidget, Widget targetWidget) {
    boolean isVkDesignerMode = VkStateHelper.getInstance().isDesignerMode();
    if(sourceWidget instanceof IVkPanel && targetWidget instanceof IVkPanel)
    {
      Iterator<Widget> widgets = ((IVkPanel)sourceWidget).iterator();
      while(widgets.hasNext())
      {
        Widget currentWidget = widgets.next();
        Widget newWidget = VkStateHelper.getInstance().getEngine().getWidget(((IVkWidget)currentWidget).getWidgetName());
        VkStateHelper.getInstance().setDesignerMode(false);
        if(currentWidget instanceof IVkWidget)
          VkStateHelper.getInstance().getEngine().addWidget(VkStateHelper.getInstance().getWidgetEngineMapping().getEngineMap().get(((IVkWidget) currentWidget).getWidgetName()).deepClone(currentWidget, newWidget), (IVkPanel)targetWidget);
        VkStateHelper.getInstance().setDesignerMode(isVkDesignerMode);
      }
    }
    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);
    return targetWidget;
  }
}
TOP

Related Classes of com.vk.gwt.designer.client.ui.panel.vkDecoratedTabPanel.VkDecoratedTabPanelEngine

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.