/* * $Id$ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.viewer; import javax.swing.*; import java.beans.*; import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import org.apache.fop.apps.*; /** * Die Klasse MessagesDialog dient der Anzeige von Meldungen. * Die Klasse erweitert JOptionPane um die Möglichkeit, auf Knopfdruck * eine Detailanzeige einzublenden, in der z.B. bei Fehlern der StackTrace ausgegeben * werden kann. * * @author Juergen.Verwohlt@jCatalog.com * @version 1.0 09.06.99 */ public class MessagesDialog extends JOptionPane { static Translator res; public static void setTranslator(Translator aRes) { res = aRes; iniConstants(); } static String DETAIL_OPTION; static String YES_OPTION; static String NO_OPTION; static String CANCEL_OPTION; static String OK_OPTION; static String[] defaultDetailOption; static String[] yesNoDetailOption; static String[] yesNoCancelDetailOption; static String[] okCancelDetailOption; static String[] defaultOption; static String[] yesNoOption; static String[] yesNoCancelOption; static String[] okCancelOption; private static void iniConstants() { DETAIL_OPTION = res.getString("Details"); YES_OPTION = res.getString("Yes"); NO_OPTION = res.getString("No"); CANCEL_OPTION = res.getString("Cancel"); OK_OPTION = res.getString("Ok"); defaultDetailOption = new String[] { OK_OPTION, DETAIL_OPTION }; yesNoDetailOption = new String[] { YES_OPTION, NO_OPTION, DETAIL_OPTION }; yesNoCancelDetailOption = new String[] { YES_OPTION, NO_OPTION, CANCEL_OPTION, DETAIL_OPTION }; okCancelDetailOption = new String[] { OK_OPTION, CANCEL_OPTION, DETAIL_OPTION }; defaultOption = new String[] { OK_OPTION }; yesNoOption = new String[] { YES_OPTION, NO_OPTION }; yesNoCancelOption = new String[] { YES_OPTION, NO_OPTION, CANCEL_OPTION }; okCancelOption = new String[] { OK_OPTION, CANCEL_OPTION }; } protected String detailInformation = null; protected JDialog dialog = null; protected boolean showsDetails = false; // MessagesDialog.showConfirmDialog(null,preparedMes,title, // optionTypeIndex,messageTypeIndex); public MessagesDialog(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue) { super(message, messageType, optionType, icon, options, initialValue); setMinimumSize(new Dimension(240, 96)); } public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType) { Object[] options; switch (optionType) { case JOptionPane.YES_NO_OPTION: options = yesNoOption; break; case JOptionPane.YES_NO_CANCEL_OPTION: options = yesNoCancelOption; break; case JOptionPane.OK_CANCEL_OPTION: options = okCancelOption; break; default: options = defaultOption; } MessagesDialog pane = new MessagesDialog(message, messageType, JOptionPane.DEFAULT_OPTION, null, options, options[0]); pane.setInitialValue(options[0]); JDialog dialog = pane.createDialog(parentComponent, title); pane.setDialog(dialog); pane.selectInitialValue(); dialog.show(); Object selectedValue = pane.getValue(); if (selectedValue == null) return CLOSED_OPTION; if (selectedValue.equals(OK_OPTION)) return JOptionPane.OK_OPTION; if (selectedValue.equals(CANCEL_OPTION)) return JOptionPane.CANCEL_OPTION; if (selectedValue.equals(YES_OPTION)) return JOptionPane.YES_OPTION; if (selectedValue.equals(NO_OPTION)) return JOptionPane.NO_OPTION; return CLOSED_OPTION; } /** * Öffnet ein Dialogfenster, bei dem zusätzlich zu den spez. Buttons noch ein * 'Detail'-Button erscheint. Wird dieser Knopf vom Benutzer betätigt, erscheint * die übergebene Detailinformation in einem scrollbaren Bereich des Dialogs. */ public static int showDetailDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, String newDetailInformation) { Object[] options; switch (optionType) { case JOptionPane.YES_NO_OPTION: options = yesNoDetailOption; break; case JOptionPane.YES_NO_CANCEL_OPTION: options = yesNoCancelDetailOption; break; case JOptionPane.OK_CANCEL_OPTION: options = okCancelDetailOption; break; default: options = defaultDetailOption; } MessagesDialog pane = new MessagesDialog(message, messageType, JOptionPane.DEFAULT_OPTION, icon, options, options[0]); pane.setDetailInformation(newDetailInformation); pane.setInitialValue(options[0]); JDialog dialog = pane.createDialog(parentComponent, title); pane.setDialog(dialog); pane.selectInitialValue(); dialog.show(); Object selectedValue = pane.getValue(); if (selectedValue == null) return CLOSED_OPTION; if (((String)selectedValue).equals(DETAIL_OPTION)) return CLOSED_OPTION; if (selectedValue.equals(OK_OPTION)) return JOptionPane.OK_OPTION; if (selectedValue.equals(CANCEL_OPTION)) return JOptionPane.CANCEL_OPTION; if (selectedValue.equals(YES_OPTION)) return JOptionPane.YES_OPTION; if (selectedValue.equals(NO_OPTION)) return JOptionPane.NO_OPTION; return CLOSED_OPTION; } /** * Die Methode fügt in den übergebenen Dialog eine scrollbare Textkomponente ein, * in der die Detailinformation angezeigt wird. * * @param JDialog dialog Der Dialog, in den die Textkomponente eingefügt werden soll */ protected void displayDetails(JDialog dialog) { if (getDetailInformation() != null && dialog != null && showsDetails == false) { showsDetails = true; JScrollPane aScrollPane = new JScrollPane(); JTextArea aTextArea = new JTextArea(); StringWriter aStringWriter = new StringWriter(); aTextArea.setText(getDetailInformation()); aTextArea.setEditable(false); aScrollPane.getViewport().add(aTextArea, null); dialog.getContentPane().add(aScrollPane, BorderLayout.SOUTH); aScrollPane.setPreferredSize(new Dimension(320, 240)); dialog.pack(); } } // Zugriff public void setValue(Object aValue) { if (aValue != null && DETAIL_OPTION.equals(aValue)) displayDetails(getDialog()); else super.setValue(aValue); } public String getDetailInformation() { return detailInformation; } public void setDetailInformation(String aValue) { detailInformation = aValue; } public JDialog getDialog() { return dialog; } public void setDialog(JDialog aValue) { dialog = aValue; } }