]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/save/GpxExporter.java
Version 11.2, September 2010
[GpsPrune.git] / tim / prune / save / GpxExporter.java
index 7f75aeb17689397eccef5d1f45ba01a363f4f3c2..8203593b0d6d72387293df350e1366a8ddf097ae 100644 (file)
@@ -6,11 +6,14 @@ import java.awt.FlowLayout;
 import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.nio.charset.Charset;
 
 import javax.swing.BorderFactory;
 import javax.swing.Box;
@@ -129,6 +132,14 @@ public class GpxExporter extends GenericFunction implements Runnable
                mainPanel.add(checkPanel);
                dialogPanel.add(mainPanel, BorderLayout.CENTER);
 
+               // close dialog if escape pressed
+               _nameField.addKeyListener(new KeyAdapter() {
+                       public void keyReleased(KeyEvent e) {
+                               if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+                                       _dialog.dispose();
+                               }
+                       }
+               });
                // button panel at bottom
                JPanel buttonPanel = new JPanel();
                buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
@@ -144,8 +155,7 @@ public class GpxExporter extends GenericFunction implements Runnable
                buttonPanel.add(okButton);
                JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
                cancelButton.addActionListener(new ActionListener() {
-                       public void actionPerformed(ActionEvent e)
-                       {
+                       public void actionPerformed(ActionEvent e) {
                                _dialog.dispose();
                        }
                });
@@ -290,8 +300,9 @@ public class GpxExporter extends GenericFunction implements Runnable
                // Instantiate source file cachers in case we want to copy output
                GpxCacherList gpxCachers = null;
                if (inUseCopy) gpxCachers = new GpxCacherList(inInfo.getFileInfo());
-               // Write or copy header
-               inWriter.write(getHeaderString(gpxCachers));
+               // Write or copy headers
+               inWriter.write(getXmlHeaderString(inWriter));
+               inWriter.write(getGpxHeaderString(gpxCachers));
                // Name field
                String trackName = "PruneTrack";
                if (inName != null && !inName.equals(""))
@@ -303,12 +314,7 @@ public class GpxExporter extends GenericFunction implements Runnable
                }
                // Description field
                inWriter.write("\t<desc>");
-               if (inDesc != null && !inDesc.equals("")) {
-                       inWriter.write(inDesc);
-               }
-               else {
-                       inWriter.write("Export from Prune");
-               }
+               inWriter.write((inDesc != null && !inDesc.equals(""))?inDesc:"Export from Prune");
                inWriter.write("</desc>\n");
 
                int i = 0;
@@ -489,11 +495,26 @@ public class GpxExporter extends GenericFunction implements Runnable
        }
 
        /**
-        * Get the header string for the gpx
+        * Get the header string for the xml document including encoding
+        * @param inWriter writer object
+        * @return header string defining encoding
+        */
+       private static String getXmlHeaderString(OutputStreamWriter inWriter)
+       {
+               String encoding = inWriter.getEncoding();
+               try {
+                       encoding =  Charset.forName(encoding).name();
+               }
+               catch (Exception e) {} // ignore failure to find encoding
+               return "<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>\n";
+       }
+
+       /**
+        * Get the header string for the gpx tag
         * @param inCachers cacher list to ask for headers, if available
         * @return header string from cachers or as default
         */
-       private static String getHeaderString(GpxCacherList inCachers)
+       private static String getGpxHeaderString(GpxCacherList inCachers)
        {
                String gpxHeader = null;
                if (inCachers != null) {gpxHeader = inCachers.getFirstHeader();}
@@ -505,7 +526,7 @@ public class GpxExporter extends GenericFunction implements Runnable
                                + " xmlns=\"http://www.topografix.com/GPX/1/0\""
                                + " xsi:schemaLocation=\"http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd\">\n";
                }
-               return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + gpxHeader + "\n";
+               return gpxHeader + "\n";
        }
 
        /**