Sfoglia il codice sorgente

Sensor GUI updated and saving added

- Made SensorConfig lists scrollable
- Added saving of the sensor configuration
frans 8 anni fa
parent
commit
9714c3ebaa

+ 1 - 0
README.md

@@ -9,6 +9,7 @@ A Java-based, open-source alternative to the default control software for the NZ
 3. Run the jar-file. (append 'nogui' to command line for headless mode)
   * Currently, configuration is only possible through the GUI, though your settings will persist even if you run in headless mode after configuring.
 4. Select appropriate COM-port using the combo box at the top.
+5. Use Settings -> Configure sensors... to select which sensors to read CPU and GPU temperatures from.
 5. When the window is closed, the program will keep running in the background. Use the system tray icon to exit completely.
 
 ## Credit

+ 14 - 10
src/main/java/eu/tankernn/grid/GridControl.java

@@ -31,15 +31,18 @@ public class GridControl implements Runnable {
 	private Thread t = new Thread(this, "Polling thread");
 
 	private int pollingSpeed = 500;
+	private boolean startMinimized = false;
 
 	private ComputerModel model = new ComputerModel();
 
 	private GridControlPanel frame;
-	private boolean startMinimized = false;
+	private SystemTray systemTray;
 
 	public GridControl(boolean gui) {
 		readSettings();
 
+		t.start();
+
 		if (gui) {
 			Image image;
 			try {
@@ -56,28 +59,23 @@ public class GridControl implements Runnable {
 			frame.setVisible(!startMinimized);
 			addTrayIcon(image);
 		}
-
-		t.start();
 	}
 
 	private void addTrayIcon(Image image) {
-		SystemTray systemTray = SystemTray.get();
+		systemTray = SystemTray.get();
 		if (systemTray == null) {
 			throw new RuntimeException("Unable to load SystemTray!");
 		}
 
 		systemTray.setImage(image);
 
-		systemTray.setStatus("Not Running");
-
 		systemTray.getMenu().add(new MenuItem("Show", a -> {
 			frame.setVisible(true);
 		}));
-		
+
 		systemTray.getMenu().add(new JSeparator());
 
 		systemTray.getMenu().add(new MenuItem("Quit", a -> {
-			systemTray.shutdown();
 			exit();
 		})).setShortcut('q'); // case does not matter
 
@@ -99,6 +97,8 @@ public class GridControl implements Runnable {
 				model.getGrid().getFan(i).setProfile(model.getProfile(settings.fanProfiles[i]));
 			pollingSpeed = settings.pollingRate;
 			model.setMinSpeed(settings.minSpeed);
+			model.getSensor().setCpuSensors(Arrays.asList(settings.cpuSensors));
+			model.getSensor().setGpuSensors(Arrays.asList(settings.gpuSensors));
 			startMinimized = settings.startMinimized;
 		} catch (FileNotFoundException e) {
 			System.out.println("No config file found, using default settings.");
@@ -120,7 +120,9 @@ 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().getName()).toArray(String[]::new), pollingSpeed,
+					model.getGrid().fanStream().map(f -> f.getProfile().getName()).toArray(String[]::new),
+					model.getSensor().getCpuSensors().stream().toArray(String[]::new),
+					model.getSensor().getGpuSensors().stream().toArray(String[]::new), pollingSpeed,
 					model.getMinSpeed(), this.startMinimized), writer);
 		} catch (IOException e) {
 			e.printStackTrace();
@@ -171,6 +173,8 @@ public class GridControl implements Runnable {
 		model.getGrid().disconnect();
 		saveSettings();
 		frame.dispose();
+		if (systemTray != null)
+			systemTray.shutdown();
 		for (Thread t : Thread.getAllStackTraces().keySet())
 			if (t.isAlive())
 				System.out.println(t);
@@ -183,7 +187,7 @@ public class GridControl implements Runnable {
 	public int getPollingSpeed() {
 		return pollingSpeed;
 	}
-	
+
 	public void setStartMinimized(boolean startMinimized) {
 		this.startMinimized = startMinimized;
 	}

+ 7 - 3
src/main/java/eu/tankernn/grid/Settings.java

@@ -5,15 +5,19 @@ public class Settings {
 	/**
 	 * Names of the profiles of each fan.
 	 */
-	public final String[] fanProfiles;
+	public final String[] fanProfiles, cpuSensors, gpuSensors;
 	public final int pollingRate, minSpeed;
 	public final boolean startMinimized;
-	
-	public Settings(String portname, String[] fanProfiles, int pollingRate, int minSpeed, boolean startMinimized) {
+
+	public Settings(String portname, String[] fanProfiles, String[] cpuSensors, String[] gpuSensors, int pollingRate,
+			int minSpeed, boolean startMinimized) {
 		this.portname = portname;
 		this.fanProfiles = fanProfiles;
+		this.cpuSensors = cpuSensors;
+		this.gpuSensors = gpuSensors;
 		this.pollingRate = pollingRate;
 		this.minSpeed = minSpeed;
 		this.startMinimized = startMinimized;
 	}
+
 }

+ 1 - 5
src/main/java/eu/tankernn/grid/frame/GridControlPanel.java

@@ -139,7 +139,7 @@ public class GridControlPanel extends JFrame {
 			profileMenu.removeAll();
 			for (FanSpeedProfile p : model.getCustomProfiles()) {
 				JMenuItem item = new JMenuItem(p.getName());
-				item.addActionListener(a -> editProfile(p));
+				item.addActionListener(a -> new ProfileEditor().editProfile(p));
 				profileMenu.add(item);
 			}
 			profileMenu.add(new JSeparator());
@@ -147,10 +147,6 @@ public class GridControlPanel extends JFrame {
 		}
 	}
 
-	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));

+ 14 - 33
src/main/java/eu/tankernn/grid/frame/SensorConfig.java

@@ -5,6 +5,7 @@ import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.BoxLayout;
 import javax.swing.DefaultListModel;
@@ -13,7 +14,6 @@ import javax.swing.JDialog;
 import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.border.EmptyBorder;
-import javax.swing.border.TitledBorder;
 
 import eu.tankernn.grid.model.sensor.Sensor;
 
@@ -25,7 +25,7 @@ public class SensorConfig extends JDialog {
 	private static final long serialVersionUID = 1L;
 
 	private final JPanel contentPanel = new JPanel(), buttonPanel = new JPanel(), zonePanel = new JPanel();
-	private JList<String> availableList = new JList<>(), cpuList = new JList<>(), gpuList = new JList<>();
+	private SensorZone availableList, cpuList , gpuList;
 	private JButton cpuAdd = new JButton("->"), cpuRem = new JButton("<-"), gpuAdd = new JButton("->"),
 			gpuRem = new JButton("<-");
 
@@ -37,30 +37,11 @@ public class SensorConfig extends JDialog {
 		getContentPane().setLayout(new BorderLayout());
 		contentPanel.setLayout(new FlowLayout());
 		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
-
-		{
-			DefaultListModel<String> model = new DefaultListModel<>();
-			for (String s : sensor.getCpuSensors())
-				model.addElement(s);
-			cpuList.setModel(model);
-		}
-		{
-			DefaultListModel<String> model = new DefaultListModel<>();
-			for (String s : sensor.getGpuSensors())
-				model.addElement(s);
-			gpuList.setModel(model);
-		}
-		{
-			DefaultListModel<String> model = new DefaultListModel<>();
-			for (String s : sensor.getSensorNames().stream().filter(s -> !sensor.getCpuSensors().contains(s))
-					.filter(s -> !sensor.getGpuSensors().contains(s)).toArray(String[]::new))
-				model.addElement(s);
-			availableList.setModel(model);
-		}
-
-		availableList.setBorder(new TitledBorder("Available sensors:"));
-		cpuList.setBorder(new TitledBorder("CPU sensors:"));
-		gpuList.setBorder(new TitledBorder("GPU sensors:"));
+		
+		availableList = new SensorZone("Available sensors", sensor.getSensorNames().stream().filter(s -> !sensor.getCpuSensors().contains(s))
+				.filter(s -> !sensor.getGpuSensors().contains(s)).collect(Collectors.toList()));
+		cpuList = new SensorZone("CPU sensors", sensor.getCpuSensors());
+		gpuList = new SensorZone("GPU sensors", sensor.getGpuSensors());
 		
 		availableList.setPreferredSize(new Dimension(150, 400));
 		cpuList.setPreferredSize(new Dimension(150, 200));
@@ -93,8 +74,8 @@ public class SensorConfig extends JDialog {
 			{
 				JButton okButton = new JButton("OK");
 				okButton.addActionListener(a -> {
-					sensor.setCpuSensors(toList(cpuList));
-					sensor.setGpuSensors(toList(gpuList));
+					sensor.setCpuSensors(toList(cpuList.getSensors()));
+					sensor.setGpuSensors(toList(gpuList.getSensors()));
 					dispose();
 				});
 				buttonPane.add(okButton);
@@ -118,11 +99,11 @@ public class SensorConfig extends JDialog {
 		return list;
 	}
 
-	private void move(JList<String> origin, JList<String> target) {
-		if (origin.getSelectedIndex() < 0)
+	private void move(SensorZone origin, SensorZone target) {
+		if (origin.getSensors().getSelectedIndex() < 0)
 			return;
-		String name = origin.getSelectedValue();
-		((DefaultListModel<String>) origin.getModel()).remove(origin.getSelectedIndex());
-		((DefaultListModel<String>) target.getModel()).addElement(name);
+		String name = origin.getSensors().getSelectedValue();
+		((DefaultListModel<String>) origin.getSensors().getModel()).remove(origin.getSensors().getSelectedIndex());
+		((DefaultListModel<String>) target.getSensors().getModel()).addElement(name);
 	}
 }

+ 32 - 0
src/main/java/eu/tankernn/grid/frame/SensorZone.java

@@ -0,0 +1,32 @@
+package eu.tankernn.grid.frame;
+
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.border.TitledBorder;
+
+public class SensorZone extends JScrollPane {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private JList<String> sensors = new JList<>();
+
+	public SensorZone(String name, List<String> sensors) {
+		this.setBorder(new TitledBorder(name + ":"));
+
+		DefaultListModel<String> model = new DefaultListModel<>();
+		for (String s : sensors)
+			model.addElement(s);
+		this.sensors.setModel(model);
+		this.setViewportView(this.sensors);
+	}
+
+	public JList<String> getSensors() {
+		return sensors;
+	}
+}