blob: bdd5c545d1fce706808e51ef98e68d6de1faec3b [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2021 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.r.ui.pager;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.ecommons.text.core.util.ImmutableDocument;
import org.eclipse.statet.internal.r.ui.RUIPlugin;
import org.eclipse.statet.internal.r.ui.pager.RPagerEditorInput.TextFile;
import org.eclipse.statet.ltk.core.input.BasicSourceFragment;
import org.eclipse.statet.ltk.ui.input.BasicSourceFragmentEditorInput;
import org.eclipse.statet.r.ui.RUI;
@NonNullByDefault
public class RPagerEditor extends MultiPageEditorPart {
public RPagerEditor() {
}
@Override
protected Image getDefaultImage() {
return RUI.getImage(RUIPlugin.PAGER_VIEW_IMAGE_ID);
}
@Override
protected void setInputWithNotify(final IEditorInput input) {
super.setInput(input);
setPartName(input.getName());
if (getContainer() != null) {
updatePages();
}
firePropertyChange(IEditorPart.PROP_INPUT);
}
@Override
protected void setInput(final IEditorInput input) {
setInputWithNotify(input);
}
protected void updatePages() {
while (true) {
final int pageCount= getPageCount();
if (pageCount == 0) {
break;
}
removePage(pageCount - 1);
}
final IEditorInput editorInput= getEditorInput();
if (editorInput instanceof RPagerEditorInput) {
final var pagerInput= (RPagerEditorInput)editorInput;
final ImList<TextFile> files= pagerInput.getFiles();
int id= 0;
for (final var textFile : files) {
try {
final var sourceFragment= new BasicSourceFragment("RPagerFile#" + id++,
textFile.getName(), textFile.getName(),
new ImmutableDocument(textFile.getContent(), 0) );
final TextFileEditorPage page= new TextFileEditorPage();
addPage(page, new BasicSourceFragmentEditorInput(sourceFragment));
}
catch (final Exception e) {
RUIPlugin.logError(String.format("An error occurred when creating R Pager editor page for '%1$s'.",
textFile.getName() ),
e );
}
}
}
}
@Override
protected void createPages() {
updatePages();
}
@Override
public void addPage(final int index, final IEditorPart editor, final IEditorInput input)
throws PartInitException {
super.addPage(index, editor, input);
setPageText(index, input.getName());
}
@Override
public boolean isSaveAsAllowed() {
final int pageIndex= getActivePage();
if (pageIndex >= 0) {
final IEditorPart editor= getEditor(pageIndex);
if (editor != null) {
return true;
}
}
return false;
}
@Override
public void doSave(final IProgressMonitor monitor) {
}
@Override
public void doSaveAs() {
final int pageIndex= getActivePage();
if (pageIndex >= 0) {
final IEditorPart editor= getEditor(pageIndex);
if (editor != null) {
editor.doSaveAs();
return;
}
}
}
}