package com.constellio.app.ui.framework.buttons; import com.vaadin.server.Extension; import com.vaadin.server.Resource; import com.vaadin.ui.Button; import com.vaadin.ui.themes.ValoTheme; @SuppressWarnings("serial") public abstract class BaseButton extends Button { private String textCaption; private int badgeCount; private boolean badgeVisible = false; private boolean badgeVisibleWhenZero = true; public BaseButton(String caption) { this(caption, null); } public BaseButton(String caption, Resource icon) { this(caption, icon, false); } public BaseButton(String caption, Resource icon, boolean iconOnly) { setCaptionAsHtml(true); setCaption(caption); setIcon(icon); if (iconOnly) { addStyleName(ValoTheme.BUTTON_ICON_ONLY); } addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { BaseButton.this.buttonClick(event); } }); } public int getBadgeCount() { return badgeCount; } public void setBadgeCount(int badgeCount) { this.badgeCount = badgeCount; adjustCaption(); } public boolean isBadgeVisible() { return badgeVisible; } public void setBadgeVisible(boolean badgeVisible) { this.badgeVisible = badgeVisible; adjustCaption(); } public boolean isBadgeVisibleWhenZero() { return badgeVisibleWhenZero; } public void setBadgeVisibleWhenZero(boolean badgeVisibleWhenZero) { this.badgeVisibleWhenZero = badgeVisibleWhenZero; adjustCaption(); } private void adjustCaption() { if (badgeVisible && (badgeCount > 0 || badgeVisibleWhenZero)) { super.setCaption("<span class=\"button-badge\" data-badge=\"" + badgeCount + "\">" + textCaption + "</span>"); } else { super.setCaption(textCaption); } } @Override public void setCaption(String caption) { super.setCaption(caption); this.textCaption = caption; adjustCaption(); } @Override public void addExtension(Extension extension) { super.addExtension(extension); } protected abstract void buttonClick(ClickEvent event); }