/** * <copyright> * </copyright> * * */ package robot.resource.robot.ui; public abstract class AbstractRobotOutlinePageAction extends org.eclipse.jface.action.Action { private String preferenceKey = this.getClass().getSimpleName() + ".isChecked"; private robot.resource.robot.ui.RobotOutlinePageTreeViewer treeViewer; public AbstractRobotOutlinePageAction(robot.resource.robot.ui.RobotOutlinePageTreeViewer treeViewer, String text, int style) { super(text, style); this.treeViewer = treeViewer; } public void initialize(String imagePath) { org.eclipse.jface.resource.ImageDescriptor descriptor = robot.resource.robot.ui.RobotImageProvider.INSTANCE.getImageDescriptor(imagePath); setDisabledImageDescriptor(descriptor); setImageDescriptor(descriptor); setHoverImageDescriptor(descriptor); boolean checked = robot.resource.robot.ui.RobotUIPlugin.getDefault().getPreferenceStore().getBoolean(preferenceKey); valueChanged(checked, false); } @Override public void run() { if (keepState()) { valueChanged(isChecked(), true); } else { runBusy(true); } } public void runBusy(final boolean on) { org.eclipse.swt.custom.BusyIndicator.showWhile(org.eclipse.swt.widgets.Display.getCurrent(), new Runnable() { public void run() { runInternal(on); } }); } public abstract void runInternal(boolean on); private void valueChanged(boolean on, boolean store) { setChecked(on); runBusy(on); if (store) { robot.resource.robot.ui.RobotUIPlugin.getDefault().getPreferenceStore().setValue(preferenceKey, on); } } public boolean keepState() { return true; } public robot.resource.robot.ui.RobotOutlinePageTreeViewer getTreeViewer() { return treeViewer; } public robot.resource.robot.ui.RobotOutlinePageTreeViewerComparator getTreeViewerComparator() { return (robot.resource.robot.ui.RobotOutlinePageTreeViewerComparator) treeViewer.getComparator(); } }