keyboard accelerators
[fanfix.git] / src / jexer / event / TCommandEvent.java
index 09304d3b5a3d27e6e5d08bf77f83b7a18ffd7e9d..e430dafa6d88b90e166b1e4cacacb38f3f2cfa24 100644 (file)
@@ -37,7 +37,7 @@ import jexer.TCommand;
  * generated by menu actions, keyboard accelerators, and other UI elements.
  * Commands can operate on both the application and individual widgets.
  */
-public class TCommandEvent extends TInputEvent {
+public final class TCommandEvent extends TInputEvent {
 
     /**
      * Command dispatched.
@@ -49,7 +49,7 @@ public class TCommandEvent extends TInputEvent {
      *
      * @return the TCommand
      */
-    public final TCommand getCmd() {
+    public TCommand getCmd() {
         return cmd;
     }
 
@@ -62,13 +62,52 @@ public class TCommandEvent extends TInputEvent {
         this.cmd = cmd;
     }
 
+    /**
+     * Comparison check.  All fields must match to return true.
+     *
+     * @param rhs another TCommandEvent or TCommand instance
+     * @return true if all fields are equal
+     */
+    @Override
+    public boolean equals(final Object rhs) {
+        if (!(rhs instanceof TCommandEvent)
+            && !(rhs instanceof TCommand)
+        ) {
+            return false;
+        }
+
+        if (rhs instanceof TCommandEvent) {
+            TCommandEvent that = (TCommandEvent) rhs;
+            return (cmd.equals(that.cmd)
+                && (getTime().equals(that.getTime())));
+        }
+
+        TCommand that = (TCommand) rhs;
+        return (cmd.equals(that));
+    }
+
+    /**
+     * Hashcode uses all fields in equals().
+     *
+     * @return the hash
+     */
+    @Override
+    public int hashCode() {
+        int A = 13;
+        int B = 23;
+        int hash = A;
+        hash = (B * hash) + getTime().hashCode();
+        hash = (B * hash) + cmd.hashCode();
+        return hash;
+    }
+
     /**
      * Make human-readable description of this TCommandEvent.
      *
      * @return displayable String
      */
     @Override
-    public final String toString() {
+    public String toString() {
         return String.format("CommandEvent: %s", cmd.toString());
     }
 }