Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save digitalrinaldo/be9418b1769bb8b87d64e123a808e02f to your computer and use it in GitHub Desktop.
Save digitalrinaldo/be9418b1769bb8b87d64e123a808e02f to your computer and use it in GitHub Desktop.
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