package org.rstudio.core.client.widget;
import org.rstudio.core.client.command.AppCommand;
import org.rstudio.core.client.resources.ImageResource2x;
import org.rstudio.core.client.theme.res.ThemeResources;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.user.client.ui.MenuItem;
// A menu item that can be checked or unchecked--appears similarly to a
// checkable AppCommand but isn't backed by an AppCommand.
public abstract class CheckableMenuItem extends MenuItem
{
public CheckableMenuItem()
{
this("");
}
public CheckableMenuItem(String label)
{
super(label, false, (Scheduler.ScheduledCommand)null);
setHTML(getHTMLContent());
setScheduledCommand(new ScheduledCommand()
{
@Override
public void execute()
{
onInvoked();
}
});
}
public void onStateChanged()
{
setHTML(getHTMLContent());
}
public abstract String getLabel();
public abstract boolean isChecked();
public abstract void onInvoked();
private String getHTMLContent()
{
return AppCommand.formatMenuLabel(
isChecked() ?
new ImageResource2x(ThemeResources.INSTANCE.menuCheck2x()) :
null,
getLabel(), "");
}
}