]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/richtext/textpanel/Behavior.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / richtext / textpanel / Behavior.java
1 /*\r
2  * (C) Copyright IBM Corp. 1998-2004.  All Rights Reserved.\r
3  *\r
4  * The program is provided "as is" without any warranty express or\r
5  * implied, including the warranty of non-infringement and the implied\r
6  * warranties of merchantibility and fitness for a particular purpose.\r
7  * IBM will not be liable for any damages suffered by you as a result\r
8  * of using the Program. In no event will IBM be liable for any\r
9  * special, indirect or consequential damages or lost profits even if\r
10  * IBM has been advised of the possibility of their occurrence. IBM\r
11  * will not be liable for any third party claims against you.\r
12  */\r
13 package com.ibm.richtext.textpanel;\r
14 \r
15 import java.awt.Graphics;\r
16 import java.awt.Rectangle;\r
17 \r
18 import java.awt.event.FocusEvent;\r
19 import java.awt.event.KeyEvent;\r
20 import java.awt.event.MouseEvent;\r
21 \r
22 /** A class that handles events for a BehaviorOwner.\r
23 * A behavior enacpsulates some piece of the event-handling logic for a component.\r
24 * This allows the client to separate event-handling logic out into separate classes\r
25 * according to function, or to dynamically change the way a component handles\r
26 * events without adding a lot of special-case code to the panel itself.\r
27 * Behaviors are stored in a linked list, and all behaviors get a crack at an event before\r
28 * the owner gets a crack at them (right now, we rely on objects that implement\r
29 * BehaviorOwner to support these semantics).\r
30 * Behavior provides all the same event-handling functions that Component provides, and\r
31 * they all have exactly the same syntax and semantics. */\r
32 abstract class Behavior {\r
33 \r
34     static final String COPYRIGHT =\r
35                 "(C) Copyright IBM Corp. 1998-1999 - All Rights Reserved";\r
36     private Behavior fNextBehavior = null;\r
37     private BehaviorOwner fOwner = null;\r
38 \r
39     static class EventType {\r
40 \r
41         EventType() {\r
42         }\r
43     }\r
44 \r
45     // events - should these be in TextPanel (or elsewhere)?\r
46 \r
47     // This event's WHAT parameter is a TextRange instance\r
48     static final EventType SELECT = new EventType();\r
49 \r
50     // No WHAT param for these:\r
51     static final EventType CUT = new EventType();\r
52     static final EventType COPY = new EventType();\r
53     static final EventType PASTE = new EventType();\r
54     static final EventType CLEAR = new EventType();\r
55     static final EventType UNDO = new EventType();\r
56     static final EventType REDO = new EventType();\r
57     static final EventType CLEAR_COMMAND_LOG = new EventType();\r
58 \r
59     // WHAT param is a StyleModifier\r
60     static final EventType CHARACTER_STYLE_MOD = new EventType();\r
61     static final EventType PARAGRAPH_STYLE_MOD = new EventType();\r
62 \r
63     // With this event, values of the WHAT parameter are\r
64     // either Boolean.TRUE or Boolean.FALSE\r
65     static final EventType SET_MODIFIED = new EventType();\r
66 \r
67     // WHAT param is a TextReplacement\r
68     static final EventType REPLACE = new EventType();\r
69 \r
70     // WHAT param is an Integer\r
71     static final EventType SET_COMMAND_LOG_SIZE = new EventType();\r
72 \r
73     public Behavior() {\r
74     }\r
75 \r
76     public void addToOwner(BehaviorOwner owner) {\r
77         removeFromOwner();\r
78         fOwner = owner;\r
79         setNextBehavior(owner.getBehavior());\r
80         owner.setBehavior(this);\r
81     }\r
82 \r
83     public boolean focusGained(FocusEvent e) {\r
84         if (fNextBehavior != null)\r
85             return fNextBehavior.focusGained(e);\r
86         else\r
87             return false;\r
88     }\r
89 \r
90     public boolean focusLost(FocusEvent e) {\r
91         if (fNextBehavior != null)\r
92             return fNextBehavior.focusLost(e);\r
93         else\r
94             return false;\r
95     }\r
96 \r
97     public boolean keyPressed(KeyEvent e) {\r
98         if (fNextBehavior != null)\r
99             return fNextBehavior.keyPressed(e);\r
100         else\r
101             return false;\r
102     }\r
103 \r
104     public boolean keyTyped(KeyEvent e) {\r
105 \r
106         if (fNextBehavior != null) {\r
107             return fNextBehavior.keyTyped(e);\r
108         }\r
109         else {\r
110             return false;\r
111         }\r
112     }\r
113 \r
114     public boolean keyReleased(KeyEvent e) {\r
115         if (fNextBehavior != null)\r
116             return fNextBehavior.keyReleased(e);\r
117         else\r
118             return false;\r
119     }\r
120 \r
121     public boolean mouseDragged(MouseEvent e) {\r
122         if (fNextBehavior != null)\r
123             return fNextBehavior.mouseDragged(e);\r
124         else\r
125             return false;\r
126     }\r
127 \r
128     public boolean mouseEntered(MouseEvent e) {\r
129         if (fNextBehavior != null)\r
130             return fNextBehavior.mouseEntered(e);\r
131         else\r
132             return false;\r
133     }\r
134 \r
135     public boolean mouseExited(MouseEvent e) {\r
136         if (fNextBehavior != null)\r
137             return fNextBehavior.mouseExited(e);\r
138         else\r
139             return false;\r
140     }\r
141 \r
142     public boolean mouseMoved(MouseEvent e) {\r
143         if (fNextBehavior != null)\r
144             return fNextBehavior.mouseMoved(e);\r
145         else\r
146             return false;\r
147     }\r
148 \r
149     public boolean mousePressed(MouseEvent e) {\r
150         if (fNextBehavior != null)\r
151             return fNextBehavior.mousePressed(e);\r
152         else\r
153             return false;\r
154     }\r
155 \r
156     public boolean mouseReleased(MouseEvent e) {\r
157         if (fNextBehavior != null)\r
158             return fNextBehavior.mouseReleased(e);\r
159         else\r
160             return false;\r
161     }\r
162 \r
163     public final Behavior nextBehavior() {\r
164         return fNextBehavior;\r
165     }\r
166 \r
167     public boolean paint(Graphics g, Rectangle drawRect) {\r
168         if (fNextBehavior != null)\r
169             return fNextBehavior.paint(g, drawRect);\r
170         else\r
171             return false;\r
172     }\r
173 \r
174     public void removeFromOwner() {\r
175         if (fOwner != null) {\r
176             if (fOwner.getBehavior() == this)\r
177                 fOwner.setBehavior(nextBehavior());\r
178             else {\r
179                 Behavior    current = fOwner.getBehavior();\r
180 \r
181                 while (current != null && current.nextBehavior() != this)\r
182                     current = current.nextBehavior();\r
183                 if (current != null)\r
184                     current.setNextBehavior(nextBehavior());\r
185             }\r
186             setNextBehavior(null);\r
187             fOwner = null;\r
188         }\r
189     }\r
190 \r
191     public final void setNextBehavior(Behavior next) {\r
192         fNextBehavior = next;\r
193     }\r
194 \r
195     public boolean textControlEventOccurred(EventType event, Object data) {\r
196         if (fNextBehavior != null)\r
197             return fNextBehavior.textControlEventOccurred(event, data);\r
198         else\r
199             return false;\r
200     }\r
201 }\r