diff --git a/404.html b/404.html index 4a5f541..66b3026 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ - + @@ -29,11 +29,11 @@ - + - + - +
diff --git a/about/index.html b/about/index.html index dbc5f9c..7c413eb 100644 --- a/about/index.html +++ b/about/index.html @@ -4,7 +4,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/changelog/index.html b/changelog/index.html index b1b2499..6403f5b 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -4,7 +4,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/data-format/index.html b/data-format/index.html index 2a967cc..975fb82 100644 --- a/data-format/index.html +++ b/data-format/index.html @@ -4,7 +4,7 @@ - + @@ -32,12 +32,12 @@ - + - + - - + +
diff --git a/developer/index.html b/developer/index.html index 3df2192..21529b4 100644 --- a/developer/index.html +++ b/developer/index.html @@ -4,7 +4,7 @@ - + @@ -12,7 +12,7 @@ Developer Guide - + @@ -21,23 +21,23 @@ - + - + - + - + - - + +
@@ -257,6 +257,7 @@

Please refer to IntelliJ Platform SDK for more details. +We also provide the JavaDoc of the source code. Feel free to contact us if you need any help.

diff --git a/docs/actions/addlabelaction.html b/docs/actions/addlabelaction.html new file mode 100644 index 0000000..4a874cd --- /dev/null +++ b/docs/actions/addlabelaction.html @@ -0,0 +1,277 @@ + + + + +AddLabelAction + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package actions
+

Class AddLabelAction

