Bug 11575 fixed: There was no preview of GIF files in exportUI dialog 74/13174/2
Calixte DENIZET [Mon, 18 Nov 2013 15:29:50 +0000 (16:29 +0100)]
* Improve the preview rendering (images were badly rendered)
* Add PS export

Change-Id: I01055509dbe0f84e1e9be85bf6f5c2ee2e6984c9

scilab/CHANGES_5.5.X
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/filechooser/ExportOptionWindow.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/filechooser/ImagePreview.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/filechooser/SwingScilabExportFileChooser.java

index 2a4d3ea..3a537c1 100644 (file)
@@ -78,6 +78,8 @@ Scilab Bug Fixes
 
 * Bug #11571 fixed - x_mdialog did not let the Look&Feel select the window size.
 
+* Bug #11575 fixed - There was no preview of GIF files in exportUI dialog.
+
 * Bug #11680 fixed - GUI functions in Scilab 5.4.X were much slower than in Scilab 5.3.3.
 
 * Bug #12492 fixed - Exported EPS files were invalid when dash patterns were too long.
index 52db635..745b14d 100644 (file)
@@ -36,6 +36,7 @@ import org.scilab.modules.gui.messagebox.ScilabModalDialog;
 import org.scilab.modules.gui.messagebox.ScilabModalDialog.IconType;
 import org.scilab.modules.gui.tab.SimpleTab;
 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
+import org.scilab.modules.localization.Messages;
 
 /**
  * Window in which we can configure option for the selected format
@@ -43,7 +44,7 @@ import org.scilab.modules.gui.utils.ScilabSwingUtilities;
  * @author Calixte DENIZET
  *
  */
-public class ExportOptionWindow extends JDialog implements ActionListener {
+public class ExportOptionWindow implements ActionListener {
 
     private static final long serialVersionUID = 1L;
 
@@ -71,26 +72,23 @@ public class ExportOptionWindow extends JDialog implements ActionListener {
         parentTab = tab;
         parentWindow = (Window) SwingUtilities.getAncestorOfClass(Window.class, (JComponent) tab);
         optionDialog = new JDialog(parentWindow);
-        optionDialog.setTitle("Option for " + exportData.getExportExtension().toUpperCase() + " format");
+        optionDialog.setTitle(String.format(Messages.gettext("Option for %s format"), exportData.getExportExtension().toUpperCase()));
         optionDialog.setIconImage(new ImageIcon(ScilabSwingUtilities.findIcon("scilab")).getImage());
-        //Center the frame
-        optionDialog.setLocationRelativeTo(parentWindow);
     }
 
     /**
      * Selection between portrait or landscape option
      */
     public void landscapePortraitOption() {
-        portrait = new JRadioButton("Portrait", true);
-        landscape = new JRadioButton("Landscape", false);
+        portrait = new JRadioButton(Messages.gettext("Portrait"), true);
+        landscape = new JRadioButton(Messages.gettext("Landscape"), false);
 
         ButtonGroup bgroup = new ButtonGroup();
         bgroup.add(portrait);
         bgroup.add(landscape);
 
-        confirmOption = new JButton("Confirm");
-        abortOption = new JButton("Abort");
-
+        confirmOption = new JButton(Messages.gettext("Confirm"));
+        abortOption = new JButton(Messages.gettext("Cancel"));
 
         JPanel mainPanel = new JPanel();
         BorderLayout layout = new BorderLayout();
@@ -98,7 +96,7 @@ public class ExportOptionWindow extends JDialog implements ActionListener {
 
         JPanel center = new JPanel();
         center.setLayout(new GridLayout(2, 1));
-        center.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), " Orientation "));
+        center.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), String.format(" %s ", Messages.gettext("Orientation"))));
 
         center.add(portrait);
         center.add(landscape);
@@ -121,10 +119,26 @@ public class ExportOptionWindow extends JDialog implements ActionListener {
 
         optionDialog.setModal(true);
         optionDialog.setResizable(false);
+        optionDialog.setLocationRelativeTo(parentWindow);
         optionDialog.setVisible(true);
     }
 
     /**
+     * Return the file extension
+     * @param fileName Name of the file
+     * @return the extension
+     */
+    public String getExtension(String fileName) {
+        if (fileName != null) {
+            int i = fileName.lastIndexOf('.');
+            if (i > 0 && i < fileName.length() - 1) {
+                return fileName.substring(i + 1).toLowerCase();
+            }
+        }
+        return null;
+    }
+
+    /**
      * Action manager
      * @param evt ActionEvent
      */
