package jetbrains.mps.vcs.diff.ui.common;
/*Generated by MPS */
import jetbrains.mps.openapi.editor.message.EditorMessageOwner;
import jetbrains.mps.nodeEditor.MessagesGutter;
import com.intellij.util.ui.update.MergingUpdateQueue;
import jetbrains.mps.nodeEditor.EditorComponent;
import com.intellij.util.ui.update.Update;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.internal.collections.runtime.IVisitor;
import jetbrains.mps.openapi.editor.message.SimpleEditorMessage;
import java.awt.Color;
import jetbrains.mps.errors.MessageStatus;
import org.jetbrains.mps.openapi.model.SNode;
public class ChangeGroupMessages {
public static final EditorMessageOwner ourOwner = new EditorMessageOwner() {};
private ChangeGroupLayout myLayout;
private boolean myLeft;
private MessagesGutter myGutter;
private MergingUpdateQueue myUpdateQueue;
private Object myUpdateIdentity = new Object();
public ChangeGroupMessages(ChangeGroupLayout layout, boolean left) {
myLayout = layout;
myLeft = left;
EditorComponent editorComponent = (left ? myLayout.getLeftComponent() : myLayout.getRightComponent());
myGutter = (editorComponent).getMessagesGutter();
myUpdateQueue = new MergingUpdateQueue("ChangeGroupMessages", 500, true, editorComponent, null, null, true);
myUpdateQueue.setRestartTimerOnAdd(true);
}
public void startMaintaining() {
myLayout.addInvalidateListener(new ChangeGroupInvalidateListener() {
public void changeGroupsInvalidated() {
myUpdateQueue.queue(new Update(myUpdateIdentity) {
public void run() {
if (myLayout.isValid()) {
rebuildGutterMessages();
}
}
});
}
});
}
public void dispose() {
myUpdateQueue.dispose();
myGutter.removeMessages(ourOwner);
}
private void rebuildGutterMessages() {
myGutter.removeMessages(ourOwner);
ListSequence.fromList(myLayout.getChangeGroups()).visitAll(new IVisitor<ChangeGroup>() {
public void visit(ChangeGroup cg) {
myGutter.add(new ChangeGroupMessages.MyChangeGroupMessage(cg));
}
});
}
public static void startMaintaining(ChangeGroupLayout layout) {
new ChangeGroupMessages(layout, false).startMaintaining();
new ChangeGroupMessages(layout, true).startMaintaining();
}
private class MyChangeGroupMessage implements SimpleEditorMessage {
private ChangeGroup myChangeGroup;
private MyChangeGroupMessage(ChangeGroup changeGroup) {
myChangeGroup = changeGroup;
}
@Override
public EditorMessageOwner getOwner() {
return ChangeGroupMessages.ourOwner;
}
@Override
public Color getColor() {
return ChangeColors.get(myChangeGroup.getChangeType());
}
@Override
public String getMessage() {
return null;
}
@Override
public int getStart(jetbrains.mps.openapi.editor.EditorComponent component) {
return (int) myChangeGroup.getBounds(myLeft).start();
}
@Override
public int getHeight(jetbrains.mps.openapi.editor.EditorComponent component) {
return myChangeGroup.getBounds(myLeft).length();
}
public MessageStatus getStatus() {
return MessageStatus.OK;
}
public SNode getNode() {
return null;
}
public boolean sameAs(SimpleEditorMessage message) {
return message instanceof ChangeGroupMessages && this.equals(message);
}
public int getPriority() {
return 0;
}
public boolean showInGutter() {
return false;
}
}
}