replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-impl / src / com / intellij / ui / HintHint.java
1 /*
2  * Copyright 2000-2013 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.ui;
17
18 import com.intellij.ide.IdeTooltipManager;
19 import com.intellij.openapi.editor.Editor;
20 import com.intellij.openapi.ui.popup.Balloon;
21 import com.intellij.ui.awt.RelativePoint;
22 import com.intellij.util.ui.UIUtil;
23
24 import javax.swing.*;
25 import java.awt.*;
26 import java.awt.event.MouseEvent;
27
28 public class HintHint {
29
30   private Component myOriginalComponent;
31   private Point myOriginalPoint;
32
33   private boolean myAwtTooltip = false;
34   private Balloon.Position myPreferredPosition = Balloon.Position.below;
35
36   private boolean myContentActive = true;
37
38   private boolean myQuickHint = false;
39   private boolean myMayCenterTooltip = false;
40
41   private Color myTextFg;
42   private Color myTextBg;
43   private Color myBorderColor;
44   private Insets myBorderInsets;
45   private Font myFont;
46   private int myCalloutShift;
47
48   private boolean myExplicitClose;
49   private int myPositionChangeX;
50   private int myPositionChangeY;
51   private boolean myShowImmediately = false;
52   private boolean myAnimationEnabled;
53   private boolean myRequestFocus;
54
55   public HintHint() {
56   }
57
58   public HintHint(MouseEvent e) {
59     this(e.getComponent(), e.getPoint());
60   }
61
62   public HintHint(Editor editor, Point point) {
63     this(editor.getContentComponent(), point);
64   }
65
66   public HintHint(Component originalComponent, Point originalPoint) {
67     myOriginalComponent = originalComponent;
68     myOriginalPoint = originalPoint;
69   }
70
71   public HintHint setAwtTooltip(boolean awtTooltip) {
72     myAwtTooltip = awtTooltip;
73     return this;
74   }
75
76   public HintHint setMayCenterPosition(boolean mayCenter) {
77     myMayCenterTooltip = mayCenter;
78     return this;
79   }
80
81   public boolean isMayCenterTooltip() {
82     return myMayCenterTooltip;
83   }
84
85   public HintHint setPreferredPosition(Balloon.Position position) {
86     myPreferredPosition = position;
87     return this;
88   }
89
90   public boolean isAwtTooltip() {
91     return myAwtTooltip;
92   }
93
94   public Component getOriginalComponent() {
95     return myOriginalComponent;
96   }
97
98   public Point getOriginalPoint() {
99     return myOriginalPoint;
100   }
101
102   public RelativePoint getTargetPoint() {
103     return new RelativePoint(getOriginalComponent(), getOriginalPoint());
104   }
105
106   public Balloon.Position getPreferredPosition() {
107     return myPreferredPosition;
108   }
109
110   public Color getTextForeground() {
111     return myTextFg != null ? myTextFg : getTooltipManager().getTextForeground(myAwtTooltip);
112   }
113
114   public Color getTextBackground() {
115     return myTextBg != null ? myTextBg : getTooltipManager().getTextBackground(myAwtTooltip);
116   }
117
118   public Color getLinkForeground() {
119     return getTooltipManager().getLinkForeground(myAwtTooltip);
120   }
121
122   public boolean isOwnBorderAllowed() {
123     return getTooltipManager().isOwnBorderAllowed(myAwtTooltip);
124   }
125
126   public Color getBorderColor() {
127     return myBorderColor != null ? myBorderColor : getTooltipManager().getBorderColor(myAwtTooltip);
128   }
129
130   public Insets getBorderInsets() {
131     return myBorderInsets;
132   }
133
134   public boolean isOpaqueAllowed() {
135     return getTooltipManager().isOpaqueAllowed(myAwtTooltip);
136   }
137
138   public Font getTextFont() {
139     return myFont != null ? myFont : getTooltipManager().getTextFont(myAwtTooltip);
140   }
141
142   public String getUlImg() {
143     return getTooltipManager().getUlImg(myAwtTooltip);
144   }
145
146   public boolean isContentActive() {
147     return myContentActive;
148   }
149
150   public boolean isExplicitClose() {
151     return myExplicitClose;
152   }
153
154   public HintHint setContentActive(boolean active) {
155     myContentActive = active;
156     return this;
157   }
158
159   public HintHint setHighlighterType(boolean highlighter) {
160     myQuickHint = highlighter;
161     return this;
162   }
163
164   public boolean isHighlighterType() {
165     return myQuickHint;
166   }
167
168   private IdeTooltipManager getTooltipManager() {
169     return IdeTooltipManager.getInstance();
170   }
171
172   public void initStyle(Component c, boolean includeChildren) {
173     if (includeChildren) {
174       for (Component component : UIUtil.uiTraverser(c)) {
175         doInit(component);
176       }
177     }
178     else {
179       doInit(c);
180     }
181   }
182
183   private void doInit(Component c) {
184     c.setForeground(getTextForeground());
185     c.setBackground(getTextBackground());
186     c.setFont(getTextFont());
187     if (c instanceof JComponent) {
188       JComponent jc = (JComponent)c;
189       jc.setOpaque(isOpaqueAllowed());
190       jc.setBorder(isOwnBorderAllowed() ? BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black), BorderFactory.createEmptyBorder(0, 5, 0, 5)) : null);
191     }
192   }
193
194   public void initStyleFrom(JComponent component) {
195     setTextFg(component.getForeground()).setTextBg(component.getBackground()).setFont(component.getFont());
196     myTextFg = component.getForeground();
197     myTextBg = component.getBackground();
198     myFont = component.getFont();
199   }
200
201   public HintHint setTextFg(Color textFg) {
202     myTextFg = textFg;
203     return this;
204   }
205
206   public HintHint setTextBg(Color textBg) {
207     myTextBg = textBg;
208     return this;
209   }
210
211   public HintHint setFont(Font font) {
212     myFont = font;
213     return this;
214   }
215
216   public HintHint setBorderColor(Color borderColor) {
217     myBorderColor = borderColor;
218     return this;
219   }
220
221   public HintHint setBorderInsets(Insets insets) {
222     myBorderInsets = insets;
223     return this;
224   }
225
226
227   public int getCalloutShift() {
228     return myCalloutShift;
229   }
230
231   public HintHint setCalloutShift(int calloutShift) {
232     myCalloutShift = calloutShift;
233     return this;
234   }
235
236   public HintHint setExplicitClose(boolean explicitClose) {
237     myExplicitClose = explicitClose;
238     return this;
239   }
240
241   public HintHint setPositionChangeShift(int x, int y) {
242     myPositionChangeX = x;
243     myPositionChangeY = y;
244     return this;
245   }
246
247   public int getPositionChangeX() {
248     return myPositionChangeX;
249   }
250
251   public int getPositionChangeY() {
252     return myPositionChangeY;
253   }
254
255   public boolean isShowImmediately() {
256     return myShowImmediately;
257   }
258
259   /**
260    * Make sense if and only if isAwtTooltip set to {@code true}
261    *
262    * @param showImmediately true or false
263    * @return current instance of HintHint
264    */
265   public HintHint setShowImmediately(boolean showImmediately) {
266     myShowImmediately = showImmediately;
267     return this;
268   }
269
270   public boolean isAnimationEnabled() {
271     return myAnimationEnabled;
272   }
273
274   /**
275    *
276    * @param enabled is {@code true} by default and balloon appears with transparency animation. {@code false} means instant opaque showing.
277    * @return current instance of HintHint
278    */
279   public HintHint setAnimationEnabled(boolean enabled){
280     myAnimationEnabled = enabled;
281     return this;
282   }
283
284   public boolean isRequestFocus() {
285     return myRequestFocus;
286   }
287
288   public HintHint setRequestFocus(boolean requestFocus) {
289     myRequestFocus = requestFocus;
290     return this;
291   }
292 }