package com.netifera.platform.ui.probe.views;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.part.ViewPart;
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;
import com.netifera.platform.ui.probe.actions.ConnectProbeAction;
import com.netifera.platform.ui.probe.actions.DisconnectProbeAction;
import com.netifera.platform.ui.probe.actions.OpenSpaceAction;
public class ProbeListView extends ViewPart {
private TableViewer viewer;
private Action connectProbeAction;
private Action disconnectProbeAction;
public ProbeListView() {
}
@Override
public void createPartControl(final Composite parent) {
viewer = createViewer(parent);
Activator.getDefault().getProbeManager().addProbeChangeListener(
createProbeChangeHandler(parent.getDisplay()));
createToolbarButtons();
}
private TableViewer createViewer(Composite parent) {
final TableViewer tv = new TableViewer(parent, SWT.V_SCROLL | SWT.FULL_SELECTION);
TableViewerColumn column = new TableViewerColumn(tv, SWT.NONE);
column.getColumn().setWidth(20);
column = new TableViewerColumn(tv, SWT.NONE);
column.getColumn().setWidth(380);
tv.setContentProvider(new ProbeListContentProvider());
tv.setLabelProvider(new ProbeListLabelProvider());
tv.setInput(Activator.getDefault().getProbeManager());
return tv;
}
private IEventHandler createProbeChangeHandler(final Display display) {
return new IEventHandler() {
public void handleEvent(IEvent event) {
display.asyncExec(new Runnable() {
public void run() {
viewer.refresh();
setActionEnableStates();
}
});
}
};
}
private void createToolbarButtons() {
final IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
connectProbeAction = new ConnectProbeAction(viewer);
toolBarManager.add(connectProbeAction);
disconnectProbeAction = new DisconnectProbeAction(viewer);
toolBarManager.add(disconnectProbeAction);
toolBarManager.add(new OpenSpaceAction(this));
setActionEnableStates();
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
setActionEnableStates();
}
});
}
private void setActionEnableStates() {
connectProbeAction.setEnabled(getConnectActionState());
disconnectProbeAction.setEnabled(getDisconnectActionState());
}
private boolean getConnectActionState() {
final IProbe probe = getSelectedProbe();
if(probe == null) {
return false;
}
return probe.isDisconnected();
}
private boolean getDisconnectActionState() {
final IProbe probe = getSelectedProbe();
if(probe == null)
return false;
return probe.isConnected() && !probe.isLocalProbe();
}
public IProbe getSelectedProbe() {
final IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
if(selection == null)
return null;
final Object element = selection.getFirstElement();
if(!(element instanceof IProbe))
return null;
else
return (IProbe) element;
}
@Override
public void setFocus() {
viewer.getControl().setFocus();
}
}