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