1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17/**
18 * @author Michael Danilov
19 * @version $Revision$
20 */
21package java.awt.event;
22
23import java.awt.Component;
24
25/**
26 * This class is not supported in Android 1.0. It is merely provided to maintain
27 * interface compatibility with desktop Java implementations.
28 *
29 * @since Android 1.0
30 */
31public abstract class InputEvent extends ComponentEvent {
32
33    private static final long serialVersionUID = -2482525981698309786L;
34
35    public static final int SHIFT_MASK = 1;
36
37    public static final int CTRL_MASK = 2;
38
39    public static final int META_MASK = 4;
40
41    public static final int ALT_MASK = 8;
42
43    public static final int ALT_GRAPH_MASK = 32;
44
45    public static final int BUTTON1_MASK = 16;
46
47    public static final int BUTTON2_MASK = 8;
48
49    public static final int BUTTON3_MASK = 4;
50
51    public static final int SHIFT_DOWN_MASK = 64;
52
53    public static final int CTRL_DOWN_MASK = 128;
54
55    public static final int META_DOWN_MASK = 256;
56
57    public static final int ALT_DOWN_MASK = 512;
58
59    public static final int BUTTON1_DOWN_MASK = 1024;
60
61    public static final int BUTTON2_DOWN_MASK = 2048;
62
63    public static final int BUTTON3_DOWN_MASK = 4096;
64
65    public static final int ALT_GRAPH_DOWN_MASK = 8192;
66
67    private static final int DOWN_MASKS = SHIFT_DOWN_MASK | CTRL_DOWN_MASK |
68            META_DOWN_MASK | ALT_DOWN_MASK | BUTTON1_DOWN_MASK |
69            BUTTON2_DOWN_MASK | BUTTON3_DOWN_MASK | ALT_GRAPH_DOWN_MASK;
70
71    private long when;
72    private int modifiersEx;
73
74    public static String getModifiersExText(int modifiers/*Ex*/) {
75        return MouseEvent.addMouseModifiersExText(
76                KeyEvent.getKeyModifiersExText(modifiers), modifiers);
77    }
78
79    static int extractExFlags(int modifiers) {
80        int exFlags = modifiers & DOWN_MASKS;
81
82        if ((modifiers & SHIFT_MASK) != 0) {
83            exFlags |= SHIFT_DOWN_MASK;
84        }
85        if ((modifiers & CTRL_MASK) != 0) {
86            exFlags |= CTRL_DOWN_MASK;
87        }
88        if ((modifiers & META_MASK) != 0) {
89            exFlags |= META_DOWN_MASK;
90        }
91        if ((modifiers & ALT_MASK) != 0) {
92            exFlags |= ALT_DOWN_MASK;
93        }
94        if ((modifiers & ALT_GRAPH_MASK) != 0) {
95            exFlags |= ALT_GRAPH_DOWN_MASK;
96        }
97        if ((modifiers & BUTTON1_MASK) != 0) {
98            exFlags |= BUTTON1_DOWN_MASK;
99        }
100        if ((modifiers & BUTTON2_MASK) != 0) {
101            exFlags |= BUTTON2_DOWN_MASK;
102        }
103        if ((modifiers & BUTTON3_MASK) != 0) {
104            exFlags |= BUTTON3_DOWN_MASK;
105        }
106
107        return exFlags;
108    }
109
110    InputEvent(Component source, int id, long when, int modifiers) {
111        super(source, id);
112
113        this.when = when;
114        modifiersEx = extractExFlags(modifiers);
115    }
116
117    public int getModifiers() {
118        int modifiers = 0;
119
120        if ((modifiersEx & SHIFT_DOWN_MASK) != 0) {
121            modifiers |= SHIFT_MASK;
122        }
123        if ((modifiersEx & CTRL_DOWN_MASK) != 0) {
124            modifiers |= CTRL_MASK;
125        }
126        if ((modifiersEx & META_DOWN_MASK) != 0) {
127            modifiers |= META_MASK;
128        }
129        if ((modifiersEx & ALT_DOWN_MASK) != 0) {
130            modifiers |= ALT_MASK;
131        }
132        if ((modifiersEx & ALT_GRAPH_DOWN_MASK) != 0) {
133            modifiers |= ALT_GRAPH_MASK;
134        }
135        if ((modifiersEx & BUTTON1_DOWN_MASK) != 0) {
136            modifiers |= BUTTON1_MASK;
137        }
138        if ((modifiersEx & BUTTON2_DOWN_MASK) != 0) {
139            modifiers |= BUTTON2_MASK;
140        }
141        if ((modifiersEx & BUTTON3_DOWN_MASK) != 0) {
142            modifiers |= BUTTON3_MASK;
143        }
144
145        return modifiers;
146    }
147
148    public int getModifiersEx() {
149        return modifiersEx;
150    }
151
152    void setModifiers(int modifiers) {
153        modifiersEx = extractExFlags(modifiers);
154    }
155
156    public boolean isAltDown() {
157        return ((modifiersEx & ALT_DOWN_MASK) != 0);
158    }
159
160    public boolean isAltGraphDown() {
161        return ((modifiersEx & ALT_GRAPH_DOWN_MASK) != 0);
162    }
163
164    public boolean isControlDown() {
165        return ((modifiersEx & CTRL_DOWN_MASK) != 0);
166    }
167
168    public boolean isMetaDown() {
169        return ((modifiersEx & META_DOWN_MASK) != 0);
170    }
171
172    public boolean isShiftDown() {
173        return ((modifiersEx & SHIFT_DOWN_MASK) != 0);
174    }
175
176    public long getWhen() {
177        return when;
178    }
179
180    @Override
181    public void consume() {
182        super.consume();
183    }
184
185    @Override
186    public boolean isConsumed() {
187        return super.isConsumed();
188    }
189
190}
191