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();
}
});
}
}
}