/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.eas.menu; import com.eas.ui.events.HasHideHandlers; import com.eas.ui.events.HasShowHandlers; import com.eas.ui.events.HideEvent; import com.eas.ui.events.HideHandler; import com.eas.ui.events.ShowEvent; import com.eas.ui.events.ShowHandler; import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.Element; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.event.shared.HasHandlers; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.safehtml.shared.SafeUri; import com.google.gwt.user.client.ui.MenuItem; /** * * @author mg */ public class MenuItemImageText extends MenuItem implements HasHandlers, HasShowHandlers, HasHideHandlers { protected String text; protected boolean html; protected SafeUri imageUri; // protected Element leftMark; protected Element field; // private HandlerManager handlerManager; public MenuItemImageText(String aText, boolean asHtml, SafeUri aImageUri, Scheduler.ScheduledCommand aCommand) { super("", aCommand); text = aText; html = asHtml; imageUri = aImageUri; setStyleName("menu-item"); regenerate(); } @Override public HandlerRegistration addHideHandler(HideHandler handler) { return addHandler(handler, HideEvent.getType()); } @Override public HandlerRegistration addShowHandler(ShowHandler handler) { return addHandler(handler, ShowEvent.getType()); } @Override public void setVisible(boolean visible) { boolean oldValue = isVisible(); super.setVisible(visible); if (oldValue != visible) { if (visible) { ShowEvent.fire(this, this); } else { HideEvent.fire(this, this); } } } /** * Adds this handler to the widget. * * @param <H> * the type of handler to add * @param type * the event type * @param handler * the handler * @return {@link HandlerRegistration} used to remove the handler */ public final <H extends EventHandler> HandlerRegistration addHandler(final H handler, GwtEvent.Type<H> type) { return ensureHandlers().addHandler(type, handler); } /** * Ensures the existence of the handler manager. * * @return the handler manager * */ HandlerManager ensureHandlers() { return handlerManager == null ? handlerManager = createHandlerManager() : handlerManager; } HandlerManager getHandlerManager() { return handlerManager; } @Override public void fireEvent(GwtEvent<?> event) { ensureHandlers().fireEvent(event); } /** * Creates the {@link HandlerManager} used by this Widget. You can override * this method to create a custom {@link HandlerManager}. * * @return the {@link HandlerManager} you want to use */ protected HandlerManager createHandlerManager() { return new HandlerManager(this); } @Override public String getText() { return text; } public boolean isAsHtml() { return html; } public void setText(String aText, boolean asHtml) { text = aText; html = asHtml; regenerate(); } @Override public void setText(String text) { setText(text, false); } @Override public void setHTML(String html) { setText(text, true); } public SafeUri getImageUri() { return imageUri; } public void setImageUri(SafeUri aValue) { imageUri = aValue; regenerate(); } protected void regenerate() { String ltext = text != null ? text : ""; SafeHtml generated = MenuItemTemplates.INSTANCE.imageText(imageUri != null ? imageUri.asString() : "", html ? SafeHtmlUtils.fromTrustedString(ltext) : SafeHtmlUtils.fromString(ltext)); getElement().setInnerSafeHtml(generated); leftMark = getElement().getFirstChildElement().getFirstChildElement(); field = (Element) getElement().getFirstChildElement().getLastChild(); } }