001: /*
002: * Gruntspud
003: *
004: * Copyright (C) 2002 Brett Smith.
005: *
006: * Written by: Brett Smith <t_magicthize@users.sourceforge.net>
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU Library General Public License
010: * as published by the Free Software Foundation; either version 2 of
011: * the License, or (at your option) any later version.
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU Library General Public License for more details.
016: *
017: * You should have received a copy of the GNU Library General Public
018: * License along with this program; if not, write to the Free Software
019: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
020: */
021:
022: package gruntspud.ui;
023:
024: import gruntspud.GruntspudContext;
025:
026: import java.awt.BorderLayout;
027:
028: import javax.swing.BorderFactory;
029: import javax.swing.Icon;
030: import javax.swing.JCheckBox;
031: import javax.swing.JComponent;
032: import javax.swing.JLabel;
033: import javax.swing.JPanel;
034: import javax.swing.SwingConstants;
035:
036: /**
037: * Description of the Class
038: *
039: *@author magicthize
040: *@created 26 May 2002
041: */
042: public class TellMeAgainPane extends JPanel {
043: // Private instance variables
044: private GruntspudContext context;
045: private String property;
046: private JCheckBox tellMeAgainCheckBox;
047:
048: /**
049: * Can't be instantiated, use <code>showWarnAgainDialog()</code>
050: *
051: */
052: private TellMeAgainPane(GruntspudContext context, String property,
053: String text, String checkBoxText, Icon icon) {
054: super (new BorderLayout(0, 6));
055:
056: this .property = property;
057: this .context = context;
058:
059: // The check box
060: tellMeAgainCheckBox = new JCheckBox(
061: (checkBoxText == null) ? "Tell me about this again"
062: : checkBoxText, true);
063: tellMeAgainCheckBox.setBorder(BorderFactory.createEmptyBorder(
064: 8, 4, 8, 4));
065: tellMeAgainCheckBox
066: .setHorizontalAlignment(SwingConstants.CENTER);
067:
068: //
069: JPanel p = new JPanel(new BorderLayout());
070: MultilineLabel ml = new MultilineLabel(text);
071: ml.setBorder(BorderFactory.createEmptyBorder(8, 4, 4, 4));
072: p.add(ml, BorderLayout.CENTER);
073: p.add(tellMeAgainCheckBox, BorderLayout.SOUTH);
074:
075: // Icon panel
076: JLabel i = new JLabel(icon);
077: i.setVerticalAlignment(JLabel.NORTH);
078: i.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 4));
079:
080: // Build this panel
081: add(p, BorderLayout.CENTER);
082: add(i, BorderLayout.WEST);
083:
084: //
085: }
086:
087: private void cleanUp() {
088: if (!tellMeAgainCheckBox.isSelected()) {
089: context.getHost().setBooleanProperty(property, false);
090: }
091: }
092:
093: /**
094: * Show a 'Tell me again' dialog. <code>null</code> may be passed for
095: * checkBoxMessage (uses 'Tell me about this again').
096: *
097: * @param context context
098: * @param parent parent component
099: * @param checkBoxMessage message to use for the checkbox (defaults to
100: * @param property
101: * @param text
102: * @param title dialog title
103: */
104: public static void showTellMeAgainDialog(GruntspudContext context,
105: JComponent parent, String checkBoxMessage, String property,
106: String text, String title, Icon icon) {
107: OptionDialog.Option close = new OptionDialog.Option("Close",
108: "Close", 'c');
109: OptionDialog.Option[] opt = { close };
110: showTellMeAgainDialog(context, parent, checkBoxMessage,
111: property, text, opt, title, icon);
112: }
113:
114: /**
115: * Show a 'Tell me again' dialog. <code>null</code> may be passed for
116: * checkBoxMessage (uses 'Tell me about this again'). Options may be
117: * specified.
118: *
119: * @param context context
120: * @param parent parent component
121: * @param checkBoxMessage message to use for the checkbox (defaults to
122: * @param property
123: * @param text
124: * @param options options
125: * @return option selected option
126: * @param title dialog title
127: */
128: public static OptionDialog.Option showTellMeAgainDialog(
129: GruntspudContext context, JComponent parent,
130: String checkBoxMessage, String property, String text,
131: OptionDialog.Option[] options, String title, Icon icon) {
132: //
133: if (text == null) {
134: throw new IllegalArgumentException(
135: "text argument may not be null");
136: }
137:
138: if (property == null) {
139: throw new IllegalArgumentException(
140: "property argument may not be null");
141: }
142:
143: // If the property is 'false', then don't show the dialog
144: if (!context.getHost().getBooleanProperty(property, true)) {
145: return null;
146: }
147:
148: //
149: TellMeAgainPane t = new TellMeAgainPane(context, property,
150: text, checkBoxMessage, icon);
151: t.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
152:
153: // Show the dialog
154: OptionDialog.Option opt = OptionDialog.showOptionDialog(
155: property, context, parent, options, t, title,
156: options[0], null, false, true);
157: t.cleanUp();
158:
159: return opt;
160: }
161: }
|