001 /** 002 * Copyright 2010 The Kuali Foundation Licensed under the 003 * Educational Community License, Version 2.0 (the "License"); you may 004 * not use this file except in compliance with the License. You may 005 * obtain a copy of the License at 006 * 007 * http://www.osedu.org/licenses/ECL-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, 010 * software distributed under the License is distributed on an "AS IS" 011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing 013 * permissions and limitations under the License. 014 */ 015 016 package org.kuali.student.common.ui.client.widgets.menus; 017 018 import java.util.ArrayList; 019 import java.util.Collections; 020 import java.util.List; 021 022 import com.google.gwt.event.dom.client.ClickHandler; 023 import com.google.gwt.event.shared.HandlerManager; 024 import com.google.gwt.event.shared.HandlerRegistration; 025 import com.google.gwt.event.shared.GwtEvent.Type; 026 import com.google.gwt.user.client.ui.Image; 027 028 /** 029 * The data object used to populate interactive ui menus. 030 * 031 * @author Kuali Student Team 032 * 033 */ 034 public class KSMenuItemData { 035 private String label; 036 private String styleName; 037 private ClickHandler clickHandler; 038 private List<KSMenuItemData> subItems = new ArrayList<KSMenuItemData>(); 039 private KSMenuItemData parent = null; 040 private boolean selected = false; 041 private Image shownIcon = null; 042 043 private HandlerManager manager = new HandlerManager(this); 044 045 public KSMenuItemData(String label) { 046 super(); 047 this.label = label; 048 } 049 050 public KSMenuItemData(String label, ClickHandler clickHandler) { 051 super(); 052 this.label = label; 053 this.clickHandler = clickHandler; 054 } 055 056 public KSMenuItemData(String label, Image icon, ClickHandler clickHandler) { 057 super(); 058 this.label = label; 059 this.shownIcon = icon; 060 this.clickHandler = clickHandler; 061 } 062 063 /** 064 * Get the text used for this menu item 065 * 066 * @return the "label" for this menu item 067 */ 068 public String getLabel() { 069 return label; 070 } 071 /** 072 * Set the label to be used in the menu for this menu item 073 * 074 * @param label the "label" of this menu item 075 */ 076 public void setLabel(String label) { 077 this.label = label; 078 manager.fireEvent(new MenuChangeEvent()); 079 } 080 /** 081 * Get the ClickHandler for this menu item. 082 * 083 * @return ClickHandler which controls what this menu item does when selected 084 */ 085 public ClickHandler getClickHandler() { 086 return clickHandler; 087 } 088 /** 089 * Set the click handler for this menu item (what the menu item does when selected). 090 * 091 * @param clickHandler a ClickHandler for this menu item. 092 */ 093 public void setClickHandler(ClickHandler clickHandler) { 094 this.clickHandler = clickHandler; 095 } 096 097 /** 098 * Adds a KSMenuItemData to the list of children for this menu "category". 099 * 100 * @param item a KSMenuItemData that is a child of this KSMenuItemData 101 */ 102 public void addSubItem(KSMenuItemData item) { 103 subItems.add(item); 104 item.setParent(this); 105 } 106 107 /** 108 * Gets the list of sub items (children) in this KSMenuItemData 109 * 110 * @return the list of sub items in this KSMenuItemData 111 */ 112 public List<KSMenuItemData> getSubItems() { 113 return Collections.unmodifiableList(subItems); 114 } 115 116 /** 117 * Set the parent of this KSMenuItemData 118 * 119 * @param parent the KSMenuItemData which is the parent KSMenuItemData (category) 120 */ 121 public void setParent(KSMenuItemData parent) { 122 this.parent = parent; 123 } 124 125 /** 126 * Gets the parent of this KSMenuItemData 127 * 128 * @return the paren of this KSMenuItemData 129 */ 130 public KSMenuItemData getParent() { 131 return parent; 132 } 133 134 public boolean isSelected() { 135 return selected; 136 } 137 138 public void setSelected(boolean selected) { 139 this.selected = selected; 140 if(selected == true){ 141 manager.fireEvent(new MenuSelectEvent()); 142 } 143 } 144 145 public void setSelected(boolean selected, boolean fireClick) { 146 this.selected = selected; 147 if(selected == true){ 148 MenuSelectEvent e = new MenuSelectEvent(); 149 e.setFireClickEvent(fireClick); 150 manager.fireEvent(e); 151 } 152 } 153 154 public void unhandledSetSelected(boolean selected){ 155 this.selected = selected; 156 } 157 158 public Image getShownIcon() { 159 return shownIcon; 160 } 161 162 public void setShownIcon(Image shownIcon) { 163 this.shownIcon = shownIcon; 164 manager.fireEvent(new MenuChangeEvent()); 165 } 166 167 @SuppressWarnings("unchecked") 168 public HandlerRegistration addMenuEventHandler(Type type, MenuEventHandler meh){ 169 return manager.addHandler(type, meh); 170 } 171 172 public void addSpecialStyle(String style){ 173 styleName = style; 174 } 175 176 public String getSpecialStyle(){ 177 return styleName; 178 } 179 180 }