package org.jactr.eclipse.runtime.ui.visicon;
/*
* default logging
*/
import javolution.util.FastList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.commonreality.identifier.IIdentifier;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
import org.jactr.eclipse.runtime.ui.misc.AbstractRuntimeModelViewPart;
import org.jactr.eclipse.runtime.visual.IVisualDescriptorListener;
import org.jactr.eclipse.runtime.visual.IVisualTraceCenterListener;
import org.jactr.eclipse.runtime.visual.VisualDescriptor;
import org.jactr.eclipse.runtime.visual.VisualTraceCenter;
public class VisiconView extends AbstractRuntimeModelViewPart
{
static public final String ID = VisiconView.class.getName();
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(VisiconView.class);
// to be notified of new models
private IVisualTraceCenterListener _traceCenterListener;
// to be notified of data changes
private IVisualDescriptorListener _descriptorListener;
private ZoomSliderContribution zoomSlider;
@Override
public void init(IViewSite site) throws PartInitException
{
super.init(site);
_traceCenterListener = new IVisualTraceCenterListener() {
public void modelAdded(final String commonName,
final VisualDescriptor desc)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
addModelData(commonName, desc);
}
});
}
public void modelRemoved(String modelName, final VisualDescriptor desc)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
removeModelData(desc);
}
});
}
};
_descriptorListener = new IVisualDescriptorListener() {
public void added(final VisualDescriptor descriptor,
final IIdentifier identifier)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
CTabItem tab = getModelTab(descriptor.getModelName());
VisiconComponent vComp = (VisiconComponent) tab.getControl();
vComp.add(identifier, descriptor.getData(identifier));
}
});
}
public void encoded(final VisualDescriptor descriptor,
final IIdentifier identifier)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
CTabItem tab = getModelTab(descriptor.getModelName());
VisiconComponent vComp = (VisiconComponent) tab.getControl();
vComp.encoded(identifier);
}
});
}
public void found(final VisualDescriptor descriptor,
final IIdentifier identifier)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
CTabItem tab = getModelTab(descriptor.getModelName());
VisiconComponent vComp = (VisiconComponent) tab.getControl();
if (tab != null) vComp.found(identifier);
}
});
}
public void removed(final VisualDescriptor descriptor,
final IIdentifier identifier)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
CTabItem tab = getModelTab(descriptor.getModelName());
VisiconComponent vComp = (VisiconComponent) tab.getControl();
vComp.remove(identifier);
}
});
}
public void updated(final VisualDescriptor descriptor,
final IIdentifier identifier)
{
Display.getDefault().asyncExec(new Runnable() {
public void run()
{
CTabItem tab = getModelTab(descriptor.getModelName());
// if (tab == null) return;
VisiconComponent vComp = (VisiconComponent) tab.getControl();
vComp.update(identifier, descriptor.getData(identifier));
}
});
}
};
}
@Override
public void createPartControl(Composite parent)
{
super.createPartControl(parent);
VisualTraceCenter.get().add(_traceCenterListener);
/*
* now we need to add all the existing data. we cant do this in init because
* the control that contains the components isn't created until
* createPartControl
*/
FastList<VisualDescriptor> container = FastList.newInstance();
for (VisualDescriptor desc : VisualTraceCenter.get()
.getAllRuntimeTraceData(container))
addModelData(desc.getModelName(), desc);
FastList.recycle(container);
}
@Override
protected void configureModelControl() {
createZoomSlider();
super.configureModelControl();
}
private void createZoomSlider() {
zoomSlider = new ZoomSliderContribution(getTabFolder(),
VisiconComponent.DEFAULT_MAGNIFICATION);
getViewSite().getActionBars().getToolBarManager().add(zoomSlider);
getViewSite().getActionBars().updateActionBars();
}
@Override
public void dispose()
{
VisualTraceCenter.get().remove(_traceCenterListener);
super.dispose();
}
@Override
protected Composite createModelComposite(String modelName, Object modelData,
Composite parent)
{
if (!(modelData instanceof VisualDescriptor)) return null;
VisualDescriptor desc = (VisualDescriptor) modelData;
VisiconComponent comp = new VisiconComponent(parent, SWT.NONE, desc, getMagnification());
desc.add(_descriptorListener);
return comp;
}
private float getMagnification() {
if(zoomSlider != null)
return zoomSlider.getMagnification();
else
return VisiconComponent.DEFAULT_MAGNIFICATION;
}
@Override
protected void disposeModelComposite(String modelName, Object modelData,
Composite content)
{
if (modelData != null)
((VisualDescriptor) modelData).remove(_descriptorListener);
}
}