package net.bitpot.railways.gui;
import com.intellij.ide.CopyProvider;
import com.intellij.ide.TextCopyProvider;
import com.intellij.openapi.actionSystem.*;
import com.intellij.ui.PopupHandler;
import com.intellij.ui.components.JBLabel;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
public class LabelWithCopy extends JBLabel implements DataProvider {
CopyProvider copyProvider = new MyCopyProvider(this);
@Nullable
private StringFormatter formatter;
public LabelWithCopy() {
addMouseListener(new PopupHandler() {
@Override
public void invokePopup(Component comp, int x, int y) {
ActionManager actMgr = ActionManager.getInstance();
ActionGroup group = (ActionGroup) ActionManager.getInstance()
.getAction("railways.CopyMenu");
ActionPopupMenu popupMenu =
actMgr.createActionPopupMenu(ActionPlaces.UNKNOWN, group);
popupMenu.getComponent().show(comp, x, y);
}
});
}
public void setCopyFormatter(StringFormatter formatter) {
this.formatter = formatter;
}
@Nullable
@Override
public Object getData(@NonNls String s) {
if (PlatformDataKeys.COPY_PROVIDER.is(s))
return copyProvider;
return null;
}
private class MyCopyProvider extends TextCopyProvider {
private LabelWithCopy label;
public MyCopyProvider(LabelWithCopy label) {
this.label = label;
}
@Nullable
@Override
public Collection<String> getTextLinesToCopy() {
String text = label.getText();
if (text.isEmpty() || text.equals("-"))
return null;
if (formatter != null)
text = formatter.format(text);
Collection<String> result = new ArrayList<String>(1);
result.add(text);
return result;
}
}
}