source: trunk/gli/src/org/greenstone/gatherer/gui/WarningDialog.java@ 13397

Last change on this file since 13397 was 13397, checked in by kjdon, 17 years ago

modified the constructor to take String title and message rather than key title and string message

  • Property svn:keywords set to Author Date Id Revision
File size: 8.4 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * Author: John Thompson, Greenstone Project, NZDL, University of Waikato
9 *
10 * Copyright (C) 2003 New Zealand Digital Library Project
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 *########################################################################
26 */
27package org.greenstone.gatherer.gui;
28
29import java.awt.*;
30import java.awt.event.*;
31import javax.swing.*;
32import org.greenstone.gatherer.Configuration;
33import org.greenstone.gatherer.Dictionary;
34import org.greenstone.gatherer.Gatherer;
35import org.greenstone.gatherer.util.JarTools;
36
37
38/** A dialog that warns about something, and allows the user to turn off the warning in the future. */
39public class WarningDialog
40 extends ModalDialog
41 implements ActionListener, KeyListener
42{
43 static final private Dimension NORMAL_SIZE = new Dimension(450, 160);
44 static final private Dimension SETTING_SIZE = new Dimension(450, 200);
45
46 private int result = JOptionPane.CANCEL_OPTION;
47 private JButton cancel_button;
48 private JButton ok_button;
49 private JCheckBox show_check;
50 private JTextField value_field;
51 private JPanel value_panel;
52 private String affected_property;
53 private String full_property;
54
55
56 public WarningDialog(String warning_name, String warning_title, String warning_message, String affected_property, boolean can_cancel)
57 {
58 super(Gatherer.g_man, "Warning", true);
59
60 // Determine the name of this prompt.
61 this.affected_property = affected_property;
62 this.full_property = warning_name;
63
64 // Now build dialog.
65 if (affected_property != null) {
66 setSize(SETTING_SIZE);
67 }
68 else {
69 setSize(NORMAL_SIZE);
70 }
71 setTitle(warning_title);
72
73 // Creation
74 JPanel content_pane = (JPanel) getContentPane();
75 JPanel text_pane = new JPanel();
76 JLabel icon_label = new JLabel(JarTools.getImage("gatherer_medium.gif"));
77
78 JTextArea text_area = new JTextArea();
79 text_area.setEditable(false);
80 text_area.setLineWrap(true);
81 text_area.setText(warning_message);
82 text_area.setCaretPosition(0);
83 text_area.setWrapStyleWord(true);
84
85 value_panel = new JPanel();
86 JLabel value_label = new JLabel(Dictionary.get("WarningDialog.Value"));
87
88 value_field = new JTextField();
89 JPanel bottom_pane = new JPanel();
90 show_check = new JCheckBox(Dictionary.get("WarningDialog.Dont_Show_Again"));
91 JPanel control_pane = new JPanel();
92 ok_button = new GLIButton(Dictionary.get("General.OK"), Dictionary.get("General.OK_Tooltip"));
93 cancel_button = new GLIButton(Dictionary.get("General.Cancel"), Dictionary.get("General.Pure_Cancel_Tooltip"));
94
95 // Connection
96 ok_button.addActionListener(this);
97 cancel_button.addActionListener(this);
98 ok_button.addKeyListener(this);
99 cancel_button.addKeyListener(this);
100 getRootPane().setDefaultButton(ok_button);
101
102 // Layout
103 icon_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));
104
105 value_label.setBorder(BorderFactory.createEmptyBorder(0, icon_label.getPreferredSize().width, 0, 0));
106
107 value_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
108 value_panel.setLayout(new BorderLayout(5,0));
109 value_panel.add(value_label, BorderLayout.WEST);
110 value_panel.add(value_field, BorderLayout.CENTER);
111
112 text_pane.setLayout(new BorderLayout());
113 text_pane.add(icon_label, BorderLayout.WEST);
114 text_pane.add(new JScrollPane(text_area), BorderLayout.CENTER);
115 if(affected_property != null) {
116 text_pane.add(value_panel, BorderLayout.SOUTH);
117 }
118
119 if(can_cancel) {
120 control_pane.setLayout(new GridLayout(1,2,5,0));
121 control_pane.add(ok_button);
122 control_pane.add(cancel_button);
123 }
124 else {
125 control_pane.setLayout(new BorderLayout());
126 control_pane.add(ok_button, BorderLayout.EAST);
127 }
128
129 bottom_pane.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
130 bottom_pane.setLayout(new BorderLayout());
131 bottom_pane.add(show_check, BorderLayout.CENTER);
132 bottom_pane.add(control_pane, BorderLayout.EAST);
133
134 content_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
135 content_pane.setLayout(new BorderLayout());
136 content_pane.add(text_pane, BorderLayout.CENTER);
137 content_pane.add(bottom_pane, BorderLayout.SOUTH);
138
139 // Position
140 Dimension size = getSize();
141 if (Gatherer.g_man != null) {
142 Rectangle frame_bounds = Gatherer.g_man.getBounds();
143 setLocation(frame_bounds.x + (frame_bounds.width - size.width) / 2, frame_bounds.y + (frame_bounds.height - size.height) / 2);
144 }
145 else {
146 Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize();
147 setLocation((screen_size.width - size.width) / 2, (screen_size.height - size.height) / 2);
148 }
149 }
150
151 public void actionPerformed(ActionEvent event) {
152 boolean bad_value = false;
153 if(event.getSource() == ok_button) {
154 if(affected_property != null && Configuration.self != null) {
155 String value = value_field.getText();
156 if(value.length() > 0) {
157 if(value_field instanceof URLField) {
158 bad_value = !((URLField)value_field).validateURL();
159 }
160 if(!bad_value) {
161 // Store the value of the property
162 Configuration.setString(affected_property, true, value_field.getText());
163 }
164 }
165 }
166 if(!bad_value) {
167 result = JOptionPane.OK_OPTION;
168 }
169 }
170 if(!bad_value) {
171 if (Configuration.self != null) {
172 // Store the state of the show message checkbox.
173 Configuration.set(full_property, true, !show_check.isSelected());
174 }
175 // Done.
176 setVisible(false);
177 }
178 else {
179 JOptionPane.showMessageDialog(Gatherer.g_man, Dictionary.get("WarningDialog.Invalid_Value"), Dictionary.get("General.Error"), JOptionPane.ERROR_MESSAGE);
180 }
181 }
182
183 /** Gives notification of key events on the buttons */
184 public void keyPressed(KeyEvent e) {
185 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
186 // Enter: Click the button in focus
187 Object source = e.getSource();
188 if (source instanceof AbstractButton) {
189 ((AbstractButton) source).doClick();
190 }
191 }
192 }
193
194 public void keyReleased(KeyEvent e) { }
195
196 public void keyTyped(KeyEvent e) { }
197
198
199 public int display() {
200 if (Configuration.self == null || Configuration.get(full_property, false)) {
201 setVisible(true);
202 }
203 // We are no longer showing this dialog, so result must always be true.
204 else {
205 result = JOptionPane.OK_OPTION;
206 }
207 // Ask the parent to repaint, just to be sure
208 if(Gatherer.g_man != null) {
209 Gatherer.g_man.repaint();
210 }
211 return result;
212 }
213
214 /** Allows you to specify whether this dialog is a warning dialog, or only a message dialog.
215 * @param message_only true if this dialog shows a message, false for a warning
216 */
217 public void setMessageOnly(boolean message_only) {
218 // If this is a message then change the checkbox
219 if(message_only) {
220 show_check.setText(Dictionary.get("WarningDialog.Dont_Show_Again_Message"));
221 }
222 // And if its a warning, change them back
223 else {
224 show_check.setText(Dictionary.get("WarningDialog.Dont_Show_Again"));
225 }
226 }
227
228 /** Allows you to replace the generic text field control with a JTextField subclass with further functionality. For instance you might provide a URLField to allow only valid URLs to be accepted.
229 * @param control the JTextField subclass you want to use for the control
230 */
231 public void setValueField(JTextField control) {
232 // Remove the current control
233 value_panel.remove(value_field);
234 // Replace with the new one
235 value_field = control;
236 // Re-add
237 value_panel.add(value_field, BorderLayout.CENTER);
238 }
239
240 protected void processWindowEvent(WindowEvent event) {
241 if(event.getID() == WindowEvent.WINDOW_ACTIVATED) {
242 if(affected_property != null) {
243 value_field.requestFocus();
244 }
245 else {
246 ok_button.requestFocus();
247 }
248 }
249 else {
250 super.processWindowEvent(event);
251 }
252 }
253}
Note: See TracBrowser for help on using the repository browser.