Lines 46-58
Link Here
|
46 |
|
46 |
|
47 |
import java.awt.Color; |
47 |
import java.awt.Color; |
48 |
import java.awt.Cursor; |
48 |
import java.awt.Cursor; |
|
|
49 |
import java.awt.Component; |
50 |
import java.awt.BasicStroke; |
49 |
import java.awt.Dimension; |
51 |
import java.awt.Dimension; |
50 |
import java.awt.Font; |
52 |
import java.awt.Font; |
51 |
import java.awt.FontMetrics; |
53 |
import java.awt.FontMetrics; |
|
|
54 |
import java.awt.Point; |
55 |
import java.awt.geom.*; |
52 |
import java.awt.Graphics; |
56 |
import java.awt.Graphics; |
53 |
import java.awt.Graphics2D; |
57 |
import java.awt.Graphics2D; |
54 |
import java.awt.Insets; |
58 |
import java.awt.Insets; |
55 |
import java.awt.Rectangle; |
59 |
import java.awt.Rectangle; |
|
|
60 |
import java.awt.RenderingHints; |
61 |
import java.awt.Shape; |
56 |
import java.awt.event.ActionListener; |
62 |
import java.awt.event.ActionListener; |
57 |
import java.awt.event.FocusEvent; |
63 |
import java.awt.event.FocusEvent; |
58 |
import java.awt.event.FocusListener; |
64 |
import java.awt.event.FocusListener; |
Lines 62-71
Link Here
|
62 |
import java.util.logging.LogRecord; |
68 |
import java.util.logging.LogRecord; |
63 |
import javax.swing.BorderFactory; |
69 |
import javax.swing.BorderFactory; |
64 |
import javax.swing.JButton; |
70 |
import javax.swing.JButton; |
|
|
71 |
import javax.swing.JFrame; |
65 |
import javax.swing.JLabel; |
72 |
import javax.swing.JLabel; |
|
|
73 |
import javax.swing.JToolTip; |
66 |
import javax.swing.border.Border; |
74 |
import javax.swing.border.Border; |
67 |
import javax.swing.border.EmptyBorder; |
75 |
import javax.swing.border.EmptyBorder; |
|
|
76 |
import javax.swing.JComponent; |
68 |
import org.openide.util.NbBundle; |
77 |
import org.openide.util.NbBundle; |
|
|
78 |
import org.openide.windows.WindowManager; |
69 |
|
79 |
|
70 |
/** |
80 |
/** |
71 |
* |
81 |
* |
Lines 76-82
Link Here
|
76 |
|
86 |
|
77 |
private boolean underline = false; |
87 |
private boolean underline = false; |
78 |
private final boolean showBorder; |
88 |
private final boolean showBorder; |
79 |
|
|
|
80 |
private final Color defaultForeground; |
89 |
private final Color defaultForeground; |
81 |
|
90 |
|
82 |
private final static Border regularBorder = ButtonBorder.createRegular(); |
91 |
private final static Border regularBorder = ButtonBorder.createRegular(); |
Lines 84-89
Link Here
|
84 |
|
93 |
|
85 |
private String usageTrackingId; |
94 |
private String usageTrackingId; |
86 |
|
95 |
|
|
|
96 |
private JToolTip tooltip; |
97 |
|
87 |
public LinkButton( String label, String usageTrackingId ) { |
98 |
public LinkButton( String label, String usageTrackingId ) { |
88 |
this( label, false, usageTrackingId ); |
99 |
this( label, false, usageTrackingId ); |
89 |
} |
100 |
} |
Lines 100-105
Link Here
|
100 |
super( label ); |
111 |
super( label ); |
101 |
this.defaultForeground = foreground; |
112 |
this.defaultForeground = foreground; |
102 |
this.showBorder = showBorder; |
113 |
this.showBorder = showBorder; |
|
|
114 |
|
115 |
tooltip = new WelcomeToolTip(); |
116 |
tooltip.setComponent(this); |
117 |
|
118 |
setToolTipText(label); |
119 |
|
103 |
setForeground( defaultForeground ); |
120 |
setForeground( defaultForeground ); |
104 |
setFont( BUTTON_FONT ); |
121 |
setFont( BUTTON_FONT ); |
105 |
this.usageTrackingId = usageTrackingId; |
122 |
this.usageTrackingId = usageTrackingId; |
Lines 127-132
Link Here
|
127 |
} |
144 |
} |
128 |
|
145 |
|
129 |
@Override |
146 |
@Override |
|
|
147 |
public JToolTip createToolTip() { |
148 |
return tooltip; |
149 |
} |
150 |
|
151 |
@Override |
152 |
public Point getToolTipLocation(MouseEvent event) { |
153 |
JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); |
154 |
|
155 |
int mainWindowX = frame.getLocationOnScreen().x; |
156 |
Dimension mainWindowSize = frame.getSize(); |
157 |
|
158 |
Rectangle tooltopVisible = getVisibleRect(); |
159 |
Point tooltipLocation = getLocationOnScreen(); |
160 |
System.err.println("Original Tooltip location x " + tooltipLocation.x); |
161 |
int ttX = 10; |
162 |
if ((mainWindowX + mainWindowSize.width) |
163 |
< (tooltipLocation.x + tooltopVisible.width)) { |
164 |
ttX = - ((tooltipLocation.x + tooltopVisible.width) - |
165 |
(mainWindowX + mainWindowSize.width)); |
166 |
} |
167 |
return new Point(ttX, 20); |
168 |
} |
169 |
|
170 |
@Override |
130 |
public void mouseClicked(MouseEvent e) { |
171 |
public void mouseClicked(MouseEvent e) { |
131 |
} |
172 |
} |
132 |
|
173 |
|
Lines 234-236
Link Here
|
234 |
System.err.println("usage: " + id); |
275 |
System.err.println("usage: " + id); |
235 |
} |
276 |
} |
236 |
} |
277 |
} |
|
|
278 |
|
279 |
class WelcomeToolTip extends JToolTip { |
280 |
|
281 |
public WelcomeToolTip() { |
282 |
super(); |
283 |
this.setOpaque(false); |
284 |
} |
285 |
|
286 |
@Override |
287 |
public Dimension getPreferredSize() { |
288 |
Dimension dim = super.getPreferredSize(); |
289 |
return new Dimension((int)dim.getWidth() + 50,(int)dim.getHeight()+10); |
290 |
} |
291 |
@Override |
292 |
public void paintComponent(Graphics g) { |
293 |
// set the parent opaque |
294 |
Component parent = this.getParent(); |
295 |
if(parent != null) { |
296 |
if(parent instanceof JComponent) { |
297 |
JComponent jparent = (JComponent)parent; |
298 |
if(jparent.isOpaque()) { |
299 |
jparent.setOpaque(false); |
300 |
} |
301 |
} |
302 |
} |
303 |
// create a round rectangle |
304 |
Shape round = new RoundRectangle2D.Float(4f,4f, |
305 |
this.getWidth() -1f - 8f, |
306 |
this.getHeight() -1f -8f, |
307 |
15f,15f); |
308 |
|
309 |
// draw background |
310 |
Graphics2D g2 = Utils.prepareGraphics( g ); |
311 |
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, |
312 |
RenderingHints.VALUE_ANTIALIAS_ON); |
313 |
// set GhostWhite background color |
314 |
g2.setColor(Color.getHSBColor(0.333f, 0.027f, 1f)); |
315 |
g2.fill(round); |
316 |
|
317 |
// draw the LightSteelBlue border |
318 |
g2.setColor(Color.getHSBColor(0.406f, 0.207f, 0.871f)); |
319 |
g2.setStroke(new BasicStroke(1)); |
320 |
g2.draw(round); |
321 |
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, |
322 |
RenderingHints.VALUE_ANTIALIAS_DEFAULT); |
323 |
|
324 |
// draw the text |
325 |
String text = this.getComponent().getToolTipText(); |
326 |
if(text != null) { |
327 |
FontMetrics fm = g2.getFontMetrics(); |
328 |
int h = fm.getAscent(); |
329 |
Font font = fm.getFont(); |
330 |
g2.setFont(new Font(font.getFontName(), Font.BOLD, font.getSize())); |
331 |
g2.setColor(Color.DARK_GRAY); |
332 |
g2.drawString(text,10,(this.getHeight()+h)/2); |
333 |
} |
334 |
} |
335 |
|
336 |
@Override |
337 |
public void setToolTipText(String str) { |
338 |
super.setToolTipText(str); |
339 |
} |
340 |
} |