001package gwt.material.design.client.ui; 002 003/* 004 * #%L 005 * GwtMaterial 006 * %% 007 * Copyright (C) 2015 GwtMaterialDesign 008 * %% 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 * #L% 021 */ 022 023import com.google.gwt.dom.client.Document; 024import com.google.gwt.dom.client.Style; 025import com.google.gwt.event.dom.client.*; 026import com.google.gwt.event.shared.HandlerRegistration; 027import com.google.gwt.resources.client.ImageResource; 028import com.google.gwt.user.client.ui.Image; 029import gwt.material.design.client.base.*; 030import gwt.material.design.client.base.mixin.LetterMixin; 031import gwt.material.design.client.constants.IconPosition; 032import gwt.material.design.client.constants.IconSize; 033import gwt.material.design.client.constants.IconType; 034import gwt.material.design.client.ui.html.Span; 035 036//@formatter:off 037 038/** 039 * Chips can be used to represent small blocks of information. 040 * They are most commonly used either for contacts or for tags. 041 * 042 * <h3>UiBinder Usage:</h3> 043 * <pre> 044 *{@code// Simple Chips 045 * <m:MaterialChip text="Default" iconType="close"/> 046 * 047 * // Static Chip 048 * <m:MaterialChip text="Apple" /> 049 * 050 * // Contact Chips 051 * <m:MaterialChip url="http://b.vimeocdn.com/ps/339/488/3394886_300.jpg" text="Yunalis Mat Zara'ai" iconType="CLOSE"/> 052 * } 053 * </pre> 054 * 055 * @author kevzlou7979 056 * @author Ben Dol 057 * @see <a href="http://gwt-material-demo.herokuapp.com/#chips">Material Chips</a> 058 */ 059//@formatter:on 060public class MaterialChip extends MaterialWidget implements HasImage, HasIcon, HasClickHandlers, 061 HasAllMouseHandlers, HasDoubleClickHandlers, HasLetter { 062 063 private MaterialIcon icon = new MaterialIcon(); 064 private Span span = new Span(); 065 066 private ImageResource resource; 067 private Image image = new Image(); 068 069 private final LetterMixin<MaterialChip> letterMixin = new LetterMixin<>(this); 070 071 /** 072 * Creates an empty chip. 073 */ 074 public MaterialChip() { 075 super(Document.get().createDivElement(), "chip"); 076 } 077 078 public void setText(String text) { 079 span.setText(text); 080 add(span); 081 } 082 083 public String getText() { 084 return span.getElement().getInnerText(); 085 } 086 087 @Override 088 public void setUrl(String url) { 089 image.setUrl(url); 090 add(image); 091 } 092 093 @Override 094 public String getUrl() { 095 return image.getUrl(); 096 } 097 098 @Override 099 public void setResource(ImageResource resource) { 100 this.resource = resource; 101 image.setResource(resource); 102 add(image); 103 } 104 105 @Override 106 public ImageResource getResource() { 107 return resource; 108 } 109 110 /** 111 * @return the image 112 */ 113 public Image getImage() { 114 return image; 115 } 116 117 /** 118 * @param image the image to set 119 */ 120 public void setImage(Image image) { 121 this.image = image; 122 } 123 124 @Override 125 public MaterialIcon getIcon() { 126 return icon; 127 } 128 129 @Override 130 public void setIconType(IconType iconType) { 131 icon.setIconType(iconType); 132 add(icon); 133 } 134 135 @Override 136 public void setIconPosition(IconPosition position) { 137 icon.setIconPosition(position); 138 } 139 140 @Override 141 public void setIconSize(IconSize size) { 142 icon.setIconSize(size); 143 } 144 145 @Override 146 public void setIconFontSize(double size, Style.Unit unit) { 147 icon.setIconFontSize(size, unit); 148 } 149 150 @Override 151 public void setIconColor(String iconColor) { 152 icon.setIconColor(iconColor); 153 } 154 155 @Override 156 public void setIconPrefix(boolean prefix) { 157 icon.setIconPrefix(prefix); 158 } 159 160 @Override 161 public boolean isIconPrefix() { 162 return icon.isIconPrefix(); 163 } 164 165 @Override 166 public HandlerRegistration addClickHandler(final ClickHandler handler) { 167 return addDomHandler(new ClickHandler() { 168 @Override 169 public void onClick(ClickEvent event) { 170 if(isEnabled()){ 171 handler.onClick(event); 172 } 173 } 174 }, ClickEvent.getType()); 175 } 176 177 @Override 178 public HandlerRegistration addMouseDownHandler(final MouseDownHandler handler) { 179 return addDomHandler(new MouseDownHandler() { 180 @Override 181 public void onMouseDown(MouseDownEvent event) { 182 if(isEnabled()){ 183 handler.onMouseDown(event); 184 } 185 } 186 }, MouseDownEvent.getType()); 187 } 188 189 @Override 190 public HandlerRegistration addMouseMoveHandler(final MouseMoveHandler handler) { 191 return addDomHandler(new MouseMoveHandler() { 192 @Override 193 public void onMouseMove(MouseMoveEvent event) { 194 if(isEnabled()){ 195 handler.onMouseMove(event); 196 } 197 } 198 }, MouseMoveEvent.getType()); 199 } 200 201 @Override 202 public HandlerRegistration addMouseOutHandler(final MouseOutHandler handler) { 203 return addDomHandler(new MouseOutHandler() { 204 @Override 205 public void onMouseOut(MouseOutEvent event) { 206 if(isEnabled()){ 207 handler.onMouseOut(event); 208 } 209 } 210 }, MouseOutEvent.getType()); 211 } 212 213 @Override 214 public HandlerRegistration addMouseOverHandler(final MouseOverHandler handler) { 215 return addDomHandler(new MouseOverHandler() { 216 @Override 217 public void onMouseOver(MouseOverEvent event) { 218 if(isEnabled()){ 219 handler.onMouseOver(event); 220 } 221 } 222 }, MouseOverEvent.getType()); 223 } 224 225 @Override 226 public HandlerRegistration addMouseUpHandler(final MouseUpHandler handler) { 227 return addDomHandler(new MouseUpHandler() { 228 @Override 229 public void onMouseUp(MouseUpEvent event) { 230 if(isEnabled()){ 231 handler.onMouseUp(event); 232 } 233 } 234 }, MouseUpEvent.getType()); 235 } 236 237 @Override 238 public HandlerRegistration addMouseWheelHandler(final MouseWheelHandler handler) { 239 return addDomHandler(new MouseWheelHandler() { 240 @Override 241 public void onMouseWheel(MouseWheelEvent event) { 242 if(isEnabled()){ 243 handler.onMouseWheel(event); 244 } 245 } 246 }, MouseWheelEvent.getType()); 247 } 248 249 @Override 250 public HandlerRegistration addDoubleClickHandler(final DoubleClickHandler handler) { 251 return addDomHandler(new DoubleClickHandler() { 252 @Override 253 public void onDoubleClick(DoubleClickEvent event) { 254 if(isEnabled()){ 255 handler.onDoubleClick(event); 256 } 257 } 258 }, DoubleClickEvent.getType()); 259 } 260 261 @Override 262 public void setLetter(String letter) { 263 letterMixin.setLetter(letter); 264 } 265 266 @Override 267 public String getLetter() { 268 return letterMixin.getLetter(); 269 } 270 271 @Override 272 public void setLetterColor(String letterColor) { 273 letterMixin.setLetterColor(letterColor); 274 } 275 276 @Override 277 public void setLetterBackgroundColor(String letterBackgroundColor) { 278 letterMixin.setLetterBackgroundColor(letterBackgroundColor); 279 } 280}