Created
March 19, 2020 23:21
-
-
Save digitalrinaldo/be9418b1769bb8b87d64e123a808e02f to your computer and use it in GitHub Desktop.
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
package org.intellij.sdk.action; | |
import com.intellij.openapi.editor.CaretModel; | |
import com.intellij.openapi.editor.Editor; | |
import com.intellij.openapi.editor.LogicalPosition; | |
import com.intellij.openapi.editor.VisualPosition; | |
import com.intellij.openapi.editor.event.EditorMouseListener; | |
import com.intellij.openapi.project.Project; | |
import com.intellij.psi.*; | |
import org.jetbrains.annotations.NotNull; | |
public class EditorEyeTrackingAction extends com.intellij.openapi.actionSystem.AnAction { | |
Editor editor = null; | |
EditorMouseListener editorMouseListener = null; | |
com.intellij.openapi.editor.event.CaretListener caretListener = new com.intellij.openapi.editor.event.CaretListener() { | |
@Override | |
public void caretPositionChanged(com.intellij.openapi.editor.event.CaretEvent e) { | |
System.out.println(e.toString()); | |
} | |
}; | |
private void physicalToLogical(java.awt.Point p) { | |
LogicalPosition logicalPosition = editor.xyToLogicalPosition(p); | |
System.out.println("given:" + p + " logicalPosition:" + logicalPosition.toString()); | |
} | |
private java.awt.event.MouseEvent mouseEventData(com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = (java.awt.event.MouseEvent) event.getMouseEvent(); | |
System.out.println(mouseEvent.getPoint().toString() + "|" + mouseEvent.getXOnScreen() + "," + mouseEvent.getYOnScreen()); | |
return (mouseEvent); | |
} | |
class LocalEditorMouseListener implements EditorMouseListener { | |
@Override | |
public void mousePressed(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
@Override | |
public void mouseClicked(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
@Override | |
public void mouseReleased(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
@Override | |
public void mouseEntered(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
@Override | |
public void mouseExited(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
} | |
com.intellij.openapi.editor.event.EditorMouseMotionListener editorMouseMotionListener = new com.intellij.openapi.editor.event.EditorMouseMotionListener() { | |
@Override | |
public void mouseMoved(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
@Override | |
public void mouseDragged(@org.jetbrains.annotations.NotNull com.intellij.openapi.editor.event.EditorMouseEvent event) { | |
java.awt.event.MouseEvent mouseEvent = mouseEventData(event); | |
physicalToLogical(mouseEvent.getPoint()); | |
} | |
}; | |
private void caretActivities(@NotNull final com.intellij.openapi.actionSystem.AnActionEvent e) { | |
editor = e.getRequiredData(com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR); | |
CaretModel caretModel = editor.getCaretModel(); | |
caretModel.addCaretListener(caretListener); | |
com.intellij.openapi.editor.Caret primaryCaret = caretModel.getPrimaryCaret(); | |
LogicalPosition logicalPos = primaryCaret.getLogicalPosition(); | |
VisualPosition visualPos = primaryCaret.getVisualPosition(); | |
int caretOffset = primaryCaret.getOffset(); | |
StringBuilder report = new StringBuilder(logicalPos.toString() + "\n"); | |
report.append(visualPos.toString() + "\n"); | |
report.append("Offset: " + caretOffset); | |
System.out.println(report.toString() + "Caret Parameters Eye Tracking"); | |
final Project project = editor.getProject(); | |
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); | |
System.out.println(psiFile.toString()); | |
PsiElement element = psiFile.findElementAt(editor.getCaretModel().getOffset()); | |
System.out.println(element.toString()); | |
PsiMethod containingMethod = com.intellij.psi.util.PsiTreeUtil.getParentOfType(element, PsiMethod.class); | |
System.out.println(containingMethod.toString()); | |
PsiClass containingClass = containingMethod.getContainingClass(); | |
System.out.println(containingClass.toString()); | |
LogicalPosition newPosition = new com.intellij.openapi.editor.LogicalPosition(logicalPos.column / 2, logicalPos.line / 2); | |
System.out.println("Move to:" + newPosition); | |
caretModel.moveToLogicalPosition(newPosition); | |
} | |
private void mouseActivities(@NotNull final com.intellij.openapi.actionSystem.AnActionEvent e) { | |
final Editor editor = e.getRequiredData(com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR); | |
editor.addEditorMouseListener(editorMouseListener); | |
//System.out.println(editor.getMouseEventArea( event ) ); | |
} | |
@Override | |
public void actionPerformed(@NotNull final com.intellij.openapi.actionSystem.AnActionEvent e) { | |
caretActivities(e); | |
} | |
@Override | |
public void update(@NotNull final com.intellij.openapi.actionSystem.AnActionEvent e) { | |
// Get required data keys | |
final Project project = e.getProject(); | |
final Editor editor = e.getData(com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR); | |
System.out.println ( "editor:" + editor ); | |
//Set visibility only in case of existing project and editor | |
e.getPresentation().setEnabledAndVisible(project != null && editor != null); | |
editorMouseListener = new LocalEditorMouseListener(); | |
editor.addEditorMouseMotionListener(editorMouseMotionListener); | |
final CaretModel caretModel = editor.getCaretModel(); | |
caretModel.addCaretListener(caretListener); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment