package eu.jucy.gui.statusline; import helpers.IObservable; import helpers.Observable.IObserver; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import uc.DCClient; import uihelpers.SUIJob; import eu.jucy.gui.ApplicationWorkbenchWindowAdvisor; import eu.jucy.gui.UserColumns.Nick; public class AwayStatus extends Label implements IObserver<String> { // private final ImageDescriptor offline; private final int size; public AwayStatus(Composite parent) { super(parent, SWT.BORDER); size = 20; // offline = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKeys.OFFLINE_16); updateAwayStatus(); ApplicationWorkbenchWindowAdvisor.get().getAwayObservable().addObserver(this); addListener(SWT.MouseDown,new Listener() { public void handleEvent(Event event) { DCClient dcc = ApplicationWorkbenchWindowAdvisor.get(); dcc.setAway(!dcc.isAway()); } }); } public void dispose() { getImage().dispose(); ApplicationWorkbenchWindowAdvisor.get().getAwayObservable().deleteObserver(this); super.dispose(); } protected void checkSubclass () {} public void update(IObservable<String> o, String arg) { new SUIJob(this) { @Override public void run() { updateAwayStatus(); } }.schedule(); } public void updateAwayStatus() { DCClient dcc = ApplicationWorkbenchWindowAdvisor.get(); Image base = Nick.getUserImage(true, !dcc.isAway(), true, false); Image copy = Nick.copyWithKey(base, null, size); Image old = getImage(); setImage(copy); if (old != null) { old.dispose(); } //setImage(dcc.isAway()?offline: Nick.getDefaultUserImage()); setToolTipText(dcc.isAway()?dcc.getAwayMessage():"Online"); } }