blob: 651e45424c27a1c8272c70b0afe80b01ec7dc693 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2014, 2019 Stephan Wahlbrink and others.
#
# 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, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.internal.redocs.tex.r.ui.sourceediting;
import org.eclipse.statet.docmlet.tex.core.model.ITexSourceElement;
import org.eclipse.statet.docmlet.tex.core.model.TexModel;
import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
import org.eclipse.statet.redocs.r.core.model.RedocsRChunkElement;
public class DocROutlineContentProvider extends OutlineContentProvider {
public DocROutlineContentProvider(final IOutlineContent content) {
super(content);
}
@Override
public Object getParent(final Object element) {
final Object parent= super.getParent(element);
if (parent instanceof RedocsRChunkElement) {
return ((ISourceStructElement) element).getSourceParent();
}
return parent;
}
@Override
public boolean hasChildren(final Object element) {
final ISourceStructElement e= (ISourceStructElement) element;
if (e.getModelTypeId() == TexModel.LTX_TYPE_ID
&& e.getElementType() == ITexSourceElement.C1_EMBEDDED) {
final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
return (foreignElement != null
&& foreignElement.hasSourceChildren(getContent().getContentFilter()) );
}
return super.hasChildren(element);
}
@Override
public Object[] getChildren(final Object parentElement) {
if (parentElement instanceof ISourceStructElement) {
final ISourceStructElement e= (ISourceStructElement) parentElement;
if (e.getModelTypeId() == TexModel.LTX_TYPE_ID
&& e.getElementType() == ITexSourceElement.C1_EMBEDDED) {
final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
return foreignElement.getSourceChildren(getContent().getContentFilter()).toArray();
}
}
return super.getChildren(parentElement);
}
}