file dialogs

Olivier POTONNIEE <[email protected]> Fri, 09 Jan 2004 17:47:43 +0100
Newsgroups gmane.editors.pollo.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------020907060801070506040305
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hello again

Sorry to overload you, Bruno, but I made another modification, maybe more controversial: I replaced JFileChoosers by FileDialogs for Open, Save as, Open Shema, open display spec and save JPG dialogs. My motivation was that JFileChooser are really not friendly, on Windows at least. FileDialog is a native window, which is faster and provides file name auto-completion. The latter makes a huge usuability difference. I agree this is not a important change, and one might even consider it a regression (awt vs swing).

FYI, here are a few modifications I would consider usefull for the next Pollo release:
- Print tree/node
- Preferences : look&feel, default folders for documents/jpg, schemas, 
		and display-specs
- Real-time validation (after each modification)
- automatic proposal of valid ket-ref values (based on their XPath def)

Do you plan to continue development on this project, or is it in maintenance mode ?

Have a nice week-end

--
Olivier


--------------020907060801070506040305
Content-Type: text/plain;
 name="filedialog.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="filedialog.diff"

diff U3B C:\DevTools\pollo-0.4-src\src\org\outerj\pollo\action\FileOpenAction.java C:\DevTools\pollo-0.4-src\src.orig\org\outerj\pollo\action\FileOpenAction.java
--- C:\DevTools\pollo-0.4-src\src\org\outerj\pollo\action\FileOpenAction.java	Thu Jan 01 01:00:00 1970
+++ C:\DevTools\pollo-0.4-src\src.orig\org\outerj\pollo\action\FileOpenAction.java	Thu Jan 01 01:00:00 1970
@@ -2,11 +2,12 @@
 
 import org.outerj.pollo.Pollo;
 import org.outerj.pollo.PolloFrame;
+import org.outerj.pollo.util.ExtensionFileFilter;
 import org.outerj.pollo.util.ResourceManager;
 
 import javax.swing.*;
+import javax.swing.filechooser.FileFilter;
 import java.awt.event.ActionEvent;
-import java.awt.FileDialog;
 import java.io.File;
 
 public class FileOpenAction extends AbstractAction
