source: trunk/src/org/expeditee/core/Lifetime.java@ 1097

Last change on this file since 1097 was 1097, checked in by davidb, 6 years ago

Newly structured files from Corey's work on logic/graphics separation

File size: 2.6 KB
Line 
1package org.expeditee.core;
2
3import org.expeditee.gio.EcosystemManager;
4import org.expeditee.gio.TimeoutQueue.TimeoutHandle;
5import org.expeditee.gio.input.InputEvent;
6import org.expeditee.gio.input.InputEvent.InputType;
7import org.expeditee.gio.input.InputEventListener;
8import org.expeditee.gio.input.TimeoutInputEvent;
9
10public class Lifetime
11{
12 /** Value representing an infinitely-long popup lifetime. */
13 public static final long INFINITE_LIFETIME = -1;
14
15 /** The length of this lifetime. */
16 private long _lifetime;
17 /** The time as returned by System.currentTimeMillis() when this lifetime will expire. */
18 private long _deathTime;
19
20 private TimeoutHandle _expiryHandle = null;
21 private Runnable _expiryRoutine = null;
22 private InputEventListener _expiryListener = new InputEventListener()
23 {
24 @Override
25 public boolean onInputEvent(InputEvent event)
26 {
27 if (event.getInputType() == InputType.TIMEOUT) {
28 TimeoutInputEvent timeoutEvent = (TimeoutInputEvent) event;
29 if (timeoutEvent.getHandle() == _expiryHandle) {
30 _expiryRoutine.run();
31 cancelExpiry();
32 }
33 }
34 return false;
35 }
36 };
37
38 public Lifetime(long lifetime)
39 {
40 if (lifetime < 0) lifetime = INFINITE_LIFETIME;
41 _lifetime = lifetime;
42 refresh();
43 }
44
45 public void setLifetime(long lifetime)
46 {
47 if (lifetime < 0) lifetime = INFINITE_LIFETIME;
48
49 if (_lifetime != INFINITE_LIFETIME) _deathTime -= _lifetime;
50
51 _lifetime = lifetime;
52
53 if (_lifetime != INFINITE_LIFETIME) _deathTime += _lifetime;
54 }
55
56 public void refresh()
57 {
58 if (_lifetime == INFINITE_LIFETIME) {
59 _deathTime = System.currentTimeMillis();
60 } else {
61 _deathTime = System.currentTimeMillis() + _lifetime;
62 }
63 }
64
65 public long remainingLifetime()
66 {
67 if (_lifetime == INFINITE_LIFETIME) return INFINITE_LIFETIME;
68
69 long remaining = _deathTime - System.currentTimeMillis();
70
71 if (remaining < 0) remaining = 0;
72
73 return remaining;
74 }
75
76 public boolean hasExpired()
77 {
78 return remainingLifetime() == 0;
79 }
80
81 public void cancelExpiry()
82 {
83 if (_expiryHandle != null) {
84 EcosystemManager.getInputManager().cancelTimeout(_expiryHandle);
85 EcosystemManager.getInputManager().removeInputEventListener(_expiryListener);
86 _expiryHandle = null;
87 _expiryRoutine = null;
88 }
89 }
90
91 public void onExpiry(Runnable routine)
92 {
93 if (_expiryHandle != null) {
94 cancelExpiry();
95 }
96
97 if (routine == null || _lifetime == INFINITE_LIFETIME) return;
98
99 _expiryRoutine = routine;
100
101 EcosystemManager.getInputManager().registerInputEventListener(_expiryListener);
102
103 _expiryHandle = EcosystemManager.getInputManager().addTimeout((int) remainingLifetime());
104 }
105
106}
Note: See TracBrowser for help on using the repository browser.