/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.ui.messager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.ui.awt.RelativePoint; import com.intellij.util.ui.tree.TreeUtil; import javax.swing.*; import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @author kir */ public class Callout { public static final int NORTH_WEST = 1; public static final int NORTH_EAST = 2; public static final int SOUTH_WEST = 3; public static final int SOUTH_EAST = 4; public static void showText(JTree tree, TreePath path, int direction, String text) { showText(TreeUtil.getPointForPath(tree, path), direction, text); } public static void showTextBelow(JComponent component, String text) { final RelativePoint calloutPoint = RelativePoint.getSouthWestOf(component); calloutPoint.getPoint().x += 5; Callout.showText(calloutPoint, Callout.SOUTH_EAST, text); } public static void showText(RelativePoint aPoint, int direction, String text) { if (ApplicationManager.getApplication().isUnitTestMode()) return; JLabel label = new JLabel(text); label.setHorizontalAlignment(JLabel.CENTER); final CalloutComponent callout = new CalloutComponent(label); callout.show(direction, aPoint); } public static void showText(JComponent component, int direction, String text) { final RelativePoint point = new RelativePoint(component, new Point(component.getWidth() / 2, component.getHeight() / 2)); showText(point, direction, text); } @SuppressWarnings({"HardCodedStringLiteral"}) public static void main(String[] args) { JFrame frame = new JFrame("Portlet Test"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setLocation(300, 300); frame.setSize(200, 200); JPanel pane = new JPanel(new FlowLayout()); final JButton first = new JButton("North east"); first.addActionListener(new ActionListener() { @SuppressWarnings({"HardCodedStringLiteral"}) public void actionPerformed(ActionEvent e) { Callout.showText(first, Callout.NORTH_EAST, "North east"); } }); pane.add(first); final JButton second = new JButton("North west"); second.addActionListener(new ActionListener() { @SuppressWarnings({"HardCodedStringLiteral"}) public void actionPerformed(ActionEvent e) { Callout.showText(second, Callout.NORTH_WEST, "North west"); } }); pane.add(second); final JButton third = new JButton("South east"); third.addActionListener(new ActionListener() { @SuppressWarnings({"HardCodedStringLiteral"}) public void actionPerformed(ActionEvent e) { Callout.showText(third, Callout.SOUTH_EAST, "South east"); } }); pane.add(third); final JButton fourth = new JButton("South west"); fourth.addActionListener(new ActionListener() { @SuppressWarnings({"HardCodedStringLiteral"}) public void actionPerformed(ActionEvent e) { Callout.showText(fourth, Callout.SOUTH_WEST, "South west"); } }); pane.add(fourth); frame.getContentPane().setLayout(new GridBagLayout()); frame.getContentPane().add(pane); frame.setVisible(true); } }