/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.wui.client.main;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
public class MenuPanel extends Composite {
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
interface MyUiBinder extends UiBinder<Widget, MenuPanel> {
}
interface MenuStyle extends CssResource {
String menu_lightblue();
String menu_darkblue();
String menu_yellow();
String menu_green();
}
public enum MenuColor {
LIGHT_BLUE, DARK_BLUE, YELLOW, GREEN
}
@UiField(provided = true)
Label title;
@UiField
FlowPanel itemsPanel;
@UiField
MenuStyle style;
/**
* Create a new menu panel
*
* @param title
* the menu title
* @param items
* the menu items
* @param color
* the menu hover color
*/
public MenuPanel(Label title, Label[] items, final MenuColor color) {
this.title = title;
initWidget(uiBinder.createAndBindUi(this));
for (int i = 0; i < items.length; i++) {
items[i].addStyleName("menu_item");
itemsPanel.add(items[i]);
if (i < items.length - 1) {
HTML separator = new HTML(" ยท ");
separator.addStyleName("menu_separator");
itemsPanel.add(separator);
}
}
switch (color) {
case DARK_BLUE:
getElement().addClassName(style.menu_darkblue());
break;
case LIGHT_BLUE:
getElement().addClassName(style.menu_lightblue());
break;
case YELLOW:
getElement().addClassName(style.menu_yellow());
break;
case GREEN:
getElement().addClassName(style.menu_green());
break;
default:
break;
}
}
/**
* Set the visibility of a determined menu item
*
* @param index
* the item index
* @param visible
* true to turn visible, false otherwise
*/
public void setItemVisible(int index, boolean visible) {
// visibility of (index)th item
itemsPanel.getWidget(2 * index).setVisible(visible);
// check separators
int count = itemsPanel.getWidgetCount();
if (count > 1) {
boolean lastItemVisible = itemsPanel.getWidget(0).isVisible();
for (int i = 2; i <= count; i += 2) {
boolean indexVisible = itemsPanel.getWidget(i).isVisible();
// separator index-1
itemsPanel.getWidget(i - 1).setVisible(lastItemVisible && indexVisible);
lastItemVisible |= indexVisible;
}
}
}
}