]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/function/compress/CompressTrackFunction.java
Version 17, September 2014
[GpsPrune.git] / tim / prune / function / compress / CompressTrackFunction.java
index 35ff61da1ea3b73cd7618315d73af34647096a32..8e89360d7f79ba820f2743a001e319a42dd99a6c 100644 (file)
@@ -11,10 +11,10 @@ import javax.swing.Box;
 import javax.swing.BoxLayout;
 import javax.swing.JButton;
 import javax.swing.JDialog;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 
 import tim.prune.App;
-import tim.prune.GenericFunction;
 import tim.prune.I18nManager;
 import tim.prune.UpdateMessageBroker;
 import tim.prune.data.DataPoint;
@@ -23,7 +23,7 @@ import tim.prune.data.Track;
 /**
  * Class to provide the function for track compression
  */
-public class CompressTrackFunction extends GenericFunction
+public class CompressTrackFunction extends MarkAndDeleteFunction
 {
        private Track _track = null;
        private JDialog _dialog = null;
@@ -156,7 +156,8 @@ public class CompressTrackFunction extends GenericFunction
                        new DuplicatePointAlgorithm(_track, details, changeListener),
                        new ClosePointsAlgorithm(_track, details, changeListener),
                        new WackyPointAlgorithm(_track, details, changeListener),
-                       new SingletonAlgorithm(_track, details, changeListener)
+                       new SingletonAlgorithm(_track, details, changeListener),
+                       new DouglasPeuckerAlgorithm(_track, details, changeListener)
                };
        }
 
@@ -168,14 +169,27 @@ public class CompressTrackFunction extends GenericFunction
        {
                boolean[] deleteFlags = preview();
                // All flags are now combined in deleteFlags array
+               int numMarked = 0;
                for (int i=0; i<deleteFlags.length; i++)
                {
                        DataPoint point = _track.getPoint(i);
-                       point.setMarkedForDeletion(deleteFlags[i] && point.getPhoto() == null);
+                       boolean deletePoint = deleteFlags[i] && !point.hasMedia();
+                       point.setMarkedForDeletion(deletePoint);
+                       if (deletePoint) numMarked++;
                }
 
                // Close dialog and inform listeners
                UpdateMessageBroker.informSubscribers();
                _dialog.dispose();
+               // Show confirmation dialog with OK button (not status bar message)
+               if (numMarked > 0)
+               {
+                       optionallyDeleteMarkedPoints(numMarked);
+               }
+               else
+               {
+                       JOptionPane.showMessageDialog(_parentFrame, I18nManager.getText("dialog.compress.confirmnone"),
+                               I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE);
+               }
        }
 }