@Override
 public void copyAttributes(Widget widgetSource, Widget widgetTarget) {
   super.copyAttributes(widgetSource, widgetTarget);
   VkMenuBarHorizontal sourceMenuBar = (VkMenuBarHorizontal) widgetSource;
   VkMenuBarHorizontal targetMenuBar = (VkMenuBarHorizontal) widgetTarget;
   for (int i = 0, allItems = 0, k = 0; i < sourceMenuBar.getItemCount(); i++, allItems++) {
     if (sourceMenuBar.getItems().get(i).getSubMenu() == null)
       addMenuItem(
           targetMenuBar,
           sourceMenuBar.getItems().get(i).getHTML(),
           sourceMenuBar
               .getCommandJs()
               .get(sourceMenuBar.getItems().indexOf(sourceMenuBar.getItems().get(i))));
     else {
       VkMenuBarHorizontal widget =
           (VkMenuBarHorizontal)
               VkStateHelper.getInstance().getEngine().getWidget(VkMenuBarVertical.NAME);
       targetMenuBar.addItem(
           new MenuItem(
               sourceMenuBar.getItems().get(i).getHTML(),
               (VkMenuBarVertical)
                   VkStateHelper.getInstance()
                       .getWidgetEngineMapping()
                       .getEngineMap()
                       .get(((IVkWidget) widget).getWidgetName())
                       .deepClone(sourceMenuBar.getItems().get(i).getSubMenu(), widget)));
     }
     if (k < sourceMenuBar.getSeperatorIndices().size()
         && sourceMenuBar.getSeperatorIndices().get(k) == allItems + 1)
       addSeparator(targetMenuBar);
   }
 }
 @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);
   VkMenuBarHorizontal menuBar = (VkMenuBarHorizontal) widget;
   buffer.append(",items:[");
   for (int i = 0, allItems = 0, k = 0; i < menuBar.getItemCount(); i++, allItems++) {
     buffer.append("{html:'").append(menuBar.getItems().get(i).getHTML()).append("'");
     if (menuBar.getItems().get(i).getSubMenu() == null) {
       if (menuBar.getCommandJs().containsKey(i))
         buffer
             .append(",js:'")
             .append(menuBar.getCommandJs().get(i).replace('\'', '"'))
             .append("'");
       else
         buffer
             .append(",child:")
             .append(
                 VkStateHelper.getInstance()
                     .getWidgetEngineMapping()
                     .getEngineMap()
                     .get(((IVkWidget) menuBar.getWidgets().get(i)).getWidgetName())
                     .serialize((IVkWidget) menuBar.getWidgets().get(i)));
     } else
       buffer
           .append(",menu:")
           .append(serialize((IVkWidget) menuBar.getItems().get(i).getSubMenu()));
     buffer.append("},");
     if (k < menuBar.getSeperatorIndices().size()
         && menuBar.getSeperatorIndices().get(k) == allItems + 1) {
       buffer.append("{separator:''},");
       allItems++;
       k++;
     }
   }
   if (buffer.charAt(buffer.length() - 1) == ',') buffer.deleteCharAt(buffer.length() - 1);
   buffer.append("]}");
   return buffer.toString();
 }
 private void addSeparator(VkMenuBarHorizontal menuBar) {
   menuBar.getSeperatorIndices().add(menuBar.getSeparatorIndex(menuBar.addSeparator()));
 }