tkormann    01/10/10 06:42:37

  Modified:    resources/org/apache/batik/apps/svgbrowser/resources
                        GUI.properties
               sources/org/apache/batik/apps/svgbrowser Application.java
                        JSVGViewerFrame.java Main.java
                        PreferenceDialog.java
  Added:       resources/org/apache/batik/util/gui/resources
                        CSSMediaPanel.properties
               sources/org/apache/batik/util/gui CSSMediaPanel.java
  Log:
  Add CSS media support (using the preferences dialog).
  
  Revision  Changes    Path
  1.33      +4 -1      
xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/GUI.properties
  
  Index: GUI.properties
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/GUI.properties,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- GUI.properties    2001/10/03 16:08:19     1.32
  +++ GUI.properties    2001/10/10 13:42:37     1.33
  @@ -9,7 +9,7 @@
   # The viewer's GUI resources.
   #
   # Author: [EMAIL PROTECTED]
  -# $Id: GUI.properties,v 1.32 2001/10/03 16:08:19 tkormann Exp $
  +# $Id: GUI.properties,v 1.33 2001/10/10 13:42:37 tkormann Exp $
   #
   
   ViewSource.width = 750
  @@ -356,6 +356,9 @@
   #
   # PreferenceDialog parameters
   #
  +PreferenceDialog.MediaPanel.title = Media
  +
  +
   PreferenceDialog.label.user.options = User Options
   PreferenceDialog.label.user.language = Language
   PreferenceDialog.label.user.stylesheet = Stylesheet
  
  
  
  1.1                  
xml-batik/resources/org/apache/batik/util/gui/resources/CSSMediaPanel.properties
  
  Index: CSSMediaPanel.properties
  ===================================================================
  #############################################################################
  # Copyright (C) The Apache Software Foundation. All rights reserved.        #
  # ------------------------------------------------------------------------- #
  # This software is published under the terms of the Apache Software License #
  # version 1.1, a copy of which has been included with this distribution in  #
  # the LICENSE file.                                                         #
  #############################################################################
  #
  # The resources for the location bar
  #
  # Author: [EMAIL PROTECTED]
  # $Id: CSSMediaPanel.properties,v 1.1 2001/10/10 13:42:37 tkormann Exp $
  #
  
  OKButton.text     = OK
  OKButton.mnemonic = O
  OKButton.action   = OKButtonAction
  
  CancelButton.text     = Cancel
  CancelButton.mnemonic = C
  CancelButton.action   = CancelButtonAction
  
  AddButton.text     = Add
  AddButton.mnemonic = A
  AddButton.action   = AddButtonAction
  
  RemoveButton.text     = Remove
  RemoveButton.mnemonic = R
  RemoveButton.action   = RemoveButtonAction
  
  ClearButton.text     = Clear
  ClearButton.mnemonic = l
  ClearButton.action   = ClearButtonAction
  
  Panel.title = CSS Media
  
  Media.list = all aural braille embossed handheld print projection screen tty tv 
  AddMediumDialog.title = Add a new CSS medium
  AddMediumDialog.label = Medium Name: 
  
  
  
  
  1.3       +8 -1      
xml-batik/sources/org/apache/batik/apps/svgbrowser/Application.java
  
  Index: Application.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/Application.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Application.java  2001/05/14 05:00:09     1.2
  +++ Application.java  2001/10/10 13:42:37     1.3
  @@ -14,7 +14,7 @@
    * This interface represents a SVG viewer application.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: Application.java,v 1.2 2001/05/14 05:00:09 hillion Exp $
  + * @version $Id: Application.java,v 1.3 2001/10/10 13:42:37 tkormann Exp $
    */
   public interface Application {
   
  @@ -58,4 +58,11 @@
        * @return null if no user style sheet was specified.
        */
       String getUserStyleSheetURI();
  +
  +    /**
  +     * Returns the CSS media to use.
  +     * @return empty string if no CSS media was specified.
  +     */
  +    String getMedia();
  +
   }
  
  
  
  1.54      +2 -2      
xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
  
  Index: JSVGViewerFrame.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- JSVGViewerFrame.java      2001/10/08 15:49:37     1.53
  +++ JSVGViewerFrame.java      2001/10/10 13:42:37     1.54
  @@ -153,7 +153,7 @@
    * This class represents a SVG viewer swing frame.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: JSVGViewerFrame.java,v 1.53 2001/10/08 15:49:37 hillion Exp $
  + * @version $Id: JSVGViewerFrame.java,v 1.54 2001/10/10 13:42:37 tkormann Exp $
    */
   public class JSVGViewerFrame
       extends    JFrame
  @@ -1741,7 +1741,7 @@
            * Returns this user agent's CSS media.
            */
           public String getMedia() {
  -            return "screen";
  +         return application.getMedia();
           }
   
           /**
  
  
  
  1.16      +15 -1     xml-batik/sources/org/apache/batik/apps/svgbrowser/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/Main.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Main.java 2001/05/18 06:30:14     1.15
  +++ Main.java 2001/10/10 13:42:37     1.16
  @@ -45,7 +45,7 @@
    * This class contains the main method of an SVG viewer.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: Main.java,v 1.15 2001/05/18 06:30:14 hillion Exp $
  + * @version $Id: Main.java,v 1.16 2001/10/10 13:42:37 tkormann Exp $
    */
   public class Main implements Application {
   
  @@ -141,6 +141,8 @@
                        "");
           defaults.put(PreferenceDialog.PREFERENCE_KEY_PROXY_PORT,
                        "");
  +        defaults.put(PreferenceDialog.PREFERENCE_KEY_CSS_MEDIA,
  +                     "screen");
   
           try {
               preferenceManager = new XMLPreferenceManager("preferences.xml",
  @@ -426,5 +428,17 @@
           }
           return preferenceDialog.getPreferenceManager().getString
               (PreferenceDialog.PREFERENCE_KEY_USER_STYLESHEET);
  +    }
  +
  +    /**
  +     * Returns the CSS media to use.
  +     * @return empty string if no CSS media was specified.
  +     */
  +    public String getMedia() {
  +        if (preferenceDialog == null) {
  +            return "";
  +        }
  +        return preferenceDialog.getPreferenceManager().getString
  +            (PreferenceDialog.PREFERENCE_KEY_CSS_MEDIA);
       }
   }
  
  
  
  1.7       +23 -2     
