blob: 4e3adada4d80ee4943ebb2999908b79912e296b5 [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.wikitext.r.ui.sourceediting;
import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceElement;
import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
import org.eclipse.statet.internal.redocs.wikitext.r.core.model.WikitextRChunkElement;
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;
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 WikitextRChunkElement) {
return ((ISourceStructElement) element).getSourceParent();
}
return parent;
}
@Override
public boolean hasChildren(final Object element) {
final ISourceStructElement e= (ISourceStructElement) element;
if (e.getModelTypeId() == WikitextModel.WIKIDOC_TYPE_ID
&& e.getElementType() == IWikitextSourceElement.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() == WikitextModel.WIKIDOC_TYPE_ID
&& e.getElementType() == IWikitextSourceElement.C1_EMBEDDED) {
final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
return foreignElement.getSourceChildren(getContent().getContentFilter()).toArray();
}
}
return super.getChildren(parentElement);
}
}