package com.netifera.platform.ui.workbench;
import org.eclipse.ui.IPageListener;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
public class WorkbenchChangeManager {
private final IWorkbenchWindow window;
private final String perspectiveId;
private final IWorkbenchChangeListener changeListener;
public WorkbenchChangeManager(IWorkbenchWindow window, String perspectiveId, IWorkbenchChangeListener changeListener) {
this.window = window;
this.perspectiveId = perspectiveId;
this.changeListener = changeListener;
}
public void initialize() {
IWorkbenchPage page = window.getActivePage();
if(page == null) {
window.addPageListener(createPageListener());
} else {
activePageOpened(page);
}
}
private IPageListener createPageListener() {
return new IPageListener() {
public void pageActivated(IWorkbenchPage page) {
activePageOpened(page);
window.removePageListener(this);
}
public void pageClosed(IWorkbenchPage page) {}
public void pageOpened(IWorkbenchPage page) {}
};
}
private void activePageOpened(IWorkbenchPage page) {
changeListener.activePageOpened(page);
window.addPerspectiveListener(createPerspectiveListener());
IPerspectiveDescriptor perspective = page.getPerspective();
if(perspective != null && perspective.getId().equals(perspectiveId)) {
changeListener.perspectiveOpened();
} else {
changeListener.perspectiveClosed();
}
page.addPartListener(createPartListener());
}
private IPerspectiveListener createPerspectiveListener() {
return new IPerspectiveListener() {
public void perspectiveActivated(IWorkbenchPage page,
IPerspectiveDescriptor perspective) {
if(perspective.getId().equals(perspectiveId)) {
changeListener.perspectiveOpened();
} else {
changeListener.perspectiveClosed();
}
}
public void perspectiveChanged(IWorkbenchPage page,
IPerspectiveDescriptor perspective, String changeId) {}
};
}
private IPartListener createPartListener() {
return new IPartListener() {
public void partActivated(IWorkbenchPart part) {
changeListener.partChange();
}
public void partClosed(IWorkbenchPart part) {
changeListener.partChange();
}
public void partBroughtToTop(IWorkbenchPart part) {}
public void partDeactivated(IWorkbenchPart part) {}
public void partOpened(IWorkbenchPart part) {
changeListener.partChange();
}
};
}
}