source: gli/branches/rtl-gli/src/org/greenstone/gatherer/gui/WarningDialog.java@ 18297

Last change on this file since 18297 was 18297, checked in by kjdon, 15 years ago

interface updated to display right to left for rtl languages. This code is thanks to Amin Hejazi. It seems to be only partially complete. Amin was working with Greenstone 3 so might have missed some panels

  • Property svn:keywords set to Author Date Id Revision
File size: 9.3 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 this.setComponentOrientation(Dictionary.getOrientation());
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 content_pane.setComponentOrientation(Dictionary.getOrientation());
76 JPanel text_pane = new JPanel();
77 text_pane.setComponentOrientation(Dictionary.getOrientation());
78 JLabel icon_label = new JLabel(JarTools.getImage("gatherer_medium.gif"));
79 icon_label.setComponentOrientation(Dictionary.getOrientation());
80
81 JTextArea text_area = new JTextArea();
82 text_area.setComponentOrientation(Dictionary.getOrientation());
83 text_area.setEditable(false);
84 text_area.setLineWrap(true);
85 text_area.setText(warning_message);
86 text_area.setCaretPosition(0);
87 text_area.setWrapStyleWord(true);
88
89 value_panel = new JPanel();
90 value_panel.setComponentOrientation(Dictionary.getOrientation());
91 JLabel value_label = new JLabel(Dictionary.get("WarningDialog.Value"));
92 value_label.setComponentOrientation(Dictionary.getOrientation());
93
94 value_field = new JTextField();
95 value_field.setComponentOrientation(Dictionary.getOrientation());
96 JPanel bottom_pane = new JPanel();
97 bottom_pane.setComponentOrientation(Dictionary.getOrientation());
98 show_check = new JCheckBox(Dictionary.get("WarningDialog.Dont_Show_Again"));
99 show_check.setComponentOrientation(Dictionary.getOrientation());
100 JPanel control_pane = new JPanel();
101 control_pane.setComponentOrientation(Dictionary.getOrientation());
102 ok_button = new GLIButton(Dictionary.get("General.OK"), Dictionary.get("General.OK_Tooltip"));
103 cancel_button = new GLIButton(Dictionary.get("General.Cancel"), Dictionary.get("General.Pure_Cancel_Tooltip"));
104
105 // Connection
106 ok_button.addActionListener(this);
107 cancel_button.addActionListener(this);
108 ok_button.addKeyListener(this);
109 cancel_button.addKeyListener(this);
110 getRootPane().setDefaultButton(ok_button);
111
112 // Layout
113 icon_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));
114
115 value_label.setBorder(BorderFactory.createEmptyBorder(0, icon_label.getPreferredSize().width, 0, 0));
116
117 value_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
118 value_panel.setLayout(new BorderLayout(5,0));
119 value_panel.add(value_label, BorderLayout.LINE_START);
120 value_panel.add(value_field, BorderLayout.CENTER);
121
122 text_pane.setLayout(new BorderLayout());
123 text_pane.add(icon_label, BorderLayout.LINE_START);
124 text_pane.add(new JScrollPane(text_area), BorderLayout.CENTER);
125 if(affected_property != null) {
126 text_pane.add(value_panel, BorderLayout.SOUTH);
127 }
128
129 if(can_cancel) {
130 control_pane.setLayout(new GridLayout(1,2,5,0));
131 control_pane.add(ok_button);
132 control_pane.add(cancel_button);
133 }
134 else {
135 control_pane.setLayout(new BorderLayout());
136 control_pane.add(ok_button, BorderLayout.LINE_END);
137 }
138
139 bottom_pane.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
140 bottom_pane.setLayout(new BorderLayout());
141 bottom_pane.add(show_check, BorderLayout.CENTER);
142 bottom_pane.add(control_pane, BorderLayout.LINE_END);
143
144 content_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
145 content_pane.setLayout(new BorderLayout());
146 content_pane.add(text_pane, BorderLayout.CENTER);
147 content_pane.add(bottom_pane, BorderLayout.SOUTH);
148
149 // Position
150 Dimension size = getSize();
151 if (Gatherer.g_man != null) {
152 Rectangle frame_bounds = Gatherer.g_man.getBounds();
153 setLocation(frame_bounds.x + (frame_bounds.width - size.width) / 2, frame_bounds.y + (frame_bounds.height - size.height) / 2);
154 }
155 else {
156 Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize();
157 setLocation((screen_size.width - size.width) / 2, (screen_size.height - size.height) / 2);
158 }
159 }
160
161 public void actionPerformed(ActionEvent event) {
162 boolean bad_value = false;
163 if(event.getSource() == ok_button) {
164 if(affected_property != null && Configuration.self != null) {
165 String value = value_field.getText();
166 if(value.length() > 0) {
167 if(value_field instanceof URLField) {
168 bad_value = !((URLField)value_field).validateURL();
169 }
170 if(!bad_value) {
171 // Store the value of the property
172 Configuration.setString(affected_property, true, value_field.getText());
173 }
174 }
175 }
176 if(!bad_value) {
177 result = JOptionPane.OK_OPTION;
178 }
179 }
180 if(!bad_value) {
181 if (Configuration.self != null) {
182 // Store the state of the show message checkbox.
183 Configuration.set(full_property, true, !show_check.isSelected());
184 }
185 // Done.
186 setVisible(false);
187 }
188 else {
189 JOptionPane.showMessageDialog(Gatherer.g_man, Dictionary.get("WarningDialog.Invalid_Value"), Dictionary.get("General.Error"), JOptionPane.ERROR_MESSAGE);
190 }
191 }
192
193 /** Gives notification of key events on the buttons */
194 public void keyPressed(KeyEvent e) {
195 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
196 // Enter: Click the button in focus
197 Object source = e.getSource();
198 if (source instanceof AbstractButton) {
199 ((AbstractButton) source).doClick();
200 }
201 }
202 }
203
204 public void keyReleased(KeyEvent e) { }
205
206 public void keyTyped(KeyEvent e) { }
207
208
209 public int display() {
210 if (Configuration.self == null || Configuration.get(full_property, false)) {
211 setVisible(true);
212 }
213 // We are no longer showing this dialog, so result must always be true.
214 else {
215 result = JOptionPane.OK_OPTION;
216 }
217 // Ask the parent to repaint, just to be sure
218 if(Gatherer.g_man != null) {
219 Gatherer.g_man.repaint();
220 }
221 return result;
222 }
223
224 /** Allows you to specify whether this dialog is a warning dialog, or only a message dialog.
225 * @param message_only true if this dialog shows a message, false for a warning
226 */
227 public void setMessageOnly(boolean message_only) {
228 // If this is a message then change the checkbox
229 if(message_only) {
230 show_check.setText(Dictionary.get("WarningDialog.Dont_Show_Again_Message"));
231 }
232 // And if its a warning, change them back
233 else {
234 show_check.setText(Dictionary.get("WarningDialog.Dont_Show_Again"));
235 }
236 }
237
238 /** 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.
239 * @param control the JTextField subclass you want to use for the control
240 */
241 public void setValueField(JTextField control) {
242 // Remove the current control
243 value_panel.remove(value_field);
244 // Replace with the new one
245 value_field = control;
246 // Re-add
247 value_panel.add(value_field, BorderLayout.CENTER);
248 }
249
250 protected void processWindowEvent(WindowEvent event) {
251 if(event.getID() == WindowEvent.WINDOW_ACTIVATED) {
252 if(affected_property != null) {
253 value_field.requestFocus();
254 }
255 else {
256 ok_button.requestFocus();
257 }
258 }
259 else {
260 super.processWindowEvent(event);
261 }
262 }
263
264 public void setValueField(String field_value){
265 this.value_field.setText(field_value);
266 }
267
268}
Note: See TracBrowser for help on using the repository browser.