diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/FeatureUsageData.kt b/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/FeatureUsageData.kt index 5d53a75d45ba..fbcec52dc7c9 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/FeatureUsageData.kt +++ b/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/FeatureUsageData.kt @@ -15,6 +15,7 @@ import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.wm.impl.content.ToolWindowContentUi import com.intellij.util.containers.ContainerUtil import java.awt.event.KeyEvent +import java.awt.event.MouseEvent import java.util.* /** @@ -107,6 +108,14 @@ class FeatureUsageData { return this } + fun addInputEvent(event: MouseEvent): FeatureUsageData { + val inputEvent = ShortcutDataProvider.getMouseEventText(event) + if (inputEvent != null && StringUtil.isNotEmpty(inputEvent)) { + data["input_event"] = inputEvent + } + return this + } + fun addPlace(place: String?): FeatureUsageData { if (place == null) return this diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/ShortcutDataProvider.java b/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/ShortcutDataProvider.java index 433e1a3eea6d..5a02bcd620a7 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/ShortcutDataProvider.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/ShortcutDataProvider.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -32,6 +33,9 @@ public class ShortcutDataProvider { return getKeyEventText((KeyEvent)inputEvent); } + else if (inputEvent instanceof MouseEvent) { + return getMouseEventText((MouseEvent)inputEvent); + } } return null; } @@ -44,6 +48,41 @@ public class ShortcutDataProvider { return keystroke != null ? getShortcutText(new KeyboardShortcut(keystroke, null)) : "Unknown"; } + @Nullable + protected static String getMouseEventText(@Nullable MouseEvent event) { + if (event == null) return null; + + String res = getMouseButtonText(event.getButton()); + + int clickCount = event.getClickCount(); + if (clickCount > 1) { + res += "(" + clickCount + "x)"; + } + + int modifiers = event.getModifiersEx() & ~BUTTON1_DOWN_MASK & ~BUTTON3_DOWN_MASK & ~BUTTON2_DOWN_MASK; + if (modifiers > 0) { + String modifiersText = getLocaleUnawareKeyModifiersText(modifiers); + if (!modifiersText.isEmpty()) { + res = modifiersText + "+" + res; + } + } + + return res; + } + + private static String getMouseButtonText(int buttonNum) { + switch (buttonNum) { + case MouseEvent.BUTTON1: + return "MouseLeft"; + case MouseEvent.BUTTON2: + return "MouseMiddle"; + case MouseEvent.BUTTON3: + return "MouseRight"; + default: + return "NoMouseButton"; + } + } + private static String getShortcutText(KeyboardShortcut shortcut) { String results = ""; int modifiers = shortcut.getFirstKeyStroke().getModifiers(); @@ -81,12 +120,14 @@ public class ShortcutDataProvider { private static final List> ourModifiers = new ArrayList<>(6); static { - ourModifiers.add(Pair.create(META_MASK, "Meta")); - ourModifiers.add(Pair.create(CTRL_MASK, "Ctrl")); - ourModifiers.add(Pair.create(ALT_MASK, "Alt")); - ourModifiers.add(Pair.create(SHIFT_MASK, "Shift")); - ourModifiers.add(Pair.create(ALT_GRAPH_MASK, "Alt Graph")); - ourModifiers.add(Pair.create(BUTTON1_MASK, "Button1")); + ourModifiers.add(Pair.create(BUTTON1_DOWN_MASK, "Button1")); + ourModifiers.add(Pair.create(BUTTON2_DOWN_MASK, "Button2")); + ourModifiers.add(Pair.create(BUTTON3_DOWN_MASK, "Button3")); + ourModifiers.add(Pair.create(META_DOWN_MASK, "Meta")); + ourModifiers.add(Pair.create(CTRL_DOWN_MASK, "Ctrl")); + ourModifiers.add(Pair.create(ALT_DOWN_MASK, "Alt")); + ourModifiers.add(Pair.create(SHIFT_DOWN_MASK, "Shift")); + ourModifiers.add(Pair.create(ALT_GRAPH_DOWN_MASK, "Alt Graph")); } private static String getLocaleUnawareKeyModifiersText(int modifiers) {