Add 'src/jexer/' from commit 'cf01c92f5809a0732409e280fb0f32f27393618d'
[fanfix.git] / src / jexer / event / TCommandEvent.java
1 /*
2 * Jexer - Java Text User Interface
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (C) 2019 Kevin Lamonte
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 *
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
27 * @version 1
28 */
29 package jexer.event;
30
31 import jexer.TCommand;
32
33 /**
34 * This class encapsulates a user command event. User commands can be
35 * generated by menu actions, keyboard accelerators, and other UI elements.
36 * Commands can operate on both the application and individual widgets.
37 */
38 public class TCommandEvent extends TInputEvent {
39
40 // ------------------------------------------------------------------------
41 // Variables --------------------------------------------------------------
42 // ------------------------------------------------------------------------
43
44 /**
45 * Command dispatched.
46 */
47 private TCommand cmd;
48
49 // ------------------------------------------------------------------------
50 // Constructors -----------------------------------------------------------
51 // ------------------------------------------------------------------------
52
53 /**
54 * Public contructor.
55 *
56 * @param cmd the TCommand dispatched
57 */
58 public TCommandEvent(final TCommand cmd) {
59 this.cmd = cmd;
60 }
61
62 // ------------------------------------------------------------------------
63 // TInputEvent ------------------------------------------------------------
64 // ------------------------------------------------------------------------
65
66 /**
67 * Comparison check. All fields must match to return true.
68 *
69 * @param rhs another TCommandEvent or TCommand instance
70 * @return true if all fields are equal
71 */
72 @Override
73 public boolean equals(final Object rhs) {
74 if (!(rhs instanceof TCommandEvent)
75 && !(rhs instanceof TCommand)
76 ) {
77 return false;
78 }
79
80 if (rhs instanceof TCommandEvent) {
81 TCommandEvent that = (TCommandEvent) rhs;
82 return (cmd.equals(that.cmd)
83 && (getTime().equals(that.getTime())));
84 }
85
86 TCommand that = (TCommand) rhs;
87 return (cmd.equals(that));
88 }
89
90 /**
91 * Hashcode uses all fields in equals().
92 *
93 * @return the hash
94 */
95 @Override
96 public int hashCode() {
97 int A = 13;
98 int B = 23;
99 int hash = A;
100 hash = (B * hash) + getTime().hashCode();
101 hash = (B * hash) + cmd.hashCode();
102 return hash;
103 }
104
105 /**
106 * Make human-readable description of this TCommandEvent.
107 *
108 * @return displayable String
109 */
110 @Override
111 public String toString() {
112 return String.format("CommandEvent: %s", cmd.toString());
113 }
114
115 // ------------------------------------------------------------------------
116 // TCommandEvent ----------------------------------------------------------
117 // ------------------------------------------------------------------------
118
119 /**
120 * Get TCommand.
121 *
122 * @return the TCommand
123 */
124 public TCommand getCmd() {
125 return cmd;
126 }
127
128 }