Ignore:
Timestamp:
2008-10-26T22:33:38+01:00 (16 years ago)
Author:
ramack
Message:

added status bar and new icon

Location:
applications/editors/josm/plugins/globalsat
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatDg100.java

    r10378 r11496  
    33 * @author Stefan Kaintoch, Raphael Mack
    44 * license: GPLv3 or any later version
    5  * @version $Id: GlobalSatDg100.java 3 2007-10-30 19:40:04Z ramack $
    65 */
    76package org.openstreetmap.josm.plugins.globalsat;
     
    2322import org.kaintoch.gps.globalsat.dg100.ByteHelper;
    2423
     24import org.openstreetmap.josm.Main;
    2525import org.openstreetmap.josm.data.gpx.GpxData;
    2626import org.openstreetmap.josm.data.gpx.GpxTrack;
     
    3434public class GlobalsatDg100
    3535{
    36         public class ConnectionException extends Exception{
    37                 ConnectionException(Exception cause){
    38                         super(cause);
    39                 }
    40                 ConnectionException(String msg){
    41                         super(msg);
    42                 }
    43         }
     36    public class ConnectionException extends Exception{
     37        ConnectionException(Exception cause){
     38            super(cause);
     39        }
     40        ConnectionException(String msg){
     41            super(msg);
     42        }
     43    }
    4444
    4545    public static final int TIMEOUT = 2000;
     
    115115    private CommPortIdentifier portIdentifier;
    116116    private SerialPort port = null;
     117
     118    private boolean cancelled = false;
    117119   
    118120    public GlobalsatDg100(CommPortIdentifier portId){
    119121        this.portIdentifier = portId;
     122    }
     123
     124    public void cancel(){
     125        cancelled = true;
    120126    }
    121127
     
    126132    public GpxData readData() throws ConnectionException {
    127133        GpxData result = null;
     134        int cnt = 0;
     135        cancelled = false;
    128136        if(port == null){
    129137            connect();
    130138        }
    131        
     139        Main.pleaseWaitDlg.progress.setValue(0);
     140
    132141        List<FileInfoRec> fileInfoList = readFileInfoList();
    133142        List<GpsRec> gpsRecList = readGpsRecList(fileInfoList);
     143
     144        Main.pleaseWaitDlg.progress.setMaximum(gpsRecList.size());
    134145        if(gpsRecList.size() > 0){
    135146            GpsRec last = null;
     
    140151            trk.trackSegs.add(seg);
    141152            for(GpsRec r:gpsRecList){
     153                if(cancelled){
     154                    return result;
     155                }
    142156                WayPoint p = wayPointFrom(r);
    143157                if(r.equals(last)){
     
    147161                }
    148162                last = r;
     163                Main.pleaseWaitDlg.progress.setValue(cnt++);
    149164            }
    150165        }
     
    243258        int len = sendCmd(src, response, -1);
    244259        return Response.parseResponse(response, len);
     260    }
     261
     262    public boolean isCancelled(){
     263        return cancelled;
    245264    }
    246265
  • applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatImportDialog.java

    r10378 r11496  
    55
    66import java.awt.GridBagLayout;
     7import java.awt.Insets;
     8import java.awt.GridBagConstraints;
    79import java.awt.event.ActionListener;
    810import java.util.ArrayList;
     
    1618import javax.swing.JOptionPane;
    1719import javax.swing.JPanel;
     20import javax.swing.JButton;
    1821import javax.swing.JTabbedPane;
    1922import javax.swing.JComboBox;
     
    4144public class GlobalsatImportDialog extends JPanel {
    4245       
    43         // the JOptionPane that contains this dialog. required for the closeDialog() method.
    44         private JOptionPane optionPane;
    45         private JCheckBox delete;
    46         private JComboBox portCombo;
    47         private List<CommPortIdentifier> ports = new LinkedList<CommPortIdentifier>();
     46    // the JOptionPane that contains this dialog. required for the closeDialog() method.
     47    private JOptionPane optionPane;
     48    private JCheckBox delete;
     49    private JComboBox portCombo;
     50    private List<CommPortIdentifier> ports = new LinkedList<CommPortIdentifier>();
    4851
    49         public GlobalsatImportDialog() {
    50             portCombo = new JComboBox();
    51             portCombo.setRenderer(new ListCellRenderer(){
    52                     public java.awt.Component getListCellRendererComponent(JList list, Object o, int x, boolean a, boolean b){
    53                         return new JLabel(((CommPortIdentifier)o).getName());
     52    public GlobalsatImportDialog() {
     53        GridBagConstraints c = new GridBagConstraints();
     54        JButton refreshBtn, configBtn;
     55
     56        setLayout(new GridBagLayout());
     57
     58        portCombo = new JComboBox();
     59        portCombo.setRenderer(new ListCellRenderer(){
     60                public java.awt.Component getListCellRendererComponent(JList list, Object o, int x, boolean a, boolean b){
     61                    String value = ((CommPortIdentifier)o).getName();
     62                    if(value == null){
     63                        value = "null";
    5464                    }
    55                 });
    56             portCombo.addActionListener(new ActionListener(){
    57                     public void actionPerformed(java.awt.event.ActionEvent e){
    58                         Main.pref.put("globalsat.portIdentifier", ((CommPortIdentifier)portCombo.getSelectedItem()).getName());
     65                    return new JLabel(value);
     66                }
     67            });
     68        portCombo.addActionListener(new ActionListener(){
     69                public void actionPerformed(java.awt.event.ActionEvent e){
     70                    Object i = portCombo.getSelectedItem();
     71                    if(i instanceof CommPortIdentifier){
     72                        Main.pref.put("globalsat.portIdentifier", ((CommPortIdentifier)i).getName());
    5973                    }
    60                 });
    61             refreshPorts();
    62             delete = new JCheckBox(tr("delete data after import"));
    63             delete.setSelected(Main.pref.getBoolean("globalsat.deleteAfterDownload", false));
    64             setLayout(new GridBagLayout());
    65             add(portCombo);
    66             add(delete);
    67         }
     74                }
     75            });
     76
     77        refreshPorts();
     78        c.insets = new Insets(4,4,4,4);
     79        c.gridwidth = 1;
     80        c.weightx = 0.8;
     81        c.fill = GridBagConstraints.HORIZONTAL;
     82        c.gridx = 0;
     83        c.gridy = 0;
     84        add(new JLabel(tr("Port:")), c);
     85
     86        c.gridwidth = 1;
     87        c.gridx = 1;
     88        c.gridy = 0;
     89        c.weightx = 1.5;
     90        add(portCombo, c);
     91
     92        refreshBtn = new JButton(tr("Refresh"));
     93        refreshBtn.addActionListener(new ActionListener(){
     94                public void actionPerformed(java.awt.event.ActionEvent e){
     95                    refreshPorts();
     96                }
     97            });
     98        refreshBtn.setToolTipText(tr("refresh the port list"));
     99        c.gridwidth = 1;
     100        c.weightx = 1.0;
     101        c.fill = GridBagConstraints.HORIZONTAL;
     102        c.gridx = 2;
     103        c.gridy = 0;
     104        add(refreshBtn, c);
     105
     106        configBtn = new JButton(tr("Configure"));
     107        configBtn.addActionListener(new ActionListener(){
     108                public void actionPerformed(java.awt.event.ActionEvent e){
     109                    System.out.println("configureing the device");
     110                }
     111            });
     112        configBtn.setToolTipText(tr("configure the connected DG100"));
     113        c.gridwidth = 1;
     114        c.weightx = 1.0;
     115        c.fill = GridBagConstraints.HORIZONTAL;
     116        c.gridx = 2;
     117        c.gridy = 1;
     118        //        add(configBtn, c);
     119
     120       
     121        delete = new JCheckBox(tr("delete data after import"));
     122        delete.setSelected(Main.pref.getBoolean("globalsat.deleteAfterDownload", false));
     123
     124        c.gridwidth = 3;
     125        c.fill = GridBagConstraints.HORIZONTAL;
     126        c.gridx = 0;
     127        c.gridy = 2;
     128        add(delete, c);
     129    }
    68130
    69131    public void refreshPorts(){
     132        String sel = Main.pref.get("globalsat.portIdentifier");
     133        portCombo.setVisible(false);
    70134        portCombo.removeAllItems();
    71         for(Enumeration e = CommPortIdentifier.getPortIdentifiers(); e.hasMoreElements(); ){
     135
     136        Enumeration e = CommPortIdentifier.getPortIdentifiers();
     137        for(e = CommPortIdentifier.getPortIdentifiers(); e.hasMoreElements(); ){
    72138            CommPortIdentifier port = (CommPortIdentifier)e.nextElement();
    73139            if(port.getPortType() == CommPortIdentifier.PORT_SERIAL){
    74140                portCombo.addItem(port);
     141                if(sel != null && port.getName() == sel){
     142                    portCombo.setSelectedItem(port);
     143                }
    75144            }
    76145        }
    77         portCombo.setSelectedItem(Main.pref.get("globalsat.portIdentifier"));
     146        portCombo.setVisible(true);
    78147    }
    79148       
     
    85154        return (CommPortIdentifier)portCombo.getSelectedItem();
    86155    }
    87         /**
    88         * Has to be called after this dialog has been added to a JOptionPane.
    89         * @param optionPane
    90         */
    91         public void setOptionPane(JOptionPane optionPane) {
    92             this.optionPane = optionPane;
    93         }
     156    /**
     157    * Has to be called after this dialog has been added to a JOptionPane.
     158    * @param optionPane
     159    */
     160    public void setOptionPane(JOptionPane optionPane) {
     161        this.optionPane = optionPane;
     162    }
    94163}
  • applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatPlugin.java

    r10439 r11496  
    22/// @author Raphael Mack <ramack@raphael-mack.de>
    33import static org.openstreetmap.josm.tools.I18n.tr;
     4
     5import java.io.IOException;
     6import org.xml.sax.SAXException;
    47
    58import java.util.Enumeration;
     
    1619import org.openstreetmap.josm.gui.layer.Layer;
    1720import org.openstreetmap.josm.gui.layer.GpxLayer;
     21import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    1822import org.openstreetmap.josm.plugins.Plugin;
    1923import org.openstreetmap.josm.actions.JosmAction;
     
    2327
    2428public class GlobalsatPlugin extends Plugin {
     29
     30    private static class ImportTask extends PleaseWaitRunnable {
     31        public GpxData data;
     32        private GlobalsatDg100 dg100;
     33        public Exception eee;
     34        private boolean deleteAfter;
     35
     36        public ImportTask(GlobalsatDg100 dg100, boolean delete){
     37            super(tr("Importing data from device."));
     38            this.dg100 = dg100;
     39            deleteAfter = delete;
     40        }
     41
     42        @Override public void realRun() throws IOException, SAXException {
     43            Main.pleaseWaitDlg.progress.setValue(0);
     44            Main.pleaseWaitDlg.currentAction.setText(tr("Importing data from DG100..."));
     45            try{
     46                data = dg100.readData();
     47            }catch(Exception e){
     48                eee = e;
     49            }
     50        }
     51
     52        @Override protected void finish() {
     53            if(deleteAfter && dg100.isCancelled() == false){
     54                Main.pref.put("globalsat.deleteAfterDownload", true);
     55                try{
     56                    dg100.deleteData();
     57                }catch(Exception ex){
     58                    JOptionPane.showMessageDialog(Main.parent, tr("Error deleting data.") + " " + ex.toString());
     59                }
     60            }else{
     61                Main.pref.put("globalsat.deleteAfterDownload", false);
     62            }
     63            if(data != null && data.hasTrackPoints()){
     64                Main.main.addLayer(new GpxLayer(data, tr("imported data from {0}", "DG 100")));
     65                Main.map.repaint();
     66            }else{
     67                JOptionPane.showMessageDialog(Main.parent, tr("No data found on device."));
     68            }
     69            if(eee != null){
     70                eee.printStackTrace();
     71                System.out.println(eee.getMessage());
     72                JOptionPane.showMessageDialog(Main.parent, tr("Connection failed.") + " (" + eee.toString() + ")");
     73            }
     74            dg100.disconnect();
     75        }
     76
     77        @Override protected void cancel() {
     78            dg100.cancel();
     79            dg100.disconnect();
     80        }
     81    }
     82
     83
    2584    GlobalsatImportAction importAction;
    2685    public GlobalsatPlugin() {
     
    50109            if(((Integer)pane.getValue()) == JOptionPane.OK_OPTION){
    51110                GlobalsatDg100 dg100 = new GlobalsatDg100(dialog.getPort());
    52                 try{
    53                     GpxData data = dg100.readData();
    54                     if(dialog.deleteFilesAfterDownload()){
    55                         Main.pref.put("globalsat.deleteAfterDownload", true);
    56                         dg100.deleteData();
    57                     }else{
    58                         Main.pref.put("globalsat.deleteAfterDownload", false);
    59                     }
    60                     if(data != null && data.hasTrackPoints()){
    61                         Main.main.addLayer(new GpxLayer(data, tr("imported data from {0}", "DG 100")));
    62                         Main.map.repaint();
    63                     }else{
    64                         JOptionPane.showMessageDialog(Main.parent, tr("No data found on device."));
    65                     }
    66                 }catch(Exception eee){
    67                     eee.printStackTrace();
    68                     System.out.println(eee.getMessage());
    69                     JOptionPane.showMessageDialog(Main.parent, tr("Connection failed.") + " (" + eee.toString() + ")");
    70                 }finally{
    71                     dg100.disconnect();
    72                 }
     111                ImportTask task = new ImportTask(dg100, dialog.deleteFilesAfterDownload());
     112                Main.worker.execute(task);
    73113            }
    74114            dlg.dispose();
Note: See TracChangeset for help on using the changeset viewer.