package cn.yiiguxing.plugin.translate.action;
import cn.yiiguxing.plugin.translate.TranslationUiManager;
import cn.yiiguxing.plugin.translate.Utils;
import com.intellij.codeInsight.documentation.DocumentationManager;
import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopup;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.text.JTextComponent;
/**
* 文本组件(如快速文档、提示气泡、输入框……)翻译动作
*/
public class TranslateTextComponentAction extends AnAction implements DumbAware, HintManagerImpl.ActionToIgnore {
public TranslateTextComponentAction() {
setEnabledInModalContext(true);
}
@Nullable
public static String getSelectedText(@NotNull AnActionEvent event) {
final DataContext dataContext = event.getDataContext();
String selectedQuickDocText = DocumentationManager.SELECTED_QUICK_DOC_TEXT.getData(dataContext);
if (selectedQuickDocText != null) {
return selectedQuickDocText;
}
final Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
if (editor != null) {
return editor.getSelectionModel().getSelectedText();
}
final Object data = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
if (data instanceof JTextComponent) {
return ((JTextComponent) data).getSelectedText();
}
return null;
}
@Override
public void update(AnActionEvent e) {
final String selected = getSelectedText(e);
e.getPresentation().setEnabledAndVisible(!Utils.isEmptyOrBlankString(Utils.splitWord(selected)));
}
@Override
public void actionPerformed(AnActionEvent e) {
if (ApplicationManager.getApplication().isHeadlessEnvironment()) {
return;
}
final String selected = Utils.splitWord(getSelectedText(e));
if (Utils.isEmptyOrBlankString(selected)) {
return;
}
final Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
final JBPopup docInfoHint = project == null ? null : DocumentationManager.getInstance(project).getDocInfoHint();
if (docInfoHint != null) {
docInfoHint.cancel();
}
TranslationUiManager.getInstance().showTranslationDialog(e.getProject()).query(selected);
}
}