/* * Copyright (c) 2004 Christopher Lenz and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Christopher Lenz - initial API and implementation * * $Id: XMLOutlinePage.java,v 1.3 2006-10-21 23:14:14 pombredanne Exp $ */ package net.sourceforge.phpeclipse.xml.ui.internal.outline; import java.util.List; import net.sourceforge.phpeclipse.core.model.ISourceReference; import net.sourceforge.phpeclipse.ui.views.outline.ProblemsLabelDecorator; import net.sourceforge.phpeclipse.xml.core.model.IXMLDocument; import net.sourceforge.phpeclipse.xml.ui.internal.editor.XMLDocumentProvider; import net.sourceforge.phpeclipse.xml.ui.internal.editor.XMLEditor; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.views.contentoutline.ContentOutlinePage; /** * Implements the outline page associated with the XML editor. */ public class XMLOutlinePage extends ContentOutlinePage { // Instance Variables ------------------------------------------------------ /** * The associated editor. */ private XMLEditor editor; // Constructors ------------------------------------------------------------ /** * Constructor. * * @param editor * The associated text editor */ public XMLOutlinePage(XMLEditor editor) { this.editor = editor; } // ContentOutlinePage Implementation --------------------------------------- /* * @see org.eclipse.ui.part.IPage#createControl(Composite) */ public void createControl(Composite parent) { super.createControl(parent); TreeViewer viewer = getTreeViewer(); viewer.setContentProvider(new XMLOutlineContentProvider()); viewer.setLabelProvider(new DecoratingLabelProvider( new XMLOutlineLabelProvider(), new ProblemsLabelDecorator( editor))); viewer.setInput(getDocument()); } // Public Methods ---------------------------------------------------------- /** * Selects a specific element in the outline page. * * @param element * the element to select */ public void select(ISourceReference element) { TreeViewer viewer = getTreeViewer(); if (viewer != null) { ISelection selection = viewer.getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; List elements = structuredSelection.toList(); if (!elements.contains(element)) { if (element == null) { selection = StructuredSelection.EMPTY; } else { selection = new StructuredSelection(element); } viewer.setSelection(selection, true); } } } } /** * Updates the outline page. */ public void update() { IXMLDocument document = getDocument(); if (document != null) { TreeViewer viewer = getTreeViewer(); if (viewer != null) { Control control = viewer.getControl(); if ((control != null) && !control.isDisposed()) { control.setRedraw(false); viewer.setInput(document); viewer.expandAll(); control.setRedraw(true); } } } } // Private Methods --------------------------------------------------------- /** * Returns the parsed model of the XML document that is loaded into the * associated editor. * * @return the parsed XML document */ private IXMLDocument getDocument() { IDocumentProvider provider = editor.getDocumentProvider(); if (provider instanceof XMLDocumentProvider) { XMLDocumentProvider xmlProvider = (XMLDocumentProvider) provider; return xmlProvider.getModel(editor.getEditorInput()); } return null; } }