Fixes #121 (first displayed theme is current theme)
Additionally removed okButton from SettingsScreen
This commit is contained in:
		| @@ -110,7 +110,7 @@ public class ComponentList<E> extends JPanel { | ||||
|  | ||||
| 	/** | ||||
| 	 * Removes the current selection. | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @since Envoy v0.1-alpha | ||||
| 	 */ | ||||
| 	public void clearSelection() { | ||||
| @@ -173,7 +173,7 @@ public class ComponentList<E> extends JPanel { | ||||
| 	 * @throws java.util.NoSuchElementException if no selection is present | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public int getSingleSelection() { return selection.iterator().next(); } | ||||
| 	public int getSingleSelection() { return selection.stream().findAny().get(); } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return an arbitrary selected element | ||||
| @@ -235,7 +235,7 @@ public class ComponentList<E> extends JPanel { | ||||
| 	/** | ||||
| 	 * Sets a new selection mode. The current selection will be cleared during this | ||||
| 	 * action. | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @param selectionMode the selection mode to set | ||||
| 	 * @return this component list | ||||
| 	 * @since Envoy v0.1-beta | ||||
|   | ||||
| @@ -1,93 +1,89 @@ | ||||
| package envoy.client.ui.settings; | ||||
|  | ||||
| import java.awt.GridBagConstraints; | ||||
| import java.awt.GridBagLayout; | ||||
| import java.awt.Insets; | ||||
| import java.awt.event.ActionListener; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import javax.swing.JComponent; | ||||
| import javax.swing.JTextPane; | ||||
|  | ||||
| import envoy.client.data.Settings; | ||||
| import envoy.client.data.SettingsItem; | ||||
| import envoy.client.ui.Theme; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * Displays GUI components that allow general settings regarding the client.<br> | ||||
|  * <br> | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>GeneralSettingsPanel.java</strong><br> | ||||
|  * Created: <strong>21 Dec 2019</strong><br> | ||||
|  * | ||||
|  * @author Maximilian Käfer | ||||
|  * @since Envoy v0.3-alpha | ||||
|  */ | ||||
| public class GeneralSettingsPanel extends SettingsPanel { | ||||
|  | ||||
| 	private Theme theme; | ||||
|  | ||||
| 	private static final String[]	items				= { "onCloseMode", "enterToSend" }; | ||||
| 	private static final Logger		logger				= EnvoyLog.getLogger(GeneralSettingsPanel.class); | ||||
| 	private static final long		serialVersionUID	= -7470848775130754239L; | ||||
|  | ||||
| 	/** | ||||
| 	 * This is the constructor for the General class. Here the user can set general | ||||
| 	 * settings for the client. | ||||
| 	 * | ||||
| 	 * @param parent the {@link SettingsScreen} as a part of which this | ||||
| 	 *               {@link SettingsPanel} is displayed | ||||
| 	 * @since Envoy v0.3-alpha | ||||
| 	 */ | ||||
| 	public GeneralSettingsPanel(SettingsScreen parent) { | ||||
| 		super(parent); | ||||
| 		theme = Settings.getInstance().getCurrentTheme(); | ||||
|  | ||||
| 		setBackground(theme.getCellColor()); | ||||
|  | ||||
| 		GridBagLayout gbl_general = new GridBagLayout(); | ||||
| 		gbl_general.columnWidths	= new int[] { 1, 1 }; | ||||
| 		gbl_general.rowHeights		= new int[] { 1, 1, 1 }; | ||||
| 		gbl_general.columnWeights	= new double[] { 1.0, 0.1 }; | ||||
| 		gbl_general.rowWeights		= new double[] { 0.02, 0.02, 1.0 }; | ||||
|  | ||||
| 		setLayout(gbl_general); | ||||
|  | ||||
| 		for (int i = 0; i < items.length; i++) | ||||
| 			try { | ||||
| 				createSettingElement(i, Settings.getInstance().getItems().get(items[i])); | ||||
| 			} catch (SecurityException | ReflectiveOperationException e) { | ||||
| 				logger.log(Level.WARNING, "Could not create settings item", e); | ||||
| 			} | ||||
| 	} | ||||
|  | ||||
| 	private void createSettingElement(int gridy, SettingsItem<?> settingsItem) throws SecurityException, ReflectiveOperationException { | ||||
| 		JTextPane descriptionText = new JTextPane(); | ||||
|  | ||||
| 		JComponent settingComponent = settingsItem.getComponent(); | ||||
|  | ||||
| 		GridBagConstraints gbc_toggleSwitch = new GridBagConstraints(); | ||||
| 		gbc_toggleSwitch.gridx	= 1; | ||||
| 		gbc_toggleSwitch.gridy	= gridy; | ||||
|  | ||||
| 		add(settingComponent, gbc_toggleSwitch); | ||||
|  | ||||
| 		descriptionText.setText(settingsItem.getDescription()); | ||||
| 		descriptionText.setBackground(theme.getBackgroundColor()); | ||||
| 		descriptionText.setForeground(theme.getBackgroundColor().invert()); | ||||
| 		descriptionText.setEditable(false); | ||||
|  | ||||
| 		GridBagConstraints gbc_descriptionText = new GridBagConstraints(); | ||||
| 		gbc_descriptionText.fill	= GridBagConstraints.BOTH; | ||||
| 		gbc_descriptionText.gridx	= 0; | ||||
| 		gbc_descriptionText.gridy	= gridy; | ||||
| 		gbc_descriptionText.insets	= new Insets(5, 5, 5, 5); | ||||
|  | ||||
| 		add(descriptionText, gbc_descriptionText); | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public ActionListener getOkButtonAction() { return evt -> {}; } | ||||
| } | ||||
| package envoy.client.ui.settings; | ||||
|  | ||||
| import java.awt.GridBagConstraints; | ||||
| import java.awt.GridBagLayout; | ||||
| import java.awt.Insets; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import javax.swing.JComponent; | ||||
| import javax.swing.JTextPane; | ||||
|  | ||||
| import envoy.client.data.Settings; | ||||
| import envoy.client.data.SettingsItem; | ||||
| import envoy.client.ui.Theme; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * Displays GUI components that allow general settings regarding the client.<br> | ||||
|  * <br> | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>GeneralSettingsPanel.java</strong><br> | ||||
|  * Created: <strong>21 Dec 2019</strong><br> | ||||
|  * | ||||
|  * @author Maximilian Käfer | ||||
|  * @since Envoy v0.3-alpha | ||||
|  */ | ||||
| public class GeneralSettingsPanel extends SettingsPanel { | ||||
|  | ||||
| 	private Theme theme; | ||||
|  | ||||
| 	private static final String[]	items				= { "onCloseMode", "enterToSend" }; | ||||
| 	private static final Logger		logger				= EnvoyLog.getLogger(GeneralSettingsPanel.class); | ||||
| 	private static final long		serialVersionUID	= -7470848775130754239L; | ||||
|  | ||||
| 	/** | ||||
| 	 * This is the constructor for the General class. Here the user can set general | ||||
| 	 * settings for the client. | ||||
| 	 * | ||||
| 	 * @param parent the {@link SettingsScreen} as a part of which this | ||||
| 	 *               {@link SettingsPanel} is displayed | ||||
| 	 * @since Envoy v0.3-alpha | ||||
| 	 */ | ||||
| 	public GeneralSettingsPanel(SettingsScreen parent) { | ||||
| 		super(parent); | ||||
| 		theme = Settings.getInstance().getCurrentTheme(); | ||||
|  | ||||
| 		setBackground(theme.getCellColor()); | ||||
|  | ||||
| 		GridBagLayout gbl_general = new GridBagLayout(); | ||||
| 		gbl_general.columnWidths	= new int[] { 1, 1 }; | ||||
| 		gbl_general.rowHeights		= new int[] { 1, 1, 1 }; | ||||
| 		gbl_general.columnWeights	= new double[] { 1.0, 0.1 }; | ||||
| 		gbl_general.rowWeights		= new double[] { 0.02, 0.02, 1.0 }; | ||||
|  | ||||
| 		setLayout(gbl_general); | ||||
|  | ||||
| 		for (int i = 0; i < items.length; i++) | ||||
| 			try { | ||||
| 				createSettingElement(i, Settings.getInstance().getItems().get(items[i])); | ||||
| 			} catch (SecurityException | ReflectiveOperationException e) { | ||||
| 				logger.log(Level.WARNING, "Could not create settings item", e); | ||||
| 			} | ||||
| 	} | ||||
|  | ||||
| 	private void createSettingElement(int gridy, SettingsItem<?> settingsItem) throws SecurityException, ReflectiveOperationException { | ||||
| 		JTextPane descriptionText = new JTextPane(); | ||||
|  | ||||
| 		JComponent settingComponent = settingsItem.getComponent(); | ||||
|  | ||||
| 		GridBagConstraints gbc_toggleSwitch = new GridBagConstraints(); | ||||
| 		gbc_toggleSwitch.gridx	= 1; | ||||
| 		gbc_toggleSwitch.gridy	= gridy; | ||||
|  | ||||
| 		add(settingComponent, gbc_toggleSwitch); | ||||
|  | ||||
| 		descriptionText.setText(settingsItem.getDescription()); | ||||
| 		descriptionText.setBackground(theme.getBackgroundColor()); | ||||
| 		descriptionText.setForeground(theme.getBackgroundColor().invert()); | ||||
| 		descriptionText.setEditable(false); | ||||
|  | ||||
| 		GridBagConstraints gbc_descriptionText = new GridBagConstraints(); | ||||
| 		gbc_descriptionText.fill	= GridBagConstraints.BOTH; | ||||
| 		gbc_descriptionText.gridx	= 0; | ||||
| 		gbc_descriptionText.gridy	= gridy; | ||||
| 		gbc_descriptionText.insets	= new Insets(5, 5, 5, 5); | ||||
|  | ||||
| 		add(descriptionText, gbc_descriptionText); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| package envoy.client.ui.settings; | ||||
|  | ||||
| import java.awt.event.ActionListener; | ||||
|  | ||||
| import javax.swing.JPanel; | ||||
|  | ||||
| /** | ||||
| @@ -24,16 +22,9 @@ public abstract class SettingsPanel extends JPanel { | ||||
|  | ||||
| 	/** | ||||
| 	 * Initializes a {@link SettingsPanel}. | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @param parent the {@link SettingsScreen} as a part of which this | ||||
| 	 *               {@link SettingsPanel} is displayed | ||||
| 	 */ | ||||
| 	public SettingsPanel(SettingsScreen parent) { this.parent = parent; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return an {@link ActionListener} that should be invoked when the OK button | ||||
| 	 *         is pressed in the {@link SettingsScreen} | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public abstract ActionListener getOkButtonAction(); | ||||
| } | ||||
|   | ||||
| @@ -40,7 +40,6 @@ public class SettingsScreen extends JDialog { | ||||
|  | ||||
| 	// OK and cancel buttons | ||||
| 	private final JPanel		buttonPane		= new JPanel(); | ||||
| 	private final PrimaryButton	okButton		= new PrimaryButton("Save"); | ||||
| 	private final PrimaryButton	cancelButton	= new PrimaryButton("Cancel"); | ||||
|  | ||||
| 	private final Insets insets = new Insets(5, 5, 5, 5); | ||||
| @@ -138,21 +137,6 @@ public class SettingsScreen extends JDialog { | ||||
|  | ||||
| 				cancelButton.addActionListener((evt) -> { dispose(); }); | ||||
| 			} | ||||
| 			{ | ||||
| 				okButton.setActionCommand("OK"); | ||||
| 				okButton.setBorderPainted(false); | ||||
| 				GridBagConstraints gbc_okButton = new GridBagConstraints(); | ||||
| 				gbc_okButton.anchor	= GridBagConstraints.NORTHEAST; | ||||
| 				gbc_okButton.fill	= GridBagConstraints.EAST; | ||||
| 				gbc_okButton.insets	= insets; | ||||
| 				gbc_okButton.gridx	= 2; | ||||
| 				gbc_okButton.gridy	= 0; | ||||
| 				buttonPane.add(okButton, gbc_okButton); | ||||
| 				getRootPane().setDefaultButton(okButton); | ||||
|  | ||||
| 				// Invoke settings panel action on button press | ||||
| 				okButton.addActionListener((evt) -> { if (settingsPanel != null) settingsPanel.getOkButtonAction().actionPerformed(evt); }); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// Apply current theme | ||||
| @@ -179,10 +163,6 @@ public class SettingsScreen extends JDialog { | ||||
| 		cancelButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		cancelButton.setForeground(theme.getInteractableForegroundColor()); | ||||
|  | ||||
| 		// okButton | ||||
| 		okButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		okButton.setForeground(theme.getInteractableForegroundColor()); | ||||
|  | ||||
| 		// options | ||||
| 		options.setSelectionForeground(theme.getUserNameColor()); | ||||
| 		options.setSelectionBackground(theme.getSelectionColor()); | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| package envoy.client.ui.settings; | ||||
|  | ||||
| import java.awt.*; | ||||
| import java.awt.event.ActionListener; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| @@ -11,6 +10,7 @@ import envoy.client.data.Settings; | ||||
| import envoy.client.event.ThemeChangeEvent; | ||||
| import envoy.client.ui.Color; | ||||
| import envoy.client.ui.Theme; | ||||
| import envoy.client.ui.primary.PrimaryButton; | ||||
| import envoy.event.EventBus; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| @@ -30,13 +30,13 @@ public class ThemeCustomizationPanel extends SettingsPanel { | ||||
|  | ||||
| 	private JPanel colorsPanel = new JPanel(); | ||||
|  | ||||
| 	private DefaultComboBoxModel<String>	themesModel	= new DefaultComboBoxModel<>( | ||||
| 			Settings.getInstance().getThemes().keySet().toArray(new String[0])); | ||||
| 	private JComboBox<String>				themes		= new JComboBox<>(themesModel); | ||||
| 	private DefaultComboBoxModel<String>	themesModel; | ||||
| 	private JComboBox<String>				themes; | ||||
| 	private Theme							temporaryTheme; | ||||
| 	private boolean							themeChanged; | ||||
| 	private PrimaryButton					createThemeButton	= new PrimaryButton("Create Theme"); | ||||
|  | ||||
| 	private final Insets insets = new Insets(5, 5, 5, 5); | ||||
| 	private boolean			themeChanged; | ||||
| 	private final Insets	insets	= new Insets(5, 5, 5, 5); | ||||
|  | ||||
| 	private static final Logger	logger				= EnvoyLog.getLogger(ThemeCustomizationPanel.class); | ||||
| 	private static final long	serialVersionUID	= -8697897390666456624L; | ||||
| @@ -54,12 +54,22 @@ public class ThemeCustomizationPanel extends SettingsPanel { | ||||
| 		super(parent); | ||||
| 		temporaryTheme = new Theme("temporaryTheme", Settings.getInstance().getCurrentTheme()); | ||||
|  | ||||
| 		var		themeNames			= Settings.getInstance().getThemes().keySet().toArray(new String[0]); | ||||
| 		String	currentThemeName	= Settings.getInstance().getCurrentThemeName(); | ||||
| 		for (int i = 0; i < themeNames.length; i++) | ||||
| 			if (currentThemeName.equals(themeNames[i])) { | ||||
| 				themeNames[i]	= themeNames[0]; | ||||
| 				themeNames[0]	= currentThemeName; | ||||
| 				break; | ||||
| 			} | ||||
| 		themesModel	= new DefaultComboBoxModel<>(themeNames); | ||||
| 		themes		= new JComboBox<>(themesModel); | ||||
| 		GridBagLayout gbl_themeLayout = new GridBagLayout(); | ||||
|  | ||||
| 		gbl_themeLayout.columnWidths	= new int[] { 1, 1 }; | ||||
| 		gbl_themeLayout.rowHeights		= new int[] { 1, 1 }; | ||||
| 		gbl_themeLayout.rowHeights		= new int[] { 1, 1, 1 }; | ||||
| 		gbl_themeLayout.columnWeights	= new double[] { 1.0, 1.0 }; | ||||
| 		gbl_themeLayout.rowWeights		= new double[] { 0.01, 1.0 }; | ||||
| 		gbl_themeLayout.rowWeights		= new double[] { 0.01, 1.0, 0.01 }; | ||||
|  | ||||
| 		setLayout(gbl_themeLayout); | ||||
|  | ||||
| @@ -95,6 +105,37 @@ public class ThemeCustomizationPanel extends SettingsPanel { | ||||
| 		gbc_colorsPanel.insets		= insets; | ||||
|  | ||||
| 		add(colorsPanel, gbc_colorsPanel); | ||||
|  | ||||
| 		createThemeButton.addActionListener((evt) -> { | ||||
| 			if (themeChanged) { | ||||
| 				new NewThemeScreen(parent, name -> { | ||||
| 					// Create new theme | ||||
| 					logger.log(Level.FINEST, name); | ||||
| 					Settings.getInstance().addNewThemeToMap(new Theme(name, temporaryTheme)); | ||||
|  | ||||
| 					// Add new theme name to combo box | ||||
| 					themesModel.addElement(name); | ||||
|  | ||||
| 					// Select new theme name | ||||
| 					themes.setSelectedIndex(themesModel.getSize() - 1); | ||||
| 				}, name -> { | ||||
| 					// Modify theme | ||||
| 					Settings.getInstance().getThemes().replace(name, new Theme(name, temporaryTheme)); | ||||
| 					if (themes.getSelectedItem().equals(name)) | ||||
| 						EventBus.getInstance().dispatch(new ThemeChangeEvent(Settings.getInstance().getTheme(name))); | ||||
| 					else themes.setSelectedItem(name); | ||||
| 				}).setVisible(true); | ||||
| 				themeChanged = false; | ||||
| 			} | ||||
| 		}); | ||||
| 		GridBagConstraints gbc_createThemeButton = new GridBagConstraints(); | ||||
| 		gbc_createThemeButton.fill		= GridBagConstraints.HORIZONTAL; | ||||
| 		gbc_createThemeButton.gridx		= 0; | ||||
| 		gbc_createThemeButton.gridy		= 2; | ||||
| 		gbc_createThemeButton.anchor	= GridBagConstraints.CENTER; | ||||
| 		gbc_createThemeButton.insets	= insets; | ||||
| 		add(createThemeButton, gbc_createThemeButton); | ||||
| 		 | ||||
| 		colorsPanel.setBackground(theme.getCellColor()); | ||||
|  | ||||
| 		// Apply theme upon selection | ||||
| @@ -120,37 +161,15 @@ public class ThemeCustomizationPanel extends SettingsPanel { | ||||
| 					}); | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public ActionListener getOkButtonAction() { | ||||
| 		return (evt) -> { | ||||
| 			if (themeChanged) { | ||||
| 				new NewThemeScreen(parent, name -> { | ||||
| 					// Create new theme | ||||
| 					logger.log(Level.FINEST, name); | ||||
| 					Settings.getInstance().addNewThemeToMap(new Theme(name, temporaryTheme)); | ||||
|  | ||||
| 					// Add new theme name to combo box | ||||
| 					themesModel.addElement(name); | ||||
|  | ||||
| 					// Select new theme name | ||||
| 					themes.setSelectedIndex(themesModel.getSize() - 1); | ||||
| 				}, name -> { | ||||
| 					// Modify theme | ||||
| 					Settings.getInstance().getThemes().replace(name, new Theme(name, temporaryTheme)); | ||||
| 					if (themes.getSelectedItem().equals(name)) | ||||
| 						EventBus.getInstance().dispatch(new ThemeChangeEvent(Settings.getInstance().getTheme(name))); | ||||
| 					else themes.setSelectedItem(name); | ||||
| 				}).setVisible(true); | ||||
| 				themeChanged = false; | ||||
| 			} | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	private void applyTheme(Theme theme) { | ||||
| 		// themeContent | ||||
| 		setForeground(theme.getUserNameColor()); | ||||
| 		setBackground(theme.getCellColor()); | ||||
|  | ||||
| 		// createThemeButton | ||||
| 		createThemeButton.setForeground(theme.getInteractableForegroundColor()); | ||||
| 		createThemeButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		 | ||||
| 		// themes | ||||
| 		themes.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		themes.setForeground(theme.getInteractableForegroundColor()); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 delvh
					delvh