Browse Source

Adds Labels and a logarithmic Scale to the SpeedSlider

Speed is now defined as Calculations per Second, it is possible to
Calculate 1 to 64 Steps per Second(or 1024ms, so we can shift a single
bit)
Andreas T. Meyer-Berg 6 years ago
parent
commit
6d2551e6ac
1 changed files with 29 additions and 6 deletions
  1. 29 6
      src/ui/view/TimePanel.java

+ 29 - 6
src/ui/view/TimePanel.java

@@ -7,8 +7,10 @@ import javax.swing.*;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.plaf.basic.BasicSliderUI;
+
 import java.awt.*;
 import java.awt.event.*;
+import java.util.Hashtable;
 
 /**
  * This Class represents a Panel where the User can start and stop the
@@ -205,17 +207,38 @@ public class TimePanel extends JPanel {
 		speedPanel.add(speedSlider);
 		speedSlider.setPaintTicks(true);
 		speedSlider.setPaintLabels(true);
-		speedSlider.setMaximum(5000);
-		speedSlider.setMinimum(500);
-		speedSlider.setValue(1000);
-		// speedSlider.setMajorTickSpacing(100);
+		speedSlider.setMaximum(6);
+		speedSlider.setMinimum(0);
+		speedSlider.setValue(1);
+		
+		speedSlider.setPaintLabels(true);
+		Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel>();
+		table.put (0, new JLabel("1x"));
+		table.put (1, new JLabel("2x"));
+		table.put (2, new JLabel("4x"));
+		table.put (3, new JLabel("8x"));
+		table.put (4, new JLabel("16x"));
+		table.put (5, new JLabel("32x"));
+		table.put (6, new JLabel("64x"));
+		    
+		speedSlider.setLabelTable(table);
+		
 		speedSlider.addChangeListener(new ChangeListener() {
 			@Override
 			public void stateChanged(ChangeEvent e) {
-				controller.setTimerSpeed(speedSlider.getValue());
-				speedSlider.setToolTipText("Speed: " + speedSlider.getValue());
+				/**
+				 * Shifting Powers of two:
+				 * e.g. 1<<0 -> 1 step per Second
+				 *      1<<3 -> 8 steps per Second
+				 *      and so on,
+				 */
+				int calculationsPerSecond = 1 << speedSlider.getValue();
+				controller.setTimerSpeed(1024 >> speedSlider.getValue());
+				speedSlider.setToolTipText("Speed: " + calculationsPerSecond + " Calculations per Second.");
 			}
 		});
+		
+		speedSlider.setToolTipText("Change the Number of Calculations per Secons");
 
 		// Buttons and Speed Panel
 		btnAndSpeedPanel.setLayout(new BorderLayout(0, 0));