/*******************************************************************************
* Copyright (c) 2010 Neil Bartlett.
* 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:
* Neil Bartlett - initial API and implementation
******************************************************************************/
package bndtools.editor;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import aQute.bnd.build.model.BndEditModel;
import aQute.bnd.build.model.clauses.ExportedPackage;
import aQute.bnd.build.model.clauses.ImportPattern;
import bndtools.editor.pages.BundleContentPage;
import bndtools.editor.pages.WorkspacePage;
public class BndEditorContentOutlinePage extends ContentOutlinePage {
private final BndEditModel model;
private final BndEditor editor;
public BndEditorContentOutlinePage(BndEditor editor, BndEditModel model) {
this.editor = editor;
this.model = model;
}
@Override
public void createControl(Composite parent) {
super.createControl(parent);
TreeViewer viewer = getTreeViewer();
viewer.setAutoExpandLevel(2);
viewer.setContentProvider(new BndEditorContentOutlineProvider(viewer));
viewer.setLabelProvider(new BndEditorContentOutlineLabelProvider());
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
Object element = selection.getFirstElement();
if (element instanceof String) {
if (BndEditorContentOutlineProvider.EXPORTS.equals(element)) {
editor.setActivePage(BndEditor.CONTENT_PAGE);
} else if (BndEditorContentOutlineProvider.IMPORT_PATTERNS.equals(element)) {
editor.setActivePage(BndEditor.CONTENT_PAGE);
} else if (BndEditorContentOutlineProvider.PRIVATE_PKGS.equals(element)) {
editor.setActivePage(BndEditor.CONTENT_PAGE);
} else if (BndEditorContentOutlineProvider.PLUGINS.equals(element)) {
editor.setActivePage(BndEditor.WORKSPACE_PAGE);
} else {
editor.setActivePage((String) element);
}
} else if (element instanceof ExportedPackage) {
BundleContentPage contentsPage = (BundleContentPage) editor.setActivePage(BndEditor.CONTENT_PAGE);
if (contentsPage != null) {
contentsPage.setSelectedExport((ExportedPackage) element);
}
} else if (element instanceof PrivatePkg) {
BundleContentPage contentsPage = (BundleContentPage) editor.setActivePage(BndEditor.CONTENT_PAGE);
if (contentsPage != null) {
contentsPage.setSelectedPrivatePkg(((PrivatePkg) element).pkg);
}
} else if (element instanceof ImportPattern) {
BundleContentPage contentsPage = (BundleContentPage) editor.setActivePage(BndEditor.CONTENT_PAGE);
if (contentsPage != null) {
contentsPage.setSelectedImport((ImportPattern) element);
}
} else if (element instanceof PluginClause) {
WorkspacePage workspacePage = (WorkspacePage) editor.setActivePage(BndEditor.WORKSPACE_PAGE);
if (workspacePage != null)
workspacePage.setSelectedPlugin(((PluginClause) element).header);
}
}
});
viewer.setInput(model);
}
}