]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/function/compress/CompressionAlgorithm.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / function / compress / CompressionAlgorithm.java
diff --git a/src/tim/prune/function/compress/CompressionAlgorithm.java b/src/tim/prune/function/compress/CompressionAlgorithm.java
new file mode 100644 (file)
index 0000000..2cd5d77
--- /dev/null
@@ -0,0 +1,109 @@
+package tim.prune.function.compress;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+import tim.prune.I18nManager;
+import tim.prune.data.Track;
+
+/**
+ * Abstract class to act as an algorithm for track compression
+ */
+public abstract class CompressionAlgorithm
+{
+       protected JCheckBox _activateCheckBox = null;
+       protected SummaryLabel _summaryLabel = null;
+       protected Track _track = null;
+       protected TrackDetails _trackDetails = null;
+
+
+       /**
+        * Constructor giving Track
+        * @param inTrack track object to use for compression
+        * @param inDetails track details object
+        * @param inListener listener to be informed of activation clicks
+        */
+       public CompressionAlgorithm(Track inTrack, TrackDetails inDetails,
+               ActionListener inListener)
+       {
+               _track = inTrack;
+               _trackDetails = inDetails;
+               _activateCheckBox = new JCheckBox(I18nManager.getText(getTitleTextKey()));
+               _activateCheckBox.setSelected(false);
+               _activateCheckBox.addActionListener(inListener);
+       }
+
+
+       /**
+        * @return true if this algorithm has been activated
+        */
+       public boolean isActivated()
+       {
+               return _activateCheckBox.isSelected();
+       }
+
+
+       /**
+        * @return JPanel containing gui components
+        */
+       public JPanel getGuiComponents()
+       {
+               JPanel panel = new JPanel();
+               panel.setBorder(BorderFactory.createTitledBorder(""));
+               panel.setLayout(new BorderLayout());
+               panel.add(_activateCheckBox, BorderLayout.NORTH);
+               Component specifics = getSpecificGuiComponents();
+               if (specifics != null) {
+                       panel.add(specifics, BorderLayout.CENTER);
+               }
+               // Add label at bottom
+               _summaryLabel = new SummaryLabel(_track);
+               panel.add(_summaryLabel, BorderLayout.SOUTH);
+               return panel;
+       }
+
+       /**
+        * Preview the algorithm by counting the number of points deleted
+        * @param inFlags array of deletion flags from previous algorithms
+        * @return number of points to be deleted by this algorithm
+        */
+       public int preview(boolean[] inFlags)
+       {
+               int numDeleted = 0;
+               if (isActivated())
+               {
+                       // Run the compression and set the deletion flags
+                       _trackDetails.initialise();
+                       numDeleted = compress(inFlags);
+                       _summaryLabel.setValue(numDeleted);
+               }
+               else {
+                       _summaryLabel.clearValue();
+               }
+               return numDeleted;
+       }
+
+
+       /**
+        * @return key to use for title text of algorithm
+        */
+       protected abstract String getTitleTextKey();
+
+       /**
+        * @return gui components controlling algorithm (if any)
+        */
+       protected abstract Component getSpecificGuiComponents();
+
+       /**
+        * Perform the compression and set the results in the given array
+        * @param inFlags deletion flags from previous algorithms
+        * @return number of points deleted by this algorithm
+        */
+       protected abstract int compress(boolean[] inFlags);
+
+}