package com.mobilesorcery.sdk.update.internal;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveListener3;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PlatformUI;
import com.mobilesorcery.sdk.core.CoreMoSyncPlugin;
import com.mobilesorcery.sdk.core.IUpdater;
public class RegistrationPartListener implements IPartListener, IPerspectiveListener3 {
private IViewPart view;
/**
* Determines if the welcome screen should be shown when
* the registration perspective is closed.
*/
private boolean reopenIntro;
/**
* Determines if the listener should react to events.
*/
private boolean active;
public RegistrationPartListener(IViewPart view, boolean reopenIntro) {
this.view = view;
this.reopenIntro = reopenIntro;
}
public void partActivated(IWorkbenchPart part) {
}
public void partBroughtToTop(IWorkbenchPart part) {
}
public void partClosed(IWorkbenchPart part) {
if (part == this.view) {
view.getSite().getPage().removePartListener(this);
view.getSite().getWorkbenchWindow().removePerspectiveListener(this);
closeRegistrationPerspective();
}
}
public void closeRegistrationPerspective() {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
if(page == null) {
/* Page is null when eclipse is shutting down, so we just return. */
return;
}
IPerspectiveDescriptor perspective = PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(
RegistrationPerspectiveFactory.REGISTRATION_PERSPECTIVE_ID);
if (perspective != null) {
active = false;
page.closePerspective(perspective, false, false);
active = true;
}
if (reopenIntro) {
PlatformUI.getWorkbench().getIntroManager().showIntro(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), false);
}
}
public void partDeactivated(IWorkbenchPart part) {
}
public void partOpened(IWorkbenchPart part) {
}
public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor desc) {
if (active) {
updateReopenIntro(desc);
if (RegistrationPerspectiveFactory.REGISTRATION_PERSPECTIVE_ID.equals(desc.getId())) {
IViewPart registrationView = page.findView(RegistrationWebBrowserView.VIEW_ID);
if (registrationView instanceof RegistrationWebBrowserView && !((RegistrationWebBrowserView) registrationView).isActive()) {
IUpdater updater = CoreMoSyncPlugin.getDefault().getUpdater();
if (updater != null) {
updater.register(false);
}
}
}
}
}
public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor desc, String s) {
}
public void perspectiveClosed(IWorkbenchPage page, IPerspectiveDescriptor desc) {
}
public void perspectiveDeactivated(IWorkbenchPage page, IPerspectiveDescriptor desc) {
}
public void perspectiveOpened(IWorkbenchPage page, IPerspectiveDescriptor desc) {
if (active) {
updateReopenIntro(desc);
}
}
private void updateReopenIntro(IPerspectiveDescriptor desc) {
if (active) {
if (!RegistrationPerspectiveFactory.REGISTRATION_PERSPECTIVE_ID.equals(desc.getId())) {
// Someone changed perspectives.
reopenIntro = false;
}
}
}
public void perspectiveSavedAs(IWorkbenchPage page, IPerspectiveDescriptor desc1, IPerspectiveDescriptor desc2) {
// TODO Auto-generated method stub
}
public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor desc, IWorkbenchPartReference iworkbenchpartreference, String s) {
// TODO Auto-generated method stub
}
public void setReopenIntro(boolean reopenIntro) {
this.reopenIntro = reopenIntro;
}
public void setActive(boolean active) {
this.active = active;
}
}