/*
@VaadinApache2LicenseForJavaFiles@
*/
package com.vaadin.terminal.gwt.client.ui;
import java.util.Iterator;
import java.util.Stack;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.VMenuBar.CustomMenuItem;
public class VMenuBarPaintable extends AbstractComponentConnector implements
SimpleManagedLayout {
/**
* This method must be implemented to update the client-side component from
* UIDL data received from server.
*
* This method is called when the page is loaded for the first time, and
* every time UI changes in the component are received from the server.
*/
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
// This call should be made first. Ensure correct implementation,
// and let the containing layout manage caption, etc.
super.updateFromUIDL(uidl, client);
if (!isRealUpdate(uidl)) {
return;
}
getWidget().htmlContentAllowed = uidl
.hasAttribute(VMenuBar.HTML_CONTENT_ALLOWED);
getWidget().openRootOnHover = uidl
.getBooleanAttribute(VMenuBar.OPEN_ROOT_MENU_ON_HOWER);
getWidget().enabled = !getState().isDisabled();
// For future connections
getWidget().client = client;
getWidget().uidlId = uidl.getId();
// Empty the menu every time it receives new information
if (!getWidget().getItems().isEmpty()) {
getWidget().clearItems();
}
UIDL options = uidl.getChildUIDL(0);
if (null != getState() && !getState().isUndefinedWidth()) {
UIDL moreItemUIDL = options.getChildUIDL(0);
StringBuffer itemHTML = new StringBuffer();
if (moreItemUIDL.hasAttribute("icon")) {
itemHTML.append("");
}
String moreItemText = moreItemUIDL.getStringAttribute("text");
if ("".equals(moreItemText)) {
moreItemText = "►";
}
itemHTML.append(moreItemText);
getWidget().moreItem = GWT.create(CustomMenuItem.class);
getWidget().moreItem.setHTML(itemHTML.toString());
getWidget().moreItem.setCommand(VMenuBar.emptyCommand);
getWidget().collapsedRootItems = new VMenuBar(true,
getWidget());
getWidget().moreItem
.setSubMenu(getWidget().collapsedRootItems);
getWidget().moreItem.addStyleName(VMenuBar.CLASSNAME
+ "-more-menuitem");
}
UIDL uidlItems = uidl.getChildUIDL(1);
Iterator