Created
September 27, 2013 13:54
-
-
Save dkandalov/6728950 to your computer and use it in GitHub Desktop.
Really lame code to show text diff using IntelliJ diff tool
(this code is for https://github.com/dkandalov/live-plugin)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.intellij.icons.AllIcons | |
import com.intellij.openapi.diff.DiffContent | |
import com.intellij.openapi.diff.DiffRequest | |
import com.intellij.openapi.diff.DiffTool | |
import com.intellij.openapi.diff.SimpleContent | |
import com.intellij.openapi.diff.impl.DiffPanelImpl | |
import com.intellij.openapi.fileTypes.FileType | |
import com.intellij.openapi.fileTypes.FileTypes | |
import com.intellij.openapi.project.Project | |
import com.intellij.openapi.wm.WindowManager | |
import com.intellij.openapi.wm.ex.WindowManagerEx | |
import javax.swing.JComponent | |
import javax.swing.JFrame | |
import javax.swing.JPanel | |
import java.awt.* | |
import java.awt.event.KeyEvent | |
import java.awt.event.KeyListener | |
import static liveplugin.PluginUtil.* | |
if (isIdeStartup) return | |
def left = """same text | |
different text | |
only on the left side | |
""" | |
def right = """same text | |
a bit different text | |
only on the right side | |
""" | |
showDiff(project, left, right) | |
def showDiff(Project project, String left, String right, FileType leftFileType = FileTypes.PLAIN_TEXT, FileType rightFileType = FileTypes.PLAIN_TEXT, | |
String leftTitle = "", String rightTitle = "", String windowTitle = "") { | |
def leftContent = new SimpleContent(left, FileTypes.PLAIN_TEXT) | |
def rightContent = new SimpleContent(right, FileTypes.PLAIN_TEXT) | |
def diffPanel = new DiffPanelImpl((Window) null, project, (boolean) true, (boolean) true, (int) 0, (DiffTool) null) | |
diffPanel.enableToolbar(false) | |
diffPanel.requestFocus = false | |
diffPanel.diffRequest = new MyDiffRequest(leftContent, rightContent, leftTitle, rightTitle, windowTitle) | |
JFrame jframe = new JFrame().with { | |
add(new JPanel().with { | |
layout = new BorderLayout() | |
add(diffPanel.component, BorderLayout.CENTER) | |
it | |
}) | |
preferredSize = WindowManagerEx.instance.getFrame(project).size | |
pack() | |
requestFocus() | |
visible = true | |
iconImage = WindowManagerEx.instance.getFrame(project)?.iconImage | |
it | |
} | |
addKeyHandlerRecursivelyTo(jframe.rootPane, jframe) | |
jframe | |
} | |
class MyDiffRequest extends DiffRequest { | |
private final leftContent | |
private final rightContent | |
private final leftTitle | |
private final rightTitle | |
private final windowTitle | |
MyDiffRequest(leftContent, rightContent, leftTitle = "", rightTitle = "", windowTitle = "") { | |
super(null) | |
this.leftContent = leftContent | |
this.rightContent = rightContent | |
this.leftTitle = leftTitle | |
this.rightTitle = rightTitle | |
this.windowTitle = windowTitle | |
} | |
@Override DiffContent[] getContents() { [leftContent, rightContent] } | |
@Override String[] getContentTitles() { [leftTitle, rightTitle] } | |
@Override String getWindowTitle() { windowTitle } | |
} | |
def addKeyHandlerRecursivelyTo(JComponent component, JFrame jframe) { | |
component.addKeyListener(new KeyListener() { | |
@Override void keyReleased(KeyEvent keyEvent) { | |
if (keyEvent.keyCode == KeyEvent.VK_ESCAPE) { | |
show("enter") | |
jframe.dispose() | |
} | |
} | |
@Override void keyTyped(KeyEvent e) {} | |
@Override void keyPressed(KeyEvent e) {} | |
}) | |
component.components.each{ addKeyHandlerRecursivelyTo(it, jframe) } | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment