/** * <copyright> * </copyright> * * */ package org.dresdenocl.language.ocl.resource.ocl.ui; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; public abstract class AbstractOclOutlinePageAction extends Action { private String preferenceKey = this.getClass().getSimpleName() + ".isChecked"; private org.dresdenocl.language.ocl.resource.ocl.ui.OclOutlinePageTreeViewer treeViewer; public AbstractOclOutlinePageAction(org.dresdenocl.language.ocl.resource.ocl.ui.OclOutlinePageTreeViewer treeViewer, String text, int style) { super(text, style); this.treeViewer = treeViewer; } public void initialize(String imagePath) { ImageDescriptor descriptor = org.dresdenocl.language.ocl.resource.ocl.ui.OclImageProvider.INSTANCE.getImageDescriptor(imagePath); setDisabledImageDescriptor(descriptor); setImageDescriptor(descriptor); setHoverImageDescriptor(descriptor); boolean checked = org.dresdenocl.language.ocl.resource.ocl.ui.OclUIPlugin.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) { BusyIndicator.showWhile(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) { org.dresdenocl.language.ocl.resource.ocl.ui.OclUIPlugin.getDefault().getPreferenceStore().setValue(preferenceKey, on); } } public boolean keepState() { return true; } public org.dresdenocl.language.ocl.resource.ocl.ui.OclOutlinePageTreeViewer getTreeViewer() { return treeViewer; } public org.dresdenocl.language.ocl.resource.ocl.ui.OclOutlinePageTreeViewerComparator getTreeViewerComparator() { return (org.dresdenocl.language.ocl.resource.ocl.ui.OclOutlinePageTreeViewerComparator) treeViewer.getComparator(); } }