package com.netifera.platform.ui.spaces.actions;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import com.netifera.platform.api.model.layers.ILayerProvider;
import com.netifera.platform.ui.internal.spaces.Activator;
public abstract class SelectLayersAction extends Action {
public SelectLayersAction(String text, ImageDescriptor icon) {
super(text, SWT.DROP_DOWN);
setImageDescriptor(icon);
}
public SelectLayersAction() {
this("Select Layers", Activator.getDefault().getImageCache().getDescriptor("icons/layers_16x16.png"));
}
@Override
public void run() {
final List<ILayerProvider> activeLayerProviders = getActiveLayers();
Menu menu = new Menu(Display.getDefault().getActiveShell(), SWT.POP_UP);
for (final ILayerProvider provider: getLayers()) {
if (provider.getLayerName() == null)
continue;
MenuItem item = new MenuItem(menu, SWT.CHECK);
item.setSelection(activeLayerProviders.contains(provider));
item.setText(provider.getLayerName());
item.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
if (activeLayerProviders.contains(provider)) {
disableLayer(provider);
} else {
enableLayer(provider);
}
}
});
}
menu.setLocation(Display.getDefault().getCursorLocation());
menu.setVisible(true);
}
protected abstract List<ILayerProvider> getLayers();
protected abstract List<ILayerProvider> getActiveLayers();
protected abstract void enableLayer(ILayerProvider provider);
protected abstract void disableLayer(ILayerProvider provider);
}