diff options
Diffstat (limited to 'lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/tabsview/TmfViewerFolder.java')
-rw-r--r-- | lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/tabsview/TmfViewerFolder.java | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/tabsview/TmfViewerFolder.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/tabsview/TmfViewerFolder.java new file mode 100644 index 0000000000..2b6e2b8fe5 --- /dev/null +++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/widgets/tabsview/TmfViewerFolder.java @@ -0,0 +1,198 @@ +/******************************************************************************* + * Copyright (c) 2012 Ericsson + * + * 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: + * Mathieu Denis <mathieu.denis@polymtl.ca> - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.linuxtools.tmf.ui.widgets.tabsview; + +import java.util.Collection; +import java.util.HashMap; + +import org.eclipse.linuxtools.tmf.ui.viewers.ITmfViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; +import org.eclipse.swt.custom.CTabFolder; +import org.eclipse.swt.custom.CTabItem; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Composite; + +/** + * Allows the user to create multiple tabs which makes it look like folders. It + * simplifies the management of the viewer contained in each tab. + * + * The indexing of the viewers is based on their name. + * + * @author Mathieu Denis + * @version 2.0 + * @since 2.0 + */ +public class TmfViewerFolder extends Composite { + + /** + * The list of viewers in the folder + */ + private final HashMap<String, ITmfViewer> fViewers; + + /** + * The parent folder that contains all viewers + */ + private CTabFolder fFolder; + + /** + * Constructor with empty style + * + * @param parent + * The parent composite + */ + public TmfViewerFolder(Composite parent) { + this(parent, SWT.NONE); + } + + /** + * Constructor + * + * @param parent + * The parent composite + * @param style + * The style of the view that will be created + */ + public TmfViewerFolder(Composite parent, int style) { + super(parent, style); + setLayout(new FillLayout()); + + fViewers = new HashMap<String, ITmfViewer>(); + initFolder(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.swt.widgets.Widget#dispose() + */ + @Override + public void dispose() { + super.dispose(); + for (ITmfViewer viewer : fViewers.values()) { + viewer.dispose(); + } + if (fFolder != null) { + fFolder.dispose(); + } + } + + /** + * Disposes of all the viewers contained in the folder and restart to a + * clean state. + */ + public void clear() { + for (ITmfViewer viewer : fViewers.values()) { + viewer.dispose(); + } + fViewers.clear(); + fFolder.dispose(); + initFolder(); + } + + /** + * Create a new tab that will hold the viewer content. The viewer name will + * be used as the name for the tab. The viewer ID must be unique and can be + * used to retrieve the viewer from the folder. + * + * The parent of the viewer control must be the folder returned by + * {@link #getParentFolder()} + * + * @param viewer + * The viewer to put in the new tab + * @param viewerID + * The ID that will be assigned to this viewer for easy + * retrieving + * @param style + * The style of the widget to build + * @return true on success, false otherwise + */ + public boolean addTab(ITmfViewer viewer, String viewerID, int style) { + if (fFolder == null + || viewer.getControl().getParent() != fFolder + || fViewers.containsKey(viewerID)) { + return false; + } + CTabItem item = new CTabItem(fFolder, style); + item.setText(viewer.getName()); + item.setControl(viewer.getControl()); + // Register the viewer in the map to dispose it at closing time + fViewers.put(viewerID, viewer); + return true; + } + + /** + * Gets the folder that will be use as the parent of tabs that will hold the + * viewer. + * + * In order to be able to add new tabs in this view, the parent of the + * viewer control has to be this composite. + * + * @return the folder composite to use as the parent for the viewer control + * to create. + */ + public Composite getParentFolder() { + return fFolder; + } + + /** + * Gets a viewer based on his name. + * + * @param viewerName + * The name of the viewer to find in the folder + * @return The viewer which name is viewerName, or null if there is no such + * viewer + */ + public ITmfViewer getViewer(String viewerName) { + return fViewers.get(viewerName); + } + + /** + * Gets the viewers list contained in the folder view. The list can return + * the viewers in any order. It is not to be assumed that the viewers are + * returned in the same order as they were inserted. + * + * @return a collection of viewers contained in this view. + */ + public Collection<ITmfViewer> getViewers() { + return fViewers.values(); + } + + /** + * Selects the tab at the specified index from the insertion order + * + * @param index + * The index of the tab to be selected + * @throws SWTException + * <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed + * </li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the + * thread that created the receiver</li> + * </ul> + */ + public void setSelection(int index) throws SWTException { + fFolder.setSelection(index); + } + + /** + * Initializes the folder or put it a back to a clean state. + */ + private void initFolder() { + if (fFolder != null) { + fFolder.dispose(); + } + fFolder = new CTabFolder(this, SWT.LEFT | SWT.BORDER); + fFolder.setSimple(false); + } +} |