source: trunk/src/org/expeditee/gio/input/StandardInputEventListeners.java@ 1415

Last change on this file since 1415 was 1415, checked in by bln4, 5 years ago

Renamed Frame.getItems() to Frame.getSortedItems() to better represent its functionality.

-> org.apollo.ApolloGestureActions
-> org.apollo.ApolloSystem
-> org.expeditee.actions.Actions
-> org.expeditee.actions.Debug
-> org.expeditee.actions.ExploratorySearchActions
-> org.expeditee.actions.JfxBrowserActions
-> org.expeditee.actions.Misc
-> org.expeditee.actions.Navigation
-> org.expeditee.actions.ScriptBase
-> org.expeditee.actions.Simple
-> org.expeditee.agents.ComputeTree
-> org.expeditee.agents.CopyTree
-> org.expeditee.agents.DisplayComet
-> org.expeditee.agents.DisplayTree
-> org.expeditee.agents.DisplayTreeLeaves
-> org.expeditee.agents.GraphFramesetLinks
-> org.expeditee.agents.TreeProcessor
-> org.expeditee.gio.gesture.StandardGestureActions
-> org.expeditee.gui.DisplayController
-> org.expeditee.gui.FrameCreator
-> org.expeditee.gui.FrameIO
-> org.expeditee.io.DefaultTreeWriter
-> org.expeditee.io.JavaWriter
-> org.expeditee.io.PDF2Writer
-> org.expeditee.io.TXTWriter
-> org.expeditee.io.WebParser
-> org.expeditee.io.flowlayout.XGroupItem
-> org.expeditee.items.Dot
-> org.expeditee.items.Item
-> org.expeditee.items.ItemUtils
-> org.expeditee.network.FrameShare
-> org.expeditee.stats.TreeStats


Created ItemsList class to wrap ArrayList<Item>. Frames now use this new class to store its body list (used for display) as well as its primaryBody and surrogateBody.

-> org.expeditee.agents.Format
-> org.expeditee.agents.HFormat
-> org.expeditee.gio.gesture.StandardGestureActions
-> org.expeditee.gui.Frame
-> org.expeditee.gui.FrameUtils


Refactorted Frame.setResort(bool) to Frame.invalidateSorted() to better function how it is intended to with a more accurate name.

-> org.expeditee.agents.Sort


When writing out .exp files and getting attributes to respond to LEFT + RIGHT click, boolean items are by default true. This has always been the case. An ammendment to this is that defaults can now be established.
Also added 'EnterClick' functionality. If cursored over a item with this property and you press enter, it acts as if you have clicked on it instead.

-> org.expeditee.assets.resources-public.framesets.authentication.1.exp to 6.exp
-> org.expeditee.gio.gesture.StandardGestureActions
-> org.expeditee.gio.input.KBMInputEvent
-> org.expeditee.gio.javafx.JavaFXConversions
-> org.expeditee.gio.swing.SwingConversions
-> org.expeditee.gui.AttributeUtils
-> org.expeditee.io.Conversion
-> org.expeditee.io.DefaultFrameWriter
-> org.expeditee.items.Item


Fixed a bug caused by calling Math.abs on Integer.MIN_VALUE returning unexpected result. Due to zero being a thing, you cannot represent Math.abs(Integer.MIN_VALUE) in a Integer object. The solution is to use Integer.MIN_VALUE + 1 instead of Integer.MIN_VALUE.

-> org.expeditee.core.bounds.CombinationBounds
-> org.expeditee.io.flowlayout.DimensionExtent


Recoded the contains function in EllipticalBounds so that intersection tests containing circles work correctly.

-> org.expeditee.core.bounds.EllipticalBounds


Added toString() to PolygonBounds to allow for useful printing during debugging.

-> org.expeditee.core.bounds.PolygonBounds

Implemented Surrogate Mode!

-> org.expeditee.encryption.io.EncryptedExpReader
-> org.expeditee.encryption.io.EncryptedExpWriter
-> org.expeditee.encryption.items.surrogates.EncryptionDetail
-> org.expeditee.encryption.items.surrogates.Label
-> org.expeditee.gui.FrameUtils
-> org.expeditee.gui.ItemsList
-> org.expeditee.items.Item
-> org.expeditee.items.Text


???? Use Integer.MAX_VALUE cast to a float instead of Float.MAX_VALUE. This fixed some bug which I cannot remember.

