package net.bitpot.railways.actions;
import com.intellij.ide.CopyProvider;
import com.intellij.openapi.actionSystem.*;
import net.bitpot.railways.gui.RoutesCopyProvider;
import net.bitpot.railways.models.Route;
/**
* Provides functionality to copy route data from selected items. Requires
* data context to implement DataProvider interface and provide data for
* SELECTED_ITEMS and SELECTED_ITEM keys.
*/
public abstract class CopyRouteActionBase extends AnAction {
/**
* Should return from route a string to be copied.
* @param route Route which data will be copied.
* @return A string to be copied.
*/
abstract public String getRouteValue(Route route);
@Override
public void actionPerformed(AnActionEvent anActionEvent) {
DataContext ctx = anActionEvent.getDataContext();
Route[] routes = (Route[])PlatformDataKeys.SELECTED_ITEMS.getData(ctx);
CopyProvider provider = new RoutesCopyProvider(routes) {
@Override
public String getCopyValue(Route route) {
return getRouteValue(route);
}
};
provider.performCopy(ctx);
}
@Override
public void update(AnActionEvent event) {
Presentation presentation = event.getPresentation();
DataContext dataContext = event.getDataContext();
// Selected item is faster than building selected route list every time,
// so we'll use it to check whether anything is selected.
Object selectedRoute = PlatformDataKeys.SELECTED_ITEM.getData(dataContext);
presentation.setEnabled(selectedRoute != null);
presentation.setVisible(true);
}
}