001: //** Copyright Statement ***************************************************
002: //The Salmon Open Framework for Internet Applications (SOFIA)
003: // Copyright (C) 1999 - 2002, Salmon LLC
004: //
005: // This program is free software; you can redistribute it and/or
006: // modify it under the terms of the GNU General Public License version 2
007: // as published by the Free Software Foundation;
008: //
009: // This program is distributed in the hope that it will be useful,
010: // but WITHOUT ANY WARRANTY; without even the implied warranty of
011: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: // GNU General Public License for more details.
013: //
014: // You should have received a copy of the GNU General Public License
015: // along with this program; if not, write to the Free Software
016: // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017: //
018: // For more information please visit http://www.salmonllc.com
019: //** End Copyright Statement ***************************************************
020: package com.salmonllc.swing;
021:
022: import javax.swing.*;
023: import java.awt.*;
024:
025: /**
026: * This class is used by other components in the framework to display popups windows
027: */
028: public class PopupManager {
029: private static PopupManager _man;
030: private Popup _curWindow;
031: private JPopupMenu _curMenu;
032: private static Color _errorWindowBackground = null;
033: private static Color _errorWindowForeground = null;
034:
035: private PopupManager() {
036: super ();
037: }
038:
039: /**
040: * Returns a singleton popup manager
041: */
042: public static PopupManager getPopupManager() {
043: if (_man == null)
044: _man = new PopupManager();
045: return _man;
046: }
047:
048: /**
049: * Hides the current visible window
050: */
051: public void hideWindow() {
052: if (_curWindow != null) {
053: _curWindow.hide();
054: }
055: if (_curMenu != null)
056: _curMenu.setVisible(false);
057: }
058:
059: /**
060: * Displays an error bubble below the specified component
061: * @param comp The component to display the bubble near
062: * @param message The message to display
063: */
064: public void showErrorWindow(Component comp, String message) {
065: hideWindow();
066: Point screenLocation = comp.getLocationOnScreen();
067: Rectangle compBounds = comp.getBounds();
068: Point location = new Point();
069: Rectangle screenBounds = comp.getGraphicsConfiguration()
070: .getBounds();
071: JToolTip tip = new JToolTip();
072: tip.setTipText(message);
073: if (_errorWindowBackground != null)
074: tip.setBackground(_errorWindowBackground);
075: if (_errorWindowForeground != null)
076: tip.setForeground(_errorWindowForeground);
077: Dimension size = tip.getPreferredSize();
078: location.x = screenLocation.x + 5;
079: if ((location.x + size.width) > (screenBounds.x
080: + screenBounds.width - 20))
081: location.x = (screenBounds.x + screenBounds.width - 20)
082: - size.width;
083:
084: location.y = screenLocation.y + compBounds.height + 5;
085: if ((location.y + size.height) > (screenBounds.y
086: + screenBounds.height - 30))
087: location.y = screenLocation.y - size.height - 2;
088:
089: PopupFactory factory = PopupFactory.getSharedInstance();
090: _curWindow = factory
091: .getPopup(comp, tip, location.x, location.y);
092: _curWindow.show();
093:
094: comp.requestFocus();
095: }
096:
097: /**
098: * Displays an error bubble below the specified component
099: * @param comp The component to display the bubble near
100: * @param message The message to display
101: */
102: public void showPopupPanel(Component comp, JPanel panel) {
103: hideWindow();
104: Point screenLocation = comp.getLocationOnScreen();
105: Rectangle compBounds = comp.getBounds();
106: Point location = new Point();
107: Rectangle screenBounds = comp.getGraphicsConfiguration()
108: .getBounds();
109: Dimension size = panel.getPreferredSize();
110: location.x = screenLocation.x;
111: if ((location.x + size.width) > (screenBounds.x
112: + screenBounds.width - 20))
113: location.x = (screenBounds.x + screenBounds.width - 20)
114: - size.width;
115:
116: location.y = screenLocation.y + compBounds.height;
117: if ((location.y + size.height) > (screenBounds.y
118: + screenBounds.height - 30))
119: location.y = screenLocation.y - size.height;
120:
121: PopupFactory factory = PopupFactory.getSharedInstance();
122: _curWindow = factory.getPopup(comp, panel, location.x,
123: location.y);
124: _curWindow.show();
125:
126: comp.requestFocus();
127: }
128:
129: /**
130: * Sets the colors for error window popups
131: * @param background the background color
132: * @param forground the text color
133: */
134: public static void setErrorWindowColors(Color background,
135: Color forground) {
136: _errorWindowBackground = background;
137: _errorWindowForeground = forground;
138: }
139:
140: /**
141: * Displays a popup menu, but hides any popup currently showing
142: */
143: public void showPopupMenu(JPopupMenu menu, JComponent comp, int x,
144: int y) {
145: // hideWindow();
146: _curMenu = menu;
147: menu.setSelected(null);
148: menu.show(comp, x, y);
149: menu.setVisible(true);
150: }
151: }
|