blob: 976319e2526c27d8ed771a7ae72c0a46d60a892d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 The University of York.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Louis Rose - initial API and implementation
******************************************************************************/
package org.eclipse.epsilon.egl.dt.traceability.editor;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.common.ui.viewer.IViewerProvider;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.IEditorPart;
public class TabbedEditor<T extends IEditorPart> extends Composite {
private final CTabFolder folder;
private final List<T> innerEditors;
public TabbedEditor(Composite parent, Collection<T> innerEditors) {
super(parent, SWT.NONE);
this.innerEditors = new LinkedList<T>(innerEditors);
this.setLayout(new FillLayout());
folder = createFolder();
populateFolderWithEditors(innerEditors);
if (innerEditors.size() > 0) switchTo(innerEditors.iterator().next());
}
private CTabFolder createFolder(String... tabItemNames) {
final CTabFolder folder = new CTabFolder(this, SWT.BORDER);
final ToolBar t = new ToolBar(folder, SWT.HORIZONTAL | SWT.FLAT);
final ToolBarManager tbm = new ToolBarManager(t);
tbm.update(true);
folder.setTabPosition(SWT.BOTTOM);
folder.setSimple(true);
t.setVisible(true);
folder.addSelectionListener(new SelectionListener(){
public void widgetDefaultSelected(SelectionEvent e) {}
public void widgetSelected(SelectionEvent e) {
if (e.item != null && e.item instanceof CTabItem) {
((CTabItem) e.item).getControl().setFocus();
}
}
});
return folder;
}
private void populateFolderWithEditors(Collection<T> innerEditors) {
for (T innerEditor : innerEditors) {
populateFolderWithEditor(innerEditor);
}
}
private void populateFolderWithEditor(final T innerEditor) {
final CTabItem item = new CTabItem(folder, SWT.NONE);
item.setText(innerEditor.getEditorInput().getName());
Composite content = new Composite(folder, SWT.NONE);
content.setLayout(new FillLayout());
innerEditor.createPartControl(content);
item.setControl(content);
// parent.addListener(SWT.Activate, new Listener() {
// public void handleEvent(Event event) {
// if (event.type == SWT.Activate) {
// activateEditor(innerEditor);
// }
// }
// });
}
public void addMouseListenerToEditors(MouseListener listener) {
for (T innerEditor : innerEditors) {
if (innerEditor instanceof IViewerProvider) {
((IViewerProvider) innerEditor).getViewer().getControl().addMouseListener(listener);
}
}
}
public T getActiveEditor() {
return innerEditors.get(folder.getSelectionIndex());
}
public void switchTo(T innerEditor) {
if (indexOf(innerEditor) >= 0) {
folder.setSelection(indexOf(innerEditor));
}
}
private int indexOf(T innerEditor) {
return innerEditors.indexOf(innerEditor);
}
}