Merge pull request #4472 from JakubValtar/inspect-mode-polishing

Inspect mode polishing
This commit is contained in:
Ben Fry
2016-05-13 07:35:45 -04:00
2 changed files with 67 additions and 23 deletions

View File

@@ -316,6 +316,7 @@ public class JavaMode extends Mode {
static public volatile boolean defaultAutoSaveEnabled = true;
static public volatile boolean ccTriggerEnabled = false;
static public volatile boolean importSuggestEnabled = true;
static public volatile boolean inspectModeHotkeyEnabled = true;
static public int autoSaveInterval = 3; //in minutes
@@ -337,6 +338,7 @@ public class JavaMode extends Mode {
static public final String COMPLETION_PREF = "pdex.completion";
static public final String COMPLETION_TRIGGER_PREF = "pdex.completion.trigger";
static public final String SUGGEST_IMPORTS_PREF = "pdex.suggest.imports";
static public final String INSPECT_MODE_HOTKEY_PREF = "pdex.inspectMode.hotkey";
// static volatile public boolean enableTweak = false;
@@ -361,6 +363,7 @@ public class JavaMode extends Mode {
defaultAutoSaveEnabled = Preferences.getBoolean(prefDefaultAutoSave);
ccTriggerEnabled = Preferences.getBoolean(COMPLETION_TRIGGER_PREF);
importSuggestEnabled = Preferences.getBoolean(SUGGEST_IMPORTS_PREF);
inspectModeHotkeyEnabled = Preferences.getBoolean(INSPECT_MODE_HOTKEY_PREF);
loadSuggestionsMap();
}
@@ -379,6 +382,7 @@ public class JavaMode extends Mode {
Preferences.setBoolean(prefDefaultAutoSave, defaultAutoSaveEnabled);
Preferences.setBoolean(COMPLETION_TRIGGER_PREF, ccTriggerEnabled);
Preferences.setBoolean(SUGGEST_IMPORTS_PREF, importSuggestEnabled);
Preferences.setBoolean(INSPECT_MODE_HOTKEY_PREF, inspectModeHotkeyEnabled);
}
public void loadSuggestionsMap() {
@@ -449,6 +453,8 @@ public class JavaMode extends Mode {
Preferences.setBoolean(COMPLETION_TRIGGER_PREF, ccTriggerEnabled);
if (Preferences.get(SUGGEST_IMPORTS_PREF) == null)
Preferences.setBoolean(SUGGEST_IMPORTS_PREF, importSuggestEnabled);
if (Preferences.get(INSPECT_MODE_HOTKEY_PREF) == null)
Preferences.setBoolean(INSPECT_MODE_HOTKEY_PREF, inspectModeHotkeyEnabled);
}

View File

@@ -24,10 +24,12 @@ import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,6 +43,7 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -179,11 +182,18 @@ public class PDEX {
private class InspectMode {
boolean isMouseDown;
boolean isCtrlDown;
boolean isMetaDown;
boolean inspectModeEnabled;
boolean isMouse1Down;
boolean isMouse2Down;
boolean isHotkeyDown;
Predicate<MouseEvent> mouseEventHotkeyTest = Platform.isMacOS() ?
InputEvent::isMetaDown : InputEvent::isControlDown;
Predicate<KeyEvent> keyEventHotkeyTest = Platform.isMacOS() ?
e -> e.getKeyCode() == KeyEvent.VK_META :
e -> e.getKeyCode() == KeyEvent.VK_CONTROL;
JavaEditor editor;
PreprocessingService pps;
@@ -191,49 +201,77 @@ public class PDEX {
this.editor = editor;
this.pps = pps;
// Add ctrl+click listener
// Add listeners
editor.getJavaTextArea().getPainter().addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
isMouseDown = true;
isMouse1Down = isMouse1Down || (e.getButton() == MouseEvent.BUTTON1);
isMouse2Down = isMouse2Down || (e.getButton() == MouseEvent.BUTTON2);
}
@Override
public void mouseReleased(MouseEvent evt) {
isMouseDown = false;
if (inspectModeEnabled && evt.getButton() == MouseEvent.BUTTON1) {
handleInspect(evt);
} else if (!inspectModeEnabled && evt.getButton() == MouseEvent.BUTTON2) {
handleInspect(evt);
public void mouseReleased(MouseEvent e) {
boolean releasingMouse1 = e.getButton() == MouseEvent.BUTTON1;
boolean releasingMouse2 = e.getButton() == MouseEvent.BUTTON2;
if (JavaMode.inspectModeHotkeyEnabled && inspectModeEnabled &&
isMouse1Down && releasingMouse1) {
handleInspect(e);
} else if (!inspectModeEnabled && isMouse2Down && releasingMouse2) {
handleInspect(e);
}
checkInspectMode();
isMouse1Down = isMouse1Down && !releasingMouse1;
isMouse2Down = isMouse2Down && !releasingMouse2;
}
});
editor.getJavaTextArea().getPainter().addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (editor.isSelectionActive()) {
// Mouse was dragged too much, disable
inspectModeEnabled = false;
// Cancel possible mouse 2 press
isMouse2Down = false;
}
}
@Override
public void mouseMoved(MouseEvent e) {
isMouse1Down = false;
isMouse2Down = false;
isHotkeyDown = mouseEventHotkeyTest.test(e);
inspectModeEnabled = isHotkeyDown;
}
});
editor.getJavaTextArea().addMouseWheelListener(new MouseAdapter() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// Editor was scrolled while mouse 1 was pressed, disable
if (isMouse1Down) inspectModeEnabled = false;
}
});
editor.getJavaTextArea().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
isMetaDown = isMetaDown || e.getKeyCode() == KeyEvent.VK_META;
isCtrlDown = isCtrlDown || e.getKeyCode() == KeyEvent.VK_CONTROL;
if (!inspectModeEnabled) checkInspectMode();
isHotkeyDown = isHotkeyDown || keyEventHotkeyTest.test(e);
// Enable if hotkey was just pressed and mouse 1 is not down
inspectModeEnabled = inspectModeEnabled || (!isMouse1Down && isHotkeyDown);
}
@Override
public void keyReleased(KeyEvent e) {
isMetaDown = isMetaDown && e.getKeyCode() != KeyEvent.VK_META;
isCtrlDown = isCtrlDown && e.getKeyCode() != KeyEvent.VK_CONTROL;
if (inspectModeEnabled) checkInspectMode();
isHotkeyDown = isHotkeyDown && !keyEventHotkeyTest.test(e);
// Disable if hotkey was just released
inspectModeEnabled = inspectModeEnabled && isHotkeyDown;
}
});
}
void checkInspectMode() {
inspectModeEnabled = !isMouseDown && (isCtrlDown && !Platform.isMacOS()) || isMetaDown;
}
// Thread: EDT
void handleInspect(MouseEvent evt) {
int off = editor.getJavaTextArea().xyToOffset(evt.getX(), evt.getY());