/*
* Copyright 2014 cruxframework.org.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.cruxframework.crux.smartfaces.client.menu;
import org.cruxframework.crux.core.client.collection.FastList;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.Widget;
/**
* A helpful menu class
* @author Samuel Almeida Cardoso (samuel@cruxframework.org)
*
*/
class MenuUtils
{
/**
* @param menuItem
* @return
*/
public static FastList<MenuItem> getAllMenuItems(MenuItem menuItem)
{
FastList<MenuItem> ans = new FastList<MenuItem>();
FastList<MenuItem> ansFound = getAllMenuItems(menuItem, ans);
return ansFound;
}
private static FastList<MenuItem> getAllMenuItems(MenuItem menuItem, FastList<MenuItem> found)
{
if(menuItem == null)
{
return found;
}
found.add(menuItem);
if(menuItem.getChildren() == null)
{
return found;
}
for(int i=0;i<menuItem.getChildren().size();i++)
{
findHasEnabledInMenu(menuItem.getChildren().get(i), found);
}
return found;
}
/**
* @param menuItem
* @return
*/
public static FastList<MenuItem> findHasEnabledInMenu(MenuItem menuItem)
{
FastList<MenuItem> ans = new FastList<MenuItem>();
FastList<MenuItem> ansFound = findHasEnabledInMenu(menuItem, ans);
return ansFound;
}
private static FastList<MenuItem> findHasEnabledInMenu(MenuItem menuItem, FastList<MenuItem> found)
{
if(menuItem == null)
{
return found;
}
if(menuItem.getItemWidget() instanceof HasEnabled)
{
found.add(menuItem);
}
if(menuItem.getChildren() == null)
{
return found;
}
for(int i=0;i<menuItem.getChildren().size();i++)
{
findHasEnabledInMenu(menuItem.getChildren().get(i), found);
}
return found;
}
/**
* @param menuItem
* @param widget
* @return
*/
public static MenuItem findInMenu(MenuItem menuItem, Widget widget)
{
if(menuItem == null)
{
return null;
}
if(menuItem.getItemWidget() != null && menuItem.getItemWidget().equals(widget))
{
return menuItem;
}
if(menuItem.getChildren() == null)
{
return null;
}
for(int i=0; i<menuItem.getChildren().size();i++)
{
MenuItem found = findInMenu(menuItem.getChildren().get(i), widget);
if(found != null)
{
return found;
}
}
return null;
}
/**
* @param menuItem
* @param key
* @return
*/
public static MenuItem findInMenu(MenuItem menuItem, int key)
{
if(menuItem == null)
{
return null;
}
if(menuItem.hashCode() == key)
{
return menuItem;
}
if(menuItem.getChildren() == null)
{
return null;
}
for(int i=0; i<menuItem.getChildren().size();i++)
{
MenuItem found = findInMenu(menuItem.getChildren().get(i), key);
if(found != null)
{
return found;
}
}
return null;
}
/**
* @param className
* @param apply
* @param menuItem
*/
public static void addOrRemoveClass(String className, boolean apply, MenuItem menuItem)
{
if(menuItem == null)
{
return;
}
FastList<MenuItem> items = new FastList<MenuItem>();
items.add(menuItem);
addOrRemoveClass(className, apply, items);
}
/**
* @param className
* @param apply
* @param menuItems
*/
public static void addOrRemoveClass(String className, boolean apply, FastList<MenuItem> menuItems)
{
if(menuItems == null)
{
return;
}
for(int i=0; i<menuItems.size(); i++)
{
if(apply)
{
menuItems.get(i).addClassName(className);
} else
{
menuItems.get(i).removeClassName(className);
}
}
}
}