package jetbrains.mps.vcs.platform.actions; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import javax.swing.Icon; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import jetbrains.mps.openapi.editor.EditorContext; import jetbrains.mps.ide.editor.MPSEditorDataKeys; import jetbrains.mps.internal.collections.runtime.MapSequence; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import org.jetbrains.annotations.NotNull; import jetbrains.mps.vcs.diff.ui.common.Bounds; import jetbrains.mps.vcs.changesmanager.editor.ChangesStripActionsHelper; import jetbrains.mps.smodel.ModelAccess; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SModel; import com.intellij.openapi.application.ApplicationManager; import org.jetbrains.mps.openapi.model.EditableSModel; public class ShowDiffFromChanges_Action extends BaseAction { private static final Icon ICON = AllIcons.Actions.Diff; public ShowDiffFromChanges_Action() { super("Show Difference", "", ICON); this.setIsAlwaysVisible(true); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return true; } @Override protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) { if (!(super.collectActionData(event, _params))) { return false; } { EditorContext p = event.getData(MPSEditorDataKeys.EDITOR_CONTEXT); MapSequence.fromMap(_params).put("editorContext", p); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); MapSequence.fromMap(_params).put("project", p); if (p == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { final Bounds bounds = ChangesStripActionsHelper.getCurrentChangeGroupPositionAndHidePopup(((EditorContext) MapSequence.fromMap(_params).get("editorContext"))); ModelAccess.instance().runReadInEDT(new Runnable() { public void run() { final SNode editedNode = ((EditorContext) MapSequence.fromMap(_params).get("editorContext")).getEditorComponent().getEditedNode(); final SModel model = editedNode.getModel(); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { VcsActionsUtil.showRootDifference((EditableSModel) model, editedNode, ((Project) MapSequence.fromMap(_params).get("project")), bounds); } }); } }); } }