Quellcode durchsuchen

Made speed profiles editable

frans vor 8 Jahren
Ursprung
Commit
8db18eca0f

+ 23 - 7
src/main/java/eu/tankernn/grid/FanSpeedProfile.java

@@ -6,29 +6,45 @@ public class FanSpeedProfile {
 	public static final int STEPS = 5;
 	public static final double MAX_TEMP = 80, MIN_TEMP = 30, STEP_SIZE = (MAX_TEMP - MIN_TEMP) / (double) STEPS;
 
-	public final String name;
-	public final int[] percentages;
+	private String name;
+	private int[] percentages;
 
 	public FanSpeedProfile(String name, int[] percentages) {
-		this.name = name;
-		this.percentages = percentages;
+		this.setName(name);
+		this.setPercentages(percentages);
 	}
 
 	public int getSpeedPercentage(double temp) {
 		double currentTemp = MIN_TEMP;
 
-		for (int i : percentages) {
+		for (int i : getPercentages()) {
 			if (temp < currentTemp) {
 				return i;
 			}
 			currentTemp += STEP_SIZE;
 		}
 
-		return percentages[percentages.length - 1];
+		return getPercentages()[getPercentages().length - 1];
 	}
 
 	@Override
 	public String toString() {
-		return name + ": " + Arrays.toString(percentages);
+		return getName() + ": " + Arrays.toString(getPercentages());
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int[] getPercentages() {
+		return percentages;
+	}
+
+	public void setPercentages(int[] percentages) {
+		this.percentages = percentages;
 	}
 }

+ 1 - 1
src/main/java/eu/tankernn/grid/GridControl.java

@@ -120,7 +120,7 @@ public class GridControl implements Runnable {
 		// Save misc. settings
 		try (Writer writer = new FileWriter(SETTINGS_PATH)) {
 			gson.toJson(new Settings(model.getGrid().getCommunicator().getPortName(),
-					model.getGrid().fanStream().map(f -> f.getProfile().name).toArray(String[]::new), pollingSpeed,
+					model.getGrid().fanStream().map(f -> f.getProfile().getName()).toArray(String[]::new), pollingSpeed,
 					model.getMinSpeed(), this.startMinimized), writer);
 		} catch (IOException e) {
 			e.printStackTrace();

+ 28 - 9
src/main/java/eu/tankernn/grid/frame/GridControlPanel.java

@@ -5,6 +5,7 @@ import java.awt.FlowLayout;
 import java.awt.GridLayout;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
 import java.text.DecimalFormat;
 import java.util.Arrays;
 
@@ -17,7 +18,9 @@ import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
+import javax.swing.JSeparator;
 import javax.swing.JSpinner;
+import javax.swing.KeyStroke;
 import javax.swing.SpinnerNumberModel;
 import javax.swing.border.TitledBorder;
 import javax.swing.event.ChangeEvent;
@@ -38,8 +41,9 @@ public class GridControlPanel extends JFrame {
 	private JMenuBar menuBar = new JMenuBar();
 	private JMenu fileMenu = new JMenu("File"), settingsMenu = new JMenu("Settings"),
 			profileMenu = new JMenu("Profiles");
-	private JMenuItem saveSettings = new JMenuItem("Save settings..."), exit = new JMenuItem("Exit"),
-			sensorConf = new JMenuItem("Configure sensors..."), startMinimized = new JCheckBoxMenuItem("Start minimized"), addProfile = new JMenuItem("Add profile...");
+	private JMenuItem saveSettings = new JMenuItem("Save settings", KeyEvent.VK_S),
+			exit = new JMenuItem("Exit", KeyEvent.VK_E), sensorConf = new JMenuItem("Configure sensors..."),
+			startMinimized = new JCheckBoxMenuItem("Start minimized"), addProfile = new JMenuItem("Add profile...");
 
 	private FanPanel[] fanPanels;
 	private JPanel serialPanel = new JPanel(), gridPanel = new JPanel(), infoPanel = new JPanel();
@@ -74,6 +78,7 @@ public class GridControlPanel extends JFrame {
 		exit.addActionListener(a -> control.exit());
 		fileMenu.add(saveSettings);
 		saveSettings.addActionListener(e -> control.saveSettings());
+		saveSettings.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK));
 		menuBar.add(settingsMenu);
 		settingsMenu.add(sensorConf);
 		sensorConf.addActionListener(e -> new SensorConfig(model.getSensor()));
@@ -81,13 +86,7 @@ public class GridControlPanel extends JFrame {
 		startMinimized.addActionListener(e -> control.setStartMinimized(startMinimized.isEnabled()));
 		menuBar.add(profileMenu);
 		profileMenu.add(addProfile);
-		addProfile.addActionListener(e -> {
-			FanSpeedProfile p = new ProfileEditor().editProfile(null);
-			if (p != null) {
-				model.addProfile(p);
-				Arrays.stream(fanPanels).forEach(f -> f.addProfile(p));
-			}
-		});
+		addProfile.addActionListener(e -> addProfile());
 
 		this.setJMenuBar(this.menuBar);
 
@@ -132,6 +131,26 @@ public class GridControlPanel extends JFrame {
 		this.setTitle("JavaGridControl");
 	}
 
+	private void addProfile() {
+		FanSpeedProfile profile = new ProfileEditor().editProfile(null);
+		if (profile != null) {
+			model.addProfile(profile);
+			Arrays.stream(fanPanels).forEach(f -> f.addProfile(profile));
+			profileMenu.removeAll();
+			for (FanSpeedProfile p : model.getCustomProfiles()) {
+				JMenuItem item = new JMenuItem(p.getName());
+				item.addActionListener(a -> editProfile(p));
+				profileMenu.add(item);
+			}
+			profileMenu.add(new JSeparator());
+			profileMenu.add(addProfile);
+		}
+	}
+
+	private void editProfile(FanSpeedProfile p) {
+		p = new ProfileEditor().editProfile(p);
+	}
+
 	static JPanel labelledComponent(String labelText, JComponent component) {
 		JPanel panel = new JPanel(new FlowLayout());
 		panel.add(new JLabel(labelText));

+ 11 - 6
src/main/java/eu/tankernn/grid/frame/ProfileEditor.java

@@ -30,8 +30,8 @@ public class ProfileEditor {
 		JSlider[] sliders;
 		JTextField nameField = new JTextField(20);
 		if (profile != null) {
-			nameField.setText(profile.name);
-			sliders = Arrays.stream(profile.percentages).mapToObj(i -> new JSlider(JSlider.VERTICAL, 0, 100, i))
+			nameField.setText(profile.getName());
+			sliders = Arrays.stream(profile.getPercentages()).mapToObj(i -> new JSlider(JSlider.VERTICAL, 0, 100, i))
 					.toArray(JSlider[]::new);
 		} else {
 			sliders = IntStream.range(0, FanSpeedProfile.STEPS).mapToObj(i -> new JSlider(JSlider.VERTICAL, 0, 100, 50))
@@ -65,13 +65,18 @@ public class ProfileEditor {
 				JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
 
 		if (response == JOptionPane.OK_OPTION) {
-			FanSpeedProfile newProfile = new FanSpeedProfile(nameField.getText(),
-					Arrays.stream(sliders).mapToInt(JSlider::getValue).toArray());
+			int[] percs = Arrays.stream(sliders).mapToInt(JSlider::getValue).toArray();
+			if (profile == null)
+				profile = new FanSpeedProfile(nameField.getText(), percs);
+			else {
+				profile.setPercentages(percs);
+				profile.setName(nameField.getText());
+			}
 			if (nameField.getText().isEmpty()) {
 				JOptionPane.showMessageDialog(null, "Please enter a name for the profile.");
-				return editProfile(newProfile);
+				return editProfile(profile);
 			}
-			return newProfile;
+			return profile;
 		} else {
 			return profile;
 		}

+ 1 - 1
src/main/java/eu/tankernn/grid/model/ComputerModel.java

@@ -170,6 +170,6 @@ public class ComputerModel {
 	}
 
 	public FanSpeedProfile getProfile(String string) {
-		return getProfiles().stream().filter(p -> p.name.equals(string)).findFirst().get();
+		return getProfiles().stream().filter(p -> p.getName().equals(string)).findFirst().get();
 	}
 }