package com.google.gwt.gwtpages.demo.client.pages.layout;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.gwtpages.client.GotoPageCommand;
import com.google.gwt.gwtpages.client.Pages;
import com.google.gwt.gwtpages.client.event.PageShownEvent;
import com.google.gwt.gwtpages.client.event.PageShownEvent.PageShownHandler;
import com.google.gwt.gwtpages.client.page.LoadedPageContainer;
import com.google.gwt.gwtpages.client.page.loader.PageLoader;
import com.google.gwt.gwtpages.client.page.parameters.PageParameters;
import com.google.gwt.gwtpages.demo.client.pages.PageConstants;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.SimplePanel;
public class MenuItemsPanel extends FlowPanel implements PageShownHandler {
private List<MenuItemLink> links;
private boolean leftSide;
private boolean initialized = false;
public MenuItemsPanel (boolean isLeftSide) {
this.leftSide = isLeftSide;
links = new ArrayList<MenuItemsPanel.MenuItemLink>();
links.add(new MenuItemLink(PageLoader.PAGE_DEFAULT, "Home"));
links.add(new MenuItemLink(PageConstants.PAGE_NAVIGATION, "Navigation"));
links.add(new MenuItemLink(PageConstants.PAGE_MESSAGES, "Messages"));
links.add(new MenuItemLink(PageConstants.PAGE_LAYOUTS, "Layouts"));
links.add(new MenuItemLink(PageConstants.PAGE_LOADERS, "Page Loaders"));
links.add(new MenuItemLink(PageConstants.PAGE_EVENTS, "Page Events"));
links.add(new MenuItemLink(PageConstants.PAGE_SECURITY, "Security"));
links.add(new MenuItemLink(PageConstants.PAGE_MVP, "MVP"));
for (MenuItemLink link : links)
add(link);
}
@Override
protected void onAttach() {
super.onAttach();
if (!initialized) {
Pages.get().getEventBus().addHandler(PageShownEvent.TYPE, this);
initialized = true;
}
}
@Override
public void onPageShown(LoadedPageContainer currentPageData,
PageParameters parameters, GotoPageCommand command,
LoadedPageContainer previousPageData) {
boolean matchFound = false;
for (MenuItemLink link : links) {
if (link.pageToken.equals(currentPageData.getPageToken())) {
matchFound = true;
break;
}
}
if (matchFound) {
for (MenuItemLink link : links) {
if (link.pageToken.equals(currentPageData.getPageToken())) {
link.select();
}
else {
link.reset();
}
}
}
}
private class MenuItemLink extends SimplePanel implements MouseOverHandler, MouseOutHandler {
private String pageToken;
private Hyperlink link;
public MenuItemLink(String pageToken, String label) {
this.pageToken = pageToken;
link = new Hyperlink(label, pageToken);
addDomHandler(this, MouseOverEvent.getType());
addDomHandler(this, MouseOutEvent.getType());
if (leftSide) {
addStyleName("menu-item left-side-menu-item");
}
else {
addStyleName("menu-item right-side-menu-item");
}
add(link);
}
public void select() {
if (leftSide) {
addStyleName("menu-item-selected left-side-menu-item-selected");
}
else {
addStyleName("menu-item-selected right-side-menu-item-selected");
}
}
public void reset() {
removeStyleName("menu-item-selected");
if (leftSide) {
removeStyleName("left-side-menu-item-selected");
removeStyleName("left-side-menu-item-hover");
}
else {
removeStyleName("right-side-menu-item-selected");
removeStyleName("right-side-menu-item-hover");
}
}
@Override
public void onMouseOver(MouseOverEvent event) {
if (leftSide) {
addStyleName("menu-item-hover left-side-menu-item-hover");
}
else {
addStyleName("menu-item-hover right-side-menu-item-hover");
}
}
@Override
public void onMouseOut(MouseOutEvent event) {
removeStyleName("menu-item-hover");
if (leftSide) {
removeStyleName("left-side-menu-item-hover");
}
else {
addStyleName("right-side-menu-item-hover");
}
}
}
}