package tern.eclipse.ide.ui.views.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.ui.navigator.CommonViewer;
import tern.angular.modules.IAngularElement;
import tern.eclipse.ide.ui.ImageResource;
import tern.eclipse.ide.ui.views.AbstractTernContentOutlinePage;
public abstract class AbstractLexicalSortingAction extends Action {
private static final String LEXICAL_SORTING_PREF_NAME = "LexicalSortingAction.isChecked";
private final AbstractTernContentOutlinePage page;
private ViewerSorter sorter;
public AbstractLexicalSortingAction(AbstractTernContentOutlinePage page, String text, String tooltipText,
String description, ViewerSorter sorter) {
super(text, SWT.TOGGLE);
this.page = page;
this.sorter = sorter;
super.setToolTipText(tooltipText);
super.setDescription(description);
super.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_SORT));
boolean checked = getPreferenceStore().getBoolean(LEXICAL_SORTING_PREF_NAME);
valueChanged(checked, false);
}
protected abstract IPreferenceStore getPreferenceStore();
@Override
public void run() {
valueChanged(isChecked(), true);
}
private void valueChanged(final boolean on, boolean store) {
setChecked(on);
final CommonViewer viewer = page.getViewer();
BusyIndicator.showWhile(viewer.getControl().getDisplay(), new Runnable() {
@Override
public void run() {
if (on) {
viewer.setSorter(sorter);
} else {
viewer.setSorter(null);
}
}
});
if (store) {
getPreferenceStore().setValue(LEXICAL_SORTING_PREF_NAME, on);
}
}
}