xml-batik/sources/org/apache/batik/apps/svgbrowser/PreferenceDialog.java
  
  Index: PreferenceDialog.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/PreferenceDialog.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- PreferenceDialog.java     2001/05/14 21:42:36     1.6
  +++ PreferenceDialog.java     2001/10/10 13:42:37     1.7
  @@ -47,6 +47,7 @@
   import org.apache.batik.ext.swing.GridBagConstants;
   
   import org.apache.batik.util.PreferenceManager;
  +import org.apache.batik.util.gui.CSSMediaPanel;
   import org.apache.batik.util.gui.LanguageDialog;
   import org.apache.batik.util.gui.UserStyleDialog;
   
  @@ -54,7 +55,7 @@
    * Dialog that displays user preferences.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Vincent Hardy</a>
  - * @version $Id: PreferenceDialog.java,v 1.6 2001/05/14 21:42:36 vhardy Exp $
  + * @version $Id: PreferenceDialog.java,v 1.7 2001/10/10 13:42:37 tkormann Exp $
    */
   public class PreferenceDialog extends JDialog 
       implements GridBagConstants {
  @@ -177,6 +178,10 @@
       public static final String PREFERENCE_KEY_PROXY_HOST
           = "preference.key.proxy.host";
   
  +
  +    public static final String PREFERENCE_KEY_CSS_MEDIA
  +        = "preference.key.cssmedia";
  +
       public static final String PREFERENCE_KEY_PROXY_PORT
           = "preference.key.proxy.port";
   
  @@ -211,6 +216,8 @@
   
       protected JTextField host, port;
   
  +    protected CSSMediaPanel cssMediaPanel;
  +
       /**
        * Code indicating whether the dialog was OKayed
        * or cancelled
  @@ -272,6 +279,10 @@
           host.setText(model.getString(PREFERENCE_KEY_PROXY_HOST));
           port.setText(model.getString(PREFERENCE_KEY_PROXY_PORT));
   
  +     //
  +     // Initialize the CSS media
  +     //
  +     cssMediaPanel.setMedia(model.getString(PREFERENCE_KEY_CSS_MEDIA));
           //
           // Sets the dialog's title
           //
  @@ -298,6 +309,8 @@
                           host.getText());
           model.setString(PREFERENCE_KEY_PROXY_PORT,
                           port.getText());
  +        model.setString(PREFERENCE_KEY_CSS_MEDIA,
  +                        cssMediaPanel.getMediaAsString());
       }
   
       /**
  @@ -434,8 +447,16 @@
       }
   
       protected Component buildUserStyleSheet(){
  +     JPanel panel = new JPanel(new BorderLayout());
  +     panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
  +
           userStylesheetPanel = new UserStyleDialog.Panel();
  -        return userStylesheetPanel;
  +     panel.add(userStylesheetPanel, BorderLayout.NORTH);
  +
  +     cssMediaPanel = new CSSMediaPanel();
  +     panel.add(cssMediaPanel, BorderLayout.SOUTH);
  +
  +        return panel;
       }
   
       protected Component buildUserFont(){
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/util/gui/CSSMediaPanel.java
  
  Index: CSSMediaPanel.java
  ===================================================================
  /*****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * ------------------------------------------------------------------------- *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included with this distribution in  *
   * the LICENSE file.                                                         *
   *****************************************************************************/
  
  package org.apache.batik.util.gui;
  
  import java.awt.BorderLayout;
  import java.awt.Component;
  import java.awt.FlowLayout;
  import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  
  import java.awt.Insets;
  
  import java.awt.event.ActionEvent;
  
  import java.util.ArrayList;
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Locale;
  import java.util.Map;
  import java.util.ResourceBundle;
  import java.util.StringTokenizer;
  
  import javax.swing.AbstractAction;
  import javax.swing.Action;
  import javax.swing.BorderFactory;
  import javax.swing.DefaultListModel;
  import javax.swing.JButton;
  import javax.swing.JComboBox;
  import javax.swing.JDialog;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JList;
  import javax.swing.JOptionPane;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JComboBox;
  import javax.swing.ListSelectionModel;
  
  import javax.swing.event.ListDataEvent;
  import javax.swing.event.ListDataListener;
  import javax.swing.event.ListSelectionEvent;
  import javax.swing.event.ListSelectionListener;
  
  import org.apache.batik.util.gui.resource.ActionMap;
  import org.apache.batik.util.gui.resource.ButtonFactory;
  import org.apache.batik.util.gui.resource.MissingListenerException;
  import org.apache.batik.util.gui.resource.ResourceManager;
  
  /**
   * This class represents a panel to edit/add/remove CSS media.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
   * @version $Id: CSSMediaPanel.java,v 1.1 2001/10/10 13:42:37 tkormann Exp $
   */
  public class CSSMediaPanel extends JPanel implements ActionMap {
  
      /**
       * The resource file name
       */
      protected final static String RESOURCES =
          "org.apache.batik.util.gui.resources.CSSMediaPanel";
  
      /**
       * The resource bundle
       */
      protected static ResourceBundle bundle;
  
      /**
       * The resource manager
       */
      protected static ResourceManager resources;
  
      static {
          bundle = ResourceBundle.getBundle(RESOURCES, Locale.getDefault());
          resources = new ResourceManager(bundle);
      }
  
      /**
       * The button to remove a CSS medium from the list.
       */
      protected JButton removeButton;
  
      /**
       * The button to add a CSS medium from the list.
       */
      protected JButton addButton;
  
      /**
       * The button to clear the CSS media list.
       */
      protected JButton clearButton;
  
      /**
       * The list that represents the CSS media.
       */
      protected DefaultListModel listModel = new DefaultListModel();
  
      /**
       * The list that represents the CSS media.
       */
      protected JList mediaList;
  
      /**
       * Constructs a new panel to edit CSS media.
       */
      public CSSMediaPanel() {
        super(new GridBagLayout());
  
        listeners.put("AddButtonAction", new AddButtonAction());
        listeners.put("RemoveButtonAction", new RemoveButtonAction());
        listeners.put("ClearButtonAction", new ClearButtonAction());
  
        setBorder(BorderFactory.createTitledBorder
                  (BorderFactory.createEtchedBorder(),
                   resources.getString("Panel.title")));
            
        ExtendedGridBagConstraints constraints =
            new ExtendedGridBagConstraints();
  
        constraints.insets = new Insets(5, 5, 5, 5);
  
        mediaList = new JList();
        mediaList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        mediaList.setModel(listModel);
        mediaList.addListSelectionListener(new MediaListSelectionListener());
        listModel.addListDataListener(new MediaListDataListener());
  
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBorder(BorderFactory.createLoweredBevelBorder());
        constraints.weightx = 1.0;
        constraints.weighty = 1.0;
        constraints.fill = GridBagConstraints.BOTH;
        constraints.setGridBounds(0, 0, 1, 3);
        scrollPane.getViewport().add(mediaList);
        add(scrollPane, constraints);
  
        ButtonFactory bf = new ButtonFactory(bundle, this);
        constraints.weightx = 0;
        constraints.weighty = 0;
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.anchor = GridBagConstraints.NORTH;
  
        addButton = bf.createJButton("AddButton");
        constraints.setGridBounds(1, 0, 1, 1);
        add(addButton, constraints);
  
        removeButton = bf.createJButton("RemoveButton");
        constraints.setGridBounds(1, 1, 1, 1);
        add(removeButton, constraints);
  
        clearButton = bf.createJButton("ClearButton");
        constraints.setGridBounds(1, 2, 1, 1);
        add(clearButton, constraints);
  
        updateButtons();
      }
  
      /**
       * Updates the button states.
       */
      protected void updateButtons() {
        removeButton.setEnabled(!mediaList.isSelectionEmpty());
        clearButton.setEnabled(!listModel.isEmpty());
      }
  
      /**
       * Sets the list of media to edit.
       *
       * @param mediaList the list of media to edit
       */
      public void setMedia(List mediaList) {
        listModel.removeAllElements();
        Iterator iter = mediaList.iterator();
        while (iter.hasNext()) {
            listModel.addElement(iter.next());
        }
      }
  
      /**
       * Sets the list of media to edit to the specified media list (separated by
       * space).
       *
       * @param media the media separated by space 
       */
      public void setMedia(String media) {
        listModel.removeAllElements();
        StringTokenizer tokens = new StringTokenizer(media, " ");
        while (tokens.hasMoreTokens()) {
            listModel.addElement(tokens.nextToken());
        }
      }
      
      /**
       * Returns the list of media.
       */
      public List getMedia() {
        List media = new ArrayList(listModel.size());
        Enumeration enum = listModel.elements();
        while (enum.hasMoreElements()) {
            media.add(enum.nextElement());
        }
        return media;
      }
  
      /**
       * Returns the media list as a string separated by space.
       */
      public String getMediaAsString() {
        StringBuffer buffer = new StringBuffer();
        Enumeration enum = listModel.elements();
        while (enum.hasMoreElements()) {
            buffer.append((String)enum.nextElement());
            buffer.append(" ");
        }
        return buffer.toString();
      }
  
      /**
       * Brings up a modal dialog to edit/add/remove CSS media.
       *
       * @param parent the parent of this dialog
       * @param title the title of this dialog
       */
      public static int showDialog(Component parent, String title) {
        return showDialog(parent, title, "");
      }
  
      /**
       * Brings up a modal dialog to edit/add/remove CSS media.
       *
       * @param parent the parent of this dialog
       * @param title the title of this dialog
       * @param mediaList the list of media
       */
      public static int showDialog(Component parent, 
                                 String title, 
                                 List mediaList) {
        Dialog dialog = new Dialog(parent, title, mediaList);
        dialog.setModal(true);
        dialog.pack();
        dialog.show();
        return dialog.getReturnCode();
      }
  
      /**
       * Brings up a modal dialog to edit/add/remove CSS media.
       *
       * @param parent the parent of this dialog
       * @param title the title of this dialog
       * @param media the list of media
       */
      public static int showDialog(Component parent, 
                                 String title, 
                                 String media) {
        Dialog dialog = new Dialog(parent, title, media);
        dialog.setModal(true);
        dialog.pack();
        dialog.show();
        return dialog.getReturnCode();
      }
  
      /**
       * The map that contains the listeners
       */
      protected Map listeners = new HashMap();
      
      /**
       * Returns the action associated with the given string or null on error
       *
       * @param key the key mapped with the action to get
       * @throws MissingListenerException if the action is not found 
       */
      public Action getAction(String key) throws MissingListenerException {
        return (Action)listeners.get(key);
      }
  
      /**
       * The action associated with the 'Add' button
       */
      protected class AddButtonAction extends AbstractAction {
        public void actionPerformed(ActionEvent e) {
            AddMediumDialog dialog = new AddMediumDialog(CSSMediaPanel.this);
            dialog.pack();
            dialog.show();
  
            if ((dialog.getReturnCode() == AddMediumDialog.CANCEL_OPTION) ||
                (dialog.getMedium() == null)) {
                return;
            }
  
            String medium = dialog.getMedium().trim();;
            if (medium.length() == 0 || listModel.contains(medium)) {
                return;
            }
  
            for (int i = 0; i < listModel.size() && medium != null; ++i) {
                String s = (String)listModel.getElementAt(i);
                int c = medium.compareTo(s);
                if (c == 0) {
                    medium = null;
                } else if (c < 0) {
                    listModel.insertElementAt(medium, i);
                    medium = null;
                }
            }
            if (medium != null) {
                listModel.addElement(medium);
            }
        }
      }
  
      /**
       * The action associated with the 'Remove' button
       */
      protected class RemoveButtonAction extends AbstractAction {
        public void actionPerformed(ActionEvent e) {
            int index = mediaList.getSelectedIndex(); 
            mediaList.clearSelection();
            if (index >= 0) {
                listModel.removeElementAt(index);
            }
        }
      }
  
      /**
       * The action associated with the 'Clear' button
       */
      protected class ClearButtonAction extends AbstractAction {
        public void actionPerformed(ActionEvent e) {
            mediaList.clearSelection();
            listModel.removeAllElements();
        }
      }
  
      /**
       * To manage selection modifications
       */
      protected class MediaListSelectionListener 
        implements ListSelectionListener {
  
        public void valueChanged(ListSelectionEvent e) {
            updateButtons();
        }
      }
  
      /**
       * To manage data modifications in the media list.
       */
      protected class MediaListDataListener implements ListDataListener {
        
        public void contentsChanged(ListDataEvent e) {
            updateButtons();
        }
        
        public void intervalAdded(ListDataEvent e) {
            updateButtons();
        }
        
        public void intervalRemoved(ListDataEvent e) {
            updateButtons();
        }
      }
  
      ///////////////////////////////////////////////////////////////////////////
  
      /**
       * A dialog to add a new CSS medium.
       */
      public static class AddMediumDialog extends JDialog implements ActionMap {
  
        /**
         * The return value if 'OK' is chosen.
         */
        public final static int OK_OPTION = 0;
        
        /**
         * The return value if 'Cancel' is chosen.
         */
        public final static int CANCEL_OPTION = 1;
  
        /**
         * The new medium.
         */
        protected JComboBox medium;
        
        /**
         * The return code.
         */
        protected int returnCode;
  
        /**
         * Constructs a new AddMediumDialog.
         *
         * @param parent the parent of this dialog
         */
        public AddMediumDialog(Component parent) {
            super(JOptionPane.getFrameForComponent(parent),
                  resources.getString("AddMediumDialog.title"));
            setModal(true);
  
            listeners.put("OKButtonAction", new OKButtonAction());
            listeners.put("CancelButtonAction", new CancelButtonAction());
  
            getContentPane().add(createContentPanel(), BorderLayout.CENTER);
            getContentPane().add(createButtonsPanel(), BorderLayout.SOUTH);
        }
  
        /**
         * Returns the medium that might be added or null if any.
         */
        public String getMedium() {
            return (String)medium.getSelectedItem();
        }
  
        /**
         * Returns the panel to enter a new CSS medium.
         */
        protected Component createContentPanel() {
            JPanel panel = new JPanel(new BorderLayout());
            panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
            panel.add(new JLabel(resources.getString("AddMediumDialog.label")),
                      BorderLayout.WEST);
  
            medium = new JComboBox();
            medium.setEditable(true);
            String media = resources.getString("Media.list");
            StringTokenizer tokens = new StringTokenizer(media, " ");
            while (tokens.hasMoreTokens()) {
                medium.addItem(tokens.nextToken());
            }
            panel.add(medium, BorderLayout.CENTER);
            return panel;
        }
  
        /**
         * Returns the button panel.
         */
        protected Component createButtonsPanel() {
            JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
            ButtonFactory bf = new ButtonFactory(bundle, this);
            panel.add(bf.createJButton("OKButton"));
            panel.add(bf.createJButton("CancelButton"));
            return panel;
        }
  
        /**
         * Returns the code that describes how the dialog has been closed (OK or
         * CANCEL).
         */
        public int getReturnCode() {
            return returnCode;
        }
  
        /**
         * The map that contains the listeners
         */
        protected Map listeners = new HashMap();
        
        /**
         * Returns the action associated with the given string or null on error
         *
         * @param key the key mapped with the action to get
         * @throws MissingListenerException if the action is not found 
         */
        public Action getAction(String key) throws MissingListenerException {
            return (Action)listeners.get(key);
        }
  
        /**
         * The action associated with the 'OK' button
         */
        protected class OKButtonAction extends AbstractAction {
            public void actionPerformed(ActionEvent e) {
                returnCode = OK_OPTION;
                dispose();
            }
        }
        
        /**
         * The action associated with the 'Cancel' button
         */
        protected class CancelButtonAction extends AbstractAction {
            public void actionPerformed(ActionEvent e) {
                returnCode = CANCEL_OPTION;
                dispose();
            }
        }
      }
  
      ///////////////////////////////////////////////////////////////////////////
  
      /**
       * A dialog to edit/add/remove CSS media.
       */
      public static class Dialog extends JDialog implements ActionMap {
        
        /**
         * The return value if 'OK' is chosen.
         */
        public final static int OK_OPTION = 0;
        
        /**
         * The return value if 'Cancel' is chosen.
         */
        public final static int CANCEL_OPTION = 1;
        
        /**
         * The return code.
         */
        protected int returnCode;
  
        /**
         * Constructs a new Dialog to edit/add/remove CSS media.
         */
        public Dialog() {
            this(null, "", "");
        }
  
        /**
         * Constructs a new Dialog to edit/add/remove CSS media.
         *
         * @param parent the parent of this dialog
         * @param title the title of this dialog
         * @param mediaList the media list
         */
        public Dialog(Component parent, String title, List mediaList) {
            super(JOptionPane.getFrameForComponent(parent), title);
  
            listeners.put("OKButtonAction", new OKButtonAction());
            listeners.put("CancelButtonAction", new CancelButtonAction());
  
            CSSMediaPanel panel = new CSSMediaPanel();
            panel.setMedia(mediaList);
            getContentPane().add(panel, BorderLayout.CENTER);
            getContentPane().add(createButtonsPanel(), BorderLayout.SOUTH);
        }
  
        /**
         * Constructs a new Dialog to edit/add/remove CSS media.
         *
         * @param parent the parent of this dialog
         * @param title the title of this dialog
         * @param media the media list
         */
        public Dialog(Component parent, String title, String media) {
            super(JOptionPane.getFrameForComponent(parent), title);
  
            listeners.put("OKButtonAction", new OKButtonAction());
            listeners.put("CancelButtonAction", new CancelButtonAction());
  
            CSSMediaPanel panel = new CSSMediaPanel();
            panel.setMedia(media);
            getContentPane().add(panel, BorderLayout.CENTER);
            getContentPane().add(createButtonsPanel(), BorderLayout.SOUTH);
        }
        
        /**
         * Returns the code that describes how the dialog has been closed (OK or
         * CANCEL).
         */
        public int getReturnCode() {
            return returnCode;
        }
        
        /**
         * Creates the OK/Cancel buttons panel
         */
        protected JPanel createButtonsPanel() {
            JPanel  p = new JPanel(new FlowLayout(FlowLayout.RIGHT));
            ButtonFactory bf = new ButtonFactory(bundle, this);
            p.add(bf.createJButton("OKButton"));
            p.add(bf.createJButton("CancelButton"));
            return p;
        }
  
        /**
         * The map that contains the listeners
         */
        protected Map listeners = new HashMap();
        
        /**
         * Returns the action associated with the given string or null on error
         *
         * @param key the key mapped with the action to get
         * @throws MissingListenerException if the action is not found 
         */
        public Action getAction(String key) throws MissingListenerException {
            return (Action)listeners.get(key);
        }
  
        /**
         * The action associated with the 'OK' button
         */
        protected class OKButtonAction extends AbstractAction {
            public void actionPerformed(ActionEvent e) {
                returnCode = OK_OPTION;
                dispose();
            }
        }
        
        /**
         * The action associated with the 'Cancel' button
         */
        protected class CancelButtonAction extends AbstractAction {
            public void actionPerformed(ActionEvent e) {
                returnCode = CANCEL_OPTION;
                dispose();
            }
        }
      }
  
      /**
       * Main - debug -
       */
      public static void main(String [] args) {
        String media = "all aural braille embossed handheld print projection screen 
tty tv";
        int code = CSSMediaPanel.showDialog(null, "Test", media);
        System.out.println(code);
        System.exit(0);
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to