blob: 5933495f647fec64adde13a036556217ebfe9489 [file] [log] [blame]
package org.eclipse.ui.internal;
/*
* (c) Copyright IBM Corp. 2000, 2001, 2002.
* All Rights Reserved.
*/
import org.eclipse.ui.*;
/**
* A part service for a workbench window.
*/
public class WWinPartService implements IPartService {
private IWorkbenchWindow window;
private PartListenerList listeners = new PartListenerList();
private PartListenerList2 listeners2 = new PartListenerList2();
private WindowSelectionService selectionService;
private IWorkbenchPage activePage;
private IPartListener2 partListner = new IPartListener2() {
public void partActivated(IWorkbenchPartReference ref) {
IWorkbenchPart part = ref.getPart(false);
if(part != null) {
listeners.firePartActivated(part);
selectionService.partActivated(part);
}
listeners2.firePartActivated(ref);
}
public void partBroughtToTop(IWorkbenchPartReference ref) {
IWorkbenchPart part = ref.getPart(false);
if(part != null) {
listeners.firePartBroughtToTop(part);
selectionService.partBroughtToTop(part);
}
listeners2.firePartBroughtToTop(ref);
}
public void partClosed(IWorkbenchPartReference ref) {
IWorkbenchPart part = ref.getPart(false);
if(part != null) {
listeners.firePartClosed(part);
selectionService.partClosed(part);
}
listeners2.firePartClosed(ref);
}
public void partDeactivated(IWorkbenchPartReference ref) {
IWorkbenchPart part = ref.getPart(false);
if(part != null) {
listeners.firePartDeactivated(part);
selectionService.partDeactivated(part);
}
listeners2.firePartDeactivated(ref);
}
public void partOpened(IWorkbenchPartReference ref) {
IWorkbenchPart part = ref.getPart(false);
if(part != null) {
listeners.firePartOpened(part);
selectionService.partOpened(part);
}
listeners2.firePartOpened(ref);
}
public void partHidden(IWorkbenchPartReference ref) {
listeners2.firePartHidden(ref);
}
public void partVisible(IWorkbenchPartReference ref) {
listeners2.firePartVisible(ref);
}
public void partInputChanged(IWorkbenchPartReference ref) {
listeners2.firePartInputChanged(ref);
}
};
/**
* Creates a new part service for a workbench window.
*/
public WWinPartService(IWorkbenchWindow window) {
this.window = window;
selectionService = new WindowSelectionService(window);
}
/*
* (non-Javadoc)
* Method declared on IPartService
*/
public void addPartListener(IPartListener l) {
listeners.addPartListener(l);
}
/*
* (non-Javadoc)
* Method declared on IPartService
*/
public void addPartListener(IPartListener2 l) {
listeners2.addPartListener(l);
}
/*
* (non-Javadoc)
* Method declared on IPartService
*/
public void removePartListener(IPartListener l) {
listeners.removePartListener(l);
}
/*
* (non-Javadoc)
* Method declared on IPartService
*/
public void removePartListener(IPartListener2 l) {
listeners2.removePartListener(l);
}
/*
* (non-Javadoc)
* Method declared on IPartService
*/
public IWorkbenchPart getActivePart() {
if (activePage != null)
return activePage.getActivePart();
else
return null;
}
/*
* (non-Javadoc)
* Method declared on IPartService
*/
public IWorkbenchPartReference getActivePartReference() {
if (activePage != null)
return activePage.getActivePartReference();
else
return null;
}
/*
* Returns the selection service.
*/
ISelectionService getSelectionService() {
return selectionService;
}
/*
* Notifies that a page has been activated.
*/
void pageActivated(IWorkbenchPage newPage) {
// Optimize.
if (newPage == activePage)
return;
// Unhook listener from the old page.
reset();
// Update active page.
activePage = newPage;
// Hook listener on the new page.
if (activePage != null) {
activePage.addPartListener(partListner);
if (getActivePart() != null)
partListner.partActivated(getActivePartReference());
}
}
/*
* Notifies that a page has been closed
*/
void pageClosed(IWorkbenchPage page) {
// Unhook listener from the old page.
if (page == activePage) {
reset();
}
}
/*
* Notifies that a page has been opened.
*/
void pageOpened(IWorkbenchPage page) {
pageActivated(page);
}
/*
* Resets the part service. The active page, part and selection are
* dereferenced.
*/
private void reset() {
if (activePage != null) {
activePage.removePartListener(partListner);
activePage = null;
}
selectionService.reset();
}
}