package krasa.grepconsole.action;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.List;
import javax.swing.*;
import com.intellij.ide.DataManager;
import com.intellij.ide.dnd.FileCopyPasteUtil;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.CustomComponentAction;
import com.intellij.openapi.project.Project;
/**
* @author Vojtech Krasa
*/
public class OpenFileInConsoleToolbarAction extends OpenFileInConsoleAction implements CustomComponentAction {
@Override
public JComponent createCustomComponent(Presentation presentation) {
final JPanel comp = new JPanel();
comp.setTransferHandler(new MyTransferHandler());
comp.add(new JLabel(getTemplatePresentation().getText()));
comp.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
actionPerformed(AnActionEvent.createFromInputEvent(OpenFileInConsoleToolbarAction.this, e,
ActionPlaces.UNKNOWN));
}
});
comp.setToolTipText(getTemplatePresentation().getDescription());
return comp;
}
private class MyTransferHandler extends TransferHandler {
@Override
public boolean importData(JComponent comp, Transferable t) {
if (canHandleDrop(t.getTransferDataFlavors())) {
final List<File> fileList = FileCopyPasteUtil.getFileList(t);
if (fileList != null) {
DataContext context = DataManager.getInstance().getDataContext(comp);
final Project data = CommonDataKeys.PROJECT.getData(context);
for (File file : fileList) {
if (!file.isDirectory()) {
openFileInConsole(data, file);
}
}
}
return true;
}
return false;
}
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
return canHandleDrop(transferFlavors);
}
public boolean canHandleDrop(DataFlavor[] transferFlavors) {
return transferFlavors != null && FileCopyPasteUtil.isFileListFlavorAvailable(transferFlavors);
}
}
}