1 package com.jsql.view.swing.action;
2
3 import com.jsql.view.swing.util.MediatorHelper;
4
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.InputEvent;
8 import java.awt.event.KeyEvent;
9
10 public class AltKeyEventDispatcher implements KeyEventDispatcher {
11
12 private boolean wasAltDPressed = false;
13 private boolean wasAltPressed = false;
14 private boolean wasAltGraphPressed = false;
15
16 @Override
17 public boolean dispatchKeyEvent(KeyEvent keyEvent) {
18 var shouldNotTakeFurtherAction = false;
19
20
21
22
23
24 if (keyEvent.getKeyCode() == KeyEvent.VK_CONTROL) {
25 this.wasAltGraphPressed = true;
26 }
27
28 boolean isAltDPressed = keyEvent.isAltDown()
29 && keyEvent.getKeyCode() == (KeyEvent.VK_ALT & KeyEvent.VK_D);
30
31 boolean isAltReleased = keyEvent.getKeyCode() == KeyEvent.VK_ALT
32 && keyEvent.getModifiersEx() == (InputEvent.ALT_DOWN_MASK & KeyEvent.KEY_RELEASED);
33
34 boolean isAltPressed = keyEvent.isAltDown()
35 && keyEvent.getKeyCode() == KeyEvent.VK_ALT
36 && !this.wasAltGraphPressed;
37
38 boolean wasAltPressedAlready = !this.wasAltDPressed
39 && !this.wasAltPressed
40 && !this.wasAltGraphPressed;
41
42 if (isAltDPressed) {
43 this.selectAddressBar();
44 shouldNotTakeFurtherAction = true;
45 } else if (isAltReleased) {
46 this.showMenuBar(wasAltPressedAlready);
47 shouldNotTakeFurtherAction = true;
48 } else if (isAltPressed) {
49 this.hideMenuBar();
50 shouldNotTakeFurtherAction = true;
51 }
52
53 return shouldNotTakeFurtherAction;
54 }
55
56 private void selectAddressBar() {
57 MediatorHelper.panelAddressBar().getTextFieldAddress().requestFocusInWindow();
58 MediatorHelper.panelAddressBar().getTextFieldAddress().selectAll();
59 this.wasAltDPressed = true;
60 }
61
62 private void showMenuBar(boolean wasAltPressedAlready) {
63 if (wasAltPressedAlready) {
64 if (MenuSelectionManager.defaultManager().getSelectedPath().length > 0) {
65 MenuSelectionManager.defaultManager().clearSelectedPath();
66 } else if (MediatorHelper.panelAddressBar().isAdvanceActivated()) {
67 MediatorHelper.menubar().setVisible(!MediatorHelper.menubar().isVisible());
68 this.wasAltGraphPressed = false;
69 }
70 } else {
71 this.wasAltDPressed = false;
72 this.wasAltPressed = false;
73 this.wasAltGraphPressed = false;
74 }
75 }
76
77 private void hideMenuBar() {
78 if (
79 MediatorHelper.panelAddressBar().isAdvanceActivated()
80 && MediatorHelper.menubar().isVisible()
81 ) {
82 MenuSelectionManager.defaultManager().clearSelectedPath();
83 MediatorHelper.menubar().setVisible(false);
84 this.wasAltPressed = true;
85 this.wasAltGraphPressed = false;
86 }
87 }
88 }