/******************************************************************************* * Copyright (c) 2009 Johannes Utzig. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Johannes Utzig - initial API and implementation *******************************************************************************/ package org.eclipse.buckminster.ui.dependency.visualizer.controls; import java.util.ArrayList; import java.util.List; import org.eclipse.buckminster.ui.dependency.visualizer.Messages; import org.eclipse.buckminster.ui.dependency.visualizer.controls.listener.ViewerSettingChangeEvent; import org.eclipse.buckminster.ui.dependency.visualizer.controls.listener.ViewerSettingType; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.provider.IRelationshipProvider; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.provider.internal.AllPathsToRootRelationshipProvider; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.provider.internal.CompositeRelationshipProvider; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.provider.internal.DirectRelationshipProvider; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.provider.internal.ShortestPathToRootRelationshipProvider; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.provider.internal.UsageRelationshipProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.forms.widgets.FormToolkit; /** * this control allows the user to change what kinds of paths should be * highlighted on selection in the viewer * * @author Johannes Utzig * */ public class HighlightPathControl extends AbstractViewerSettingControl implements SelectionListener { private Button dependencies; private Button usage; private IRelationshipProvider relationshipProvider; private Button shortestPath; private Button allPaths; private Button noPath; public HighlightPathControl(FormToolkit toolkit) { super(toolkit); } @Override public Control createControl(Composite parent) { parent = getWidgetToolkit().createComposite(parent); parent.setLayout(new GridLayout(1, true)); dependencies = getWidgetToolkit().createButton(parent, Messages.Dependencies, SWT.CHECK); dependencies.setSelection(true); dependencies.addSelectionListener(this); usage = getWidgetToolkit().createButton(parent, Messages.Usage, SWT.CHECK); usage.setSelection(true); usage.addSelectionListener(this); Group pathToRootDetails = new Group(parent, SWT.SHADOW_ETCHED_IN); getWidgetToolkit().adapt(pathToRootDetails); pathToRootDetails.setText(Messages.PathToRoot); pathToRootDetails.setLayout(new GridLayout(1, false)); GridDataFactory.fillDefaults().applyTo(pathToRootDetails); shortestPath = getWidgetToolkit().createButton(pathToRootDetails, Messages.Shortest, SWT.RADIO); shortestPath.setSelection(false); shortestPath.addSelectionListener(this); allPaths = getWidgetToolkit().createButton(pathToRootDetails, Messages.All, SWT.RADIO); allPaths.setSelection(true); allPaths.addSelectionListener(this); noPath = getWidgetToolkit().createButton(pathToRootDetails, Messages.None, SWT.RADIO); noPath.setSelection(false); noPath.addSelectionListener(this); // inform about default config widgetSelected(null); return parent; } @Override public void widgetDefaultSelected(SelectionEvent e) { // nothing to do } @Override public void widgetSelected(SelectionEvent e) { IRelationshipProvider provider = createRelationshipProvider(); fireViewerSettingsChangedEvent(new ViewerSettingChangeEvent(this, ViewerSettingType.PATH_HIGHLIGHTING, provider, relationshipProvider)); relationshipProvider = provider; } private IRelationshipProvider createRelationshipProvider() { List<IRelationshipProvider> provider = new ArrayList<IRelationshipProvider>(); if (dependencies.getSelection()) provider.add(new DirectRelationshipProvider()); if (usage.getSelection()) provider.add(new UsageRelationshipProvider()); if (shortestPath.getSelection()) { provider.add(new ShortestPathToRootRelationshipProvider()); } else if (allPaths.getSelection()) { provider.add(new AllPathsToRootRelationshipProvider()); } return new CompositeRelationshipProvider(provider.toArray(new IRelationshipProvider[provider.size()])); } }