Revision 43167 trunk/org.gvsig.desktop/org.gvsig.desktop.framework/org.gvsig.andami/src/main/java/org/gvsig/andami/ui/mdiFrame/DefaultThreadSafeDialogs.java

View differences:

DefaultThreadSafeDialogs.java
31 31
import java.awt.event.ComponentListener;
32 32
import java.io.File;
33 33
import java.lang.reflect.Constructor;
34
import javax.swing.JCheckBox;
34 35

  
35 36
import javax.swing.JFileChooser;
37
import javax.swing.JLabel;
36 38
import javax.swing.JOptionPane;
37 39
import javax.swing.JPanel;
38 40
import javax.swing.SwingUtilities;
39 41
import javax.swing.filechooser.FileFilter;
40 42

  
41 43
import org.gvsig.andami.PluginServices;
44
import org.gvsig.andami.PluginsLocator;
42 45
import org.gvsig.andami.ui.mdiManager.IWindow;
43 46
import org.gvsig.andami.ui.mdiManager.MDIManager;
44 47
import org.gvsig.andami.ui.mdiManager.WindowInfo;
48
import org.gvsig.dialogremember.DialogRememeber;
49
import org.gvsig.tools.ToolsLocator;
45 50
import org.gvsig.tools.task.CancellableTask;
46 51
import org.gvsig.tools.task.RunnableWithParameters;
47 52
import org.slf4j.Logger;
......
114 119
		return msg;
115 120
	}
116 121

  
122
        @Override
117 123
	public int confirmDialog(final String message, final String title, final int optionType,
118 124
			final int messageType) {
125
            return this.confirmDialog(message, title, optionType, messageType, null);
126
        }
127

  
128
        private static class JMessageWithCheck extends JPanel {
129
            private final JLabel label;
130
            private final JCheckBox check;
131
            
132
            public JMessageWithCheck(String msg, String msgchk) {
133
                if( !msg.toLowerCase().trim().startsWith("<html>") ) {
134
                    msg = "<html>" + msg.replace("\n", "<br>\n") + "</html>";
135
                }
136
                this.label = new JLabel(msg);
137
                this.check = new JCheckBox(msgchk);
138
                this.setLayout(new BorderLayout(10,10));
139
                this.add(this.label,BorderLayout.CENTER);
140
                this.add(this.check,BorderLayout.PAGE_END);
141
            }
142
            
143
            public boolean isCheckSelected() {
144
                return this.check.isSelected();
145
            }
146
        }
147
        
148
        @Override
149
	public int confirmDialog(final String message, final String title, final int optionType,
150
			final int messageType, final String msgid) {
119 151
		RunnableWithParameters runnable = new RunnableWithParameters() {
152
                        @Override
120 153
			public void run() {
121
				this.returnValue = JOptionPane.showConfirmDialog(
122
						getRootComponent(), message,title, optionType, messageType);
154
                            DialogRememeber r = null;
155
                            Object msg = message;
156
                            if( msgid != null ) {
157
                                r = PluginsLocator.getDialogRemembereManager().add(msgid);
158
                                if( r.hasValue() ) {
159
                                    this.returnValue = r.getValue();
160
                                    return;
161
                                }
162
                                msg = new JMessageWithCheck(
163
                                        message, 
164
                                        ToolsLocator.getI18nManager().getTranslation("_Remember_answer_and_do_not_ask_again")
165
                                );
166
                            }
167
                            this.returnValue = JOptionPane.showConfirmDialog(
168
                                getRootComponent(), 
169
                                msg,
170
                                title, 
171
                                optionType, 
172
                                messageType
173
                            );
174
                            if( r!=null ) {
175
                                if( ((JMessageWithCheck)msg).isCheckSelected() ) {
176
                                    r.setValue(this.returnValue);
177
                                } else {
178
                                    r.reset();
179
                                }
180
                            }
123 181
			}
124 182
		};
125 183
		if (SwingUtilities.isEventDispatchThread()) {
......
182 240
		return (String) runnable.getReturnValue();
183 241
	}
184 242

  
243
        @Override
185 244
	public void messageDialog(String message, String title, int messageType) {
186 245
		messageDialog(message, null, title, messageType);
187 246
	}
188 247

  
189 248
	public void messageDialog(final String message, final String messageArgs[],
190 249
			final String title, final int messageType) {
191
		if (!SwingUtilities.isEventDispatchThread()) {
192
			try {
193
				SwingUtilities.invokeAndWait(new Runnable() {
194
					public void run() {
195
						messageDialog(message, messageArgs, title, messageType);
196
					}
197
				});
198
			} catch (Exception e) {
199
				logger.info("Can't show message dialog '" + message
200
						+ "'. redirect to status bar", e);
201
				this.message(message, messageType);
202
			}
203
			return;
204
		}
250
        }
251
        
252
        @Override
253
    public void messageDialog(final String message, final String messageArgs[],
254
            final String title, final int messageType, final String msgid) {
255
        if (!SwingUtilities.isEventDispatchThread()) {
256
            try {
257
                SwingUtilities.invokeAndWait(new Runnable() {
258
                    @Override
259
                    public void run() {
260
                        messageDialog(message, messageArgs, title, messageType, msgid);
261
                    }
262
                });
263
            } catch (Exception e) {
264
                logger.info("Can't show message dialog '" + message
265
                        + "'. redirect to status bar", e);
266
                this.message(message, messageType);
267
            }
268
            return;
269
        }
205 270

  
206
		if (message == null) {
207
			logger.info("message if null, message dialog not show.");
208
			return;
209
		}
210
		JOptionPane.showMessageDialog(getRootComponent(),
211
				translate(message, messageArgs), translate(title), messageType);
212
	}
271
        if (message == null) {
272
            logger.info("message if null, message dialog not show.");
273
            return;
274
        }
275
        DialogRememeber r = null;
276
        Object msg = message;
277
        if (msgid != null) {
278
            r = PluginsLocator.getDialogRemembereManager().add(msgid);
279
            if (r.hasValue() && ((boolean)r.getValue()) ) {
280
                return;
281
            }
282
            msg = new JMessageWithCheck(
283
                    message,
284
                    ToolsLocator.getI18nManager().getTranslation("_do_not_show_again")
285
            );
286
        }
287
        JOptionPane.showMessageDialog(getRootComponent(),
288
                translate(message, messageArgs), translate(title), messageType);
213 289

  
290
        if (r != null) {
291
            if (((JMessageWithCheck) msg).isCheckSelected()) {
292
                r.setValue(true);
293
            } else {
294
                r.reset();
295
            }
296
        }
297

  
298
    }
299

  
214 300
	public void showDialog(final Component contents, final String title) {
215 301
		if (SwingUtilities.isEventDispatchThread()) {
216 302
			final DialogWindow window = new DialogWindow();

Also available in: Unified diff