package org.erlide.ui.editors.erl.outline; import java.util.List; import java.util.Set; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.navigator.CommonNavigator; import org.eclipse.ui.views.contentoutline.ContentOutline; import org.erlide.ui.editors.erl.outline.filters.CustomOutlineFiltersDialog; import org.erlide.ui.editors.erl.outline.filters.OutlineFilterUtils; import org.erlide.ui.editors.erl.outline.filters.PatternFilter; import com.google.common.collect.Lists; import com.google.common.collect.Sets; public class ShowCustomOutlineFiltersDialogHandler extends AbstractHandler { public ShowCustomOutlineFiltersDialogHandler() { super(); } @Override public Object execute(final ExecutionEvent event) throws ExecutionException { final Object activePart = HandlerUtil.getVariable(event, "activePart"); final String targetId; final Shell shell; PatternFilter patternFilter; StructuredViewer viewer; if (activePart instanceof ContentOutline) { final ContentOutline outline = (ContentOutline) activePart; final ErlangOutlinePage erlangOutlinePage = (ErlangOutlinePage) outline .getAdapter(ErlangOutlinePage.class); shell = outline.getSite().getShell(); targetId = "org.eclipse.ui.views.ContentOutline"; patternFilter = erlangOutlinePage.getPatternFilter(); viewer = erlangOutlinePage.getTreeViewer(); } else if (activePart instanceof CommonNavigator) { final CommonNavigator commonNavigator = (CommonNavigator) activePart; targetId = "commonNavigator"; shell = commonNavigator.getSite().getShell(); patternFilter = null; viewer = null; } else { return null; } List<String> oldUserDefinedPatterns = Lists.newArrayList(); final Set<String> oldEnabledFilterIDs = Sets.newHashSet(); final boolean oldAreUserDefinedPatternsEnabled = OutlineFilterUtils .loadViewDefaults(oldUserDefinedPatterns, oldEnabledFilterIDs); final CustomOutlineFiltersDialog dialog = new CustomOutlineFiltersDialog(shell, targetId, oldAreUserDefinedPatternsEnabled, oldUserDefinedPatterns, oldEnabledFilterIDs); if (!oldAreUserDefinedPatternsEnabled) { oldUserDefinedPatterns = Lists.newArrayList(); } if (dialog.open() == Window.OK) { final boolean areUserDefinedPatternsEnabled = dialog .areUserDefinedPatternsEnabled(); List<String> userDefinedPatterns = dialog.getUserDefinedPatterns(); final Set<String> enabledFilterIDs = dialog.getEnabledFilterIds(); // TODO should we support filter LRU history (as in JDT)? // setRecentlyChangedFilters(dialog.getFilterDescriptorChangeHistory()); OutlineFilterUtils.storeViewDefaults(areUserDefinedPatternsEnabled, userDefinedPatterns, enabledFilterIDs); if (!areUserDefinedPatternsEnabled) { userDefinedPatterns = Lists.newArrayList(); } OutlineFilterUtils.updateViewerFilters(viewer, oldUserDefinedPatterns, oldEnabledFilterIDs, userDefinedPatterns, enabledFilterIDs, patternFilter); } return null; } }