/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.views.documentation;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotFormEditor;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.cases.CasesEditorPart;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.keywords.KeywordsEditorPart;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.source.SuiteSourceEditor;
class DocumentationViewPartListener implements IPartListener, IPageChangedListener {
private final SourceDocumentationSelectionChangedListener sourceDocSelectionChangedListener;
private final TableDocumentationSelectionChangedListener tableDocSelectionChangedListener;
private IEditorPart currentlyActiveEditor;
DocumentationViewPartListener(final DocumentationView view) {
this.sourceDocSelectionChangedListener = new SourceDocumentationSelectionChangedListener(view);
this.tableDocSelectionChangedListener = new TableDocumentationSelectionChangedListener(view);
}
@Override
public void partActivated(final IWorkbenchPart part) {
if (part.getSite().getId().equals(RobotFormEditor.ID)) {
final RobotFormEditor editor = (RobotFormEditor) part;
editor.addPageChangedListener(this);
addDocSelectionChangedListenerToActiveEditor(editor.getActiveEditor());
}
}
@Override
public void partDeactivated(final IWorkbenchPart part) {
if (part.getSite().getId().equals(RobotFormEditor.ID)) {
final RobotFormEditor editor = (RobotFormEditor) part;
editor.removePageChangedListener(this);
currentlyActiveEditor = null;
removeDocSelectionChangedListenerFromActiveEditor(editor.getActiveEditor());
}
}
@Override
public void partOpened(final IWorkbenchPart part) {
}
@Override
public void partClosed(final IWorkbenchPart part) {
}
@Override
public void partBroughtToTop(final IWorkbenchPart part) {
}
@Override
public void pageChanged(final PageChangedEvent event) {
if (currentlyActiveEditor != null) {
removeDocSelectionChangedListenerFromActiveEditor(currentlyActiveEditor);
}
addDocSelectionChangedListenerToActiveEditor((IEditorPart) event.getSelectedPage());
}
void dispose() {
if (currentlyActiveEditor != null) {
removeDocSelectionChangedListenerFromActiveEditor(currentlyActiveEditor);
currentlyActiveEditor = null;
}
}
private void addDocSelectionChangedListenerToActiveEditor(final IEditorPart activeEditor) {
currentlyActiveEditor = activeEditor;
if (activeEditor instanceof SuiteSourceEditor) {
((SuiteSourceEditor) activeEditor).setSourceDocSelectionChangedListener(sourceDocSelectionChangedListener);
} else if (activeEditor instanceof KeywordsEditorPart || activeEditor instanceof CasesEditorPart) {
activeEditor.getEditorSite()
.getSelectionProvider()
.addSelectionChangedListener(tableDocSelectionChangedListener);
}
}
private void removeDocSelectionChangedListenerFromActiveEditor(final IEditorPart activeEditor) {
if (activeEditor instanceof SuiteSourceEditor) {
((SuiteSourceEditor) activeEditor).removeSourceDocSelectionChangedListener();
} else if (activeEditor instanceof KeywordsEditorPart || activeEditor instanceof CasesEditorPart) {
activeEditor.getEditorSite()
.getSelectionProvider()
.removeSelectionChangedListener(tableDocSelectionChangedListener);
}
}
}