diff options
4 files changed, 395 insertions, 50 deletions
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/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; + } + +} |