/******************************************************************************* * Copyright (c) 2001, 2016 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation * Obeo - Contribution to the EEF project *******************************************************************************/ package org.eclipse.eef.properties.ui.internal.page; import java.util.ArrayList; import java.util.List; import org.eclipse.eef.properties.ui.api.IEEFTabDescriptor; import org.eclipse.eef.properties.ui.internal.EEFTabbedPropertyViewPlugin; import org.eclipse.eef.properties.ui.internal.page.propertylist.EEFTabbedPropertyList; import org.eclipse.jface.util.OpenStrategy; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; /** * Viewer representing the property sheet page. On the left side it contains a list of tabs and on the right side it * contains the current selected tab. * * @author Anthony Hunter * @author Stephane Begaudeau */ public class EEFTabbedPropertyViewer { /** * Interface used to listen to changes to the currently selected tab. * * @author sbegaudeau */ public interface IEEFTabDescriptorChangedListener { /** * React to a selection change event. * * @param descriptor * The descriptor selected */ void selectionChanged(IEEFTabDescriptor descriptor); } /** * The elements displayed in the viewer. */ private List<IEEFTabDescriptor> elements = new ArrayList<IEEFTabDescriptor>(); /** * The listeners. */ private List<IEEFTabDescriptorChangedListener> listeners = new ArrayList<EEFTabbedPropertyViewer.IEEFTabDescriptorChangedListener>(); /** * The tabbed property list. */ private EEFTabbedPropertyList list; /** * The constructor. * * @param tabbedPropertyList * The tabbed property list */ public EEFTabbedPropertyViewer(EEFTabbedPropertyList tabbedPropertyList) { this.list = tabbedPropertyList; OpenStrategy handler = new OpenStrategy(this.list); handler.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { int index = EEFTabbedPropertyViewer.this.list.getSelectionIndex(); IEEFTabDescriptor descriptor = EEFTabbedPropertyViewer.this.getTabDescriptionAtIndex(index); EEFTabbedPropertyViewer.this.fireSelectionChanged(descriptor); } @Override public void widgetDefaultSelected(SelectionEvent e) { // do nothing } }); } /** * Fires a selection changed event. * * @param descriptor * The newly selected {@link IEEFTabDescriptor} */ private void fireSelectionChanged(IEEFTabDescriptor descriptor) { for (IEEFTabDescriptorChangedListener listener : this.listeners) { listener.selectionChanged(descriptor); } } /** * Adds a selection listener. * * @param listener * The listener */ public void addSelectionListener(IEEFTabDescriptorChangedListener listener) { this.listeners.add(listener); } /** * Set the input for viewer. * * @param descriptors * The tab descriptors */ public void setInput(List<IEEFTabDescriptor> descriptors) { EEFTabbedPropertyViewPlugin.getPlugin().debug("EEFTabbedPropertyViewer#setInput()"); //$NON-NLS-1$ this.elements.clear(); list.removeAll(); for (IEEFTabDescriptor descriptor : descriptors) { this.elements.add(descriptor); } list.setElements(descriptors.toArray()); } /** * Return the elements. * * @return the elements */ public List<IEEFTabDescriptor> getElements() { return this.elements; } /** * Returns the zero-relative index of the item which is currently selected in the receiver, or -1 if no item is * selected. * * @return the index of the selected item */ public int getSelectionIndex() { return list.getSelectionIndex(); } /** * Returns the element at the given index. * * @param index * The index * @return The element at the give index */ public IEEFTabDescriptor getTabDescriptionAtIndex(int index) { if (index >= 0 && index < this.elements.size()) { return this.elements.get(index); } return null; } /** * Sets the tab descriptor to select. * * @param descriptor * The descriptor */ public void setSelectedTabDescriptor(IEEFTabDescriptor descriptor) { if (descriptor == null) { this.list.deselectAll(); } else { int index = -1; for (int i = 0; i < this.elements.size(); i++) { if (this.elements.get(i) == descriptor) { index = i; } } this.list.select(index); } } }