-> org.expeditee.gio.TextLayoutManager
-> org.expeditee.gio.swing.SwingTextLayoutManager


Improved solution for dealing with the F10 key taking focus away from Expeditee due to it being a assessibility key.

-> org.expeditee.gio.swing.SwingInputManager


Renamed variable visibleItems in FrameGraphics.paintFrame to itemsToPaintCanditates to better represent functional intent.

-> org.expeditee.gui.FrameGraphics


Improved checking for if personal resources exist before recreating them

-> org.expeditee.gui.FrameIO


Repeated messages to message bay now have a visual feedback instead of just a beep. This visual feedback is in the form of a count of the amount of times it has repeated.

-> org.expeditee.gui.MessageBay


Updated comment on the Vector class to explain what vectors are.

-> org.expeditee.gui.Vector


Added constants to represent all of the property keys in DefaultFrameReader and DefaultFrameWriter.

-> org.expeditee.io.DefaultFrameReader
-> org.expeditee.io.DefaultFrameWriter


Updated the KeyList setting to be more heirarcial with how users will store their Secrets.

-> org.expeditee.settings.identity.secrets.KeyList

File size: 6.4 KB
Line 
1package org.expeditee.gio.input;
2
3import org.expeditee.actions.Actions;
4import org.expeditee.actions.Simple;
5import org.expeditee.gio.InputManager;
6import org.expeditee.gio.input.InputEvent.InputType;
7import org.expeditee.gio.input.KBMInputEvent.EventType;
8import org.expeditee.gio.input.KBMInputEvent.Key;
9import org.expeditee.gio.input.KBMInputEvent.MouseButton;
10import org.expeditee.gui.FrameUtils;
11import org.expeditee.gui.Help;
12import org.expeditee.stats.Logger;
13import org.expeditee.stats.SessionStats;
14
15/**
16 * Static class to house all of the standard Expeditee input listeners.
17 *
18 * @author cts16
19 */
20public class StandardInputEventListeners {
21
22 /** Cannot be constructed, static class only. */
23 private StandardInputEventListeners()
24 {
25 }
26
27 /** Registers the standard input listeners with the given input manager. */
28 public static void registerWith(InputManager manager)
29 {
30 if (manager == null) return;
31
32 // Register the listeners in priority order
33 manager.registerInputEventListener(kbmStateListener);
34 manager.registerInputEventListener(helpListener);
35 manager.registerInputEventListener(statisticsListener);
36 manager.registerInputEventListener(agentListener);
37 manager.registerInputEventListener(simpleListener);
38 }
39
40 /*
41 *
42 * Expeditee's standard input-event listeners.
43 *
44 */
45
46 /** An input listener to track the state of all keys and mouse buttons. */
47 public static final KBMStateListener kbmStateListener = new KBMStateListener();
48 public static class KBMStateListener implements InputEventListener
49 {
50 private Boolean[] _keyState = new Boolean[Key.values().length];
51 private Boolean[] _mouseState = new Boolean[MouseButton.values().length];
52
53 @Override
54 public boolean onInputEvent(InputEvent event) {
55 // Only interested in keyboard/mouse events
56 if (event.getInputType() != InputType.KBM) return false;
57
58 // Cast the event
59 KBMInputEvent kbmEvent = (KBMInputEvent) event;
60
61 // Track any key state changes
62 if (kbmEvent.getKeyDown() != null) {
63 _keyState[kbmEvent.getKeyDown().ordinal()] = true;
64 } else if (kbmEvent.getKeyUp() != null) {
65 _keyState[kbmEvent.getKeyUp().ordinal()] = false;
66 }
67
68 // Track any mouse button state changes
69 if (kbmEvent.getMouseButtonDown() != null) {
70 _mouseState[kbmEvent.getMouseButtonDown().ordinal()] = true;
71 } else if (kbmEvent.getMouseButtonUp() != null) {
72 _mouseState[kbmEvent.getMouseButtonUp().ordinal()] = false;
73 }
74
75 return false;
76 }
77
78 public boolean isKeyDown(Key key) {
79 return (key != null) && (_keyState[key.ordinal()] == Boolean.TRUE);
80 }
81
82 public boolean isMouseButtonDown(MouseButton button) {
83 return (button != null) && (_mouseState[button.ordinal()] == Boolean.TRUE);
84 }
85
86 public boolean isOnlyMouseButtonDown(MouseButton button) {
87 if (button == null) return false;
88
89 for (MouseButton b : MouseButton.values()) {
90 if ((b == button && !isMouseButtonDown(b)) || (b != button && isMouseButtonDown(b))) return false;
91 }
92
93 return true;
94 }
95
96 public boolean isAnyMouseButtonDown() {
97 for (MouseButton button : MouseButton.values()) {
98 if (isMouseButtonDown(button)) return true;
99 }
100
101 return false;
102 }
103 };
104
105 /** An input listener to monitor the input for statistical purposes. */
106 private static InputEventListener statisticsListener = new InputEventListener()
107 {
108 @Override
109 public boolean onInputEvent(InputEvent event) {
110 // Only interested in keyboard/mouse events
111 if (event.getInputType() != InputEvent.InputType.KBM) return false;
112 KBMInputEvent kbmEvent = (KBMInputEvent) event;
113 if (kbmEvent.getEventType() == EventType.KEY_DOWN) {
114 // Notify the change in stats
115 // TODO: Will changing this to the Expeditee KBMInputEvent upset stats? cts16
116 SessionStats.AddFrameEvent("k" + kbmEvent.getKeyText());
117
118 // Used for calculating frame stats (response time)
119 FrameUtils.ResponseTimer.restart();
120
121 // Watch for escape key
122 if (kbmEvent.getKeyDown() == Key.ESC) SessionStats.Escape();
123
124 if (kbmStateListener.isKeyDown(Key.CTRL)) {
125 Logger.Log(Logger.USER, Logger.CONTROL_CHAR, "User pressing: Ctrl+" + kbmEvent.getKeyText());
126 }
127 } else if (kbmEvent.getEventType() == EventType.MOUSE_BUTTON_DOWN) {
128 SessionStats.MouseClicked(kbmEvent.getMouseButtonDown());
129 switch (kbmEvent.getMouseButtonDown()) {
130 case LEFT:
131 SessionStats.AddFrameEvent("Ld");
132 break;
133 case MIDDLE:
134 SessionStats.AddFrameEvent("Md");
135 break;
136 case RIGHT:
137 SessionStats.AddFrameEvent("Rd");
138 break;
139 default:
140 break;
141 }
142 } else if (kbmEvent.getEventType() == EventType.MOUSE_BUTTON_UP) {
143 FrameUtils.ResponseTimer.restart();
144 switch (kbmEvent.getMouseButtonUp()) {
145 case LEFT:
146 SessionStats.AddFrameEvent("Lu");
147 break;
148 case MIDDLE:
149 SessionStats.AddFrameEvent("Mu");
150 break;
151 case RIGHT:
152 SessionStats.AddFrameEvent("Ru");
153 break;
154 default:
155 break;
156 }
157 }
158 return false;
159 }
160 };
161
162 /** An input listener to monitor keyboard input for running agents. */
163 private static InputEventListener agentListener = new InputEventListener() {
164 @Override
165 public boolean onInputEvent(InputEvent event) {
166 // Only interested in keyboard/mouse events
167 if (event.getInputType() != InputType.KBM) return false;
168 KBMInputEvent kbmEvent = (KBMInputEvent) event;
169 if (Actions.isAgentRunning()) {
170 if (kbmEvent.getKeyDown() == Key.ESC || kbmEvent.getEventType() == EventType.MOUSE_BUTTON_DOWN) {
171 Actions.stopAgent();
172 } else if (kbmEvent.getEventType() == EventType.KEY_DOWN) {
173 Actions.interruptAgent();
174 }
175 }
176 return false;
177 }
178 };
179
180 /** An input listener to consume keyboard input for running Simple programs. */
181 private static InputEventListener simpleListener = new InputEventListener() {
182 @Override
183 public boolean onInputEvent(InputEvent event) {
184 // Only interested in keyboard/mouse events
185 if (event.getInputType() != InputEvent.InputType.KBM) return false;
186 if (Simple.consumeKeyboardInput()) return true;
187 return false;
188 }
189 };
190
191 /** An input listener to update the message-bay help text. */
192 private static InputEventListener helpListener = new InputEventListener()
193 {
194 @Override
195 public boolean onInputEvent(InputEvent event) {
196 // Only interested in keyboard/mouse events
197 if (event.getInputType() != InputEvent.InputType.KBM) return false;
198 Help.updateStatus(kbmStateListener.isKeyDown(Key.CTRL), kbmStateListener.isKeyDown(Key.SHIFT));
199 return false;
200 }
201 };
202}
Note: See TracBrowser for help on using the repository browser.