@@ -28,16 +29,24 @@
     {
         String defaultPath = pollo.getConfiguration().getFileOpenDialogPath();
 
-        FileDialog chooser = new FileDialog(polloFrame, "Open file", FileDialog.LOAD);
-        if (defaultPath != null) {
-          chooser.setDirectory(defaultPath);
-        }
-
-        chooser.show();
-        String filename = chooser.getFile();
-        if (filename != null) {
-            String dir = chooser.getDirectory();
-            File selectedFile = new File(dir, filename);
+        JFileChooser chooser = null;
+        if (defaultPath == null)
+            chooser = new JFileChooser();
+        else
+            chooser = new JFileChooser(new File(defaultPath));
+
+        FileFilter defaultFilter = chooser.getFileFilter();
+        ExtensionFileFilter filter1 = new ExtensionFileFilter(".xml", "XML files (*.xml)");
+        chooser.addChoosableFileFilter(filter1);
+        ExtensionFileFilter filter2 = new ExtensionFileFilter(".xmap", "Cocoon Sitemap files (*.xmap)");
+        chooser.addChoosableFileFilter(filter2);
+
+        chooser.setFileFilter(defaultFilter);
+
+        int returnVal = chooser.showOpenDialog(polloFrame);
+        if(returnVal == JFileChooser.APPROVE_OPTION)
+        {
+            File selectedFile = chooser.getSelectedFile();
             pollo.getConfiguration().setFileOpenDialogPath(selectedFile.getPath());
             pollo.openFile(selectedFile, polloFrame);
         }
diff U3B C:\DevTools\pollo-0.4-src\src\org\outerj\pollo\gui\ViewTypesDialog.java C:\DevTools\pollo-0.4-src\src.orig\org\outerj\pollo\gui\ViewTypesDialog.java
--- C:\DevTools\pollo-0.4-src\src\org\outerj\pollo\gui\ViewTypesDialog.java	Thu Jan 01 01:00:00 1970
+++ C:\DevTools\pollo-0.4-src\src.orig\org\outerj\pollo\gui\ViewTypesDialog.java	Thu Jan 01 01:00:00 1970
@@ -1,16 +1,9 @@
 package org.outerj.pollo.gui;
 
 import org.outerj.pollo.Pollo;
-import org.outerj.pollo.PolloFrame;
 import org.outerj.pollo.xmleditor.displayspec.IDisplaySpecification;
-import org.outerj.pollo.xmleditor.model.XmlModel;
 import org.outerj.pollo.config.*;
 
-import org.w3c.dom.*;
-
-import com.sun.msv.relaxns.reader.TopLevelState;
-import com.sun.rsasign.t;
-
 import javax.swing.*;
 import javax.swing.border.BevelBorder;
 import javax.swing.border.Border;
@@ -18,7 +11,6 @@
 import java.awt.*;
 import java.awt.event.*;
 import java.io.File;
-import java.util.StringTokenizer;
 
 /**
  * A dialog from which the user can select a viewtype.
@@ -56,9 +48,8 @@
     protected JRadioButton forcePolloTreetype;
     protected JRadioButton forceClassicTreetype;
 
-    protected FileDialog schemaChooser;
-    protected FileDialog displaySpecChooser;
-    protected JButton okButton;
+    protected JFileChooser schemaChooser;
+    protected JFileChooser displaySpecChooser;
 
     public static ViewTypesDialog getInstance()
     {
@@ -232,6 +223,7 @@
 
         Box box6 = new Box(BoxLayout.X_AXIS);
         genericRandomColors = new JRadioButton("Generic with random assignment of element colors");
+        genericRandomColors.setSelected(true);
         genericRandomColors.setActionCommand("display-spec-option-changed");
         genericRandomColors.addActionListener(this);
         displaySpecGroup.add(genericRandomColors);
@@ -272,14 +264,17 @@
         polloTree = new JRadioButton("Pollo tree");
         treeTypeGroup.add(polloTree);
         box9.add(polloTree);
-        polloTree.setSelected(false);
+        polloTree.setSelected(true);
         classicTree = new JRadioButton("Classic tree");
         treeTypeGroup.add(classicTree);
-        classicTree.setSelected(true);
         box9.add(classicTree);
         box9.add(Box.createHorizontalGlue());
         displaySpecVertBox.add(box9);
 
+        colorSelectButton.setEnabled(false);
+        basicDisplaySpecFileField.setEnabled(false);
+        basicDisplaySpecBrowseButton.setEnabled(false);
+
         // make displaySpecPanel height fixed
         Dimension displaySpecPanelDimension = displaySpecPanel.getPreferredSize();
         displaySpecPanelDimension.width = Integer.MAX_VALUE;
@@ -289,7 +284,7 @@
         add(verticalBox, BorderLayout.CENTER);
 
 
-        okButton = new JButton("Okay");
+        JButton okButton = new JButton("Okay");
         okButton.setActionCommand("ok");
         okButton.addActionListener(this);
 
@@ -306,11 +301,6 @@
 
         enableSelectCustom(false);
         enableSelectPredefined(true);
-        
-        genericRandomColors.setSelected(true);
-        colorSelectButton.setEnabled(false);
-        basicDisplaySpecFileField.setEnabled(false);
-        basicDisplaySpecBrowseButton.setEnabled(false);
 
     }
 
@@ -350,20 +340,18 @@
             PolloConfiguration polloConfiguration = Pollo.getInstance().getConfiguration();
             if (schemaChooser == null)
             {
-                java.util.List polloFrames = Pollo.getInstance().getOpenFrames();
-                schemaChooser = new FileDialog((PolloFrame)polloFrames.get(0),
-                                   "Choose a schema",
-                                   FileDialog.LOAD);
+                schemaChooser = new JFileChooser();
+                schemaChooser.setDialogTitle("Choose a schema");
                 String schemaCurrentDir = polloConfiguration.getSchemaOpenDialogPath();
                 if (schemaCurrentDir != null)
-                    schemaChooser.setDirectory(schemaCurrentDir);
+                    schemaChooser.setCurrentDirectory(new File(schemaCurrentDir));
+                schemaChooser.setDialogType(JFileChooser.OPEN_DIALOG);
             }
 
-            schemaChooser.show();
-            String filename = schemaChooser.getFile();
-            if (filename != null)
+            int returnVal = schemaChooser.showOpenDialog(getTopLevelAncestor());
+            if (returnVal == JFileChooser.APPROVE_OPTION)
             {
-                String path = schemaChooser.getDirectory()+filename;
+                String path = schemaChooser.getSelectedFile().getAbsolutePath();
                 schemaFileCombo.getEditor().setItem(path);
                 polloConfiguration.setSchemaOpenDialogPath(path);
             }
@@ -372,17 +360,15 @@
         {
             if (displaySpecChooser == null)
             {
-                java.util.List polloFrames = Pollo.getInstance().getOpenFrames();
-                displaySpecChooser = new FileDialog((PolloFrame)polloFrames.get(0),
-                                            "Choose a display specification",
-                                            FileDialog.LOAD );
+                displaySpecChooser = new JFileChooser();
+                displaySpecChooser.setDialogTitle("Choose a display specification");
+                displaySpecChooser.setDialogType(JFileChooser.OPEN_DIALOG);
             }
 
-            displaySpecChooser.show();
-            String filename = displaySpecChooser.getFile();
-            if (filename != null)
+            int returnVal = displaySpecChooser.showOpenDialog(getTopLevelAncestor());
+            if (returnVal == JFileChooser.APPROVE_OPTION)
             {
-                String path = displaySpecChooser.getDirectory()+filename;
+                String path = displaySpecChooser.getSelectedFile().getAbsolutePath();
                 basicDisplaySpecFileField.setText(path);
             }
         }
@@ -437,11 +423,11 @@
         displaySpecPanel.setEnabled(enabled);
         genericRandomColors.setEnabled(enabled);
         genericFixedColor.setEnabled(enabled);
-        colorSelectButton.setEnabled(genericFixedColor.isSelected());
+        colorSelectButton.setEnabled(enabled);
         polloButton.setEnabled(enabled);
         basicDisplaySpec.setEnabled(enabled);
-        basicDisplaySpecFileField.setEnabled(basicDisplaySpec.isSelected());
-        basicDisplaySpecBrowseButton.setEnabled(basicDisplaySpec.isSelected());
+        basicDisplaySpecFileField.setEnabled(enabled);
+        basicDisplaySpecBrowseButton.setEnabled(enabled);
         polloTree.setEnabled(enabled);
         classicTree.setEnabled(enabled);
     }
@@ -449,45 +435,12 @@
     /**
      * @return true if the user selected ok, otherwise false
      */
-    public boolean showDialog(Frame parent, XmlModel xmlModel)
+    public boolean showDialog(Frame parent)
     {
-        // OP: if document has a schema, select it by default
-        boolean hasSchema = false;
-        String schemaloc = null;
-        Document doc = xmlModel.getDocument();
-        NamedNodeMap attrs = doc.getDocumentElement().getAttributes();
-        try {
-          Node locattr = attrs.getNamedItem("xsi:noNamespaceSchemaLocation");
-          schemaloc = locattr.getNodeValue();
-          hasSchema = true;
-        } catch (Exception e1) {
-          try {
-            Node locattr = attrs.getNamedItem("xsi:schemaLocation");
-            String nslocpair = locattr.getNodeValue();
-            StringTokenizer tokens = new StringTokenizer(nslocpair, " ");  
-            tokens.nextToken();
-            schemaloc = tokens.nextToken();
-            hasSchema = true;
-          } catch (Exception e2) {
-            // no schema, forget it
-          }
-        }
-        
         JDialog dialog = new JDialog(parent, "Select View Type");
         dialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { ok = false; }});
         dialog.setModal(true);
         dialog.setContentPane(this);
-
-        if (hasSchema) {
-          //predefinedViewTypeButton.setSelected(false);
-          enableSelectPredefined(false);
-          customViewTypeButton.setSelected(true);
-          autodetectSchemaButton.setSelected(true);
-          enableSelectCustom(true);
-          schemaFileCombo.getEditor().setItem(schemaloc);
-          getRootPane().setDefaultButton(okButton);
-        }
-
         dialog.pack();
         dialog.setLocationRelativeTo(parent);
         dialog.setVisible(true);
diff U3B C:\DevTools\pollo-0.4-src\src\org\outerj\pollo\xmleditor\action\RenderViewToFileAction.java C:\DevTools\pollo-0.4-src\src.orig\org\outerj\pollo\xmleditor\action\RenderViewToFileAction.java
--- C:\DevTools\pollo-0.4-src\src\org\outerj\pollo\xmleditor\action\RenderViewToFileAction.java	Thu Jan 01 01:00:00 1970
+++ C:\DevTools\pollo-0.4-src\src.orig\org\outerj\pollo\xmleditor\action\RenderViewToFileAction.java	Thu Jan 01 01:00:00 1970
@@ -12,11 +12,9 @@
 import java.awt.event.ActionEvent;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
-import java.awt.FileDialog;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
-import java.nio.channels.FileChannel;
 
 /**
  * An action that renders the selected view to an image and
@@ -26,7 +24,7 @@
  */
 public class RenderViewToFileAction extends AbstractNodeAction
 {
-    protected FileDialog fileChooser;
+    protected JFileChooser fileChooser;
     protected static final ResourceManager resourceManager = ResourceManager.getManager(RenderViewToFileAction.class);
 
     public RenderViewToFileAction(XmlEditor xmlEditor)
@@ -70,15 +68,13 @@
             selectedView.paint(gr, 0, 0);
 
             // ask user for a filename
-            if (fileChooser == null) {
-                fileChooser = new FileDialog( (Frame)xmlEditor.getTopLevelAncestor(), "Save JPG image", FileDialog.SAVE);
-            }
-            fileChooser.show();
-            String filename = fileChooser.getFile();
-            if (filename == null)
+            if (fileChooser == null)
+                fileChooser = new JFileChooser();
+            int returnVal = fileChooser.showSaveDialog(xmlEditor.getTopLevelAncestor());
+            if(returnVal != JFileChooser.APPROVE_OPTION)
                 return;
 
-            File file = new File(fileChooser.getDirectory(), filename);
+            File file = fileChooser.getSelectedFile();
             
             // save it as a jpeg (png would be better but not supported by jdk 1.3)
             OutputStream ostream = null;

--------------020907060801070506040305--



-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html