diff options
9 files changed, 481 insertions, 52 deletions
diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml index e8ac6b7797..46ace4520b 100644 --- a/WebContent/WEB-INF/web.xml +++ b/WebContent/WEB-INF/web.xml @@ -49,6 +49,23 @@ </servlet> <servlet> + <!-- Non-default values for testing purposes --> + <init-param> + <param-name>heartbeatInterval</param-name> + <param-value>301</param-value> + </init-param> + <init-param> + <param-name>resourceCacheTime</param-name> + <param-value>3601</param-value> + </init-param> + <init-param> + <param-name>closeIdleUIs</param-name> + <param-value>true</param-value> + </init-param> + <init-param> + <param-name>testParam</param-name> + <param-value>42</param-value> + </init-param> <servlet-name>VaadinApplicationRunner</servlet-name> <servlet-class>com.vaadin.launcher.ApplicationRunnerServlet</servlet-class> </servlet> diff --git a/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java b/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java index 29030fbd7d..817e027283 100644 --- a/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java +++ b/client/src/com/vaadin/client/ui/menubar/MenuBarConnector.java @@ -96,7 +96,7 @@ public class MenuBarConnector extends AbstractComponentConnector implements getWidget().collapsedRootItems = new VMenuBar(true, getWidget()); getWidget().moreItem.setSubMenu(getWidget().collapsedRootItems); - getWidget().moreItem.addStyleName(VMenuBar.CLASSNAME + getWidget().moreItem.addStyleName(getWidget().getStylePrimaryName() + "-more-menuitem"); } diff --git a/client/src/com/vaadin/client/ui/menubar/VMenuBar.java b/client/src/com/vaadin/client/ui/menubar/VMenuBar.java index a4878724a8..e38e6816ad 100644 --- a/client/src/com/vaadin/client/ui/menubar/VMenuBar.java +++ b/client/src/com/vaadin/client/ui/menubar/VMenuBar.java @@ -64,6 +64,7 @@ public class VMenuBar extends SimpleFocusablePanel implements /** Set the CSS class name to allow styling. */ public static final String CLASSNAME = "v-menubar"; + public static final String SUBMENU_CLASSNAME_PREFIX = "-submenu"; /** For server connections **/ protected String uidlId; @@ -128,19 +129,51 @@ public class VMenuBar extends SimpleFocusablePanel implements items = new ArrayList<CustomMenuItem>(); popup = null; visibleChildMenu = null; + this.subMenu = subMenu; containerElement = getElement(); - if (!subMenu) { + sinkEvents(Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT + | Event.ONLOAD); + + if (parentMenu == null) { + // Root menu setStyleName(CLASSNAME); } else { - setStyleName(CLASSNAME + "-submenu"); - this.parentMenu = parentMenu; + // Child menus inherits style name + setStyleName(parentMenu.getStyleName()); } - this.subMenu = subMenu; + } - sinkEvents(Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT - | Event.ONLOAD); + @Override + public void setStyleName(String style) { + super.setStyleName(style); + updateStyleNames(); + } + + @Override + public void setStylePrimaryName(String style) { + super.setStylePrimaryName(style); + updateStyleNames(); + } + + protected void updateStyleNames() { + String primaryStyleName = getParentMenu() != null ? getParentMenu() + .getStylePrimaryName() : getStylePrimaryName(); + + // Reset the style name for all the items + for (CustomMenuItem item : items) { + item.setStyleName(primaryStyleName + "-menuitem"); + } + + if (subMenu + && !getStylePrimaryName().endsWith(SUBMENU_CLASSNAME_PREFIX)) { + /* + * Sub-menus should get the sub-menu prefix + */ + super.setStylePrimaryName(primaryStyleName + + SUBMENU_CLASSNAME_PREFIX); + } } @Override @@ -178,11 +211,11 @@ public class VMenuBar extends SimpleFocusablePanel implements // Add submenu indicator if (item.getChildCount() > 0) { String bgStyle = ""; - itemHTML.append("<span class=\"" + CLASSNAME + itemHTML.append("<span class=\"" + getStylePrimaryName() + "-submenu-indicator\"" + bgStyle + ">►</span>"); } - itemHTML.append("<span class=\"" + CLASSNAME + itemHTML.append("<span class=\"" + getStylePrimaryName() + "-menuitem-caption\">"); if (item.hasAttribute("icon")) { itemHTML.append("<img src=\"" @@ -261,7 +294,6 @@ public class VMenuBar extends SimpleFocusablePanel implements CustomMenuItem item = GWT.create(CustomMenuItem.class); item.setHTML(html); item.setCommand(cmd); - addItem(item); return item; } @@ -528,6 +560,18 @@ public class VMenuBar extends SimpleFocusablePanel implements popup = new VOverlay(true, false, true); + /* + * Use parents primary style name if possible and remove the submenu + * prefix if needed + */ + String primaryStyleName = parentMenu != null ? parentMenu + .getStylePrimaryName() : getStylePrimaryName(); + if (subMenu) { + primaryStyleName = primaryStyleName.replace( + SUBMENU_CLASSNAME_PREFIX, ""); + } + popup.setStyleName(primaryStyleName + "-popup"); + // Setting owner and handlers to support tooltips. Needed for tooltip // handling of overlay widgets (will direct queries to parent menu) if (parentMenu == null) { @@ -543,7 +587,6 @@ public class VMenuBar extends SimpleFocusablePanel implements client.getVTooltip().connectHandlersToWidget(popup); } - popup.setStyleName(CLASSNAME + "-popup"); popup.setWidget(item.getSubMenu()); popup.addCloseHandler(this); popup.addAutoHidePartner(item.getElement()); @@ -737,6 +780,7 @@ public class VMenuBar extends SimpleFocusablePanel implements protected boolean isSeparator = false; protected boolean checkable = false; protected boolean checked = false; + protected boolean selected = false; protected String description = null; /** @@ -765,48 +809,31 @@ public class VMenuBar extends SimpleFocusablePanel implements setHTML(html); setCommand(cmd); setSelected(false); - setStyleName(CLASSNAME + "-menuitem"); + } + @Override + public void setStyleName(String style) { + super.setStyleName(style); + updateStyleNames(); + + // Pass stylename down to submenus + if (getSubMenu() != null) { + getSubMenu().setStyleName(style); + } } public void setSelected(boolean selected) { - if (selected && isSelectable()) { - addStyleDependentName("selected"); - // needed for IE6 to have a single style name to match for an - // element - // TODO Can be optimized now that IE6 is not supported any more - if (checkable) { - if (checked) { - removeStyleDependentName("selected-unchecked"); - addStyleDependentName("selected-checked"); - } else { - removeStyleDependentName("selected-checked"); - addStyleDependentName("selected-unchecked"); - } - } - } else { - removeStyleDependentName("selected"); - // needed for IE6 to have a single style name to match for an - // element - removeStyleDependentName("selected-checked"); - removeStyleDependentName("selected-unchecked"); - } + this.selected = selected; + updateStyleNames(); } public void setChecked(boolean checked) { if (checkable && !isSeparator) { this.checked = checked; - - if (checked) { - addStyleDependentName("checked"); - removeStyleDependentName("unchecked"); - } else { - addStyleDependentName("unchecked"); - removeStyleDependentName("checked"); - } } else { this.checked = false; } + updateStyleNames(); } public boolean isChecked() { @@ -840,6 +867,65 @@ public class VMenuBar extends SimpleFocusablePanel implements public void setParentMenu(VMenuBar parentMenu) { this.parentMenu = parentMenu; + updateStyleNames(); + } + + protected void updateStyleNames() { + if (parentMenu == null) { + // Style names depend on the parent menu's primary style name so + // don't do updates until the item has a parent + return; + } + + String primaryStyleName = parentMenu.getStylePrimaryName(); + if (parentMenu.subMenu) { + primaryStyleName = primaryStyleName.replace( + SUBMENU_CLASSNAME_PREFIX, ""); + } + + if (isSeparator) { + super.setStyleName(primaryStyleName + "-separator"); + } else { + super.setStyleName(primaryStyleName + "-menuitem"); + } + + if (enabled) { + removeStyleDependentName("disabled"); + } else { + addStyleDependentName("disabled"); + } + + if (selected && isSelectable()) { + addStyleDependentName("selected"); + // needed for IE6 to have a single style name to match for an + // element + // TODO Can be optimized now that IE6 is not supported any more + if (checkable) { + if (checked) { + removeStyleDependentName("selected-unchecked"); + addStyleDependentName("selected-checked"); + } else { + removeStyleDependentName("selected-checked"); + addStyleDependentName("selected-unchecked"); + } + } + } else { + removeStyleDependentName("selected"); + // needed for IE6 to have a single style name to match for an + // element + removeStyleDependentName("selected-checked"); + removeStyleDependentName("selected-unchecked"); + } + + if (checkable && !isSeparator) { + if (checked) { + addStyleDependentName("checked"); + removeStyleDependentName("unchecked"); + } else { + addStyleDependentName("unchecked"); + removeStyleDependentName("checked"); + } + } } public VMenuBar getParentMenu() { @@ -881,11 +967,7 @@ public class VMenuBar extends SimpleFocusablePanel implements public void setEnabled(boolean enabled) { this.enabled = enabled; - if (enabled) { - removeStyleDependentName("disabled"); - } else { - addStyleDependentName("disabled"); - } + updateStyleNames(); } public boolean isEnabled() { @@ -894,10 +976,8 @@ public class VMenuBar extends SimpleFocusablePanel implements private void setSeparator(boolean separator) { isSeparator = separator; - if (separator) { - setStyleName(CLASSNAME + "-separator"); - } else { - setStyleName(CLASSNAME + "-menuitem"); + updateStyleNames(); + if (!separator) { setEnabled(enabled); } } diff --git a/server/src/com/vaadin/DefaultDeploymentConfiguration.java b/server/src/com/vaadin/DefaultDeploymentConfiguration.java index fed558c5b5..a9818f2c8b 100644 --- a/server/src/com/vaadin/DefaultDeploymentConfiguration.java +++ b/server/src/com/vaadin/DefaultDeploymentConfiguration.java @@ -219,7 +219,7 @@ public class DefaultDeploymentConfiguration implements DeploymentConfiguration { try { heartbeatInterval = Integer .parseInt(getApplicationOrSystemProperty( - Constants.SERVLET_PARAMETER_HEARTBEAT_RATE, "300")); + Constants.SERVLET_PARAMETER_HEARTBEAT_INTERVAL, "300")); } catch (NumberFormatException e) { getLogger().warning( Constants.WARNING_HEARTBEAT_INTERVAL_NOT_NUMERIC); diff --git a/server/src/com/vaadin/server/Constants.java b/server/src/com/vaadin/server/Constants.java index 60f7aa03d0..b6bfcc0495 100644 --- a/server/src/com/vaadin/server/Constants.java +++ b/server/src/com/vaadin/server/Constants.java @@ -61,7 +61,7 @@ public interface Constants { static final String SERVLET_PARAMETER_PRODUCTION_MODE = "productionMode"; static final String SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION = "disable-xsrf-protection"; static final String SERVLET_PARAMETER_RESOURCE_CACHE_TIME = "resourceCacheTime"; - static final String SERVLET_PARAMETER_HEARTBEAT_RATE = "heartbeatRate"; + static final String SERVLET_PARAMETER_HEARTBEAT_INTERVAL = "heartbeatInterval"; static final String SERVLET_PARAMETER_CLOSE_IDLE_UIS = "closeIdleUIs"; static final String SERVLET_PARAMETER_UI_PROVIDER = "UIProvider"; diff --git a/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html new file mode 100644 index 0000000000..f5ad0987aa --- /dev/null +++ b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.html @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="http://localhost:8070/" /> +<title>DeploymentConfigurationTest</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">DeploymentConfigurationTest</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.application.DeploymentConfigurationTest?restartApplication</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:closeIdleUIs: true</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:productionMode: false</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:testParam: 42</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:heartbeatInterval: 301</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>exact:resourceCacheTime: 3601</td> + <td></td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java new file mode 100644 index 0000000000..9c89254bd7 --- /dev/null +++ b/uitest/src/com/vaadin/tests/application/DeploymentConfigurationTest.java @@ -0,0 +1,20 @@ +package com.vaadin.tests.application; + +import java.util.Properties; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Label; +import com.vaadin.ui.UI; + +public class DeploymentConfigurationTest extends UI { + + @Override + protected void init(VaadinRequest request) { + Properties params = getSession().getConfiguration().getInitParameters(); + + for (Object key : params.keySet()) { + addComponent(new Label(key + ": " + + params.getProperty((String) key))); + } + } +} diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html new file mode 100644 index 0000000000..1232418978 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.html @@ -0,0 +1,217 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="http://localhost:8888/" /> +<title>New Test</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">New Test</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.menubar.MenuBarPrimaryStylenames?restartApplication</td> + <td></td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>my-menu-bar</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[0]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[0]</td> + <td>my-menu-bar-submenu-indicator</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[1]</td> + <td>my-menu-bar-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/</td> + <td>my-menu-bar-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]</td> + <td>my-menu-bar-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-menu-bar-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item1</td> + <td>44,6</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>down</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>right</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]</td> + <td>my-menu-bar-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]</td> + <td>my-menu-bar-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]</td> + <td>my-menu-bar-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-menu-bar-menuitem-caption</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>[tab]</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td> + <td></td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>my-other-menu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[0]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[0]</td> + <td>my-other-menu-submenu-indicator</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]/domChild[1]/domChild[1]</td> + <td>my-other-menu-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/</td> + <td>my-other-menu-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]</td> + <td>my-other-menu-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[0]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-other-menu-menuitem-caption</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>24,9</td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item1</td> + <td>44,6</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>down</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]</td> + <td>right</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]</td> + <td>my-other-menu-popup</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]</td> + <td>my-other-menu-submenu</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]</td> + <td>my-other-menu-menuitem</td> +</tr> +<tr> + <td>assertCSSClass</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::Root/VOverlay[1]/VMenuBar[0]/domChild[0]/domChild[0]</td> + <td>my-other-menu-menuitem-caption</td> +</tr> +<tr> + <td>pressSpecialKey</td> + <td>vaadin=runcomvaadintestscomponentsmenubarMenuBarPrimaryStylenames::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VMenuBar[0]#item0</td> + <td>[tab]</td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java new file mode 100644 index 0000000000..79bec2e65e --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/menubar/MenuBarPrimaryStylenames.java @@ -0,0 +1,48 @@ +package com.vaadin.tests.components.menubar; + +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.MenuBar; +import com.vaadin.ui.MenuBar.MenuItem; + +public class MenuBarPrimaryStylenames extends TestBase { + + @Override + protected void setup() { + final MenuBar mainMenu = new MenuBar(); + mainMenu.setPrimaryStyleName("my-menu-bar"); + + MenuItem submenu1 = mainMenu.addItem("Submenu1", null); + MenuItem item1 = submenu1.addItem("Item1", null); + item1.setCheckable(true); + item1.setStyleName("my-menu-item"); + submenu1.addItem("Item2", null); + + MenuItem submenu2 = mainMenu.addItem("Submenu2", null); + MenuItem menu1 = submenu2.addItem("Menu1", null); + menu1.addItem("Item11", null); + + addComponent(mainMenu); + + addComponent(new Button("Change primary stylename", + new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + mainMenu.setPrimaryStyleName("my-other-menu"); + } + })); + + } + + @Override + protected String getDescription() { + return "Menubar should support primary stylenames both initially and dynamically"; + } + + @Override + protected Integer getTicketNumber() { + return 9908; + } + +} |