+
+
java.lang.Object +
com.intellij.openapi.actionSystem.AnAction +
actions.AddLabelAction
+
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.actionSystem.ActionUpdateThreadAware, com.intellij.openapi.project.PossiblyDumbAware
+
+
+
public class AddLabelAction +extends com.intellij.openapi.actionSystem.AnAction
+
This class is the action for adding labels.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.actionSystem.AnAction

    +com.intellij.openapi.actionSystem.AnAction.TransparentUpdate
    +
    +

    Nested classes/interfaces inherited from interface com.intellij.openapi.actionSystem.ActionUpdateThreadAware

    +com.intellij.openapi.actionSystem.ActionUpdateThreadAware.Recursive
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private String
    + +
     
    +
    private static boolean
    + +
     
    +
    +
    +

    Fields inherited from class com.intellij.openapi.actionSystem.AnAction

    +ACTIONS_KEY, EMPTY_ARRAY
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    actionPerformed(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    This method is called when the action is performed.
    +
    +
    @NotNull String
    + +
     
    +
    void
    +
    setDescription(String description)
    +
     
    +
    static void
    +
    setIsEnabled(boolean isEnabled)
    +
     
    +
    void
    +
    update(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
     
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.AnAction

    +addSynonym, addTextOverride, addTextOverride, applyTextOverride, applyTextOverride, beforeActionPerformedUpdate, copyActionTextOverride, copyActionTextOverrides, copyFrom, copyShortcutFrom, displayTextInToolbar, getActionUpdateThread, getEventProject, getShortcutSet, getSynonyms, getTemplatePresentation, isDefaultIcon, isDumbAware, isEnabledInModalContext, isInInjectedContext, isTransparentUpdate, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, setDefaultIcon, setEnabledInModalContext, setInjectedContext, setShortcutSet, startInTransaction, toString, unregisterCustomShortcutSet, useSmallerFontForTextInToolbar
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      description

      +
      private String description
      +
      +
    • +
    • +
      +

      isEnabled

      +
      private static boolean isEnabled
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddLabelAction

      +
      public AddLabelAction()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      update

      +
      public void update(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      +
      Overrides:
      +
      update in class com.intellij.openapi.actionSystem.AnAction
      +
      +
      +
    • +
    • +
      +

      actionPerformed

      +
      public void actionPerformed(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      This method is called when the action is performed. It will show a notification to indicate that the label is successfully added.
      +
      +
      Specified by:
      +
      actionPerformed in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    • +
      +

      setDescription

      +
      public void setDescription(String description)
      +
      +
    • +
    • +
      +

      setIsEnabled

      +
      public static void setIsEnabled(boolean isEnabled)
      +
      +
    • +
    • +
      +

      getTemplateText

      +
      @NotNull +public @NotNull String getTemplateText()
      +
      +
      Overrides:
      +
      getTemplateText in class com.intellij.openapi.actionSystem.AnAction
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/actions/addlabelactiongroup.html b/docs/actions/addlabelactiongroup.html new file mode 100644 index 0000000..de08b8e --- /dev/null +++ b/docs/actions/addlabelactiongroup.html @@ -0,0 +1,253 @@ + + + + +AddLabelActionGroup + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package actions
+

Class AddLabelActionGroup

+
+
java.lang.Object +
com.intellij.openapi.actionSystem.AnAction +
com.intellij.openapi.actionSystem.ActionGroup +
com.intellij.openapi.actionSystem.DefaultActionGroup +
actions.AddLabelActionGroup
+
+
+
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.actionSystem.ActionUpdateThreadAware, com.intellij.openapi.project.PossiblyDumbAware
+
+
+
public class AddLabelActionGroup +extends com.intellij.openapi.actionSystem.DefaultActionGroup
+
This class is the action group for adding labels.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.actionSystem.AnAction

    +com.intellij.openapi.actionSystem.AnAction.TransparentUpdate
    +
    +

    Nested classes/interfaces inherited from interface com.intellij.openapi.actionSystem.ActionUpdateThreadAware

    +com.intellij.openapi.actionSystem.ActionUpdateThreadAware.Recursive
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private boolean
    + +
     
    +
    private static boolean
    + +
     
    +
    +
    +

    Fields inherited from class com.intellij.openapi.actionSystem.ActionGroup

    +EMPTY_GROUP
    +
    +

    Fields inherited from class com.intellij.openapi.actionSystem.AnAction

    +ACTIONS_KEY, EMPTY_ARRAY
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    static void
    +
    setIsEnabled(boolean isEnabled)
    +
     
    +
    void
    +
    update(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    This method is called when the action is performed.
    +
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.DefaultActionGroup

    +add, add, add, add, addAction, addAction, addAction, addAll, addAll, addAll, addAll, addSeparator, addSeparator, containsAction, copyFromGroup, createFlatGroup, createPopupGroup, createPopupGroupWithEmptyText, createUserDataAwareGroup, getChildActionsOrStubs, getChildren, getChildren, getChildrenCount, getModificationStamp, remove, remove, remove, removeAll, replaceAction
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.ActionGroup

    +actionPerformed, canBePerformed, disableIfNoVisibleChildren, hideIfNoVisibleChildren, isPopup, isPopup, isPrimary, isSearchable, postProcessVisibleChildren, replace, setPopup, setSearchable
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.AnAction

    +addSynonym, addTextOverride, addTextOverride, applyTextOverride, applyTextOverride, beforeActionPerformedUpdate, copyActionTextOverride, copyActionTextOverrides, copyFrom, copyShortcutFrom, displayTextInToolbar, getActionUpdateThread, getEventProject, getShortcutSet, getSynonyms, getTemplatePresentation, getTemplateText, isDefaultIcon, isDumbAware, isEnabledInModalContext, isInInjectedContext, isTransparentUpdate, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, setDefaultIcon, setEnabledInModalContext, setInjectedContext, setShortcutSet, startInTransaction, toString, unregisterCustomShortcutSet, useSmallerFontForTextInToolbar
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      isEnabled

      +
      private static boolean isEnabled
      +
      +
    • +
    • +
      +

      defaultLabelsLoaded

      +
      private boolean defaultLabelsLoaded
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddLabelActionGroup

      +
      public AddLabelActionGroup()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      update

      +
      public void update(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      This method is called when the action is performed. It will register all the AddLabelActions from the configuration file.
      +
      +
      Overrides:
      +
      update in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    • +
      +

      setIsEnabled

      +
      public static void setIsEnabled(boolean isEnabled)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/actions/configaction.html b/docs/actions/configaction.html new file mode 100644 index 0000000..924f414 --- /dev/null +++ b/docs/actions/configaction.html @@ -0,0 +1,245 @@ + + + + +ConfigAction + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package actions
+

Class ConfigAction

+
+
java.lang.Object +
com.intellij.openapi.actionSystem.AnAction +
actions.ConfigAction
+
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.actionSystem.ActionUpdateThreadAware, com.intellij.openapi.project.PossiblyDumbAware
+
+
+
public class ConfigAction +extends com.intellij.openapi.actionSystem.AnAction
+
This class is the action for configuring the application.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.actionSystem.AnAction

    +com.intellij.openapi.actionSystem.AnAction.TransparentUpdate
    +
    +

    Nested classes/interfaces inherited from interface com.intellij.openapi.actionSystem.ActionUpdateThreadAware

    +com.intellij.openapi.actionSystem.ActionUpdateThreadAware.Recursive
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private static boolean
    + +
     
    +
    +
    +

    Fields inherited from class com.intellij.openapi.actionSystem.AnAction

    +ACTIONS_KEY, EMPTY_ARRAY
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    actionPerformed(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    This method is called when the action is performed.
    +
    +
    static void
    +
    setIsEnabled(boolean isEnabled)
    +
     
    +
    void
    +
    update(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
     
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.AnAction

    +addSynonym, addTextOverride, addTextOverride, applyTextOverride, applyTextOverride, beforeActionPerformedUpdate, copyActionTextOverride, copyActionTextOverrides, copyFrom, copyShortcutFrom, displayTextInToolbar, getActionUpdateThread, getEventProject, getShortcutSet, getSynonyms, getTemplatePresentation, getTemplateText, isDefaultIcon, isDumbAware, isEnabledInModalContext, isInInjectedContext, isTransparentUpdate, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, setDefaultIcon, setEnabledInModalContext, setInjectedContext, setShortcutSet, startInTransaction, toString, unregisterCustomShortcutSet, useSmallerFontForTextInToolbar
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      isEnabled

      +
      private static boolean isEnabled
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ConfigAction

      +
      public ConfigAction()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      update

      +
      public void update(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      +
      Overrides:
      +
      update in class com.intellij.openapi.actionSystem.AnAction
      +
      +
      +
    • +
    • +
      +

      actionPerformed

      +
      public void actionPerformed(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      This method is called when the action is performed. It will show the configuration dialog.
      +
      +
      Specified by:
      +
      actionPerformed in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    • +
      +

      setIsEnabled

      +
      public static void setIsEnabled(boolean isEnabled)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/actions/package-summary.html b/docs/actions/package-summary.html new file mode 100644 index 0000000..649c8e4 --- /dev/null +++ b/docs/actions/package-summary.html @@ -0,0 +1,100 @@ + + + + +actions + + + + + + + + + + + + + + + +
+ +
+
+
+

Package actions

+
+
+
package actions
+
+ +
+
+
+
+ + diff --git a/docs/actions/package-tree.html b/docs/actions/package-tree.html new file mode 100644 index 0000000..f3b1f28 --- /dev/null +++ b/docs/actions/package-tree.html @@ -0,0 +1,87 @@ + + + + +actions Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package actions

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/actions/pauseresumetrackingaction.html b/docs/actions/pauseresumetrackingaction.html new file mode 100644 index 0000000..2e1c980 --- /dev/null +++ b/docs/actions/pauseresumetrackingaction.html @@ -0,0 +1,241 @@ + + + + +PauseResumeTrackingAction + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package actions
+

Class PauseResumeTrackingAction

+
+
java.lang.Object +
com.intellij.openapi.actionSystem.AnAction +
actions.PauseResumeTrackingAction
+
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.actionSystem.ActionUpdateThreadAware, com.intellij.openapi.project.PossiblyDumbAware
+
+
+
public class PauseResumeTrackingAction +extends com.intellij.openapi.actionSystem.AnAction
+
This class is the action for pausing/resuming tracking.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.actionSystem.AnAction

    +com.intellij.openapi.actionSystem.AnAction.TransparentUpdate
    +
    +

    Nested classes/interfaces inherited from interface com.intellij.openapi.actionSystem.ActionUpdateThreadAware

    +com.intellij.openapi.actionSystem.ActionUpdateThreadAware.Recursive
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private final ScreenRecorder
    + +
     
    +
    +
    +

    Fields inherited from class com.intellij.openapi.actionSystem.AnAction

    +ACTIONS_KEY, EMPTY_ARRAY
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    actionPerformed(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    This method is called when the action is performed.
    +
    +
    void
    +
    update(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    Update the text of the action button.
    +
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.AnAction

    +addSynonym, addTextOverride, addTextOverride, applyTextOverride, applyTextOverride, beforeActionPerformedUpdate, copyActionTextOverride, copyActionTextOverrides, copyFrom, copyShortcutFrom, displayTextInToolbar, getActionUpdateThread, getEventProject, getShortcutSet, getSynonyms, getTemplatePresentation, getTemplateText, isDefaultIcon, isDumbAware, isEnabledInModalContext, isInInjectedContext, isTransparentUpdate, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, setDefaultIcon, setEnabledInModalContext, setInjectedContext, setShortcutSet, startInTransaction, toString, unregisterCustomShortcutSet, useSmallerFontForTextInToolbar
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      screenRecorder

      +
      private final ScreenRecorder screenRecorder
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      PauseResumeTrackingAction

      +
      public PauseResumeTrackingAction()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      update

      +
      public void update(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      Update the text of the action button. If the tracking is not started, the button is disabled.
      +
      +
      Overrides:
      +
      update in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    • +
      +

      actionPerformed

      +
      public void actionPerformed(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      This method is called when the action is performed. It will pause/resume tracking.
      +
      +
      Specified by:
      +
      actionPerformed in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/actions/startstoptrackingaction.html b/docs/actions/startstoptrackingaction.html new file mode 100644 index 0000000..01db4be --- /dev/null +++ b/docs/actions/startstoptrackingaction.html @@ -0,0 +1,328 @@ + + + + +StartStopTrackingAction + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package actions
+

Class StartStopTrackingAction

+
+
java.lang.Object +
com.intellij.openapi.actionSystem.AnAction +
actions.StartStopTrackingAction
+
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.actionSystem.ActionUpdateThreadAware, com.intellij.openapi.project.PossiblyDumbAware
+
+
+
public class StartStopTrackingAction +extends com.intellij.openapi.actionSystem.AnAction
+
This class is the action for starting/stopping tracking.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.actionSystem.AnAction

    +com.intellij.openapi.actionSystem.AnAction.TransparentUpdate
    +
    +

    Nested classes/interfaces inherited from interface com.intellij.openapi.actionSystem.ActionUpdateThreadAware

    +com.intellij.openapi.actionSystem.ActionUpdateThreadAware.Recursive
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    (package private) Config
    + +
    +
    This variable is the configuration.
    +
    +
    private static EyeTracker
    + +
    +
    This variable is the eye tracker.
    +
    +
    private static IDETracker
    + +
    +
    This variable is the IDE tracker.
    +
    +
    private static boolean
    + +
    +
    This variable indicates whether the tracking is started.
    +
    +
    private final ScreenRecorder
    + +
    +
    This variable is the screen recorder.
    +
    +
    +
    +

    Fields inherited from class com.intellij.openapi.actionSystem.AnAction

    +ACTIONS_KEY, EMPTY_ARRAY
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    actionPerformed(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    This method is called when the action is performed.
    +
    +
    static boolean
    + +
     
    +
    static boolean
    + +
     
    +
    static void
    + +
     
    +
    static void
    + +
     
    +
    void
    +
    update(@NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
    +
    +
    Update the text of the action button.
    +
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.actionSystem.AnAction

    +addSynonym, addTextOverride, addTextOverride, applyTextOverride, applyTextOverride, beforeActionPerformedUpdate, copyActionTextOverride, copyActionTextOverrides, copyFrom, copyShortcutFrom, displayTextInToolbar, getActionUpdateThread, getEventProject, getShortcutSet, getSynonyms, getTemplatePresentation, getTemplateText, isDefaultIcon, isDumbAware, isEnabledInModalContext, isInInjectedContext, isTransparentUpdate, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, registerCustomShortcutSet, setDefaultIcon, setEnabledInModalContext, setInjectedContext, setShortcutSet, startInTransaction, toString, unregisterCustomShortcutSet, useSmallerFontForTextInToolbar
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      isTracking

      +
      private static boolean isTracking
      +
      This variable indicates whether the tracking is started.
      +
      +
    • +
    • +
      +

      iDETracker

      +
      private static IDETracker iDETracker
      +
      This variable is the IDE tracker.
      +
      +
    • +
    • +
      +

      eyeTracker

      +
      private static EyeTracker eyeTracker
      +
      This variable is the eye tracker.
      +
      +
    • +
    • +
      +

      screenRecorder

      +
      private final ScreenRecorder screenRecorder
      +
      This variable is the screen recorder.
      +
      +
    • +
    • +
      +

      config

      +
      Config config
      +
      This variable is the configuration.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      StartStopTrackingAction

      +
      public StartStopTrackingAction()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      update

      +
      public void update(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      Update the text of the action button.
      +
      +
      Overrides:
      +
      update in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    • +
      +

      actionPerformed

      +
      public void actionPerformed(@NotNull + @NotNull com.intellij.openapi.actionSystem.AnActionEvent e)
      +
      This method is called when the action is performed. It will start/stop tracking.
      +
      +
      Specified by:
      +
      actionPerformed in class com.intellij.openapi.actionSystem.AnAction
      +
      Parameters:
      +
      e - The action event.
      +
      +
      +
    • +
    • +
      +

      isTracking

      +
      public static boolean isTracking()
      +
      +
    • +
    • +
      +

      isPaused

      +
      public static boolean isPaused()
      +
      +
    • +
    • +
      +

      pauseTracking

      +
      public static void pauseTracking()
      +
      +
    • +
    • +
      +

      resumeTracking

      +
      public static void resumeTracking()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html new file mode 100644 index 0000000..e040497 --- /dev/null +++ b/docs/allclasses-index.html @@ -0,0 +1,128 @@ + + + + +All Classes and Interfaces + + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes and Interfaces

+
+
+
Classes
+
+
Class
+
Description
+ +
+
This class is the action for adding labels.
+
+ +
+
This class is the action group for adding labels.
+
+ +
+
This class is used to create a dialog to show alert message.
+
+ +
+
This class is used to check the availability of the python environment and the eye-tracking device, and to get the eye tracker name and the available frequencies.
+
+ +
+
This class is used to store the configuration of the application.
+
+ +
+
This class is the action for configuring the application.
+
+ +
+
This class is used to create the configuration dialog.
+
+ +
+
This class is the eye tracker.
+
+ +
+
This class is the IDE tracker.
+
+ +
+
This class is used to detect the operating system.
+
+ +
+
This class is the action for pausing/resuming tracking.
+
+ +
+
This class provides the API for getting real-time data from the IDE and eye tracker.
+
+ +
+
This class is used to get the relative path of a file compared to the project path.
+
+ +
+
This class is the screen recorder.
+
+ +
+
This class is the action for starting/stopping tracking.
+
+ +
+
This class is used to write the XML document to the XML file.
+
+
+
+
+
+
+ + diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html new file mode 100644 index 0000000..49132fe --- /dev/null +++ b/docs/allpackages-index.html @@ -0,0 +1,74 @@ + + + + +All Packages + + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
Package Summary
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+
+
+
+
+ + diff --git a/docs/api/package-summary.html b/docs/api/package-summary.html new file mode 100644 index 0000000..f1b587c --- /dev/null +++ b/docs/api/package-summary.html @@ -0,0 +1,84 @@ + + + + +api + + + + + + + + + + + + + + + +
+ +
+
+
+

Package api

+
+
+
package api
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    This class provides the API for getting real-time data from the IDE and eye tracker.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/api/package-tree.html b/docs/api/package-tree.html new file mode 100644 index 0000000..5949cf4 --- /dev/null +++ b/docs/api/package-tree.html @@ -0,0 +1,71 @@ + + + + +api Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package api

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/api/realtimedataimpl.html b/docs/api/realtimedataimpl.html new file mode 100644 index 0000000..3f8ef45 --- /dev/null +++ b/docs/api/realtimedataimpl.html @@ -0,0 +1,342 @@ + + + + +RealtimeDataImpl + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package api
+

Class RealtimeDataImpl

+
+
java.lang.Object +
api.RealtimeDataImpl
+
+
+
+
public class RealtimeDataImpl +extends Object
+
This class provides the API for getting real-time data from the IDE and eye tracker.
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      realtimeData

      +
      private static RealtimeDataImpl realtimeData
      +
      +
    • +
    • +
      +

      socket

      +
      Socket socket
      +
      +
    • +
    • +
      +

      dataInputStream

      +
      InputStream dataInputStream
      +
      +
    • +
    • +
      +

      ideTrackerDataHandler

      +
      private Consumer<String> ideTrackerDataHandler
      +
      +
    • +
    • +
      +

      eyeTrackerDataHandler

      +
      private Consumer<String> eyeTrackerDataHandler
      +
      +
    • +
    • +
      +

      ideTracker

      +
      private static IDETracker ideTracker
      +
      +
    • +
    • +
      +

      eyeTracker

      +
      private static EyeTracker eyeTracker
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      RealtimeDataImpl

      +
      private RealtimeDataImpl()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getInstance

      +
      public static RealtimeDataImpl getInstance()
      +
      +
    • +
    • +
      +

      checkEnvironment

      +
      public void checkEnvironment()
      +
      +
    • +
    • +
      +

      getRawIDETrackerData

      +
      public void getRawIDETrackerData(com.intellij.openapi.project.Project project) + throws ParserConfigurationException
      +
      +
      Throws:
      +
      ParserConfigurationException
      +
      +
      +
    • +
    • +
      +

      getRawEyeTrackerData

      +
      public void getRawEyeTrackerData()
      +
      +
    • +
    • +
      +

      stopIDETrackerData

      +
      public void stopIDETrackerData() + throws TransformerException
      +
      +
      Throws:
      +
      TransformerException
      +
      +
      +
    • +
    • +
      +

      stopEyeTrackerData

      +
      public void stopEyeTrackerData()
      +
      +
    • +
    • +
      +

      getHandledIDETrackerData

      +
      public void getHandledIDETrackerData(com.intellij.openapi.project.Project project) + throws ParserConfigurationException, +IOException
      +
      +
      Throws:
      +
      ParserConfigurationException
      +
      IOException
      +
      +
      +
    • +
    • +
      +

      getHandledEyeTrackerData

      +
      public void getHandledEyeTrackerData()
      +
      +
    • +
    • +
      +

      setIDETrackerDataHandler

      +
      public void setIDETrackerDataHandler(Consumer<String> ideTrackerDataHandler)
      +
      +
    • +
    • +
      +

      setEyeTrackerDataHandler

      +
      public void setEyeTrackerDataHandler(Consumer<String> eyeTrackerDataHandler)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/components/alertdialog.html b/docs/components/alertdialog.html new file mode 100644 index 0000000..ea8756e --- /dev/null +++ b/docs/components/alertdialog.html @@ -0,0 +1,258 @@ + + + + +AlertDialog + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package components
+

Class AlertDialog

+
+
java.lang.Object +
com.intellij.openapi.ui.DialogWrapper +
components.AlertDialog
+
+
+
+
+
public class AlertDialog +extends com.intellij.openapi.ui.DialogWrapper
+
This class is used to create a dialog to show alert message.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.ui.DialogWrapper

    +com.intellij.openapi.ui.DialogWrapper.CancelAction, com.intellij.openapi.ui.DialogWrapper.DialogStyle, com.intellij.openapi.ui.DialogWrapper.DialogWrapperAction, com.intellij.openapi.ui.DialogWrapper.DialogWrapperExitAction, com.intellij.openapi.ui.DialogWrapper.DoNotAskOption, com.intellij.openapi.ui.DialogWrapper.HelpAction, com.intellij.openapi.ui.DialogWrapper.IdeModalityType, com.intellij.openapi.ui.DialogWrapper.OkAction
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private final Icon
    + +
    +
    The icon of the alert message.
    +
    +
    private final String
    + +
    +
    The label of the alert message.
    +
    +
    +
    +

    Fields inherited from class com.intellij.openapi.ui.DialogWrapper

    +CANCEL_EXIT_CODE, CLOSE_EXIT_CODE, DEFAULT_ACTION, DIALOG_CONTENT_PANEL_PROPERTY, ERROR_FOREGROUND_COLOR, FOCUSED_ACTION, IS_VISUAL_PADDING_COMPENSATED_ON_COMPONENT_LEVEL_KEY, myCancelAction, myCheckBoxDoNotShowDialog, myDisposable, myHelpAction, myOKAction, myPerformAction, myPreferredFocusedComponent, NEXT_USER_EXIT_CODE, OK_EXIT_CODE
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    +
    AlertDialog(String label, + Icon icon)
    +
    +
    The constructor of the class.
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    protected Action @NotNull []
    + +
    +
    Create the OK button.
    +
    +
    protected @Nullable JComponent
    + +
    +
    Create the center panel of the dialog.
    +
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.ui.DialogWrapper

    +addKeyListener, addMouseListener, addMouseListener, applyFields, beforeShowCallback, canRecordDialogId, centerRelativeToParent, cleanupRootPane, cleanupWindowListeners, clickDefaultButton, close, close, continuousValidation, createButtonsPanel, createCancelAction, createContentPane, createContentPaneBorder, createDefaultActions, createDefaultBorder, createDoNotAskCheckbox, createHelpButton, createJButtonForAction, createJButtonForAction, createLeftSideActions, createNorthPanel, createPeer, createPeer, createPeer, createPeer, createPeer, createRootLayout, createSouthAdditionalPanel, createSouthPanel, createTitlePane, dispose, disposeIfNeeded, doCancelAction, doCancelAction, doHelpAction, doOKAction, doValidate, doValidateAll, extractMnemonic, findInstance, findInstanceFromFocus, fitToScreen, getButton, getButtonMap, getCancelAction, getContentPane, getContentPanel, getDimensionKey, getDimensionServiceKey, getDisposable, getDoNotShowMessage, getErrorTextAlignment, getExitCode, getHelpAction, getHelpId, getHorizontalStretch, getInitialLocation, getInitialSize, getLocation, getOKAction, getOwner, getPeer, getPreferredFocusedComponent, getPreferredSize, getRootPane, getSize, getStyle, getTitle, getValidationThreadToUse, getVerticalStretch, getWindow, hasErrors, init, initResizeListener, initValidation, isAutoAdjustable, isDisposed, isModal, isModalProgress, isMoveHelpButtonLeft, isOK, isOKActionEnabled, isProgressDialog, isResizable, isShowing, isVisible, layoutButtonsPanel, pack, performOKAction, performValidateAll, postponeValidation, processDoNotAskOnOk, repaint, setAutoAdjustable, setButtonsAlignment, setCancelButtonText, setCrossClosesWindow, setDoNotAskOption, setDoNotAskOption, setErrorInfoAll, setErrorText, setErrorText, setHelpTooltip, setHorizontalStretch, setInitialLocationCallback, setLocation, setLocation, setModal, setOKActionEnabled, setOKButtonIcon, setOKButtonMnemonic, setOKButtonText, setOKButtonTooltip, setOnDeactivationAction, setResizable, setSize, setTitle, setUndecorated, setValidationDelay, setVerticalStretch, shouldAddErrorNearButtons, shouldCloseOnCross, show, showAndGet, showAndGetOk, startTrackingValidation, toBack, toBeShown, toFront, unregisterKeyboardActions, updateErrorInfo, validate
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      label

      +
      private final String label
      +
      The label of the alert message.
      +
      +
    • +
    • +
      +

      icon

      +
      private final Icon icon
      +
      The icon of the alert message.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AlertDialog

      +
      public AlertDialog(String label, + Icon icon)
      +
      The constructor of the class.
      +
      +
      Parameters:
      +
      label - The alert message.
      +
      icon - The icon of the alert message.
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createActions

      +
      protected Action @NotNull [] createActions()
      +
      Create the OK button.
      +
      +
      Overrides:
      +
      createActions in class com.intellij.openapi.ui.DialogWrapper
      +
      Returns:
      +
      The OK button.
      +
      +
      +
    • +
    • +
      +

      createCenterPanel

      +
      @Nullable +protected @Nullable JComponent createCenterPanel()
      +
      Create the center panel of the dialog.
      +
      +
      Specified by:
      +
      createCenterPanel in class com.intellij.openapi.ui.DialogWrapper
      +
      Returns:
      +
      The center panel of the dialog.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/components/configdialog.html b/docs/components/configdialog.html new file mode 100644 index 0000000..742783e --- /dev/null +++ b/docs/components/configdialog.html @@ -0,0 +1,448 @@ + + + + +ConfigDialog + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package components
+

Class ConfigDialog

+
+
java.lang.Object +
com.intellij.openapi.ui.DialogWrapper +
components.ConfigDialog
+
+
+
+
+
public class ConfigDialog +extends com.intellij.openapi.ui.DialogWrapper
+
This class is used to create the configuration dialog.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from class com.intellij.openapi.ui.DialogWrapper

    +com.intellij.openapi.ui.DialogWrapper.CancelAction, com.intellij.openapi.ui.DialogWrapper.DialogStyle, com.intellij.openapi.ui.DialogWrapper.DialogWrapperAction, com.intellij.openapi.ui.DialogWrapper.DialogWrapperExitAction, com.intellij.openapi.ui.DialogWrapper.DoNotAskOption, com.intellij.openapi.ui.DialogWrapper.HelpAction, com.intellij.openapi.ui.DialogWrapper.IdeModalityType, com.intellij.openapi.ui.DialogWrapper.OkAction
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private List<JCheckBox>
    + +
     
    +
    private static final com.intellij.openapi.ui.TextFieldWithBrowseButton
    + +
     
    +
    private final JComboBox<String>
    + +
     
    +
    private boolean
    + +
     
    +
    private final JComboBox<Double>
    + +
     
    +
    private static List<JTextField>
    + +
     
    +
    private final JPanel
    + +
     
    +
    private boolean
    + +
     
    +
    private static final com.intellij.openapi.ui.TextFieldWithBrowseButton
    + +
     
    +
    static String
    + +
     
    +
    static String
    + +
     
    +
    +
    +

    Fields inherited from class com.intellij.openapi.ui.DialogWrapper

    +CANCEL_EXIT_CODE, CLOSE_EXIT_CODE, DEFAULT_ACTION, DIALOG_CONTENT_PANEL_PROPERTY, ERROR_FOREGROUND_COLOR, FOCUSED_ACTION, IS_VISUAL_PADDING_COMPENSATED_ON_COMPONENT_LEVEL_KEY, myCancelAction, myCheckBoxDoNotShowDialog, myDisposable, myHelpAction, myOKAction, myPerformAction, myPreferredFocusedComponent, NEXT_USER_EXIT_CODE, OK_EXIT_CODE
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    +
    ConfigDialog(com.intellij.openapi.project.Project project)
    +
    +
    The constructor of the configuration dialog.
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    private void
    +
    addLabelArea(boolean isEmpty)
    +
    +
    Add the label area to the configuration dialog.
    +
    +
    protected JComponent
    + +
    +
    Create the center panel of the configuration dialog.
    +
    +
    protected void
    + +
    +
    Save the configuration when the OK button is clicked.
    +
    +
    static List<String>
    + +
    +
    Get the current labels in the configuration dialog.
    +
    +
    static String
    + +
    +
    Get the data output path in the configuration dialog.
    +
    +
    static String
    + +
    +
    Get the python interpreter path in the configuration dialog.
    +
    + + +
    +
    Get the selected checkboxes in the configuration dialog.
    +
    +
    private void
    + +
    +
    Load the configuration from the config.json file to the configuration dialog using the Config class.
    +
    +
    private void
    + +
    +
    Save the configuration from the configuration dialog to the config.json file using the Config class.
    +
    +
    void
    + +
    +
    Update the AddLabelAction group when the configuration is changed.
    +
    +
    +
    +
    +
    +

    Methods inherited from class com.intellij.openapi.ui.DialogWrapper

    +addKeyListener, addMouseListener, addMouseListener, applyFields, beforeShowCallback, canRecordDialogId, centerRelativeToParent, cleanupRootPane, cleanupWindowListeners, clickDefaultButton, close, close, continuousValidation, createActions, createButtonsPanel, createCancelAction, createContentPane, createContentPaneBorder, createDefaultActions, createDefaultBorder, createDoNotAskCheckbox, createHelpButton, createJButtonForAction, createJButtonForAction, createLeftSideActions, createNorthPanel, createPeer, createPeer, createPeer, createPeer, createPeer, createRootLayout, createSouthAdditionalPanel, createSouthPanel, createTitlePane, dispose, disposeIfNeeded, doCancelAction, doCancelAction, doHelpAction, doValidate, doValidateAll, extractMnemonic, findInstance, findInstanceFromFocus, fitToScreen, getButton, getButtonMap, getCancelAction, getContentPane, getContentPanel, getDimensionKey, getDimensionServiceKey, getDisposable, getDoNotShowMessage, getErrorTextAlignment, getExitCode, getHelpAction, getHelpId, getHorizontalStretch, getInitialLocation, getInitialSize, getLocation, getOKAction, getOwner, getPeer, getPreferredFocusedComponent, getPreferredSize, getRootPane, getSize, getStyle, getTitle, getValidationThreadToUse, getVerticalStretch, getWindow, hasErrors, init, initResizeListener, initValidation, isAutoAdjustable, isDisposed, isModal, isModalProgress, isMoveHelpButtonLeft, isOK, isOKActionEnabled, isProgressDialog, isResizable, isShowing, isVisible, layoutButtonsPanel, pack, performOKAction, performValidateAll, postponeValidation, processDoNotAskOnOk, repaint, setAutoAdjustable, setButtonsAlignment, setCancelButtonText, setCrossClosesWindow, setDoNotAskOption, setDoNotAskOption, setErrorInfoAll, setErrorText, setErrorText, setHelpTooltip, setHorizontalStretch, setInitialLocationCallback, setLocation, setLocation, setModal, setOKActionEnabled, setOKButtonIcon, setOKButtonMnemonic, setOKButtonText, setOKButtonTooltip, setOnDeactivationAction, setResizable, setSize, setTitle, setUndecorated, setValidationDelay, setVerticalStretch, shouldAddErrorNearButtons, shouldCloseOnCross, show, showAndGet, showAndGetOk, startTrackingValidation, toBack, toBeShown, toFront, unregisterKeyboardActions, updateErrorInfo, validate
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      checkBoxes

      +
      private List<JCheckBox> checkBoxes
      +
      +
    • +
    • +
      +

      panel

      +
      private final JPanel panel
      +
      +
    • +
    • +
      +

      labelAreas

      +
      private static List<JTextField> labelAreas
      +
      +
    • +
    • +
      +

      pythonInterpreterTextField

      +
      private static final com.intellij.openapi.ui.TextFieldWithBrowseButton pythonInterpreterTextField
      +
      +
    • +
    • +
      +

      dataOutputTextField

      +
      private static final com.intellij.openapi.ui.TextFieldWithBrowseButton dataOutputTextField
      +
      +
    • +
    • +
      +

      freqCombo

      +
      private final JComboBox<Double> freqCombo
      +
      +
    • +
    • +
      +

      deviceCombo

      +
      private final JComboBox<String> deviceCombo
      +
      +
    • +
    • +
      +

      pythonEnvironment

      +
      private boolean pythonEnvironment
      +
      +
    • +
    • +
      +

      eyeTracker

      +
      private boolean eyeTracker
      +
      +
    • +
    • +
      +

      selectDataOutputPlaceHolder

      +
      public static String selectDataOutputPlaceHolder
      +
      +
    • +
    • +
      +

      selectPythonInterpreterPlaceHolder

      +
      public static String selectPythonInterpreterPlaceHolder
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      loadConfig

      +
      private void loadConfig()
      +
      Load the configuration from the config.json file to the configuration dialog using the Config class.
      +
      +
    • +
    • +
      +

      saveConfig

      +
      private void saveConfig()
      +
      Save the configuration from the configuration dialog to the config.json file using the Config class.
      +
      +
    • +
    • +
      +

      doOKAction

      +
      protected void doOKAction()
      +
      Save the configuration when the OK button is clicked.
      +
      +
      Overrides:
      +
      doOKAction in class com.intellij.openapi.ui.DialogWrapper
      +
      +
      +
    • +
    • +
      +

      updateActionGroup

      +
      public void updateActionGroup()
      +
      Update the AddLabelAction group when the configuration is changed.
      +
      +
    • +
    • +
      +

      createCenterPanel

      +
      protected JComponent createCenterPanel()
      +
      Create the center panel of the configuration dialog.
      +
      +
      Specified by:
      +
      createCenterPanel in class com.intellij.openapi.ui.DialogWrapper
      +
      Returns:
      +
      The center panel of the configuration dialog.
      +
      +
      +
    • +
    • +
      +

      addLabelArea

      +
      private void addLabelArea(boolean isEmpty)
      +
      Add the label area to the configuration dialog. A label area contains a text field and a button to add or remove the label area.
      +
      +
      Parameters:
      +
      isEmpty - Whether the label panel is empty. If true, the button will be an add button. If false, the button will be a remove button.
      +
      +
      +
    • +
    • +
      +

      getCurrentLabels

      +
      public static List<String> getCurrentLabels()
      +
      Get the current labels in the configuration dialog.
      +
      +
      Returns:
      +
      The current labels in the configuration dialog.
      +
      +
      +
    • +
    • +
      +

      getSelectedCheckboxes

      +
      public List<Boolean> getSelectedCheckboxes()
      +
      Get the selected checkboxes in the configuration dialog.
      +
      +
      Returns:
      +
      The selected checkboxes in the configuration dialog.
      +
      +
      +
    • +
    • +
      +

      getPythonInterpreter

      +
      public static String getPythonInterpreter()
      +
      Get the python interpreter path in the configuration dialog. If the path is empty, the default "python" will be returned.
      +
      +
      Returns:
      +
      The python interpreter path in the configuration dialog.
      +
      +
      +
    • +
    • +
      +

      getDataOutputPath

      +
      public static String getDataOutputPath()
      +
      Get the data output path in the configuration dialog. If the path is equal to the placeholder, the default project root will be returned.
      +
      +
      Returns:
      +
      The data output path in the configuration dialog.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/components/package-summary.html b/docs/components/package-summary.html new file mode 100644 index 0000000..f29bfe1 --- /dev/null +++ b/docs/components/package-summary.html @@ -0,0 +1,88 @@ + + + + +components + + + + + + + + + + + + + + + +
+ +
+
+
+

Package components

+
+
+
package components
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    This class is used to create a dialog to show alert message.
    +
    + +
    +
    This class is used to create the configuration dialog.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/components/package-tree.html b/docs/components/package-tree.html new file mode 100644 index 0000000..7c13bfa --- /dev/null +++ b/docs/components/package-tree.html @@ -0,0 +1,76 @@ + + + + +components Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package components

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/entity/config.html b/docs/entity/config.html new file mode 100644 index 0000000..cfb97cc --- /dev/null +++ b/docs/entity/config.html @@ -0,0 +1,370 @@ + + + + +Config + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package entity
+

Class Config

+
+
java.lang.Object +
entity.Config
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class Config +extends Object +implements Serializable
+
This class is used to store the configuration of the application.
+
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      checkBoxes

      +
      private List<Boolean> checkBoxes
      +
      +
    • +
    • +
      +

      labels

      +
      private List<String> labels
      +
      +
    • +
    • +
      +

      sampleFreq

      +
      private Double sampleFreq
      +
      +
    • +
    • +
      +

      pythonInterpreter

      +
      private String pythonInterpreter
      +
      +
    • +
    • +
      +

      dataOutputPath

      +
      private String dataOutputPath
      +
      +
    • +
    • +
      +

      eyeTrackerDevice

      +
      private Integer eyeTrackerDevice
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Config

      +
      public Config(List<Boolean> checkBoxes, + List<String> labels, + Double sampleFreq, + String pythonInterpreter, + String dataOutputPath, + Integer eyeTrackerDevice)
      +
      The constructor of the Config class.
      +
      +
      Parameters:
      +
      checkBoxes - The list of the checkboxes.
      +
      labels - The list of the labels.
      +
      sampleFreq - The sample frequency.
      +
      pythonInterpreter - The path of the python interpreter.
      +
      dataOutputPath - The path of the data output folder.
      +
      eyeTrackerDevice - The index of the eye tracker device.
      +
      +
      +
    • +
    • +
      +

      Config

      +
      public Config()
      +
      The constructor of the Config class.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      configExists

      +
      public boolean configExists()
      +
      +
    • +
    • +
      +

      saveAsJson

      +
      public void saveAsJson()
      +
      Save the configuration as a JSON file.
      +
      +
    • +
    • +
      +

      loadFromJson

      +
      public void loadFromJson()
      +
      Load the configuration from the JSON file.
      +
      +
    • +
    • +
      +

      getPythonInterpreter

      +
      public String getPythonInterpreter()
      +
      +
    • +
    • +
      +

      getSampleFreq

      +
      public Double getSampleFreq()
      +
      +
    • +
    • +
      +

      getCheckBoxes

      +
      public List<Boolean> getCheckBoxes()
      +
      +
    • +
    • +
      +

      getLabels

      +
      public List<String> getLabels()
      +
      +
    • +
    • +
      +

      getDataOutputPath

      +
      public String getDataOutputPath()
      +
      +
    • +
    • +
      +

      getEyeTrackerDevice

      +
      public Integer getEyeTrackerDevice()
      +
      +
    • +
    • +
      +

      toString

      +
      public String toString()
      +
      +
      Overrides:
      +
      toString in class Object
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/entity/package-summary.html b/docs/entity/package-summary.html new file mode 100644 index 0000000..7a528a9 --- /dev/null +++ b/docs/entity/package-summary.html @@ -0,0 +1,84 @@ + + + + +entity + + + + + + + + + + + + + + + +
+ +
+
+
+

Package entity

+
+
+
package entity
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    This class is used to store the configuration of the application.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/entity/package-tree.html b/docs/entity/package-tree.html new file mode 100644 index 0000000..5dd705b --- /dev/null +++ b/docs/entity/package-tree.html @@ -0,0 +1,71 @@ + + + + +entity Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package entity

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/help-doc.html b/docs/help-doc.html new file mode 100644 index 0000000..b446e36 --- /dev/null +++ b/docs/help-doc.html @@ -0,0 +1,181 @@ + + + + +API Help + + + + + + + + + + + + + + + +
+ +
+
+

JavaDoc Help

+ +
+
+

Navigation

+Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces + +
+
+
+

Kinds of Pages

+The following sections describe the different kinds of pages in this collection. +
+

Overview

+

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+
+
+

Package

+

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

+
    +
  • Interfaces
  • +
  • Classes
  • +
  • Enum Classes
  • +
  • Exceptions
  • +
  • Errors
  • +
  • Annotation Interfaces
  • +
+
+
+

Class or Interface

+

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

+
    +
  • Class Inheritance Diagram
  • +
  • Direct Subclasses
  • +
  • All Known Subinterfaces
  • +
  • All Known Implementing Classes
  • +
  • Class or Interface Declaration
  • +
  • Class or Interface Description
  • +
+
+
    +
  • Nested Class Summary
  • +
  • Enum Constant Summary
  • +
  • Field Summary
  • +
  • Property Summary
  • +
  • Constructor Summary
  • +
  • Method Summary
  • +
  • Required Element Summary
  • +
  • Optional Element Summary
  • +
+
+
    +
  • Enum Constant Details
  • +
  • Field Details
  • +
  • Property Details
  • +
  • Constructor Details
  • +
  • Method Details
  • +
  • Element Details
  • +
+

Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

+

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

+
+
+

Other Files

+

Packages and modules may contain pages with additional information related to the declarations nearby.

+
+
+

Tree (Class Hierarchy)

+

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

+
    +
  • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
  • +
  • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
  • +
+
+
+

Serialized Form

+

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

+
+
+

All Packages

+

The All Packages page contains an alphabetic index of all packages contained in the documentation.

+
+
+

All Classes and Interfaces

+

The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

+
+
+

Index

+

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

+
+
+
+This help file applies to API documentation generated by the standard doclet.
+
+
+ + diff --git a/docs/index-files/index-1.html b/docs/index-files/index-1.html new file mode 100644 index 0000000..a1a306f --- /dev/null +++ b/docs/index-files/index-1.html @@ -0,0 +1,119 @@ + + + + +A-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

A

+
+
actionPerformed(AnActionEvent) - Method in class actions.AddLabelAction
+
+
This method is called when the action is performed.
+
+
actionPerformed(AnActionEvent) - Method in class actions.ConfigAction
+
+
This method is called when the action is performed.
+
+
actionPerformed(AnActionEvent) - Method in class actions.PauseResumeTrackingAction
+
+
This method is called when the action is performed.
+
+
actionPerformed(AnActionEvent) - Method in class actions.StartStopTrackingAction
+
+
This method is called when the action is performed.
+
+
actions - package actions
+
 
+
actions - Variable in class trackers.IDETracker
+
 
+
AddLabelAction - Class in actions
+
+
This class is the action for adding labels.
+
+
AddLabelAction() - Constructor for class actions.AddLabelAction
+
 
+
AddLabelActionGroup - Class in actions
+
+
This class is the action group for adding labels.
+
+
AddLabelActionGroup() - Constructor for class actions.AddLabelActionGroup
+
 
+
addLabelArea(boolean) - Method in class components.ConfigDialog
+
+
Add the label area to the configuration dialog.
+
+
AlertDialog - Class in components
+
+
This class is used to create a dialog to show alert message.
+
+
AlertDialog(String, Icon) - Constructor for class components.AlertDialog
+
+
The constructor of the class.
+
+
api - package api
+
 
+
archiveFile(String, String, String, String) - Method in class trackers.IDETracker
+
+
This method archives the file.
+
+
archives - Variable in class trackers.IDETracker
+
 
+
AvailabilityChecker - Class in utils
+
+
This class is used to check the availability of the python environment and the eye-tracking device, and to get the eye tracker name and the available frequencies.
+
+
AvailabilityChecker() - Constructor for class utils.AvailabilityChecker
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-10.html b/docs/index-files/index-10.html new file mode 100644 index 0000000..dea286b --- /dev/null +++ b/docs/index-files/index-10.html @@ -0,0 +1,63 @@ + + + + +M-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

M

+
+
mouses - Variable in class trackers.IDETracker
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-11.html b/docs/index-files/index-11.html new file mode 100644 index 0000000..1c78fe2 --- /dev/null +++ b/docs/index-files/index-11.html @@ -0,0 +1,71 @@ + + + + +O-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

O

+
+
OS - Static variable in class utils.OSDetector
+
+
The operating system name.
+
+
OSDetector - Class in utils
+
+
This class is used to detect the operating system.
+
+
OSDetector() - Constructor for class utils.OSDetector
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-12.html b/docs/index-files/index-12.html new file mode 100644 index 0000000..ce3faf1 --- /dev/null +++ b/docs/index-files/index-12.html @@ -0,0 +1,109 @@ + + + + +P-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

P

+
+
panel - Variable in class components.ConfigDialog
+
 
+
pauseRecording() - Method in class trackers.ScreenRecorder
+
+
Pause recording the screen.
+
+
PauseResumeTrackingAction - Class in actions
+
+
This class is the action for pausing/resuming tracking.
+
+
PauseResumeTrackingAction() - Constructor for class actions.PauseResumeTrackingAction
+
 
+
pauseTracking() - Static method in class actions.StartStopTrackingAction
+
 
+
pauseTracking() - Method in class trackers.EyeTracker
+
+
This method pauses the eye tracking.
+
+
pauseTracking() - Method in class trackers.IDETracker
+
+
This method pauses tracking.
+
+
processRawData(String) - Method in class trackers.EyeTracker
+
+
This method processes the raw data message from the eye tracker.
+
+
projectPath - Variable in class trackers.EyeTracker
+
 
+
projectPath - Variable in class trackers.IDETracker
+
 
+
psiDocumentManager - Variable in class trackers.EyeTracker
+
 
+
pythonEnvironment - Variable in class components.ConfigDialog
+
 
+
pythonInterpreter - Variable in class entity.Config
+
 
+
pythonInterpreter - Variable in class trackers.EyeTracker
+
 
+
pythonInterpreterTextField - Static variable in class components.ConfigDialog
+
 
+
pythonOutputThread - Variable in class trackers.EyeTracker
+
 
+
pythonProcess - Variable in class trackers.EyeTracker
+
 
+
pythonScriptMouse - Variable in class trackers.EyeTracker
+
 
+
pythonScriptTobii - Variable in class trackers.EyeTracker
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-13.html b/docs/index-files/index-13.html new file mode 100644 index 0000000..26a720a --- /dev/null +++ b/docs/index-files/index-13.html @@ -0,0 +1,103 @@ + + + + +R-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

R

+
+
realtimeData - Static variable in class api.RealtimeDataImpl
+
 
+
RealtimeDataImpl - Class in api
+
+
This class provides the API for getting real-time data from the IDE and eye tracker.
+
+
RealtimeDataImpl() - Constructor for class api.RealtimeDataImpl
+
 
+
recorder - Variable in class trackers.ScreenRecorder
+
 
+
recordScreen() - Method in class trackers.ScreenRecorder
+
+
Record the screen.
+
+
RelativePathGetter - Class in utils
+
+
This class is used to get the relative path of a file compared to the project path.
+
+
RelativePathGetter() - Constructor for class utils.RelativePathGetter
+
 
+
resumeRecording() - Method in class trackers.ScreenRecorder
+
+
Resume recording the screen.
+
+
resumeTracking() - Static method in class actions.StartStopTrackingAction
+
 
+
resumeTracking() - Method in class trackers.EyeTracker
+
+
This method resumes the eye tracking.
+
+
resumeTracking() - Method in class trackers.IDETracker
+
+
This method resumes tracking.
+
+
root - Variable in class trackers.EyeTracker
+
 
+
root - Variable in class trackers.IDETracker
+
 
+
runPythonScript(String, String) - Static method in class utils.AvailabilityChecker
+
+
Run a python script with ProcessBuilder and use BufferedReader to get the first line of the output.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-14.html b/docs/index-files/index-14.html new file mode 100644 index 0000000..c31d470 --- /dev/null +++ b/docs/index-files/index-14.html @@ -0,0 +1,199 @@ + + + + +S-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

S

+
+
sampleFreq - Variable in class entity.Config
+
 
+
sampleFrequency - Variable in class trackers.EyeTracker
+
+
This variable indicates the sample frequency of the eye tracker.
+
+
saveAsJson() - Method in class entity.Config
+
+
Save the configuration as a JSON file.
+
+
saveConfig() - Method in class components.ConfigDialog
+
+
Save the configuration from the configuration dialog to the config.json file using the Config class.
+
+
screenHeight - Variable in class trackers.EyeTracker
+
 
+
screenRecorder - Variable in class actions.PauseResumeTrackingAction
+
 
+
screenRecorder - Variable in class actions.StartStopTrackingAction
+
+
This variable is the screen recorder.
+
+
ScreenRecorder - Class in trackers
+
+
This class is the screen recorder.
+
+
ScreenRecorder() - Constructor for class trackers.ScreenRecorder
+
 
+
screenWidth - Variable in class trackers.EyeTracker
+
 
+
selectDataOutputPlaceHolder - Static variable in class components.ConfigDialog
+
 
+
selectionListener - Variable in class trackers.IDETracker
+
+
This variable is the selection listener for the IDE tracker.
+
+
selections - Variable in class trackers.IDETracker
+
 
+
selectPythonInterpreterPlaceHolder - Static variable in class components.ConfigDialog
+
 
+
setDataOutputPath(String) - Method in class trackers.EyeTracker
+
 
+
setDataOutputPath(String) - Method in class trackers.IDETracker
+
+
This method sets the data output path.
+
+
setDataOutputPath(String) - Method in class trackers.ScreenRecorder
+
+
Set the data output path.
+
+
setDescription(String) - Method in class actions.AddLabelAction
+
 
+
setDeviceIndex(int) - Method in class trackers.EyeTracker
+
+
This method sets the device index.
+
+
setEyeTrackerDataHandler(Consumer<String>) - Method in class api.RealtimeDataImpl
+
 
+
setEyeTrackerDataHandler(Consumer<Element>) - Method in class trackers.EyeTracker
+
 
+
setIdeTrackerDataHandler(Consumer<Element>) - Method in class trackers.IDETracker
+
+
This method sets the handler for the IDE tracker data for real-time data transmission.
+
+
setIDETrackerDataHandler(Consumer<String>) - Method in class api.RealtimeDataImpl
+
 
+
setIsEnabled(boolean) - Static method in class actions.AddLabelAction
+
 
+
setIsEnabled(boolean) - Static method in class actions.AddLabelActionGroup
+
 
+
setIsEnabled(boolean) - Static method in class actions.ConfigAction
+
 
+
setIsRealTimeDataTransmitting(boolean) - Static method in class trackers.EyeTracker
+
 
+
setIsRealTimeDataTransmitting(boolean) - Method in class trackers.IDETracker
+
+
This method sets the isRealTimeDataTransmitting variable.
+
+
setProjectPath(String) - Method in class trackers.EyeTracker
+
+
This method sets the project path.
+
+
setProjectPath(String) - Method in class trackers.IDETracker
+
 
+
setPythonInterpreter(String) - Method in class trackers.EyeTracker
+
 
+
setPythonScriptMouse() - Method in class trackers.EyeTracker
+
+
This method sets the Python script for the mouse eye tracker.
+
+
setPythonScriptTobii() - Method in class trackers.EyeTracker
+
+
This method sets the Python script for the Tobii eye tracker.
+
+
setSampleFrequency(double) - Method in class trackers.EyeTracker
+
 
+
setting - Variable in class trackers.EyeTracker
+
 
+
socket - Variable in class api.RealtimeDataImpl
+
 
+
startRecording() - Method in class trackers.ScreenRecorder
+
+
Start recording the screen.
+
+
StartStopTrackingAction - Class in actions
+
+
This class is the action for starting/stopping tracking.
+
+
StartStopTrackingAction() - Constructor for class actions.StartStopTrackingAction
+
 
+
startTracking(Project) - Method in class trackers.EyeTracker
+
+
This method starts the eye tracking.
+
+
startTracking(Project) - Method in class trackers.IDETracker
+
+
This method starts tracking.
+
+
state - Variable in class trackers.ScreenRecorder
+
+
This variable indicates the state of the screen recorder.
+
+
stopEyeTrackerData() - Method in class api.RealtimeDataImpl
+
 
+
stopIDETrackerData() - Method in class api.RealtimeDataImpl
+
 
+
stopRecording() - Method in class trackers.ScreenRecorder
+
+
Stop recording the screen.
+
+
stopTracking() - Method in class trackers.EyeTracker
+
+
This method stops the eye tracking.
+
+
stopTracking() - Method in class trackers.IDETracker
+
+
This method stops tracking.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-15.html b/docs/index-files/index-15.html new file mode 100644 index 0000000..e612b92 --- /dev/null +++ b/docs/index-files/index-15.html @@ -0,0 +1,81 @@ + + + + +T-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

T

+
+
timeList - Variable in class trackers.ScreenRecorder
+
 
+
timer - Variable in class trackers.IDETracker
+
+
This variable is the timer for tracking the document changes.
+
+
timerTask - Variable in class trackers.IDETracker
+
+
This variable is the timer task for tracking the document changes.
+
+
toString() - Method in class entity.Config
+
 
+
track() - Method in class trackers.EyeTracker
+
+
This method builds the Python process and redirects the output to the pythonOutputThread to process.
+
+
trackers - package trackers
+
 
+
typings - Variable in class trackers.IDETracker
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-16.html b/docs/index-files/index-16.html new file mode 100644 index 0000000..23d69d2 --- /dev/null +++ b/docs/index-files/index-16.html @@ -0,0 +1,83 @@ + + + + +U-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

U

+
+
update(AnActionEvent) - Method in class actions.AddLabelAction
+
 
+
update(AnActionEvent) - Method in class actions.AddLabelActionGroup
+
+
This method is called when the action is performed.
+
+
update(AnActionEvent) - Method in class actions.ConfigAction
+
 
+
update(AnActionEvent) - Method in class actions.PauseResumeTrackingAction
+
+
Update the text of the action button.
+
+
update(AnActionEvent) - Method in class actions.StartStopTrackingAction
+
+
Update the text of the action button.
+
+
updateActionGroup() - Method in class components.ConfigDialog
+
+
Update the AddLabelAction group when the configuration is changed.
+
+
utils - package utils
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-17.html b/docs/index-files/index-17.html new file mode 100644 index 0000000..9e0f324 --- /dev/null +++ b/docs/index-files/index-17.html @@ -0,0 +1,73 @@ + + + + +V-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

V

+
+
visibleArea - Variable in class trackers.EyeTracker
+
 
+
visibleAreaListener - Variable in class trackers.EyeTracker
+
+
The listener for the visible area used for filtering the eye tracking data.
+
+
visibleAreaListener - Variable in class trackers.IDETracker
+
+
This variable is the visible area listener for the IDE tracker.
+
+
visibleAreas - Variable in class trackers.IDETracker
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-18.html b/docs/index-files/index-18.html new file mode 100644 index 0000000..6fbd2e7 --- /dev/null +++ b/docs/index-files/index-18.html @@ -0,0 +1,65 @@ + + + + +W-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

W

+
+
writeToXML(Document, String) - Static method in class utils.XMLWriter
+
+
Write the formatted XML document to the XML file.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-19.html b/docs/index-files/index-19.html new file mode 100644 index 0000000..aff0d89 --- /dev/null +++ b/docs/index-files/index-19.html @@ -0,0 +1,67 @@ + + + + +X-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

X

+
+
XMLWriter - Class in utils
+
+
This class is used to write the XML document to the XML file.
+
+
XMLWriter() - Constructor for class utils.XMLWriter
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-2.html b/docs/index-files/index-2.html new file mode 100644 index 0000000..4fa3e4a --- /dev/null +++ b/docs/index-files/index-2.html @@ -0,0 +1,141 @@ + + + + +C-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

C

+
+
caretListener - Variable in class trackers.IDETracker
+
+
This variable is the caret listener for the IDE tracker.
+
+
carets - Variable in class trackers.IDETracker
+
 
+
changedFilepath - Variable in class trackers.IDETracker
+
 
+
changedFileText - Variable in class trackers.IDETracker
+
 
+
checkBoxes - Variable in class components.ConfigDialog
+
 
+
checkBoxes - Variable in class entity.Config
+
 
+
checkEnvironment() - Method in class api.RealtimeDataImpl
+
 
+
checkEyeTracker(String) - Static method in class utils.AvailabilityChecker
+
+
Check the availability of the eye-tracking device.
+
+
checkPythonEnvironment(String) - Static method in class utils.AvailabilityChecker
+
+
Check the availability of the python environment, i.e., whether the required python packages are installed.
+
+
clipNumber - Variable in class trackers.ScreenRecorder
+
+
This variable indicates the current clip number.
+
+
components - package components
+
 
+
config - Variable in class actions.StartStopTrackingAction
+
+
This variable is the configuration.
+
+
Config - Class in entity
+
+
This class is used to store the configuration of the application.
+
+
Config() - Constructor for class entity.Config
+
+
The constructor of the Config class.
+
+
Config(List<Boolean>, List<String>, Double, String, String, Integer) - Constructor for class entity.Config
+
+
The constructor of the Config class.
+
+
ConfigAction - Class in actions
+
+
This class is the action for configuring the application.
+
+
ConfigAction() - Constructor for class actions.ConfigAction
+
 
+
ConfigDialog - Class in components
+
+
This class is used to create the configuration dialog.
+
+
ConfigDialog(Project) - Constructor for class components.ConfigDialog
+
+
The constructor of the configuration dialog.
+
+
configExists() - Method in class entity.Config
+
 
+
createActions() - Method in class components.AlertDialog
+
+
Create the OK button.
+
+
createCenterPanel() - Method in class components.AlertDialog
+
+
Create the center panel of the dialog.
+
+
createCenterPanel() - Method in class components.ConfigDialog
+
+
Create the center panel of the configuration dialog.
+
+
createEncoder() - Method in class trackers.ScreenRecorder
+
+
Create the encoder using FFmpegFrameGrabber and FFmpegFrameRecorder.
+
+
csvWriter - Variable in class trackers.ScreenRecorder
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-3.html b/docs/index-files/index-3.html new file mode 100644 index 0000000..4163625 --- /dev/null +++ b/docs/index-files/index-3.html @@ -0,0 +1,93 @@ + + + + +D-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

D

+
+
dataInputStream - Variable in class api.RealtimeDataImpl
+
 
+
dataOutputPath - Variable in class entity.Config
+
 
+
dataOutputPath - Variable in class trackers.EyeTracker
+
 
+
dataOutputPath - Variable in class trackers.IDETracker
+
 
+
dataOutputPath - Variable in class trackers.ScreenRecorder
+
 
+
dataOutputTextField - Static variable in class components.ConfigDialog
+
 
+
defaultLabelsLoaded - Variable in class actions.AddLabelActionGroup
+
 
+
description - Variable in class actions.AddLabelAction
+
 
+
deviceCombo - Variable in class components.ConfigDialog
+
 
+
deviceIndex - Variable in class trackers.EyeTracker
+
 
+
dispose() - Method in class trackers.EyeTracker
+
 
+
dispose() - Method in class trackers.IDETracker
+
 
+
documentListener - Variable in class trackers.IDETracker
+
+
This variable is the document listener for the IDE tracker.
+
+
doOKAction() - Method in class components.ConfigDialog
+
+
Save the configuration when the OK button is clicked.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-4.html b/docs/index-files/index-4.html new file mode 100644 index 0000000..4a58626 --- /dev/null +++ b/docs/index-files/index-4.html @@ -0,0 +1,111 @@ + + + + +E-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

E

+
+
editor - Variable in class trackers.EyeTracker
+
 
+
editorEventMulticaster - Variable in class trackers.IDETracker
+
+
This variable is the editor event multicaster for the IDE tracker.
+
+
editorMouseListener - Variable in class trackers.IDETracker
+
+
This variable is the mouse listener for the IDE tracker.
+
+
editorMouseMotionListener - Variable in class trackers.IDETracker
+
+
This variable is the mouse motion listener for the IDE tracker.
+
+
entity - package entity
+
 
+
environment - Variable in class trackers.IDETracker
+
 
+
eyeTracker - Static variable in class actions.StartStopTrackingAction
+
+
This variable is the eye tracker.
+
+
eyeTracker - Static variable in class api.RealtimeDataImpl
+
 
+
eyeTracker - Variable in class components.ConfigDialog
+
 
+
EyeTracker - Class in trackers
+
+
This class is the eye tracker.
+
+
EyeTracker() - Constructor for class trackers.EyeTracker
+
+
This is the default constructor.
+
+
EyeTracker(String, double, boolean) - Constructor for class trackers.EyeTracker
+
+
This is the constructor for the eye tracker.
+
+
eyeTrackerDataHandler - Variable in class api.RealtimeDataImpl
+
 
+
eyeTrackerDataHandler - Variable in class trackers.EyeTracker
+
+
This variable is the handler for eye tracking data.
+
+
eyeTrackerDevice - Variable in class entity.Config
+
 
+
eyeTracking - Variable in class trackers.EyeTracker
+
+
This variable is the XML document for storing the eye tracking data.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-5.html b/docs/index-files/index-5.html new file mode 100644 index 0000000..0caa890 --- /dev/null +++ b/docs/index-files/index-5.html @@ -0,0 +1,75 @@ + + + + +F-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

F

+
+
filePath - Variable in class trackers.EyeTracker
+
 
+
files - Variable in class trackers.IDETracker
+
 
+
frameNumber - Variable in class trackers.ScreenRecorder
+
+
This variable indicates the current frame number.
+
+
frameRate - Variable in class trackers.ScreenRecorder
+
+
This variable indicates the frame rate of the screen recorder.
+
+
freqCombo - Variable in class components.ConfigDialog
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-6.html b/docs/index-files/index-6.html new file mode 100644 index 0000000..b13da3a --- /dev/null +++ b/docs/index-files/index-6.html @@ -0,0 +1,135 @@ + + + + +G-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

G

+
+
gazes - Variable in class trackers.EyeTracker
+
 
+
getASTStructureElement(PsiElement) - Method in class trackers.EyeTracker
+
+
This method gets the AST structure element from the PSI element.
+
+
getCheckBoxes() - Method in class entity.Config
+
 
+
getCurrentLabels() - Static method in class components.ConfigDialog
+
+
Get the current labels in the configuration dialog.
+
+
getDataOutputPath() - Static method in class components.ConfigDialog
+
+
Get the data output path in the configuration dialog.
+
+
getDataOutputPath() - Method in class entity.Config
+
 
+
getEyeTrackerDevice() - Method in class entity.Config
+
 
+
getEyeTrackerName(String) - Static method in class utils.AvailabilityChecker
+
+
Get the name of the eye-tracking device.
+
+
getFrequencies(String) - Static method in class utils.AvailabilityChecker
+
+
Get the available frequencies of the eye-tracking device.
+
+
getHandledEyeTrackerData() - Method in class api.RealtimeDataImpl
+
 
+
getHandledIDETrackerData(Project) - Method in class api.RealtimeDataImpl
+
 
+
getInstance() - Static method in class api.RealtimeDataImpl
+
 
+
getInstance() - Static method in class trackers.IDETracker
+
+
This method returns the IDE tracker instance.
+
+
getInstance() - Static method in class trackers.ScreenRecorder
+
 
+
getLabels() - Method in class entity.Config
+
 
+
getMouseElement(EditorMouseEvent, String) - Method in class trackers.IDETracker
+
+
This method returns the mouse XML element.
+
+
getPythonInterpreter() - Static method in class components.ConfigDialog
+
+
Get the python interpreter path in the configuration dialog.
+
+
getPythonInterpreter() - Method in class entity.Config
+
 
+
getRawEyeTrackerData() - Method in class api.RealtimeDataImpl
+
 
+
getRawGazeElement(String) - Method in class trackers.EyeTracker
+
+
This method gets the raw gaze xml element from the raw gaze data.
+
+
getRawIDETrackerData(Project) - Method in class api.RealtimeDataImpl
+
 
+
getRelativePath(String, String) - Static method in class utils.RelativePathGetter
+
+
Get the relative path of a file compared to the project path.
+
+
getSampleFreq() - Method in class entity.Config
+
 
+
getSelectedCheckboxes() - Method in class components.ConfigDialog
+
+
Get the selected checkboxes in the configuration dialog.
+
+
getTemplateText() - Method in class actions.AddLabelAction
+
 
+
grabber - Variable in class trackers.ScreenRecorder
+
 
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-7.html b/docs/index-files/index-7.html new file mode 100644 index 0000000..4d93296 --- /dev/null +++ b/docs/index-files/index-7.html @@ -0,0 +1,69 @@ + + + + +H-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

H

+
+
handleElement(Element) - Method in class trackers.EyeTracker
+
+
This method handles the element.
+
+
handleElement(Element) - Method in class trackers.IDETracker
+
+
This method handles the XML element for real-time data transmission.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-8.html b/docs/index-files/index-8.html new file mode 100644 index 0000000..2f6f138 --- /dev/null +++ b/docs/index-files/index-8.html @@ -0,0 +1,137 @@ + + + + +I-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

I

+
+
icon - Variable in class components.AlertDialog
+
+
The icon of the alert message.
+
+
ideTracker - Static variable in class api.RealtimeDataImpl
+
 
+
iDETracker - Static variable in class actions.StartStopTrackingAction
+
+
This variable is the IDE tracker.
+
+
IDETracker - Class in trackers
+
+
This class is the IDE tracker.
+
+
IDETracker() - Constructor for class trackers.IDETracker
+
+
This constructor initializes the IDE tracker.
+
+
ideTrackerDataHandler - Variable in class api.RealtimeDataImpl
+
 
+
ideTrackerDataHandler - Variable in class trackers.IDETracker
+
+
This variable is the handler for the IDE tracker data.
+
+
iDETracking - Variable in class trackers.IDETracker
+
+
This variable is the XML document for storing the tracking data.
+
+
instance - Static variable in class trackers.ScreenRecorder
+
 
+
isEnabled - Static variable in class actions.AddLabelAction
+
 
+
isEnabled - Static variable in class actions.AddLabelActionGroup
+
 
+
isEnabled - Static variable in class actions.ConfigAction
+
 
+
isMac() - Static method in class utils.OSDetector
+
+
Check if the operating system is Mac.
+
+
isPaused() - Static method in class actions.StartStopTrackingAction
+
 
+
isRealTimeDataTransmitting - Static variable in class trackers.EyeTracker
+
+
This variable indicates whether the real-time data is transmitting.
+
+
isRealTimeDataTransmitting - Static variable in class trackers.IDETracker
+
+
This variable indicates whether the data is transmitted in real time.
+
+
isRecording - Variable in class trackers.ScreenRecorder
+
 
+
isTracking - Static variable in class actions.StartStopTrackingAction
+
+
This variable indicates whether the tracking is started.
+
+
isTracking - Variable in class trackers.EyeTracker
+
+
This variable indicates whether the tracking is started.
+
+
isTracking - Variable in class trackers.IDETracker
+
 
+
isTracking() - Static method in class actions.StartStopTrackingAction
+
 
+
isTracking() - Method in class trackers.IDETracker
+
+
This method returns whether the IDE tracker is tracking.
+
+
isUnix() - Static method in class utils.OSDetector
+
+
Check if the operating system is Unix.
+
+
isWindows() - Static method in class utils.OSDetector
+
+
Check if the operating system is Windows.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-9.html b/docs/index-files/index-9.html new file mode 100644 index 0000000..d288f83 --- /dev/null +++ b/docs/index-files/index-9.html @@ -0,0 +1,81 @@ + + + + +L-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form +

L

+
+
label - Variable in class components.AlertDialog
+
+
The label of the alert message.
+
+
labelAreas - Static variable in class components.ConfigDialog
+
 
+
labels - Variable in class entity.Config
+
 
+
lastElement - Variable in class trackers.EyeTracker
+
 
+
lastSelectionInfo - Variable in class trackers.IDETracker
+
 
+
loadConfig() - Method in class components.ConfigDialog
+
+
Load the configuration from the config.json file to the configuration dialog using the Config class.
+
+
loadFromJson() - Method in class entity.Config
+
+
Load the configuration from the JSON file.
+
+
+A C D E F G H I L M O P R S T U V W X 
All Classes and Interfaces|All Packages|Serialized Form
+
+
+ + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..9e32995 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,73 @@ + + + + +Overview + + + + + + + + + + + + + + + +
+ +
+
+
+
Packages
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+
+
+
+
+
+ + diff --git a/docs/overview-summary.html b/docs/overview-summary.html new file mode 100644 index 0000000..54e0454 --- /dev/null +++ b/docs/overview-summary.html @@ -0,0 +1,26 @@ + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +
+ +

index.html

+
+ + diff --git a/docs/overview-tree.html b/docs/overview-tree.html new file mode 100644 index 0000000..c3ef5a7 --- /dev/null +++ b/docs/overview-tree.html @@ -0,0 +1,107 @@ + + + + +Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/resources/glass.png b/docs/resources/glass.png new file mode 100644 index 0000000..a7f591f Binary files /dev/null and b/docs/resources/glass.png differ diff --git a/docs/resources/x.png b/docs/resources/x.png new file mode 100644 index 0000000..30548a7 Binary files /dev/null and b/docs/resources/x.png differ diff --git a/docs/serialized-form.html b/docs/serialized-form.html new file mode 100644 index 0000000..bb0d405 --- /dev/null +++ b/docs/serialized-form.html @@ -0,0 +1,105 @@ + + + + +Serialized Form + + + + + + + + + + + + + + + +
+ +
+
+
+

Serialized Form

+
+ +
+
+
+ + diff --git a/docs/trackers/eyetracker.html b/docs/trackers/eyetracker.html new file mode 100644 index 0000000..0528459 --- /dev/null +++ b/docs/trackers/eyetracker.html @@ -0,0 +1,704 @@ + + + + +EyeTracker + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package trackers
+

Class EyeTracker

+
+
java.lang.Object +
trackers.EyeTracker
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.Disposable
+
+
+
public class EyeTracker +extends Object +implements com.intellij.openapi.Disposable
+
This class is the eye tracker.
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      dataOutputPath

      +
      String dataOutputPath
      +
      +
    • +
    • +
      +

      sampleFrequency

      +
      double sampleFrequency
      +
      This variable indicates the sample frequency of the eye tracker.
      +
      +
    • +
    • +
      +

      psiDocumentManager

      +
      com.intellij.psi.PsiDocumentManager psiDocumentManager
      +
      +
    • +
    • +
      +

      editor

      +
      public com.intellij.openapi.editor.Editor editor
      +
      +
    • +
    • +
      +

      eyeTracking

      +
      Document eyeTracking
      +
      This variable is the XML document for storing the eye tracking data.
      +
      +
    • +
    • +
      +

      root

      +
      Element root
      +
      +
    • +
    • +
      +

      setting

      +
      Element setting
      +
      +
    • +
    • +
      +

      gazes

      +
      Element gazes
      +
      +
    • +
    • +
      +

      isTracking

      +
      boolean isTracking
      +
      This variable indicates whether the tracking is started.
      +
      +
    • +
    • +
      +

      screenWidth

      +
      double screenWidth
      +
      +
    • +
    • +
      +

      screenHeight

      +
      double screenHeight
      +
      +
    • +
    • +
      +

      projectPath

      +
      String projectPath
      +
      +
    • +
    • +
      +

      filePath

      +
      String filePath
      +
      +
    • +
    • +
      +

      lastElement

      +
      com.intellij.psi.PsiElement lastElement
      +
      +
    • +
    • +
      +

      visibleArea

      +
      Rectangle visibleArea
      +
      +
    • +
    • +
      +

      pythonProcess

      +
      Process pythonProcess
      +
      +
    • +
    • +
      +

      pythonOutputThread

      +
      Thread pythonOutputThread
      +
      +
    • +
    • +
      +

      pythonInterpreter

      +
      String pythonInterpreter
      +
      +
    • +
    • +
      +

      pythonScriptTobii

      +
      String pythonScriptTobii
      +
      +
    • +
    • +
      +

      pythonScriptMouse

      +
      String pythonScriptMouse
      +
      +
    • +
    • +
      +

      deviceIndex

      +
      int deviceIndex
      +
      +
    • +
    • +
      +

      isRealTimeDataTransmitting

      +
      private static boolean isRealTimeDataTransmitting
      +
      This variable indicates whether the real-time data is transmitting.
      +
      +
    • +
    • +
      +

      eyeTrackerDataHandler

      +
      private Consumer<Element> eyeTrackerDataHandler
      +
      This variable is the handler for eye tracking data.
      +
      +
    • +
    • +
      +

      visibleAreaListener

      +
      com.intellij.openapi.editor.event.VisibleAreaListener visibleAreaListener
      +
      The listener for the visible area used for filtering the eye tracking data.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      EyeTracker

      +
      public EyeTracker() + throws ParserConfigurationException
      +
      This is the default constructor.
      +
      +
      Throws:
      +
      ParserConfigurationException
      +
      +
      +
    • +
    • +
      +

      EyeTracker

      +
      public EyeTracker(String pythonInterpreter, + double sampleFrequency, + boolean isUsingMouse) + throws ParserConfigurationException
      +
      This is the constructor for the eye tracker.
      +
      +
      Parameters:
      +
      pythonInterpreter - The path of the Python interpreter.
      +
      sampleFrequency - The sample frequency of the eye tracker.
      +
      isUsingMouse - Whether the mouse is used as the eye tracker.
      +
      Throws:
      +
      ParserConfigurationException
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      startTracking

      +
      public void startTracking(com.intellij.openapi.project.Project project) + throws IOException
      +
      This method starts the eye tracking.
      +
      +
      Parameters:
      +
      project - The project.
      +
      Throws:
      +
      IOException - The exception.
      +
      +
      +
    • +
    • +
      +

      stopTracking

      +
      public void stopTracking() + throws TransformerException
      +
      This method stops the eye tracking.
      +
      +
      Throws:
      +
      TransformerException - The exception.
      +
      +
      +
    • +
    • +
      +

      pauseTracking

      +
      public void pauseTracking()
      +
      This method pauses the eye tracking. The isTracking variable will be set to false.
      +
      +
    • +
    • +
      +

      resumeTracking

      +
      public void resumeTracking()
      +
      This method resumes the eye tracking. The isTracking variable will be set to true.
      +
      +
    • +
    • +
      +

      processRawData

      +
      public void processRawData(String message)
      +
      This method processes the raw data message from the eye tracker. It will filter the data, map the data to the specific source code element, and perform the upward traversal in the AST.
      +
      +
      Parameters:
      +
      message - The raw data.
      +
      +
      +
    • +
    • +
      +

      track

      +
      public void track()
      +
      This method builds the Python process and redirects the output to the pythonOutputThread to process.
      +
      +
    • +
    • +
      +

      setProjectPath

      +
      public void setProjectPath(String projectPath)
      +
      This method sets the project path.
      +
      +
      Parameters:
      +
      projectPath - The project path.
      +
      +
      +
    • +
    • +
      +

      dispose

      +
      public void dispose()
      +
      +
      Specified by:
      +
      dispose in interface com.intellij.openapi.Disposable
      +
      +
      +
    • +
    • +
      +

      getRawGazeElement

      +
      public Element getRawGazeElement(String message)
      +
      This method gets the raw gaze xml element from the raw gaze data.
      +
      +
      Parameters:
      +
      message - The raw gaze data.
      +
      Returns:
      +
      The raw gaze element.
      +
      +
      +
    • +
    • +
      +

      getASTStructureElement

      +
      public Element getASTStructureElement(com.intellij.psi.PsiElement psiElement)
      +
      This method gets the AST structure element from the PSI element. It performs the upward traversal in the AST.
      +
      +
      Parameters:
      +
      psiElement - The PSI element.
      +
      Returns:
      +
      The AST structure element.
      +
      +
      +
    • +
    • +
      +

      handleElement

      +
      private void handleElement(Element element)
      +
      This method handles the element.
      +
      +
      Parameters:
      +
      element - The element.
      +
      +
      +
    • +
    • +
      +

      setIsRealTimeDataTransmitting

      +
      public static void setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)
      +
      +
    • +
    • +
      +

      setEyeTrackerDataHandler

      +
      public void setEyeTrackerDataHandler(Consumer<Element> eyeTrackerDataHandler)
      +
      +
    • +
    • +
      +

      setPythonInterpreter

      +
      public void setPythonInterpreter(String pythonInterpreter)
      +
      +
    • +
    • +
      +

      setDataOutputPath

      +
      public void setDataOutputPath(String dataOutputPath)
      +
      +
    • +
    • +
      +

      setSampleFrequency

      +
      public void setSampleFrequency(double sampleFrequency)
      +
      +
    • +
    • +
      +

      setPythonScriptTobii

      +
      public void setPythonScriptTobii()
      +
      This method sets the Python script for the Tobii eye tracker.
      +
      +
    • +
    • +
      +

      setPythonScriptMouse

      +
      public void setPythonScriptMouse()
      +
      This method sets the Python script for the mouse eye tracker.
      +
      +
    • +
    • +
      +

      setDeviceIndex

      +
      public void setDeviceIndex(int deviceIndex)
      +
      This method sets the device index.
      +
      +
      Parameters:
      +
      deviceIndex - The device index.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/trackers/idetracker.html b/docs/trackers/idetracker.html new file mode 100644 index 0000000..52c5a2d --- /dev/null +++ b/docs/trackers/idetracker.html @@ -0,0 +1,710 @@ + + + + +IDETracker + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package trackers
+

Class IDETracker

+
+
java.lang.Object +
trackers.IDETracker
+
+
+
+
All Implemented Interfaces:
+
com.intellij.openapi.Disposable
+
+
+
public final class IDETracker +extends Object +implements com.intellij.openapi.Disposable
+
This class is the IDE tracker.
+
+
+
    + +
  • +
    +

    Nested Class Summary

    +
    +

    Nested classes/interfaces inherited from interface com.intellij.openapi.Disposable

    +com.intellij.openapi.Disposable.Default, com.intellij.openapi.Disposable.Parent
    +
    +
  • + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    (package private) Element
    + +
     
    +
    (package private) Element
    + +
     
    +
    (package private) com.intellij.openapi.editor.event.CaretListener
    + +
    +
    This variable is the caret listener for the IDE tracker.
    +
    +
    (package private) Element
    + +
     
    +
    (package private) String
    + +
     
    +
    (package private) String
    + +
     
    +
    (package private) String
    + +
     
    +
    (package private) com.intellij.openapi.editor.event.DocumentListener
    + +
    +
    This variable is the document listener for the IDE tracker.
    +
    +
    (package private) com.intellij.openapi.editor.event.EditorEventMulticaster
    + +
    +
    This variable is the editor event multicaster for the IDE tracker.
    +
    +
    (package private) com.intellij.openapi.editor.event.EditorMouseListener
    + +
    +
    This variable is the mouse listener for the IDE tracker.
    +
    +
    (package private) com.intellij.openapi.editor.event.EditorMouseMotionListener
    + +
    +
    This variable is the mouse motion listener for the IDE tracker.
    +
    +
    (package private) Element
    + +
     
    +
    (package private) Element
    + +
     
    +
    private Consumer<Element>
    + +
    +
    This variable is the handler for the IDE tracker data.
    +
    +
    (package private) Document
    + +
    +
    This variable is the XML document for storing the tracking data.
    +
    +
    private static boolean
    + +
    +
    This variable indicates whether the data is transmitted in real time.
    +
    +
    (package private) boolean
    + +
     
    +
    (package private) String
    + +
     
    +
    (package private) Element
    + +
     
    +
    (package private) String
    + +
     
    +
    (package private) Element
    + +
     
    +
    (package private) com.intellij.openapi.editor.event.SelectionListener
    + +
    +
    This variable is the selection listener for the IDE tracker.
    +
    +
    (package private) Element
    + +
     
    +
    (package private) Timer
    + +
    +
    This variable is the timer for tracking the document changes.
    +
    +
    (package private) TimerTask
    + +
    +
    This variable is the timer task for tracking the document changes.
    +
    +
    (package private) Element
    + +
     
    +
    (package private) com.intellij.openapi.editor.event.VisibleAreaListener
    + +
    +
    This variable is the visible area listener for the IDE tracker.
    +
    +
    (package private) Element
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
    +
    This constructor initializes the IDE tracker.
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    archiveFile(String path, + String timestamp, + String remark, + String text)
    +
    +
    This method archives the file.
    +
    +
    void
    + +
     
    +
    static IDETracker
    + +
    +
    This method returns the IDE tracker instance.
    +
    + +
    getMouseElement(com.intellij.openapi.editor.event.EditorMouseEvent e, + String id)
    +
    +
    This method returns the mouse XML element.
    +
    +
    private void
    + +
    +
    This method handles the XML element for real-time data transmission.
    +
    +
    boolean
    + +
    +
    This method returns whether the IDE tracker is tracking.
    +
    +
    void
    + +
    +
    This method pauses tracking.
    +
    +
    void
    + +
    +
    This method resumes tracking.
    +
    +
    void
    +
    setDataOutputPath(String dataOutputPath)
    +
    +
    This method sets the data output path.
    +
    +
    void
    +
    setIdeTrackerDataHandler(Consumer<Element> ideTrackerDataHandler)
    +
    +
    This method sets the handler for the IDE tracker data for real-time data transmission.
    +
    +
    void
    +
    setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)
    +
    +
    This method sets the isRealTimeDataTransmitting variable.
    +
    +
    void
    +
    setProjectPath(String projectPath)
    +
     
    +
    void
    +
    startTracking(com.intellij.openapi.project.Project project)
    +
    +
    This method starts tracking.
    +
    +
    void
    + +
    +
    This method stops tracking.
    +
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      isTracking

      +
      boolean isTracking
      +
      +
    • +
    • +
      +

      iDETracking

      +
      Document iDETracking
      +
      This variable is the XML document for storing the tracking data.
      +
      +
    • +
    • +
      +

      root

      +
      Element root
      +
      +
    • +
    • +
      +

      environment

      +
      Element environment
      +
      +
    • +
    • +
      +

      actions

      +
      Element actions
      +
      +
    • +
    • +
      +

      archives

      +
      Element archives
      +
      +
    • +
    • +
      +

      typings

      +
      Element typings
      +
      +
    • +
    • +
      +

      files

      +
      Element files
      +
      +
    • +
    • +
      +

      mouses

      +
      Element mouses
      +
      +
    • +
    • +
      +

      carets

      +
      Element carets
      +
      +
    • +
    • +
      +

      selections

      +
      Element selections
      +
      +
    • +
    • +
      +

      visibleAreas

      +
      Element visibleAreas
      +
      +
    • +
    • +
      +

      projectPath

      +
      String projectPath
      +
      +
    • +
    • +
      +

      dataOutputPath

      +
      String dataOutputPath
      +
      +
    • +
    • +
      +

      lastSelectionInfo

      +
      String lastSelectionInfo
      +
      +
    • +
    • +
      +

      isRealTimeDataTransmitting

      +
      private static boolean isRealTimeDataTransmitting
      +
      This variable indicates whether the data is transmitted in real time.
      +
      +
    • +
    • +
      +

      ideTrackerDataHandler

      +
      private Consumer<Element> ideTrackerDataHandler
      +
      This variable is the handler for the IDE tracker data.
      +
      +
    • +
    • +
      +

      documentListener

      +
      com.intellij.openapi.editor.event.DocumentListener documentListener
      +
      This variable is the document listener for the IDE tracker. When the document is changed, if the EditorKind is CONSOLE, the console output is archived. Otherwise, the changedFilepath and changedFileText are updated.
      +
      +
    • +
    • +
      +

      editorMouseListener

      +
      com.intellij.openapi.editor.event.EditorMouseListener editorMouseListener
      +
      This variable is the mouse listener for the IDE tracker. + When the mouse is pressed, clicked, or released, the mouse event is tracked.
      +
      +
    • +
    • +
      +

      editorMouseMotionListener

      +
      com.intellij.openapi.editor.event.EditorMouseMotionListener editorMouseMotionListener
      +
      This variable is the mouse motion listener for the IDE tracker. + When the mouse is moved or dragged, the mouse event is tracked.
      +
      +
    • +
    • +
      +

      caretListener

      +
      com.intellij.openapi.editor.event.CaretListener caretListener
      +
      This variable is the caret listener for the IDE tracker. + When the caret position is changed, the caret event is tracked.
      +
      +
    • +
    • +
      +

      selectionListener

      +
      com.intellij.openapi.editor.event.SelectionListener selectionListener
      +
      This variable is the selection listener for the IDE tracker. + When the selection is changed, the selection event is tracked.
      +
      +
    • +
    • +
      +

      visibleAreaListener

      +
      com.intellij.openapi.editor.event.VisibleAreaListener visibleAreaListener
      +
      This variable is the visible area listener for the IDE tracker. + When the visible area is changed, the visible area event is tracked.
      +
      +
    • +
    • +
      +

      editorEventMulticaster

      +
      com.intellij.openapi.editor.event.EditorEventMulticaster editorEventMulticaster
      +
      This variable is the editor event multicaster for the IDE tracker. + It is used to add and remove all the listeners.
      +
      +
    • +
    • +
      +

      timer

      +
      Timer timer
      +
      This variable is the timer for tracking the document changes.
      +
      +
    • +
    • +
      +

      changedFilepath

      +
      String changedFilepath
      +
      +
    • +
    • +
      +

      changedFileText

      +
      String changedFileText
      +
      +
    • +
    • +
      +

      timerTask

      +
      TimerTask timerTask
      +
      This variable is the timer task for tracking the document changes. If the changedFilepath is not empty, the file is archived.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getInstance

      +
      public static IDETracker getInstance() + throws ParserConfigurationException
      +
      This method returns the IDE tracker instance.
      +
      +
      Returns:
      +
      The IDE tracker instance.
      +
      Throws:
      +
      ParserConfigurationException
      +
      +
      +
    • +
    • +
      +

      startTracking

      +
      public void startTracking(com.intellij.openapi.project.Project project)
      +
      This method starts tracking. All the listeners are added.
      +
      +
      Parameters:
      +
      project - The project.
      +
      +
      +
    • +
    • +
      +

      setIdeTrackerDataHandler

      +
      public void setIdeTrackerDataHandler(Consumer<Element> ideTrackerDataHandler)
      +
      This method sets the handler for the IDE tracker data for real-time data transmission.
      +
      +
      Parameters:
      +
      ideTrackerDataHandler - The handler for the IDE tracker data.
      +
      +
      +
    • +
    • +
      +

      stopTracking

      +
      public void stopTracking() + throws TransformerException
      +
      This method stops tracking. All the listeners are removed. The tracking data is written to the XML file.
      +
      +
      Throws:
      +
      TransformerException
      +
      +
      +
    • +
    • +
      +

      pauseTracking

      +
      public void pauseTracking()
      +
      This method pauses tracking. The isTracking is set to false.
      +
      +
    • +
    • +
      +

      resumeTracking

      +
      public void resumeTracking()
      +
      This method resumes tracking. The isTracking is set to true.
      +
      +
    • +
    • +
      +

      setIsRealTimeDataTransmitting

      +
      public void setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)
      +
      This method sets the isRealTimeDataTransmitting variable.
      +
      +
      Parameters:
      +
      isRealTimeDataTransmitting - Indicates whether the data is transmitted in real time.
      +
      +
      +
    • +
    • +
      +

      dispose

      +
      public void dispose()
      +
      +
      Specified by:
      +
      dispose in interface com.intellij.openapi.Disposable
      +
      +
      +
    • +
    • +
      +

      setProjectPath

      +
      public void setProjectPath(String projectPath)
      +
      +
    • +
    • +
      +

      archiveFile

      +
      public void archiveFile(String path, + String timestamp, + String remark, + String text)
      +
      This method archives the file. If the file is a code file, the file is copied to the archive folder.
      +
      +
      Parameters:
      +
      path - The path of the file.
      +
      timestamp - The timestamp of the file.
      +
      remark - The remark of the file.
      +
      text - The text of the file.
      +
      +
      +
    • +
    • +
      +

      getMouseElement

      +
      public Element getMouseElement(com.intellij.openapi.editor.event.EditorMouseEvent e, + String id)
      +
      This method returns the mouse XML element.
      +
      +
      Parameters:
      +
      e - The editor mouse event.
      +
      id - The id of the mouse event.
      +
      Returns:
      +
      The mouse element.
      +
      +
      +
    • +
    • +
      +

      setDataOutputPath

      +
      public void setDataOutputPath(String dataOutputPath)
      +
      This method sets the data output path.
      +
      +
      Parameters:
      +
      dataOutputPath - The data output path.
      +
      +
      +
    • +
    • +
      +

      handleElement

      +
      private void handleElement(Element element)
      +
      This method handles the XML element for real-time data transmission.
      +
      +
      Parameters:
      +
      element - The XML element.
      +
      +
      +
    • +
    • +
      +

      isTracking

      +
      public boolean isTracking()
      +
      This method returns whether the IDE tracker is tracking.
      +
      +
      Returns:
      +
      Whether the IDE tracker is tracking.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/trackers/package-summary.html b/docs/trackers/package-summary.html new file mode 100644 index 0000000..fb3ad18 --- /dev/null +++ b/docs/trackers/package-summary.html @@ -0,0 +1,92 @@ + + + + +trackers + + + + + + + + + + + + + + + +
+ +
+
+
+

Package trackers

+
+
+
package trackers
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    This class is the eye tracker.
    +
    + +
    +
    This class is the IDE tracker.
    +
    + +
    +
    This class is the screen recorder.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/trackers/package-tree.html b/docs/trackers/package-tree.html new file mode 100644 index 0000000..b595c1f --- /dev/null +++ b/docs/trackers/package-tree.html @@ -0,0 +1,73 @@ + + + + +trackers Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package trackers

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/trackers/screenrecorder.html b/docs/trackers/screenrecorder.html new file mode 100644 index 0000000..f202b16 --- /dev/null +++ b/docs/trackers/screenrecorder.html @@ -0,0 +1,405 @@ + + + + +ScreenRecorder + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package trackers
+

Class ScreenRecorder

+
+
java.lang.Object +
trackers.ScreenRecorder
+
+
+
+
public class ScreenRecorder +extends Object
+
This class is the screen recorder.
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      state

      +
      int state
      +
      This variable indicates the state of the screen recorder. 0: initial state; only startAction enabled 1: started, not paused; stopAction and pauseAction enabled 2: started, paused; only resumeAction enabled
      +
      +
    • +
    • +
      +

      frameRate

      +
      int frameRate
      +
      This variable indicates the frame rate of the screen recorder.
      +
      +
    • +
    • +
      +

      recorder

      +
      private org.bytedeco.javacv.FrameRecorder recorder
      +
      +
    • +
    • +
      +

      grabber

      +
      private org.bytedeco.javacv.FrameGrabber grabber
      +
      +
    • +
    • +
      +

      timeList

      +
      private final ArrayList<String[]> timeList
      +
      +
    • +
    • +
      +

      csvWriter

      +
      private com.opencsv.CSVWriter csvWriter
      +
      +
    • +
    • +
      +

      isRecording

      +
      boolean isRecording
      +
      +
    • +
    • +
      +

      clipNumber

      +
      private int clipNumber
      +
      This variable indicates the current clip number.
      +
      +
    • +
    • +
      +

      frameNumber

      +
      private int frameNumber
      +
      This variable indicates the current frame number.
      +
      +
    • +
    • +
      +

      dataOutputPath

      +
      private String dataOutputPath
      +
      +
    • +
    • +
      +

      instance

      +
      private static ScreenRecorder instance
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ScreenRecorder

      +
      public ScreenRecorder()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getInstance

      +
      public static ScreenRecorder getInstance()
      +
      +
    • +
    • +
      +

      createEncoder

      +
      private void createEncoder() + throws IOException
      +
      Create the encoder using FFmpegFrameGrabber and FFmpegFrameRecorder.
      +
      +
      Throws:
      +
      IOException
      +
      +
      +
    • +
    • +
      +

      startRecording

      +
      public void startRecording() + throws IOException
      +
      Start recording the screen. Reset the clip number and invoke recordScreen().
      +
      +
      Throws:
      +
      IOException
      +
      +
      +
    • +
    • +
      +

      stopRecording

      +
      public void stopRecording() + throws IOException
      +
      Stop recording the screen. Write the time list to the CSV file.
      +
      +
      Throws:
      +
      IOException
      +
      +
      +
    • +
    • +
      +

      pauseRecording

      +
      public void pauseRecording() + throws IOException
      +
      Pause recording the screen. Write the time list to the CSV file and increment the clip number.
      +
      +
      Throws:
      +
      IOException
      +
      +
      +
    • +
    • +
      +

      resumeRecording

      +
      public void resumeRecording()
      +
      Resume recording the screen. Invoke recordScreen().
      +
      +
    • +
    • +
      +

      recordScreen

      +
      private void recordScreen() + throws AWTException, +IOException
      +
      Record the screen. Use Timer to schedule the recording with the given frame rate.
      +
      +
      Throws:
      +
      AWTException
      +
      IOException
      +
      +
      +
    • +
    • +
      +

      setDataOutputPath

      +
      public void setDataOutputPath(String dataOutputPath)
      +
      Set the data output path.
      +
      +
      Parameters:
      +
      dataOutputPath - The data output path.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/utils/availabilitychecker.html b/docs/utils/availabilitychecker.html new file mode 100644 index 0000000..5d7c623 --- /dev/null +++ b/docs/utils/availabilitychecker.html @@ -0,0 +1,268 @@ + + + + +AvailabilityChecker + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package utils
+

Class AvailabilityChecker

+
+
java.lang.Object +
utils.AvailabilityChecker
+
+
+
+
public class AvailabilityChecker +extends Object
+
This class is used to check the availability of the python environment and the eye-tracking device, and to get the eye tracker name and the available frequencies.
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AvailabilityChecker

      +
      public AvailabilityChecker()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      checkPythonEnvironment

      +
      public static boolean checkPythonEnvironment(String pythonInterpreter) + throws IOException, +InterruptedException
      +
      Check the availability of the python environment, i.e., whether the required python packages are installed.
      +
      +
      Parameters:
      +
      pythonInterpreter - The path of the python interpreter.
      +
      Returns:
      +
      true if the python environment is available, false otherwise.
      +
      Throws:
      +
      IOException
      +
      InterruptedException
      +
      +
      +
    • +
    • +
      +

      checkEyeTracker

      +
      public static boolean checkEyeTracker(String pythonInterpreter) + throws IOException, +InterruptedException
      +
      Check the availability of the eye-tracking device.
      +
      +
      Parameters:
      +
      pythonInterpreter - The path of the python interpreter.
      +
      Returns:
      +
      true if the eye-tracking device is available, false otherwise.
      +
      Throws:
      +
      IOException
      +
      InterruptedException
      +
      +
      +
    • +
    • +
      +

      getEyeTrackerName

      +
      public static String getEyeTrackerName(String pythonInterpreter) + throws IOException, +InterruptedException
      +
      Get the name of the eye-tracking device.
      +
      +
      Parameters:
      +
      pythonInterpreter - The path of the python interpreter.
      +
      Returns:
      +
      The name of the eye tracker.
      +
      Throws:
      +
      IOException
      +
      InterruptedException
      +
      +
      +
    • +
    • +
      +

      getFrequencies

      +
      public static List<String> getFrequencies(String pythonInterpreter) + throws IOException, +InterruptedException
      +
      Get the available frequencies of the eye-tracking device.
      +
      +
      Parameters:
      +
      pythonInterpreter - The path of the python interpreter.
      +
      Returns:
      +
      The available frequencies of the eye tracker.
      +
      Throws:
      +
      IOException
      +
      InterruptedException
      +
      +
      +
    • +
    • +
      +

      runPythonScript

      +
      private static String runPythonScript(String pythonInterpreter, + String pythonScript) + throws IOException, +InterruptedException
      +
      Run a python script with ProcessBuilder and use BufferedReader to get the first line of the output.
      +
      +
      Parameters:
      +
      pythonInterpreter - The path of the python interpreter.
      +
      pythonScript - The python script to run.
      +
      Returns:
      +
      The first line of the output.
      +
      Throws:
      +
      IOException
      +
      InterruptedException
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/utils/osdetector.html b/docs/utils/osdetector.html new file mode 100644 index 0000000..136c002 --- /dev/null +++ b/docs/utils/osdetector.html @@ -0,0 +1,230 @@ + + + + +OSDetector + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package utils
+

Class OSDetector

+
+
java.lang.Object +
utils.OSDetector
+
+
+
+
public class OSDetector +extends Object
+
This class is used to detect the operating system.
+
+
+
    + +
  • +
    +

    Field Summary

    +
    Fields
    +
    +
    Modifier and Type
    +
    Field
    +
    Description
    +
    private static final String
    + +
    +
    The operating system name.
    +
    +
    +
    +
  • + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    static boolean
    + +
    +
    Check if the operating system is Mac.
    +
    +
    static boolean
    + +
    +
    Check if the operating system is Unix.
    +
    +
    static boolean
    + +
    +
    Check if the operating system is Windows.
    +
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      OS

      +
      private static final String OS
      +
      The operating system name.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      OSDetector

      +
      public OSDetector()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      isWindows

      +
      public static boolean isWindows()
      +
      Check if the operating system is Windows.
      +
      +
      Returns:
      +
      true if the operating system is Windows, false otherwise.
      +
      +
      +
    • +
    • +
      +

      isMac

      +
      public static boolean isMac()
      +
      Check if the operating system is Mac.
      +
      +
      Returns:
      +
      true if the operating system is Mac, false otherwise.
      +
      +
      +
    • +
    • +
      +

      isUnix

      +
      public static boolean isUnix()
      +
      Check if the operating system is Unix.
      +
      +
      Returns:
      +
      true if the operating system is Unix, false otherwise.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/utils/package-summary.html b/docs/utils/package-summary.html new file mode 100644 index 0000000..7519d41 --- /dev/null +++ b/docs/utils/package-summary.html @@ -0,0 +1,96 @@ + + + + +utils + + + + + + + + + + + + + + + +
+ +
+
+
+

Package utils

+
+
+
package utils
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    This class is used to check the availability of the python environment and the eye-tracking device, and to get the eye tracker name and the available frequencies.
    +
    + +
    +
    This class is used to detect the operating system.
    +
    + +
    +
    This class is used to get the relative path of a file compared to the project path.
    +
    + +
    +
    This class is used to write the XML document to the XML file.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/utils/package-tree.html b/docs/utils/package-tree.html new file mode 100644 index 0000000..96aedf8 --- /dev/null +++ b/docs/utils/package-tree.html @@ -0,0 +1,74 @@ + + + + +utils Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package utils

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/utils/relativepathgetter.html b/docs/utils/relativepathgetter.html new file mode 100644 index 0000000..97e461f --- /dev/null +++ b/docs/utils/relativepathgetter.html @@ -0,0 +1,171 @@ + + + + +RelativePathGetter + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package utils
+

Class RelativePathGetter

+
+
java.lang.Object +
utils.RelativePathGetter
+
+
+
+
public class RelativePathGetter +extends Object
+
This class is used to get the relative path of a file compared to the project path.
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      RelativePathGetter

      +
      public RelativePathGetter()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getRelativePath

      +
      public static String getRelativePath(String absolutePath, + String projectPath)
      +
      Get the relative path of a file compared to the project path. If the project path is not a prefix of the file path, the absolute path of the file is returned.
      +
      +
      Parameters:
      +
      absolutePath - The absolute path of the file.
      +
      projectPath - The absolute path of the project.
      +
      Returns:
      +
      The relative path of the file compared to the project path.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/utils/xmlwriter.html b/docs/utils/xmlwriter.html new file mode 100644 index 0000000..a17ca05 --- /dev/null +++ b/docs/utils/xmlwriter.html @@ -0,0 +1,172 @@ + + + + +XMLWriter + + + + + + + + + + + + + + + +
+ +
+
+ +
+
Package utils
+

Class XMLWriter

+
+
java.lang.Object +
utils.XMLWriter
+
+
+
+
public class XMLWriter +extends Object
+
This class is used to write the XML document to the XML file.
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      XMLWriter

      +
      public XMLWriter()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      writeToXML

      +
      public static void writeToXML(Document document, + String filePath) + throws TransformerException
      +
      Write the formatted XML document to the XML file.
      +
      +
      Parameters:
      +
      document - The XML document.
      +
      filePath - The path of the XML file.
      +
      Throws:
      +
      TransformerException
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/faq/index.html b/faq/index.html index 3653e96..4a77636 100644 --- a/faq/index.html +++ b/faq/index.html @@ -4,7 +4,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/index.html b/index.html index a2b676e..2862f54 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
@@ -275,7 +275,7 @@
NEWS!  of IntelliJ Platform SDK, with wide compatibility with the entire family of JetBrains IDEs and Tobii eye-tracking devices, to track developers’ IDE interactions and eye gaze data. The source code is available -on GitHub.

+on GitHub with Javadoc documentation.



diff --git a/license/index.html b/license/index.html index 5daf38a..4822d05 100644 --- a/license/index.html +++ b/license/index.html @@ -4,7 +4,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/resources/js/config.js b/resources/js/config.js index 5b7c384..fc7c428 100644 --- a/resources/js/config.js +++ b/resources/js/config.js @@ -1 +1 @@ -var __DOCS_CONFIG__ = {"id":"l9AacYLy+3Sf55rorQPuRUVOowq6o2480zR","key":"ekChzkDCFgs3ptDcxY3+J3YRMBugjmWRaXL1eBE7K2k.sNgtq0VqDm1UhRHE6U5j32ZpmkuA85xlViJhJ1wzoEgRPWiEK0khp66qeOERoFwdkbg0lq9Fu/ANKjBlPNQ8Xw.22","base":"/CodeGRITS/","host":"codegrits.github.io","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.758318468730","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Welcome","s":""},{"n":"about","l":"About","s":""},{"n":"usage-guide","l":"Usage Guide","s":""},{"n":"data-format","l":"Data Format","s":""},{"n":"developer","l":"Developer Guide","s":""},{"n":"changelog","l":"Changelog","s":""},{"n":"faq","l":"FAQ","s":""},{"n":"license","l":"License","v":false}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["k"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false},"resources":{"History_Title_Label":"History","History_ClearLink_Label":"Clear","History_NoHistory_Label":"No history items","API_AccessFilter_Label":"Access","API_ParameterSection_Label":"PARAMETERS","API_SignatureSection_Label":"SIGNATURE","API_CopyHint_Label":"Copy","API_CopyNameHint_Label":"Copy name","API_CopyLinkHint_Label":"Copy link","API_CopiedAckHint_Label":"Copied!","API_MoreOverloads_Label":"more","API_MoreDropdownItems_Label":"More","API_OptionalParameter_Label":"optional","API_DefaultParameterValue_Label":"Default value","API_InheritedFilter_Label":"Inherited","Search_Input_Placeholder":"Search","Toc_Contents_Label":"Contents","Toc_RelatedClasses_Label":"Related Classes","History_JustNowTime_Label":"just now","History_AgoTime_Label":"ago","History_YearTime_Label":"y","History_MonthTime_Label":"mo","History_DayTime_Label":"d","History_HourTime_Label":"h","History_MinuteTime_Label":"m","History_SecondTime_Label":"s"}}; +var __DOCS_CONFIG__ = {"id":"My2laY7WqyYNIXUGJfKEG+QYU248awF8wXc","key":"f93SYPiZmtCOacFZbVWTYOKbjT37qP0iFWxPEt0SRW4.Lpz2fXrcXu89fLpNni3jSqDUE7V71wm4q2DTzONX3rDohTg/mEbuMMrv4RkdYWKSJeHzpLItKw703DLja4vHbA.74","base":"/CodeGRITS/","host":"codegrits.github.io","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.758320158258","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Welcome","s":""},{"n":"about","l":"About","s":""},{"n":"usage-guide","l":"Usage Guide","s":""},{"n":"data-format","l":"Data Format","s":""},{"n":"developer","l":"Developer Guide","s":""},{"n":"changelog","l":"Changelog","s":""},{"n":"faq","l":"FAQ","s":""},{"n":"license","l":"License","v":false}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["k"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false},"resources":{"History_Title_Label":"History","History_ClearLink_Label":"Clear","History_NoHistory_Label":"No history items","API_AccessFilter_Label":"Access","API_ParameterSection_Label":"PARAMETERS","API_SignatureSection_Label":"SIGNATURE","API_CopyHint_Label":"Copy","API_CopyNameHint_Label":"Copy name","API_CopyLinkHint_Label":"Copy link","API_CopiedAckHint_Label":"Copied!","API_MoreOverloads_Label":"more","API_MoreDropdownItems_Label":"More","API_OptionalParameter_Label":"optional","API_DefaultParameterValue_Label":"Default value","API_InheritedFilter_Label":"Inherited","Search_Input_Placeholder":"Search","Toc_Contents_Label":"Contents","Toc_RelatedClasses_Label":"Related Classes","History_JustNowTime_Label":"just now","History_AgoTime_Label":"ago","History_YearTime_Label":"y","History_MonthTime_Label":"mo","History_DayTime_Label":"d","History_HourTime_Label":"h","History_MinuteTime_Label":"m","History_SecondTime_Label":"s"}}; diff --git a/resources/js/search.json b/resources/js/search.json index 54d9e7f..500319f 100644 --- a/resources/js/search.json +++ b/resources/js/search.json @@ -1 +1 @@ -[[{"l":"Welcome to CodeGRITS","p":["We would present CodeGRITS at ICSE 2024 Demo Track. Welcome to join us and discuss with us about it!","CodeGRITS stands for G aze R ecording & I DE T racking S ystem. It's a plugin developed by the SaNDwich Lab and is specially designed for empirical software engineering researchers. CodeGRITS is built on top of IntelliJ Platform SDK, with wide compatibility with the entire family of JetBrains IDEs and Tobii eye-tracking devices, to track developers’ IDE interactions and eye gaze data. The source code is available on GitHub.","The data collected by CodeGRITS can be used by empirical SE researchers to understand the behaviors of developers, especially those related to eye gaze. CodeGRITS also provides a real-time data API for future plugin developers and researchers to design context-aware programming support tools.","CodeGRITS is still in its developmental stage as a research tool. Our goal is to make it mature enough and beneficial for the community, particularly for those involved in empirical software engineering and eye tracking research. We encourage the community to contribute through GitHub Issue for any suggestions or issues, aiding in its improvement.","For any inquiries, please email us at ntang@nd.edu or jan2@nd.edu. If you're interested in using CodeGRITS in your research, don't hesitate to email us for setup support. We are delighted to provide tailored assistance based on your specific OS and JetBrains IDE environment."]},{"l":"Cross-platform and Multilingual Support","p":["CodeGRITS provides cross-platform support for Windows, macOS, and Linux, and is expected to be compatible with the entire family of JetBrains IDEs, including IntelliJ IDEA, PyCharm, WebStorm, etc.","CodeGRITS could extract the abstract syntax tree (AST) structure of eye gazes on multiple programming languages, as long as the IDE supports them, including Java, Python, C/C++, JavaScript, etc."]},{"l":"Key Features","p":["\uD83D\uDD0D IDE Tracking: CodeGRITS tracks developers’ IDE interactions, including mouse clicks, keyboard inputs, etc.","\uD83D\uDC41️ Eye Tracking: CodeGRITS tracks developers’ eye gaze data from Tobii eye-tracking devices, and maps them to corresponding source code elements.","\uD83D\uDCBB Screen Recording: CodeGRITS simultaneously records developers’ screen for visualizing their behaviors.","\uD83D\uDD28 Research Toolkit: CodeGRITS provides a set of extra features for empirical SE researchers, including dynamic configuration, activity labeling, real-time data API, etc.","\uD83D\uDDC3️ Data Export: CodeGRITS exports data in XML format for further data analysis. See Data Format for more details."]},{"l":"Citation","p":["The paper of CodeGRITS has been accepted by ICSE 2024 Demonstrations Track. The PDF version is available here. Please cite the following if you use CodeGRITS in your research."]}],[{"l":"About","p":["CodeGRITS is professionally built and supported by a small dedicated team of HCI and SE researchers from SaNDwich Lab at the University of Notre Dame and Vanderbilt University. We are committed to keeping CodeGRITS open source and making it beneficial for the community.","The authors of CodeGRITS are Ningzhi Tang(equal contribution), Junwen An(equal contribution), Meng Chen, Aakash Bansal, Yu Huang, Collin McMillan, and Toby Jia-Jun Li. Technical support questions, bug reports, and feature requests are best started as a GitHub Issue.","We prepared a video demonstration of CodeGRITS for ICSE 2024."]},{"l":"Credits","p":["CodeGRITS would not be possible without the following commercial and open-source projects:","IntelliJ Platform SDK: CodeGRITS is built on top of the IntelliJ Platform.","Tobii Pro SDK: CodeGRITS uses the Tobii Pro SDK to collect eye gaze data from Tobii eye-tracking devices.","ReType: CodeGRITS documentation is built with Retype.","JavaCV: CodeGRITS uses JavaCV to implement the screen recorder.","Special thanks to the iTrace team. iTrace is a similar tool to CodeGRITS for collecting developers' eye gaze data in several IDEs, including Eclipse, Visual Studio, and Atom. We have learned a lot from their work and referred to part of their code. Different from iTrace, CodeGRITS is built for JetBrains IDEs and provides a set of extra functionalities (e.g., IDE tracking, screen recording, etc.) for empirical SE researchers."]},{"l":"License","p":["CodeGRITS is licensed under the MIT License. See the LICENSE for details."]},{"l":"Contact us","p":["Please feel free to contact us anytime if you have any questions or suggestions.","Email the developers Ningzhi Tang at ntang@nd.edu or Junwen An at jan2@nd.edu.","Start a GitHub Issue."]}],[{"l":"Usage Guide"},{"l":"Environment Requirements"},{"l":"Eye-tracking Device","p":["CodeGRITS is built on top of Tobii Pro SDK, and is expected to be compatible with all Tobii eye-tracking devices(see Supported Eye Trackers for more details). However, we have only tested CodeGRITS with Tobii Pro Fusion since we do not have access to other eye-tracking devices. If you want to further develop CodeGRITS for your own eye-tracking device, please refer to the Developer Guide for more details, and also feel free to contact us if you need further assistance.","You could also use CodeGRITS without an eye-tracking device. Since CodeGRITS provides mouse simulation as a substitute for eye gaze. You could also uncheck the Eye Tracking option in the configuration window to disable eye tracking."]},{"l":"IDE Compatibility","p":["CodeGRITS is expected to be compatible with the entire family of JetBrains IDEs, including IntelliJ IDEA, PyCharm, Clion, etc. Due to the limited time, we did not specifically test CodeGRITS thoroughly on all of them. We provide a list of JetBrains IDEs that we have tested CodeGRITS on.","JetBrains IDEs","Version","IntelliJ IDEA","2022.2 - 2023.3","PyCharm","Clion","PhpStorm","Since CodeGRITS is still in its early developmental stage, even though we believe it would work well, some minor issues may still exist. If you encounter any of them, please feel free to contact us or create a GitHub Issue."]},{"l":"Python Environment","p":["Since Tobii Pro SDK did not provide a Java API, we have to use the Python API to collect eye gaze data. Thus, it is necessary to install the following packages in your Python environment to run this plugin (minor version differences should be fine).","Refer to Supported platforms and languages, Tobii Pro SDK only supports Python 3.8 and Python 3.10. Regarding operating systems, Tobii Pro SDK supports Windows 10 and 11 (64-bit), macOS 10.15 and 12, and Ubuntu 20.04 LTS."]},{"l":"Installation"},{"l":"Get the Plugin"},{"l":"Direct Download","p":["We provide the direct download link of the plugin zip file for the following JetBrains IDEs for convenience.","JetBrains IDEs","Version","Download Link","IntelliJ IDEA","2022.2 - 2023.3","Download","PyCharm"]},{"l":"Build from Source","p":["We also encourage you to build the plugin from the source code, especially for the IDEs that are not listed above.","Clone the repository to your local machine.","Set the IDE type and version in build.gradle.kts file. For example, if you want to build the plugin for IntelliJ Community Edition between 2022.2 and 2023.3, you should set the following in build.gradle.kts file.","Please refer to the Gradle IntelliJ Plugin - Configuration and Plugins Targeting IntelliJ Platform-Based IDEs for more details.","Open the command line and run ./gradlew build in the root folder to build the plugin.","Find the plugin zip file in the build/distributions folder."]},{"l":"Install the Plugin","p":["Open the JetBrains IDE, click File- Settings- Plugins- Install Plugin from Disk... to install the plugin zip file.","Restart IntelliJ IDEA to enable the plugin, then all CodeGRITS features are available in the Tools dropdown menu, including Start/Stop Tracking, Pause/Resume Tracking, and Configuration."]},{"l":"Usage"},{"l":"Configuration","p":["Before starting tracking, you should first configure the plugin. Click Tools- Configuration to open the configuration window. The configuration settings are stored in the config.json file in the bin/ folder of your installed JetBrains IDE."]},{"l":"Functionalities","p":["You can select the trackers which you want to use, including IDE Tracker, Eye Tracker, and Screen Recorder. If a compatible eye-tracking device is not available, CodeGRITS would use the mouse cursor as a substitute for eye gaze data."]},{"l":"Settings","p":["You can configure the following settings:","The Python interpreter path that is used for Eye Tracker;","The output directory for the collected data, defaults to the root folder of your project;","The sample frequency of Eye Tracker. The range depends on the eye-tracking device;","The eye-tracking device to use. The mouse is also available as a substitute.","To enable eye tracking, you need to have the necessary Python packages installed in your Python environment. The plugin automatically checks if the required packages are installed."]},{"l":"Preset Labels","p":["You are able to pre-set some labels here which could be used to mark the developers' semantic activities that cannot be captured by explicit IDE interactions. You can add the labels by right-clicking during tracking. The label is also recorded in the output data via IDE Tracker.","After configuring the plugin, you can start tracking by clicking Tools- Start Tracking. You can also pause, or resume tracking by clicking Tools- Pause Tracking or Tools- Resume Tracking. CodeGRITS will not collect any data when it is paused. You can stop tracking by clicking Tools- Stop Tracking. The plugin will export data in XML format to the configured folder."]},{"l":"Trackers"},{"l":"IDE Tracker","p":["IDE Tracker could track a wide range of IDE interactions including all but not limited to the following.","A real-time archive mechanism is also implemented to archive the whole code files when they are changed, and the console output during the development process. Below is one example of data collected by IDE Tracker. See Data Format for more details."]},{"l":"Eye Tracker","p":["The workflow of Eye Tracker is divided into three steps:","(1) Connect to the eye-tracking device and receive raw data, which includes the coordinates of the eye gaze points, pupil diameters of both eyes and their validity; If a compatible eye-tracking device is not available, CodeGRITS will use the mouse cursor as a substitute.","(2) Map the coordinates of raw gazes within the text editor to specific locations in the code (i.e., file path, line and column number);","Below is one example of the data collected by Eye Tracker. See Data Format for more details.","CodeGRITS does not provide calibration for eye tracking. We highly recommend using Tobii Pro Eye Tracker Manager to conduct calibration before using eye tracking."]},{"l":"Screen Recorder","p":["Screen Recorder captures everything on the screen and saves the capture to a video. It also records the timestamp of each frame, which can be used to synchronize the screen recording with other tracking data to facilitate analysis. See Data Format for more details.","When using CodeGRITS's Screen Recorder, it is recommended to limit the setup to a single monitor. In cases where dual monitors are used, please position the IDE on the primary screen."]}],[{"l":"Data Format"},{"l":"Data Directory Structure","p":["Comment:","[OUTPUT_DIR] is the output directory specified in the configuration.","[START_TIMESTAMP] is the timestamp when the tracking starts.","[ARCHIVE_TIMESTAMP] is the timestamp when the archive is triggered.","video_clip_[k].mp4 is the video clip of the screen recording from the (k-1)-th pause (0-th pause is start) to the k-th pause.","frames.csv records the timestamp and clip number of each frame in the video clip.","All the timestamps used by CodeGRITS are Unix time in milliseconds, starting from 1970-01-01 00:00:00 UTC.","The editor coordinate system(e.g., line, column) of IntelliJ Platform starts from 0."]},{"l":"IDE Tracking","p":["action","actions","archive","archives","caret","carets","Comment:","Element: ide_tracking","environment","file","files","ide_tracking","mouse","mouses","selection","selections","Sub-element:","The root element of the ide_tracking.xml file.","typing","typings","visible_area","visible_areas"]},{"l":"Environment","p":["All path attributes in the data start with / are relative to project_path, otherwise they are absolute paths. Sometimes the path is empty, which means the data is irrelevant to any file or not successfully tracked.","Attribute:","Comment:","Element: environment","Example:","ide_name","ide_version","java_version","java_version will be replaced by python_version in PyCharm, etc.","os_name","project_name","project_path","scale_x","scale_x and scale_y are used to calculate the real screen resolution based on the screen_size. In the example above, the real screen resolution is (1536*1.25, 864*1.25) = (1920, 1080).","scale_y","screen_size"]},{"l":"Archives","p":["Element: archives","Sub-element: archive","Comment:","A real-time archive mechanism is implemented to track the state of the code file and console output at any timestamp during the development process. The file archive is triggered under two specific conditions: (1) When a file is opened or closed, or its selection changes; (2) When the content of the code in the main editor changes. The console archive is triggered when the console output changes (e.g., run class).","The archived data is stored in the archives directory, with the name [ARCHIVE_TIMESTAMP].archive, where[ARCHIVE_TIMESTAMP] is the timestamp when the archive is triggered. Relevant information is stored in the archive element, including the timestamp, the path of the file, and the remark.","Thus, if you want to know the state of the code file at a specific timestamp, you can find the archive file with the largest timestamp that is smaller than the target timestamp."]},{"l":"Archive","p":["Element: archive","Attribute:","id","timestamp","path: only used in fileArchive","remark: only used in fileArchive","Example:","Comment:","id could be fileArchive or consoleArchive.","remark could be fileOpened, fileClosed, fileSelectionChanged, contentChanged | OldFile, contentChanged | NewFile.","If the file is not a code file, i.e., the file extension is not in the \".java\", \".cpp\", \".c\", \".py\", \".rb\", \".js\", or \".md\", NotCodeFile | Fail would be added to the remark. This is to prevent archiving data files with large sizes.","If there are IO errors when archiving the file, IOException | Fail will be added to the remark."]},{"l":"Actions","p":["Element: actions","Sub-element: action","Comment:","The elements in actions are all the IDE-specific features, technically are all objects that implement the AnAction abstract class in IntelliJ IDEA. The range is diverse, from the basic editing features like EditorEnter, EditorBackSpace, clipboard features like EditorPaste, EditorCut, run features like RunClass, Stop, ToggleLineBreakpoint, Debug, navigating features like GotoDeclaration, Find, ShowIntentionActions, advanced IDE features like CompareTwoFiles, ReformatCode, to many others that cannot be fully listed here."]},{"l":"Action","p":["Element: action","Attribute:","id","timestamp","path","Example:","Comment:","CodeGRITS-related actions are also implemented as AnAction objects, and their id is prefixed with CodeGRITS, such as CodeGRITS.StartStopTracking, CodeGRITS.PauseResumeTracking, etc.","The \"add label\" action is also tracked here, with id as CodeGRITS.AddLabel.[LABEL_NAME], where the label name is pre-set in the configuration.","Other IntelliJ plugins may also implement their own AnAction objects, which will also be tracked here. For example, the copilot.applyInlays in the GitHub Copilot plugin."]},{"l":"Typings","p":["Element: typings","Sub-element: typing","Comment:","The typings element records the typing action of the user in the code editor. The data including the character, the timestamp, the path of the file, the line number, and the column number."]},{"l":"Typing","p":["Element: typing","Attribute:","character","timestamp","path","line","column","Example:"]},{"l":"Files","p":["Element: files","Sub-element: file","Comment:","The files element records the file-related actions including opening, closing, and selection change. The data including the timestamp and the path of the file."]},{"l":"File","p":["Element: file","Attribute:","id","timestamp","path: only used in fileOpened/ fileClosed","old_path: only used in selectionChanged","new_path: only used in selectionChanged","Example:","Comment:","id could be fileOpened, fileClosed, or selectionChanged."]},{"l":"Mouses","p":["Element: mouses","Sub-element: mouse","Comment:","The mouses element records the mouse-related actions including pressing, releasing, clicking, moving, and dragging. The data includes the timestamp, the path of the file, the x-coordinate, and the y-coordinate."]},{"l":"Mouse","p":["Element: mouse","Attribute:","id","timestamp","path","x","y","Example:","Comment:","id could be mousePressed, mouseReleased, mouseClicked, mouseMoved, or mouseDragged.","x and y are the coordinates relative to the screen_size in the environment, not the actual screen resolution."]},{"l":"Carets","p":["Element: carets","Sub-element: caret","Comment:","Caret is the cursor in the code editor. The carets element records the change of the caret position in the code editor. The data includes the timestamp, the path of the file, the line number, and the column number."]},{"l":"Caret","p":["Element: caret","Attribute:","id","timestamp","path","line","column","Example:","Comment:","id could only be caretPositionChanged."]},{"l":"Selections","p":["Element: selections","Sub-element: selection","Comment:","The selections element records data when the user selects a piece of code in the code editor. The data includes the timestamp, the path of the file, the start position, the end position, and the selected text."]},{"l":"Selection","p":["Element: selection","Attribute:","id","timestamp","path","start_position: line:column","end_position: line:column","selected_text","Example:","Comment:","id could only be selectionChanged."]},{"l":"Visible Areas","p":["Element: visible_areas","Sub-element: visible_area","Comment:","The visible_areas element records the visible area of the code editor."]},{"l":"Visible Area","p":["Element: visible_area Attribute:","id","timestamp","path","x","y","width","height","Comment:","id could only be visibleAreaChanged.","x and y are the coordinates of the left-top corner of the visible area in code editor, relative to the left-top corner of the code editor including the invisible part (i.e., the line 0 and column 0). The unit of x, y, width, and height is measured by screen_size in the environment, not the actual screen resolution.","The change of x and y is usually caused by scrolling code editor, which could be used to track the horizontal and vertical scrolling respectively. The change of width and height is usually caused by resizing code editor, which could be used to track the horizontal and vertical resizing respectively."]},{"l":"Eye Tracking","p":["eye_tracking","setting","gazes","gaze","left_eye","right_eye","location","ast_structure","level","Element: eye_tracking","Sub-element:","Comment:","The root element of the eye_tracking.xml file. CodeGRITS supports both Mouse simulation and Tobii Pro eye tracker devices.","Since Tobii Pro SDK does not support Java, we use the Python library tobii-research to collect eye tracking data and use Java ProcessBuilder to call the Python script to collect data. The Python interpreter is specified in the configuration."]},{"l":"Setting","p":["Element: setting","Attribute:","eye_tracker","sampling_rate","Example:","Comment:","eye_tracker could be Mouse for simulation, or a real Tobii Pro eye tracker device name (e.g., Tobii Pro Fusion), which is obtained from eyetracker.model in the tobii-research library.","sampling_rate is the sampling rate of the eye tracker in Hz, which is pre-set in the configuration and whose range could be in eyetracker.get_all_gaze_output_frequencies() called in the tobii-research library."]},{"l":"Gazes","p":["Element: gazes","Sub-element: gaze","Comment:","Collection of all gaze data."]},{"l":"Gaze","p":["Element: gaze","Sub-element:","left_eye","right_eye","location: only used when the gaze point can be mapped to its location in the code editor","ast_structure: only used when the gaze point cannot be mapped to its location in the code editor, and the code file is java.","Attribute:","timestamp","remark: only used when the gaze point cannot be mapped to location in the code editor","Example:","Comment:","When the gaze point cannot be mapped to its location in the code editor in the following 3 cases, the remark attribute is used:","The raw gaze point from the eye tracker is invalid. (i.e., nan). In this case, the remark is Fail | Invalid Gaze Point.","The code editor is not founded. In this case, the remark is Fail | No Editor.","The code editor is founded, but the gaze point is out of the code editor. In this case, the remark is Fail | Out of Text Editor."]},{"l":"Left Eye","p":["Element: left_eye","Attribute:","gaze_point_x","gaze_point_y","gaze_validity","pupil_diameter","pupil_validity","Example:","Comment:","gaze_point_x and gaze_point_y are the location on the screen, ranging from 0 to 1, where (0, 0) is the top-left corner of the screen, and (1, 1) is the bottom-right corner of the screen.","gaze_validity and pupil_validity are the validity of the gaze point and pupil diameter, which is binary, 0 for invalid, 1 for valid. When using a mouse to simulate eye tracker, gaze_validity is always 1.0, and pupil_validity is always 0.0.","pupil_diameter is the diameter of the pupil in mm, when using a mouse to simulate eye tracker, pupil_diameter is always 0."]},{"l":"Right Eye","p":["Element: right_eye","Attribute:","gaze_point_x","gaze_point_y","gaze_validity","pupil_diameter","pupil_validity","Example:","Comment:","gaze_point_x and gaze_point_y are the location on the screen, ranging from 0 to 1, where (0, 0) is the top-left corner of the screen, and (1, 1) is the bottom-right corner of the screen.","gaze_validity and pupil_validity are the validity of the gaze point and pupil diameter, which is binary, 0 for invalid, 1 for valid. When using a mouse to simulate eye tracker, gaze_validity is always 1.0, and pupil_validity is always 0.0.","pupil_diameter is the diameter of the pupil in mm, when using a mouse to simulate eye tracker, pupil_diameter is always 0."]},{"l":"Location","p":["Element: location","Attribute:","path","line","column","x","y","Example:","Comment:","x and y are the coordinates of the gaze relative to the top-left corner of the visible code editor, whose unit is same as the screen_size in environment, not the actual screen resolution.","line and column are the line number and column number of the gaze point in the code editor, which is calculated by xyToLogicalPosition(@NotNull Point p) method of Editor interface in the IntelliJ Platform SDK."]},{"l":"AST Structure","p":["Element: ast_structure","Sub-element: level: only used when the current token is different from the previous token","Attribute:","token","type","remark: only used when the current token is same as the previous token","Example:","Comment:","The abstract syntax tree (AST) of the code file is recorded in the ast_structure element. The AST is calculated by program structure interface (PSI) of IntelliJ Platform.","token is the text of the leaf node in the AST of the current gaze point, which is calculated by psiElement.getText().","type is the type of the leaf node, which is calculated by psiElement.getNode().getElementType().","remark is used when the current token is same as the previous token, which means the gaze point is still in the same leaf node. In this case, the remark is Same (Last Successful AST). We designed this mechanism to avoid eye_tracking.xml from being too large.","We calculate the parent nodes of the leaf node by psiElement.getParent() until the file level (i.e. PsiFile), and save them in the level element. In the previous example, the leaf node is PsiIdentifier:println, and its parent nodes are PsiReferenceExpression:System.out.println=> PsiMethodCallExpression:System.out.println(Hello world!)=> PsiExpressionStatement=> PsiCodeBlock=> PsiMethod:main=> PsiClass:Main. The original code text is"]},{"l":"Level","p":["Element: level","Attribute:","start: line:column","end: line:column","tag","Example:","Comment:","start and end are the start and end position of the AST node level in the code file, which is calculated by psiElement.getTextRange().","tag is the type of the AST node level, which is calculated by psiElement.toString()."]},{"l":"Screen Recording","p":["clip_[k].mp4","frames.csv"]},{"l":"Video Clips","p":["clip_[k].mp4","Comment:","The video clip of the screen recording from the (k-1)-th pause (0-th pause is start) to the k-th pause. We designed this mechanism to avoid the video file in the memory being too large especially when pausing the tracking for a long time."]},{"l":"Frames","p":["frames.csv","Column:","timestamp","frame_number","clip_number","Example:","Comment:","The frame rate is 12 fps.","frame_number is the frame number of the frame in its video clip.","clip_number is the number of the video clip to which the frame belongs.","We also record the timestamp of Start, Pause, Resume, and Stop actions in the frames.csv file, which could be used to separate each stage of the development process."]}],[{"l":"Developer Guide"},{"l":"Further Development","p":["Please refer to IntelliJ Platform SDK for more details. Feel free to contact us if you need any help."]},{"l":"Accommodating New IDEs","p":["See Build from Source."]},{"l":"Accommodating New Eye Trackers","p":["If you want to integrate other eye-tracking devices except for Tobii eye-tracking devices, you need to reimplement all Python scripts in the source code to get the right eye-tracking device information and eye gaze data using your eye tracker API.","Location","Method","/trackers/EyeTracker.java","setPythonScriptTobii()","/utils/AvailabilityChecker.java","checkPythonEnvironment(String pythonInterpreter)","checkEyeTracker(String pythonInterpreter)","getEyeTrackerName(String pythonInterpreter)","getFrequencies(String pythonInterpreter)"]},{"l":"Real-time Data API"},{"l":"Overview","p":["We provide a real-time data API for future JetBrains plugin developers and researchers to get real-time data from IDE tracker and eye tracker separately. The API is based on the IDE Tracker and Eye Tracker.","We provide an example project DataStreamReceiver that builds on top of the real-time data API. It is designed to receive the IDE and eye tracking data and directly visualize them in two separate windows. You could refer to its source code to learn how to use the API."]},{"l":"Configuration","p":["Before using the API, you first need to build CodeGRITS from source(See Build from Source). Then, find the folder ./build/idea-sandbox/plugins/CodeGRITS in the CodeGRITS project, which is the dependency of the API. You need to add it to the intellij section in build.gradle.kts file of your plugin project.","You also need to add the following to ./src/main/resources/META-INF/plugin.xml."]},{"l":"Quick Start","p":["To use the API, simply call the getInstance() method to get the instance of the IDE Tracker or Eye Tracker. Then, set the isRealTimeDataTransmitting to true to enable real-time data transmitting. After that, set the ideTrackerDataHandler or eyeTrackerDataHandler to handle the real-time data. Finally, call the startTracking() method to start tracking.","Element object is an XML element that is imported from org.w3c.dom.Element package."]},{"l":"IDE Tracker","p":["IDETracker.getInstance()","setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)","setIdeTrackerDataHandler(ConsumerElement ideTrackerDataHandler)","startTracking(Project project)"]},{"l":"Eye Tracker","p":["EyeTracker.getInstance()","setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)","setEyeTrackerDataHandler(ConsumerElement eyeTrackerDataHandler)","startTracking(Project project)"]}],[{"l":"Changelog","p":["Encountered a bug or have a suggestion? Please create a GitHub Issue."]},{"l":"v0.2.0","p":["Released on 2023-12-28.","Improve the implementation of Screen Recorder from JCodec to JavaCV.","Initial pre-mature release for CodeGRITS.","Fix the color distortion and the missing cursor issues of the screen recorder.","Fix several issues about the naming.","Add the logo of CodeGRITS."]},{"i":"v010","l":"v0.1.0","p":["Released on 2023-11-30.","Release for ICSE 2024 Demo review."]}],[{"i":"frequently-asked-questions-faq","l":"Frequently Asked Questions (FAQ)"},{"i":"q1-what-is-the-difference-between-codegrits-and-itrace","l":"Q1. What is the difference between CodeGRITS and iTrace?","p":["iTrace is a similar tool to CodeGRITS for collecting developers' eye gaze data in several IDEs, including Eclipse, Visual Studio, and Atom. However, CodeGRITS is built for JetBrains IDEs, which have increased popularity in the industry and academia.","CodeGRITS also provides a set of extra functionalities, notably IDE tracking and screen recording, for empirical SE researchers. See Trackers for more details."]},{"i":"q2-can-i-use-codegrits-without-an-eye-tracking-device","l":"Q2. Can I use CodeGRITS without an eye-tracking device?","p":["Yes. CodeGRITS provides mouse simulation as a substitute for eye gaze. You could also uncheck the Eye Tracking option in the configuration window to disable the eye tracker to only use the IDE tracker and screen recorder."]},{"i":"q3-how-to-integrate-other-eye-tracking-devices-with-codegrits","l":"Q3. How to integrate other eye-tracking devices with CodeGRITS?","p":["See Accommodating New Eye Trackers."]},{"i":"q4-how-to-use-codegrits-in-other-jetbrains-ides","l":"Q4. How to use CodeGRITS in other JetBrains IDEs?","p":["See Accommodating New IDEs."]},{"i":"q5-how-efficient-is-the-processing-of-raw-eye-gaze-data","l":"Q5. How efficient is the processing of raw eye gaze data?","p":["In CodeGRITS, the efficiency of the processing of gaze data is negligible. For each gaze, we calculate the average time from the timestamp in the raw data to the timestamp after all processing is complete. This processing primarily involves location mapping and upward traversal of the AST. The average delay is 4.32 ms, equating to delays of approximately 12.98% for 30Hz, 25.96% for 60Hz, and 51.92% for 120Hz eye gaze data. With such a high sampling frequency, meaningful changes in the content of the code editor's page are extremely rare within this short time frame, which ensures the accuracy of gaze processing. Moreover, compared to iTrace, our method of receiving data from the eye-tracking device is more efficient, ensuring that all sampled gazes are mapped without any loss."]},{"i":"q6-how-much-storage-space-does-codegrits-require","l":"Q6. How much storage space does CodeGRITS require?","p":["Generally speaking, a high sample frequency generates a large amount of gaze data. To conserve storage space, we only perform upward traversal of the AST of the first gaze and record the hierarchy structure, and mark the rest as same. This approach significantly reduces storage space. In a previous debugging study, we set the eye-tracking device's sample frequency to 60Hz, and during the 20-minute experiment, the eye-tracking data amounted to only about 40MB."]}],[{"l":"License","p":["MIT License","Copyright (c) 2023 SaNDwich Lab","Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:","The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.","THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."]}]] \ No newline at end of file +[[{"l":"Welcome to CodeGRITS","p":["We would present CodeGRITS at ICSE 2024 Demo Track. Welcome to join us and discuss with us about it!","CodeGRITS stands for G aze R ecording & I DE T racking S ystem. It's a plugin developed by the SaNDwich Lab and is specially designed for empirical software engineering researchers. CodeGRITS is built on top of IntelliJ Platform SDK, with wide compatibility with the entire family of JetBrains IDEs and Tobii eye-tracking devices, to track developers’ IDE interactions and eye gaze data. The source code is available on GitHub with Javadoc documentation.","The data collected by CodeGRITS can be used by empirical SE researchers to understand the behaviors of developers, especially those related to eye gaze. CodeGRITS also provides a real-time data API for future plugin developers and researchers to design context-aware programming support tools.","CodeGRITS is still in its developmental stage as a research tool. Our goal is to make it mature enough and beneficial for the community, particularly for those involved in empirical software engineering and eye tracking research. We encourage the community to contribute through GitHub Issue for any suggestions or issues, aiding in its improvement.","For any inquiries, please email us at ntang@nd.edu or jan2@nd.edu. If you're interested in using CodeGRITS in your research, don't hesitate to email us for setup support. We are delighted to provide tailored assistance based on your specific OS and JetBrains IDE environment."]},{"l":"Cross-platform and Multilingual Support","p":["CodeGRITS provides cross-platform support for Windows, macOS, and Linux, and is expected to be compatible with the entire family of JetBrains IDEs, including IntelliJ IDEA, PyCharm, WebStorm, etc.","CodeGRITS could extract the abstract syntax tree (AST) structure of eye gazes on multiple programming languages, as long as the IDE supports them, including Java, Python, C/C++, JavaScript, etc."]},{"l":"Key Features","p":["\uD83D\uDD0D IDE Tracking: CodeGRITS tracks developers’ IDE interactions, including mouse clicks, keyboard inputs, etc.","\uD83D\uDC41️ Eye Tracking: CodeGRITS tracks developers’ eye gaze data from Tobii eye-tracking devices, and maps them to corresponding source code elements.","\uD83D\uDCBB Screen Recording: CodeGRITS simultaneously records developers’ screen for visualizing their behaviors.","\uD83D\uDD28 Research Toolkit: CodeGRITS provides a set of extra features for empirical SE researchers, including dynamic configuration, activity labeling, real-time data API, etc.","\uD83D\uDDC3️ Data Export: CodeGRITS exports data in XML format for further data analysis. See Data Format for more details."]},{"l":"Citation","p":["The paper of CodeGRITS has been accepted by ICSE 2024 Demonstrations Track. The PDF version is available here. Please cite the following if you use CodeGRITS in your research."]}],[{"l":"About","p":["CodeGRITS is professionally built and supported by a small dedicated team of HCI and SE researchers from SaNDwich Lab at the University of Notre Dame and Vanderbilt University. We are committed to keeping CodeGRITS open source and making it beneficial for the community.","The authors of CodeGRITS are Ningzhi Tang(equal contribution), Junwen An(equal contribution), Meng Chen, Aakash Bansal, Yu Huang, Collin McMillan, and Toby Jia-Jun Li. Technical support questions, bug reports, and feature requests are best started as a GitHub Issue.","We prepared a video demonstration of CodeGRITS for ICSE 2024."]},{"l":"Credits","p":["CodeGRITS would not be possible without the following commercial and open-source projects:","IntelliJ Platform SDK: CodeGRITS is built on top of the IntelliJ Platform.","Tobii Pro SDK: CodeGRITS uses the Tobii Pro SDK to collect eye gaze data from Tobii eye-tracking devices.","ReType: CodeGRITS documentation is built with Retype.","JavaCV: CodeGRITS uses JavaCV to implement the screen recorder.","Special thanks to the iTrace team. iTrace is a similar tool to CodeGRITS for collecting developers' eye gaze data in several IDEs, including Eclipse, Visual Studio, and Atom. We have learned a lot from their work and referred to part of their code. Different from iTrace, CodeGRITS is built for JetBrains IDEs and provides a set of extra functionalities (e.g., IDE tracking, screen recording, etc.) for empirical SE researchers."]},{"l":"License","p":["CodeGRITS is licensed under the MIT License. See the LICENSE for details."]},{"l":"Contact us","p":["Please feel free to contact us anytime if you have any questions or suggestions.","Email the developers Ningzhi Tang at ntang@nd.edu or Junwen An at jan2@nd.edu.","Start a GitHub Issue."]}],[{"l":"Usage Guide"},{"l":"Environment Requirements"},{"l":"Eye-tracking Device","p":["CodeGRITS is built on top of Tobii Pro SDK, and is expected to be compatible with all Tobii eye-tracking devices(see Supported Eye Trackers for more details). However, we have only tested CodeGRITS with Tobii Pro Fusion since we do not have access to other eye-tracking devices. If you want to further develop CodeGRITS for your own eye-tracking device, please refer to the Developer Guide for more details, and also feel free to contact us if you need further assistance.","You could also use CodeGRITS without an eye-tracking device. Since CodeGRITS provides mouse simulation as a substitute for eye gaze. You could also uncheck the Eye Tracking option in the configuration window to disable eye tracking."]},{"l":"IDE Compatibility","p":["CodeGRITS is expected to be compatible with the entire family of JetBrains IDEs, including IntelliJ IDEA, PyCharm, Clion, etc. Due to the limited time, we did not specifically test CodeGRITS thoroughly on all of them. We provide a list of JetBrains IDEs that we have tested CodeGRITS on.","JetBrains IDEs","Version","IntelliJ IDEA","2022.2 - 2023.3","PyCharm","Clion","PhpStorm","Since CodeGRITS is still in its early developmental stage, even though we believe it would work well, some minor issues may still exist. If you encounter any of them, please feel free to contact us or create a GitHub Issue."]},{"l":"Python Environment","p":["Since Tobii Pro SDK did not provide a Java API, we have to use the Python API to collect eye gaze data. Thus, it is necessary to install the following packages in your Python environment to run this plugin (minor version differences should be fine).","Refer to Supported platforms and languages, Tobii Pro SDK only supports Python 3.8 and Python 3.10. Regarding operating systems, Tobii Pro SDK supports Windows 10 and 11 (64-bit), macOS 10.15 and 12, and Ubuntu 20.04 LTS."]},{"l":"Installation"},{"l":"Get the Plugin"},{"l":"Direct Download","p":["We provide the direct download link of the plugin zip file for the following JetBrains IDEs for convenience.","JetBrains IDEs","Version","Download Link","IntelliJ IDEA","2022.2 - 2023.3","Download","PyCharm"]},{"l":"Build from Source","p":["We also encourage you to build the plugin from the source code, especially for the IDEs that are not listed above.","Clone the repository to your local machine.","Set the IDE type and version in build.gradle.kts file. For example, if you want to build the plugin for IntelliJ Community Edition between 2022.2 and 2023.3, you should set the following in build.gradle.kts file.","Please refer to the Gradle IntelliJ Plugin - Configuration and Plugins Targeting IntelliJ Platform-Based IDEs for more details.","Open the command line and run ./gradlew build in the root folder to build the plugin.","Find the plugin zip file in the build/distributions folder."]},{"l":"Install the Plugin","p":["Open the JetBrains IDE, click File- Settings- Plugins- Install Plugin from Disk... to install the plugin zip file.","Restart IntelliJ IDEA to enable the plugin, then all CodeGRITS features are available in the Tools dropdown menu, including Start/Stop Tracking, Pause/Resume Tracking, and Configuration."]},{"l":"Usage"},{"l":"Configuration","p":["Before starting tracking, you should first configure the plugin. Click Tools- Configuration to open the configuration window. The configuration settings are stored in the config.json file in the bin/ folder of your installed JetBrains IDE."]},{"l":"Functionalities","p":["You can select the trackers which you want to use, including IDE Tracker, Eye Tracker, and Screen Recorder. If a compatible eye-tracking device is not available, CodeGRITS would use the mouse cursor as a substitute for eye gaze data."]},{"l":"Settings","p":["You can configure the following settings:","The Python interpreter path that is used for Eye Tracker;","The output directory for the collected data, defaults to the root folder of your project;","The sample frequency of Eye Tracker. The range depends on the eye-tracking device;","The eye-tracking device to use. The mouse is also available as a substitute.","To enable eye tracking, you need to have the necessary Python packages installed in your Python environment. The plugin automatically checks if the required packages are installed."]},{"l":"Preset Labels","p":["You are able to pre-set some labels here which could be used to mark the developers' semantic activities that cannot be captured by explicit IDE interactions. You can add the labels by right-clicking during tracking. The label is also recorded in the output data via IDE Tracker.","After configuring the plugin, you can start tracking by clicking Tools- Start Tracking. You can also pause, or resume tracking by clicking Tools- Pause Tracking or Tools- Resume Tracking. CodeGRITS will not collect any data when it is paused. You can stop tracking by clicking Tools- Stop Tracking. The plugin will export data in XML format to the configured folder."]},{"l":"Trackers"},{"l":"IDE Tracker","p":["IDE Tracker could track a wide range of IDE interactions including all but not limited to the following.","A real-time archive mechanism is also implemented to archive the whole code files when they are changed, and the console output during the development process. Below is one example of data collected by IDE Tracker. See Data Format for more details."]},{"l":"Eye Tracker","p":["The workflow of Eye Tracker is divided into three steps:","(1) Connect to the eye-tracking device and receive raw data, which includes the coordinates of the eye gaze points, pupil diameters of both eyes and their validity; If a compatible eye-tracking device is not available, CodeGRITS will use the mouse cursor as a substitute.","(2) Map the coordinates of raw gazes within the text editor to specific locations in the code (i.e., file path, line and column number);","Below is one example of the data collected by Eye Tracker. See Data Format for more details.","CodeGRITS does not provide calibration for eye tracking. We highly recommend using Tobii Pro Eye Tracker Manager to conduct calibration before using eye tracking."]},{"l":"Screen Recorder","p":["Screen Recorder captures everything on the screen and saves the capture to a video. It also records the timestamp of each frame, which can be used to synchronize the screen recording with other tracking data to facilitate analysis. See Data Format for more details.","When using CodeGRITS's Screen Recorder, it is recommended to limit the setup to a single monitor. In cases where dual monitors are used, please position the IDE on the primary screen."]}],[{"l":"Data Format"},{"l":"Data Directory Structure","p":["Comment:","[OUTPUT_DIR] is the output directory specified in the configuration.","[START_TIMESTAMP] is the timestamp when the tracking starts.","[ARCHIVE_TIMESTAMP] is the timestamp when the archive is triggered.","video_clip_[k].mp4 is the video clip of the screen recording from the (k-1)-th pause (0-th pause is start) to the k-th pause.","frames.csv records the timestamp and clip number of each frame in the video clip.","All the timestamps used by CodeGRITS are Unix time in milliseconds, starting from 1970-01-01 00:00:00 UTC.","The editor coordinate system(e.g., line, column) of IntelliJ Platform starts from 0."]},{"l":"IDE Tracking","p":["action","actions","archive","archives","caret","carets","Comment:","Element: ide_tracking","environment","file","files","ide_tracking","mouse","mouses","selection","selections","Sub-element:","The root element of the ide_tracking.xml file.","typing","typings","visible_area","visible_areas"]},{"l":"Environment","p":["All path attributes in the data start with / are relative to project_path, otherwise they are absolute paths. Sometimes the path is empty, which means the data is irrelevant to any file or not successfully tracked.","Attribute:","Comment:","Element: environment","Example:","ide_name","ide_version","java_version","java_version will be replaced by python_version in PyCharm, etc.","os_name","project_name","project_path","scale_x","scale_x and scale_y are used to calculate the real screen resolution based on the screen_size. In the example above, the real screen resolution is (1536*1.25, 864*1.25) = (1920, 1080).","scale_y","screen_size"]},{"l":"Archives","p":["Element: archives","Sub-element: archive","Comment:","A real-time archive mechanism is implemented to track the state of the code file and console output at any timestamp during the development process. The file archive is triggered under two specific conditions: (1) When a file is opened or closed, or its selection changes; (2) When the content of the code in the main editor changes. The console archive is triggered when the console output changes (e.g., run class).","The archived data is stored in the archives directory, with the name [ARCHIVE_TIMESTAMP].archive, where[ARCHIVE_TIMESTAMP] is the timestamp when the archive is triggered. Relevant information is stored in the archive element, including the timestamp, the path of the file, and the remark.","Thus, if you want to know the state of the code file at a specific timestamp, you can find the archive file with the largest timestamp that is smaller than the target timestamp."]},{"l":"Archive","p":["Element: archive","Attribute:","id","timestamp","path: only used in fileArchive","remark: only used in fileArchive","Example:","Comment:","id could be fileArchive or consoleArchive.","remark could be fileOpened, fileClosed, fileSelectionChanged, contentChanged | OldFile, contentChanged | NewFile.","If the file is not a code file, i.e., the file extension is not in the \".java\", \".cpp\", \".c\", \".py\", \".rb\", \".js\", or \".md\", NotCodeFile | Fail would be added to the remark. This is to prevent archiving data files with large sizes.","If there are IO errors when archiving the file, IOException | Fail will be added to the remark."]},{"l":"Actions","p":["Element: actions","Sub-element: action","Comment:","The elements in actions are all the IDE-specific features, technically are all objects that implement the AnAction abstract class in IntelliJ IDEA. The range is diverse, from the basic editing features like EditorEnter, EditorBackSpace, clipboard features like EditorPaste, EditorCut, run features like RunClass, Stop, ToggleLineBreakpoint, Debug, navigating features like GotoDeclaration, Find, ShowIntentionActions, advanced IDE features like CompareTwoFiles, ReformatCode, to many others that cannot be fully listed here."]},{"l":"Action","p":["Element: action","Attribute:","id","timestamp","path","Example:","Comment:","CodeGRITS-related actions are also implemented as AnAction objects, and their id is prefixed with CodeGRITS, such as CodeGRITS.StartStopTracking, CodeGRITS.PauseResumeTracking, etc.","The \"add label\" action is also tracked here, with id as CodeGRITS.AddLabel.[LABEL_NAME], where the label name is pre-set in the configuration.","Other IntelliJ plugins may also implement their own AnAction objects, which will also be tracked here. For example, the copilot.applyInlays in the GitHub Copilot plugin."]},{"l":"Typings","p":["Element: typings","Sub-element: typing","Comment:","The typings element records the typing action of the user in the code editor. The data including the character, the timestamp, the path of the file, the line number, and the column number."]},{"l":"Typing","p":["Element: typing","Attribute:","character","timestamp","path","line","column","Example:"]},{"l":"Files","p":["Element: files","Sub-element: file","Comment:","The files element records the file-related actions including opening, closing, and selection change. The data including the timestamp and the path of the file."]},{"l":"File","p":["Element: file","Attribute:","id","timestamp","path: only used in fileOpened/ fileClosed","old_path: only used in selectionChanged","new_path: only used in selectionChanged","Example:","Comment:","id could be fileOpened, fileClosed, or selectionChanged."]},{"l":"Mouses","p":["Element: mouses","Sub-element: mouse","Comment:","The mouses element records the mouse-related actions including pressing, releasing, clicking, moving, and dragging. The data includes the timestamp, the path of the file, the x-coordinate, and the y-coordinate."]},{"l":"Mouse","p":["Element: mouse","Attribute:","id","timestamp","path","x","y","Example:","Comment:","id could be mousePressed, mouseReleased, mouseClicked, mouseMoved, or mouseDragged.","x and y are the coordinates relative to the screen_size in the environment, not the actual screen resolution."]},{"l":"Carets","p":["Element: carets","Sub-element: caret","Comment:","Caret is the cursor in the code editor. The carets element records the change of the caret position in the code editor. The data includes the timestamp, the path of the file, the line number, and the column number."]},{"l":"Caret","p":["Element: caret","Attribute:","id","timestamp","path","line","column","Example:","Comment:","id could only be caretPositionChanged."]},{"l":"Selections","p":["Element: selections","Sub-element: selection","Comment:","The selections element records data when the user selects a piece of code in the code editor. The data includes the timestamp, the path of the file, the start position, the end position, and the selected text."]},{"l":"Selection","p":["Element: selection","Attribute:","id","timestamp","path","start_position: line:column","end_position: line:column","selected_text","Example:","Comment:","id could only be selectionChanged."]},{"l":"Visible Areas","p":["Element: visible_areas","Sub-element: visible_area","Comment:","The visible_areas element records the visible area of the code editor."]},{"l":"Visible Area","p":["Element: visible_area Attribute:","id","timestamp","path","x","y","width","height","Comment:","id could only be visibleAreaChanged.","x and y are the coordinates of the left-top corner of the visible area in code editor, relative to the left-top corner of the code editor including the invisible part (i.e., the line 0 and column 0). The unit of x, y, width, and height is measured by screen_size in the environment, not the actual screen resolution.","The change of x and y is usually caused by scrolling code editor, which could be used to track the horizontal and vertical scrolling respectively. The change of width and height is usually caused by resizing code editor, which could be used to track the horizontal and vertical resizing respectively."]},{"l":"Eye Tracking","p":["eye_tracking","setting","gazes","gaze","left_eye","right_eye","location","ast_structure","level","Element: eye_tracking","Sub-element:","Comment:","The root element of the eye_tracking.xml file. CodeGRITS supports both Mouse simulation and Tobii Pro eye tracker devices.","Since Tobii Pro SDK does not support Java, we use the Python library tobii-research to collect eye tracking data and use Java ProcessBuilder to call the Python script to collect data. The Python interpreter is specified in the configuration."]},{"l":"Setting","p":["Element: setting","Attribute:","eye_tracker","sampling_rate","Example:","Comment:","eye_tracker could be Mouse for simulation, or a real Tobii Pro eye tracker device name (e.g., Tobii Pro Fusion), which is obtained from eyetracker.model in the tobii-research library.","sampling_rate is the sampling rate of the eye tracker in Hz, which is pre-set in the configuration and whose range could be in eyetracker.get_all_gaze_output_frequencies() called in the tobii-research library."]},{"l":"Gazes","p":["Element: gazes","Sub-element: gaze","Comment:","Collection of all gaze data."]},{"l":"Gaze","p":["Element: gaze","Sub-element:","left_eye","right_eye","location: only used when the gaze point can be mapped to its location in the code editor","ast_structure: only used when the gaze point cannot be mapped to its location in the code editor, and the code file is java.","Attribute:","timestamp","remark: only used when the gaze point cannot be mapped to location in the code editor","Example:","Comment:","When the gaze point cannot be mapped to its location in the code editor in the following 3 cases, the remark attribute is used:","The raw gaze point from the eye tracker is invalid. (i.e., nan). In this case, the remark is Fail | Invalid Gaze Point.","The code editor is not founded. In this case, the remark is Fail | No Editor.","The code editor is founded, but the gaze point is out of the code editor. In this case, the remark is Fail | Out of Text Editor."]},{"l":"Left Eye","p":["Element: left_eye","Attribute:","gaze_point_x","gaze_point_y","gaze_validity","pupil_diameter","pupil_validity","Example:","Comment:","gaze_point_x and gaze_point_y are the location on the screen, ranging from 0 to 1, where (0, 0) is the top-left corner of the screen, and (1, 1) is the bottom-right corner of the screen.","gaze_validity and pupil_validity are the validity of the gaze point and pupil diameter, which is binary, 0 for invalid, 1 for valid. When using a mouse to simulate eye tracker, gaze_validity is always 1.0, and pupil_validity is always 0.0.","pupil_diameter is the diameter of the pupil in mm, when using a mouse to simulate eye tracker, pupil_diameter is always 0."]},{"l":"Right Eye","p":["Element: right_eye","Attribute:","gaze_point_x","gaze_point_y","gaze_validity","pupil_diameter","pupil_validity","Example:","Comment:","gaze_point_x and gaze_point_y are the location on the screen, ranging from 0 to 1, where (0, 0) is the top-left corner of the screen, and (1, 1) is the bottom-right corner of the screen.","gaze_validity and pupil_validity are the validity of the gaze point and pupil diameter, which is binary, 0 for invalid, 1 for valid. When using a mouse to simulate eye tracker, gaze_validity is always 1.0, and pupil_validity is always 0.0.","pupil_diameter is the diameter of the pupil in mm, when using a mouse to simulate eye tracker, pupil_diameter is always 0."]},{"l":"Location","p":["Element: location","Attribute:","path","line","column","x","y","Example:","Comment:","x and y are the coordinates of the gaze relative to the top-left corner of the visible code editor, whose unit is same as the screen_size in environment, not the actual screen resolution.","line and column are the line number and column number of the gaze point in the code editor, which is calculated by xyToLogicalPosition(@NotNull Point p) method of Editor interface in the IntelliJ Platform SDK."]},{"l":"AST Structure","p":["Element: ast_structure","Sub-element: level: only used when the current token is different from the previous token","Attribute:","token","type","remark: only used when the current token is same as the previous token","Example:","Comment:","The abstract syntax tree (AST) of the code file is recorded in the ast_structure element. The AST is calculated by program structure interface (PSI) of IntelliJ Platform.","token is the text of the leaf node in the AST of the current gaze point, which is calculated by psiElement.getText().","type is the type of the leaf node, which is calculated by psiElement.getNode().getElementType().","remark is used when the current token is same as the previous token, which means the gaze point is still in the same leaf node. In this case, the remark is Same (Last Successful AST). We designed this mechanism to avoid eye_tracking.xml from being too large.","We calculate the parent nodes of the leaf node by psiElement.getParent() until the file level (i.e. PsiFile), and save them in the level element. In the previous example, the leaf node is PsiIdentifier:println, and its parent nodes are PsiReferenceExpression:System.out.println=> PsiMethodCallExpression:System.out.println(Hello world!)=> PsiExpressionStatement=> PsiCodeBlock=> PsiMethod:main=> PsiClass:Main. The original code text is"]},{"l":"Level","p":["Element: level","Attribute:","start: line:column","end: line:column","tag","Example:","Comment:","start and end are the start and end position of the AST node level in the code file, which is calculated by psiElement.getTextRange().","tag is the type of the AST node level, which is calculated by psiElement.toString()."]},{"l":"Screen Recording","p":["clip_[k].mp4","frames.csv"]},{"l":"Video Clips","p":["clip_[k].mp4","Comment:","The video clip of the screen recording from the (k-1)-th pause (0-th pause is start) to the k-th pause. We designed this mechanism to avoid the video file in the memory being too large especially when pausing the tracking for a long time."]},{"l":"Frames","p":["frames.csv","Column:","timestamp","frame_number","clip_number","Example:","Comment:","The frame rate is 12 fps.","frame_number is the frame number of the frame in its video clip.","clip_number is the number of the video clip to which the frame belongs.","We also record the timestamp of Start, Pause, Resume, and Stop actions in the frames.csv file, which could be used to separate each stage of the development process."]}],[{"l":"Developer Guide"},{"l":"Further Development","p":["Please refer to IntelliJ Platform SDK for more details. We also provide the JavaDoc of the source code. Feel free to contact us if you need any help."]},{"l":"Accommodating New IDEs","p":["See Build from Source."]},{"l":"Accommodating New Eye Trackers","p":["If you want to integrate other eye-tracking devices except for Tobii eye-tracking devices, you need to reimplement all Python scripts in the source code to get the right eye-tracking device information and eye gaze data using your eye tracker API.","Location","Method","/trackers/EyeTracker.java","setPythonScriptTobii()","/utils/AvailabilityChecker.java","checkPythonEnvironment(String pythonInterpreter)","checkEyeTracker(String pythonInterpreter)","getEyeTrackerName(String pythonInterpreter)","getFrequencies(String pythonInterpreter)"]},{"l":"Real-time Data API"},{"l":"Overview","p":["We provide a real-time data API for future JetBrains plugin developers and researchers to get real-time data from IDE tracker and eye tracker separately. The API is based on the IDE Tracker and Eye Tracker.","We provide an example project DataStreamReceiver that builds on top of the real-time data API. It is designed to receive the IDE and eye tracking data and directly visualize them in two separate windows. You could refer to its source code to learn how to use the API."]},{"l":"Configuration","p":["Before using the API, you first need to build CodeGRITS from source(See Build from Source). Then, find the folder ./build/idea-sandbox/plugins/CodeGRITS in the CodeGRITS project, which is the dependency of the API. You need to add it to the intellij section in build.gradle.kts file of your plugin project.","You also need to add the following to ./src/main/resources/META-INF/plugin.xml."]},{"l":"Quick Start","p":["To use the API, simply call the getInstance() method to get the instance of the IDE Tracker or Eye Tracker. Then, set the isRealTimeDataTransmitting to true to enable real-time data transmitting. After that, set the ideTrackerDataHandler or eyeTrackerDataHandler to handle the real-time data. Finally, call the startTracking() method to start tracking.","Element object is an XML element that is imported from org.w3c.dom.Element package."]},{"l":"IDE Tracker","p":["IDETracker.getInstance()","setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)","setIdeTrackerDataHandler(ConsumerElement ideTrackerDataHandler)","startTracking(Project project)"]},{"l":"Eye Tracker","p":["EyeTracker.getInstance()","setIsRealTimeDataTransmitting(boolean isRealTimeDataTransmitting)","setEyeTrackerDataHandler(ConsumerElement eyeTrackerDataHandler)","startTracking(Project project)"]}],[{"l":"Changelog","p":["Encountered a bug or have a suggestion? Please create a GitHub Issue."]},{"l":"v0.2.0","p":["Released on 2023-12-28.","Improve the implementation of Screen Recorder from JCodec to JavaCV.","Initial pre-mature release for CodeGRITS.","Fix the color distortion and the missing cursor issues of the screen recorder.","Fix several issues about the naming.","Add the logo of CodeGRITS."]},{"i":"v010","l":"v0.1.0","p":["Released on 2023-11-30.","Release for ICSE 2024 Demo review."]}],[{"i":"frequently-asked-questions-faq","l":"Frequently Asked Questions (FAQ)"},{"i":"q1-what-is-the-difference-between-codegrits-and-itrace","l":"Q1. What is the difference between CodeGRITS and iTrace?","p":["iTrace is a similar tool to CodeGRITS for collecting developers' eye gaze data in several IDEs, including Eclipse, Visual Studio, and Atom. However, CodeGRITS is built for JetBrains IDEs, which have increased popularity in the industry and academia.","CodeGRITS also provides a set of extra functionalities, notably IDE tracking and screen recording, for empirical SE researchers. See Trackers for more details."]},{"i":"q2-can-i-use-codegrits-without-an-eye-tracking-device","l":"Q2. Can I use CodeGRITS without an eye-tracking device?","p":["Yes. CodeGRITS provides mouse simulation as a substitute for eye gaze. You could also uncheck the Eye Tracking option in the configuration window to disable the eye tracker to only use the IDE tracker and screen recorder."]},{"i":"q3-how-to-integrate-other-eye-tracking-devices-with-codegrits","l":"Q3. How to integrate other eye-tracking devices with CodeGRITS?","p":["See Accommodating New Eye Trackers."]},{"i":"q4-how-to-use-codegrits-in-other-jetbrains-ides","l":"Q4. How to use CodeGRITS in other JetBrains IDEs?","p":["See Accommodating New IDEs."]},{"i":"q5-how-efficient-is-the-processing-of-raw-eye-gaze-data","l":"Q5. How efficient is the processing of raw eye gaze data?","p":["In CodeGRITS, the efficiency of the processing of gaze data is negligible. For each gaze, we calculate the average time from the timestamp in the raw data to the timestamp after all processing is complete. This processing primarily involves location mapping and upward traversal of the AST. The average delay is 4.32 ms, equating to delays of approximately 12.98% for 30Hz, 25.96% for 60Hz, and 51.92% for 120Hz eye gaze data. With such a high sampling frequency, meaningful changes in the content of the code editor's page are extremely rare within this short time frame, which ensures the accuracy of gaze processing. Moreover, compared to iTrace, our method of receiving data from the eye-tracking device is more efficient, ensuring that all sampled gazes are mapped without any loss."]},{"i":"q6-how-much-storage-space-does-codegrits-require","l":"Q6. How much storage space does CodeGRITS require?","p":["Generally speaking, a high sample frequency generates a large amount of gaze data. To conserve storage space, we only perform upward traversal of the AST of the first gaze and record the hierarchy structure, and mark the rest as same. This approach significantly reduces storage space. In a previous debugging study, we set the eye-tracking device's sample frequency to 60Hz, and during the 20-minute experiment, the eye-tracking data amounted to only about 40MB."]}],[{"l":"License","p":["MIT License","Copyright (c) 2023 SaNDwich Lab","Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:","The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.","THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."]}]] \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index a75cc76..ccb460c 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ diff --git a/usage-guide/index.html b/usage-guide/index.html index da0fc51..7f5a8c5 100644 --- a/usage-guide/index.html +++ b/usage-guide/index.html @@ -4,7 +4,7 @@ - + @@ -32,12 +32,12 @@ - + - + - - + +