package com.intellij.flex.uiDesigner.actions;
import com.intellij.flex.uiDesigner.DebugPathManager;
import com.intellij.flex.uiDesigner.DesignerApplicationManager;
import com.intellij.internal.statistic.UsageTrigger;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.xml.XmlFile;
import org.jetbrains.annotations.Nullable;
public class RunDesignViewAction extends DumbAwareAction {
private final String usageTriggerFeature;
public RunDesignViewAction() {
this("FlashUIDesigner.toolbar");
}
public RunDesignViewAction(String usageTriggerFeature) {
this.usageTriggerFeature = usageTriggerFeature;
}
@Override
public void actionPerformed(final AnActionEvent event) {
final DataContext dataContext = event.getDataContext();
XmlFile psiFile = (XmlFile)getPsiFile(CommonDataKeys.PROJECT.getData(dataContext), dataContext, ActionPlaces.isPopupPlace(event.getPlace()));
assert psiFile != null;
if (!DebugPathManager.IS_DEV) {
UsageTrigger.trigger(usageTriggerFeature);
}
DesignerApplicationManager.getInstance().openDocument(psiFile,
isDebug() || (DebugPathManager.IS_DEV && event.getInputEvent().isControlDown()));
}
protected boolean isDebug() {
return false;
}
@Override
public void update(final AnActionEvent event) {
final boolean popupPlace = ActionPlaces.isPopupPlace(event.getPlace());
final boolean enabled = isEnabled(event.getDataContext(), popupPlace) && !DesignerApplicationManager.getInstance().isInitialRendering();
if (popupPlace) {
event.getPresentation().setVisible(enabled);
}
else {
event.getPresentation().setEnabled(enabled);
}
}
@Nullable
private static PsiFile getPsiFile(Project project, DataContext dataContext, boolean popupPlace) {
if (popupPlace) {
final VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(dataContext);
if (virtualFile != null) {
return PsiManager.getInstance(project).findFile(virtualFile);
}
}
else {
Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
if (editor == null) {
editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
}
if (editor != null) {
return PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
}
}
return null;
}
private static boolean isEnabled(final DataContext dataContext, boolean popupPlace) {
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
return project != null &&
!DumbService.isDumb(project) &&
DesignerApplicationManager.isApplicable(project, getPsiFile(project, dataContext, popupPlace));
}
}