package jetbrains.mps.vcs.diff.ui; /*Generated by MPS */ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.project.Project; import jetbrains.mps.vcs.diff.StructChangeSet; import org.jetbrains.mps.openapi.model.SNodeChangeListener; import javax.swing.JPanel; import java.awt.BorderLayout; import com.intellij.openapi.diff.ex.DiffStatusBar; import com.intellij.openapi.diff.impl.util.TextDiffType; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.vcs.diff.StructChangeSetBuilder; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.event.SPropertyChangeEvent; import org.jetbrains.mps.openapi.event.SReferenceChangeEvent; import org.jetbrains.mps.openapi.event.SNodeAddEvent; import org.jetbrains.mps.openapi.event.SNodeRemoveEvent; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import org.jetbrains.annotations.Nullable; import javax.swing.JComponent; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.actionSystem.ActionToolbar; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.ActionPlaces; import java.awt.Dimension; import com.intellij.openapi.util.DimensionService; import javax.swing.Action; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.vcs.diff.ChangeSetBuilder; import org.jetbrains.annotations.NonNls; public class StructDifferenceDialog extends DialogWrapper implements DataProvider { private Project myProject; private StructChangeSet myChangeSet; private SNodeChangeListener myChangeListener; private JPanel myComponent = new JPanel(new BorderLayout()); private StructDifferencePane myNodeDifferencePane = null; private DiffStatusBar myStatusBar = new DiffStatusBar(TextDiffType.DIFF_TYPES); private String[] myContentTitles; public StructDifferenceDialog(Project project, SNode oldNode, SNode newNode, String oldTitle, String newTitle) { super(project); myProject = project; if ((oldTitle == null || oldTitle.length() == 0)) { oldTitle = "before"; } if ((newTitle == null || newTitle.length() == 0)) { newTitle = "after"; } myContentTitles = new String[]{oldTitle, newTitle}; setTitle("Difference for nodes"); myChangeSet = StructChangeSetBuilder.buildChangeSet(oldNode, newNode, true); myChangeListener = new SNodeChangeListener() { public void propertyChanged(@NotNull SPropertyChangeEvent p0) { update(); } public void referenceChanged(@NotNull SReferenceChangeEvent p0) { update(); } public void nodeAdded(@NotNull SNodeAddEvent p0) { update(); } public void nodeRemoved(@NotNull SNodeRemoveEvent p0) { update(); } private void update() { check_rohu9p_a0a4a0a0k0k(myNodeDifferencePane); } }; SNodeOperations.getModel(oldNode).addChangeListener(myChangeListener); if (SNodeOperations.getModel(newNode) != SNodeOperations.getModel(oldNode)) { SNodeOperations.getModel(newNode).addChangeListener(myChangeListener); } init(); } @Nullable @Override protected JComponent createCenterPanel() { myNodeDifferencePane = new StructDifferencePane(myProject, myChangeSet, myContentTitles, myStatusBar); DefaultActionGroup actionGroup = new DefaultActionGroup(); actionGroup.addAll(myNodeDifferencePane.getActions()); ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, actionGroup, true); myNodeDifferencePane.registerShortcuts(myComponent); myComponent.add(toolbar.getComponent(), BorderLayout.NORTH); myComponent.add(myNodeDifferencePane.getPanel(), BorderLayout.CENTER); myComponent.add(myStatusBar, BorderLayout.SOUTH); myNodeDifferencePane.navigateInitial(null); Dimension size = DimensionService.getInstance().getSize(getDimensionServiceKey()); if (size == null) { myComponent.setPreferredSize(new Dimension(500, 700)); } return myComponent; } @NotNull @Override protected Action[] createActions() { return new Action[0]; } @Override public String getDimensionServiceKey() { return getClass().getName(); } @Nullable @Override protected JComponent createSouthPanel() { return null; } @Override protected void dispose() { SModel oldModel = myChangeSet.getOldModel(); SModel newModel = myChangeSet.getNewModel(); oldModel.removeChangeListener(myChangeListener); if (newModel != oldModel) { newModel.removeChangeListener(myChangeListener); } if (myNodeDifferencePane != null) { myNodeDifferencePane.dispose(); } super.dispose(); } /*package*/ void rebuildChangeSets() { ChangeSetBuilder.rebuildChangeSet(myChangeSet); } public static void showNodeDifference(Project project, SNode oldNode, SNode newNode, String oldTitle, String newTitile) { StructDifferenceDialog dialog = new StructDifferenceDialog(project, oldNode, newNode, oldTitle, newTitile); dialog.setModal(false); dialog.show(); } @Nullable public Object getData(@NonNls String string) { return null; } private static void check_rohu9p_a0a4a0a0k0k(StructDifferencePane checkedDotOperand) { if (null != checkedDotOperand) { checkedDotOperand.rehighlight(); } } }