blob: 27cc57ddf28e540eb115b082bdfd0d5a237a892d [file] [log] [blame]
package org.eclipse.ui.internal;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.ListenerList;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.*;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.IWorkbenchPart;
/**
*
*/
public abstract class WorkbenchPartReference implements IWorkbenchPartReference {
protected IWorkbenchPart part;
private String id;
protected PartPane pane;
private String title;
private String tooltip;
private Image image;
private ImageDescriptor imageDescritor;
private ListenerList propChangeListeners = new ListenerList(2);
public WorkbenchPartReference() {
}
public void init(String id,String title,String tooltip,ImageDescriptor desc) {
this.id = id;
this.title = title;
this.tooltip = tooltip;
this.imageDescritor = desc;
}
public void releaseReferences() {
id = null;
tooltip = null;
title = null;
if(image != null && imageDescritor != null) {
//make sure part has inc. the reference count.
if(part != null)
part.getTitleImage();
ReferenceCounter imageCache = WorkbenchImages.getImageCache();
image = (Image)imageCache.get(imageDescritor);
if(image != null) {
imageCache.removeRef(imageDescritor);
}
image = null;
imageDescritor = null;
}
}
/**
* @see IWorkbenchPart
*/
public void addPropertyListener(IPropertyListener listener) {
IWorkbenchPart part = getPart(false);
if(part != null)
part.addPropertyListener(listener);
else
propChangeListeners.add(listener);
}
/**
* @see IWorkbenchPart
*/
public void removePropertyListener(IPropertyListener listener) {
IWorkbenchPart part = getPart(false);
if(part != null)
part.removePropertyListener(listener);
else
propChangeListeners.remove(listener);
}
public String getId() {
if(part != null)
return part.getSite().getId();
return id;
}
public String getTitleToolTip() {
if(part != null)
return part.getTitleToolTip();
else
return tooltip;
}
public String getTitle() {
String result = title;
if(part != null)
result = part.getTitle();
if(result == null)
result = new String();
return result;
}
public Image getTitleImage() {
if(part != null)
return part.getTitleImage();
if(image != null)
return image;
if(imageDescritor == null)
return null;
ReferenceCounter imageCache = WorkbenchImages.getImageCache();
image = (Image)imageCache.get(imageDescritor);
if(image != null) {
imageCache.addRef(imageDescritor);
return image;
}
image = imageDescritor.createImage();
imageCache.put(imageDescritor,image);
return image;
}
public void setPart(IWorkbenchPart part) {
this.part = part;
if(part == null)
return;
Object listeners[] = propChangeListeners.getListeners();
for (int i = 0; i < listeners.length; i++) {
part.addPropertyListener((IPropertyListener)listeners[i]);
}
PartSite site = (PartSite)part.getSite();
if(site != null && this.pane != null) {
site.setPane(this.pane);
this.pane = null;
}
}
public void setPane(PartPane pane) {
if(pane == null)
return;
if(part != null) {
PartSite site = (PartSite)part.getSite();
site.setPane(pane);
} else {
this.pane = pane;
}
}
public PartPane getPane() {
PartPane result = null;
if(part != null)
result = ((PartSite)part.getSite()).getPane();
if(result == null)
result = pane;
return result;
}
public void dispose() {
if(image != null && imageDescritor != null) {
ReferenceCounter imageCache = WorkbenchImages.getImageCache();
if(image != null) {
int count = imageCache.removeRef(imageDescritor);
if(count <= 0)
image.dispose();
}
imageDescritor = null;
image = null;
}
}
public abstract String getRegisteredName();
}