@@ -135,15 +149,21 @@ public class ExportOptionWindow extends JDialog implements ActionListener {
 
         if (evt.getSource() == confirmOption) {
             if (b) {
-                properties.add(portrait.getText().toLowerCase());
+                properties.add("portrait");
             } else {
-                properties.add(landscape.getText().toLowerCase());
+                properties.add("landscape");
             }
             exportData.setExportProperties(properties);
             optionDialog.dispose();
 
             Integer figId = exportData.getFigureId();
             String fileName = exportData.getExportName();
+            if (this.getExtension(fileName) == null) {
+                // Could not get the extension from the user input
+                // take the one from the list
+                fileName += "." + exportData.getExportExtension();
+            }
+
             int orientation = exportData.getExportProperties().elementAt(0).equalsIgnoreCase("landscape") ? ExportParams.LANDSCAPE : ExportParams.PORTRAIT;
 
             parentWindow.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
@@ -151,7 +171,7 @@ public class ExportOptionWindow extends JDialog implements ActionListener {
             parentWindow.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 
             if (err.length() != 0) {
-                ScilabModalDialog.show(parentTab, "An error occurred during export: " + err, "Export error", IconType.ERROR_ICON);
+                ScilabModalDialog.show(parentTab, String.format(Messages.gettext("An error occurred during export: %s"), err), Messages.gettext("Export error"), IconType.ERROR_ICON);
             }
         }
 
index b38d9fa..9349ec3 100644 (file)
@@ -31,22 +31,31 @@ package org.scilab.modules.gui.bridge.filechooser;
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
-
-import javax.swing.*;
-import java.beans.*;
-import java.awt.*;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.File;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+import javax.swing.ImageIcon;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
 
 /* ImagePreview.java by FileChooserDemo2.java. */
 @SuppressWarnings(value = { "serial" })
-public class ImagePreview extends JComponent
-    implements PropertyChangeListener {
+public class ImagePreview extends JComponent implements PropertyChangeListener {
+
     ImageIcon thumbnail = null;
     File file = null;
+    JFileChooser fc;
 
     public ImagePreview(JFileChooser fc) {
-        setPreferredSize(new Dimension(200, 200));
+        this.fc = fc;
+        setPreferredSize(new Dimension(250, 200));
         fc.addPropertyChangeListener(this);
     }
 
@@ -59,12 +68,17 @@ public class ImagePreview extends JComponent
         //Don't use createImageIcon (which is a wrapper for getResource)
         //because the image we're trying to load is probably not one
         //of this program's own resources.
-        ImageIcon tmpIcon = new ImageIcon(file.getPath());
+        ImageIcon tmpIcon = null;
+        try {
+            BufferedImage img = ImageIO.read(new File(file.getPath()));
+            if (img != null) {
+                tmpIcon = new ImageIcon(img);
+            }
+        } catch (IOException e) { }
+
         if (tmpIcon != null) {
-            if (tmpIcon.getIconWidth() > 150) {
-                thumbnail = new ImageIcon(tmpIcon.getImage().
-                                          getScaledInstance(150, -1,
-                                                  Image.SCALE_DEFAULT));
+            if (tmpIcon.getIconWidth() > 230) {
+                thumbnail = new ImageIcon(tmpIcon.getImage().getScaledInstance(230, -1, Image.SCALE_SMOOTH));
             } else { //no need to miniaturize
                 thumbnail = tmpIcon;
             }
@@ -79,11 +93,13 @@ public class ImagePreview extends JComponent
         if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
             file = null;
             update = true;
-
-            //If a file became selected, find out which one.
         } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
             file = (File) e.getNewValue();
             update = true;
+        } else if (JFileChooser.FILE_FILTER_CHANGED_PROPERTY.equals(prop)) {
+            // Crappy workaround to clear the selection when the filter has changed
+            fc.setMultiSelectionEnabled(true);
+            fc.setMultiSelectionEnabled(false);
         }
 
         //Update the preview accordingly.
index c62749e..6403802 100644 (file)
@@ -50,6 +50,7 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
     private final String ppmDesc = Messages.gettext("PPM image");
     private final String emfDesc = Messages.gettext("Enhanced Metafile image (EMF)");
     private final String epsDesc = Messages.gettext("Encapsulated PostScript image (EPS)");
+    private final String psDesc = Messages.gettext("PostScript image (PS)");
     private final String figDesc = Messages.gettext("FIG image");
     private final String pdfDesc = Messages.gettext("PDF image");
     private final String svgDesc = Messages.gettext("SVG image");
@@ -62,6 +63,7 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
     private final String ppm = "ppm";
     private final String emf = "emf";
     private final String eps = "eps";
+    private final String ps = "ps";
     private final String fig = "fig";
     private final String pdf = "pdf";
     private final String svg = "svg";
@@ -93,6 +95,7 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
         v.add(new FileMask(png, pngDesc));
         v.add(new FileMask(jpg, jpgDesc));
         v.add(new FileMask(eps, epsDesc));
+        v.add(new FileMask(ps, psDesc));
         v.add(new FileMask(pdf, pdfDesc));
         v.add(new FileMask(svg, svgDesc));
         v.add(new FileMask(emf, emfDesc));
@@ -141,20 +144,17 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
         Window parentWindow = (Window) SwingUtilities.getAncestorOfClass(Window.class, c);
 
         int selection = super.showSaveDialog(parentWindow);
-        if (selection == JFileChooser.APPROVE_OPTION) {
-
+        if (selection == JFileChooser.APPROVE_OPTION && super.getSelectedFile() != null) {
             this.exportName = super.getSelectedFile().getAbsolutePath();
 
             //Test if there is a file with the same name
             if (new File(this.exportName).exists()) {
                 int actionDialog = JOptionPane.showConfirmDialog(
-                                       this, Messages.gettext("Replace existing file?"),
+                                       parentWindow, Messages.gettext("Replace existing file?"),
                                        Messages.gettext("File already exists"),
                                        JOptionPane.YES_NO_OPTION);
 
-                if (actionDialog == JOptionPane.YES_OPTION) {
-
-                } else {
+                if (actionDialog != JOptionPane.YES_OPTION) {
                     return;
                 }
             }
@@ -180,10 +180,8 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
 
             if (extensionCombo.equals(allFiles)) {
                 exportManager();
-            } else if (extensionCombo.equals(emf) || extensionCombo.equals(eps) || extensionCombo.equals(fig)
-                       || extensionCombo.equals(pdf) || extensionCombo.equals(svg)) {
+            } else if (extensionCombo.equals(emf) || extensionCombo.equals(eps) || extensionCombo.equals(ps) || extensionCombo.equals(fig) || extensionCombo.equals(pdf) || extensionCombo.equals(svg)) {
                 vectorialExport(extensionCombo);
-
             } else {
                 bitmapExport(extensionCombo);
             }
@@ -253,9 +251,7 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
         } else {
             //fileName with a wrong extension + "by extension (.*)" selected
             JOptionPane.showMessageDialog(
-                this, Messages.gettext("Unrecognized extension '")
-                + userExtension + Messages.gettext("'.\n Please specify a valid file format."),
-                Messages.gettext("Error on export"), JOptionPane.ERROR_MESSAGE);
+                this, String.format(Messages.gettext("Unrecognized extension '%s'.\n Please specify a valid file format."), userExtension), Messages.gettext("Error on export"), JOptionPane.ERROR_MESSAGE);
             return;
         }
     }
@@ -282,16 +278,12 @@ public class SwingScilabExportFileChooser extends SwingScilabFileChooser {
      * @param userExtension extension caught by the user
      */
     public void vectorialExport(String userExtension) {
+        SwingScilabTab tab = (SwingScilabTab) SwingView.getFromId(figureUID);
         Component c = DrawerVisitor.getVisitor(figureUID).getComponent();
         ExportData exportData = new ExportData(figureUID, this.exportName, userExtension, null);
 
-        String actualFilename = exportData.getExportName();
-        if (this.getExtension(actualFilename) == null) {
-            // Could not get the extension from the user input
-            // take the one from the list
-            actualFilename += "." + userExtension;
-        }
-
-        FileExporter.fileExport(figureUID, actualFilename, exportData.getExportExtension(), -1, 0);
+        ExportOptionWindow exportOptionWindow = new ExportOptionWindow(exportData);
+        exportOptionWindow.displayOptionWindow(tab);
+        exportOptionWindow.landscapePortraitOption();
     }
 }