package com.netifera.platform.ui.probe.status;
import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import com.netifera.platform.api.events.IEvent;
import com.netifera.platform.api.events.IEventHandler;
import com.netifera.platform.api.probe.IProbe;
import com.netifera.platform.ui.probe.Activator;
public class ProbeStatusLine extends ControlContribution {
public final static String ID = "com.netifera.ui.status.probe";
private CLabel label;
private IProbe probe;
private IEventHandler probeChangeListener;
private final static String PROBE_DISCONNECTED = "icons/probe_disconnected.png";
private final static String PROBE_CONNECTING = "icons/probe_connecting.png";
private final static String PROBE_CONNECTED = "icons/probe_connected.png";
private final static String PROBE_FAILED = "icons/probe_failed.png";
public ProbeStatusLine() {
super(ID);
}
@Override
protected Control createControl(Composite parent) {
label = new CLabel(parent, SWT.SHADOW_NONE);
label.setFont(JFaceResources.getDialogFont());
label.setImage(Activator.getDefault().getImageCache().get(PROBE_DISCONNECTED));
probeChangeListener = createProbeChangeListener(parent.getDisplay());
label.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent arg0) {
Activator.getDefault().getProbeManager().removeProbeChangeListener(probeChangeListener);
}
});
Activator.getDefault().getProbeManager().addProbeChangeListener(probeChangeListener);
update();
return label;
}
private IEventHandler createProbeChangeListener(final Display display) {
return new IEventHandler() {
public void handleEvent(IEvent event) {
display.asyncExec(new Runnable() {
public void run() {
update();
}
});
}
};
}
@Override
public void dispose() {
Activator.getDefault().getProbeManager().removeProbeChangeListener(probeChangeListener);
super.dispose();
}
public void setProbe(IProbe probe) {
if (this.probe != probe) {
this.probe = probe;
update();
}
/*
System.out.println("force trim recreation");
if (getParent() != null)
getParent().update(true);
((WorkbenchWindow)getWorkbenchWindow()).getTrimManager().forceLayout();
*/// ((WorkbenchWindow)getWorkbenchWindow()).getTrimManager().
}
@Override
public void update() {
if (label == null)
return;
if (label.isDisposed())
return;
if (probe == null)
return;
label.setText(probe.getName());
switch (probe.getConnectState()) {
case DISCONNECTED:
label.setImage(Activator.getDefault().getImageCache().get(PROBE_DISCONNECTED));
label.setToolTipText("Disconnected");
break;
case CONNECTING:
label.setImage(Activator.getDefault().getImageCache().get(PROBE_CONNECTING));
label.setToolTipText("Connecting");
break;
case CONNECTED:
label.setImage(Activator.getDefault().getImageCache().get(PROBE_CONNECTED));
label.setToolTipText("Connected");
break;
case CONNECT_FAILED:
label.setImage(Activator.getDefault().getImageCache().get(PROBE_FAILED));
label.setToolTipText(probe.getConnectError());
}
}
}