package jetbrains.mps.vcs.diff.ui; /*Generated by MPS */ import jetbrains.mps.vcs.diff.ui.common.ButtonsPainter; import jetbrains.mps.nodeEditor.EditorComponent; import jetbrains.mps.vcs.diff.ui.common.ChangeGroupLayout; import jetbrains.mps.vcs.diff.ui.common.FoldingAreaButton; import jetbrains.mps.vcs.diff.ui.common.ChangeGroup; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.vcs.diff.changes.ModelChange; import jetbrains.mps.vcs.diff.changes.ChangeType; import jetbrains.mps.ide.icons.IdeIcons; import java.util.Arrays; import jetbrains.mps.vcs.diff.ui.common.DiffEditor; import javax.swing.Icon; public class DiffButtonsPainter extends ButtonsPainter { private IHighlighter myDiffPane; private DiffButtonsPainter(IHighlighter rehighlighter, EditorComponent editorComponent, ChangeGroupLayout changeGroupLayout) { super(1, editorComponent, changeGroupLayout); myDiffPane = rehighlighter; } @Override protected Iterable<FoldingAreaButton> createButtonsForChangeGroup(ChangeGroup changeGroup, int y) { FoldingAreaButton button = null; boolean allInsert = ListSequence.fromList(changeGroup.getChanges()).all(new IWhereFilter<ModelChange>() { public boolean accept(ModelChange c) { return c.getType() == ChangeType.ADD; } }); if (isHighlightLeft()) { if (!(allInsert)) { button = new DiffButtonsPainter.MyButton(changeGroup, getX(0), y, "Replace", DiffButtonsPainter.MIRRORED_APPLY_ICON); } } else { if (allInsert) { button = new DiffButtonsPainter.MyButton(changeGroup, getX(0), y, "Remove", IdeIcons.EXCLUDE); } } if (button != null) { return Arrays.asList(button); } else { return null; } } public static DiffButtonsPainter addTo(IHighlighter rehighliter, DiffEditor diffEditor, ChangeGroupLayout changeGroupLayout, boolean inspector) { EditorComponent editorComponent = diffEditor.getEditorComponent(inspector); DiffButtonsPainter painter = new DiffButtonsPainter(rehighliter, editorComponent, changeGroupLayout); editorComponent.getLeftEditorHighlighter().addFoldingAreaPainter(painter); return painter; } private class MyButton extends FoldingAreaButton { private MyButton(ChangeGroup changeGroup, int x, int y, String name, Icon icon) { super(changeGroup, x, y, name, icon); } @Override public void performAction() { getEditorComponent().getEditorContext().getRepository().getModelAccess().executeCommand(new Runnable() { public void run() { ModelChange.rollbackChanges(getChangeGroup().getChanges()); myDiffPane.rehighlight(); } }); } } }