Skip to content

Commit

Permalink
Implement providers and listeners for GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexProgrammerDE committed Nov 24, 2023
1 parent 5572c43 commit 0acd660
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public static void runGUI(int port) {
var serverWrecker = new ServerWreckerServer(OperationMode.GUI, host, port);

var rpcClient = new RPCClient(host, port, serverWrecker.generateAdminJWT());
var guiManager = new GUIManager(serverWrecker, rpcClient);
var guiManager = new GUIManager(rpcClient);
guiManager.initGUI();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public class GUIManager {
private final ProxyRegistry proxyRegistry = new ProxyRegistry();
private final SettingsManager settingsManager = new SettingsManager(List.of());

public GUIManager(ServerWreckerServer serverWreckerServer, RPCClient rpcClient) {
public GUIManager(RPCClient rpcClient) {
this.rpcClient = rpcClient;
injector.register(GUIManager.class, this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.pistonmaster.serverwrecker.grpc.generated.ClientPluginSettingsPage;
import net.pistonmaster.serverwrecker.gui.GUIManager;

import javax.inject.Inject;
import javax.swing.*;
Expand All @@ -36,14 +37,15 @@ public class CardsContainer extends JPanel {
@Getter
private final List<NavigationItem> panels = new ArrayList<>();
private final Injector injector;
private final GUIManager guiManager;
@Getter
private final List<ClientPluginSettingsPage> pluginPages = new ArrayList<>();

public void create() {
setLayout(new CardLayout());

// Add bot settings
panels.add(new GeneratedPanel(getByNamespace("bot")));
panels.add(new GeneratedPanel(guiManager.getSettingsManager(), getByNamespace("bot")));
var pluginPanel = injector.getSingleton(PluginListPanel.class);
panels.add(pluginPanel);
panels.add(injector.getSingleton(AccountPanel.class));
Expand All @@ -60,7 +62,8 @@ public void create() {

// Add the plugin page cards
for (var item : pluginPages) {
add(NavigationWrapper.createBackWrapper(this, pluginPanel.getNavigationId(), new GeneratedPanel(item)), item.getNamespace());
add(NavigationWrapper.createBackWrapper(this, pluginPanel.getNavigationId(),
new GeneratedPanel(guiManager.getSettingsManager(), item)), item.getNamespace());
}

setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 10));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,51 +19,68 @@
*/
package net.pistonmaster.serverwrecker.gui.navigation;

import com.google.gson.JsonPrimitive;
import net.pistonmaster.serverwrecker.grpc.generated.ClientPluginSettingsPage;
import net.pistonmaster.serverwrecker.grpc.generated.ComboOption;
import net.pistonmaster.serverwrecker.grpc.generated.IntSetting;
import net.pistonmaster.serverwrecker.gui.libs.JMinMaxHelper;
import net.pistonmaster.serverwrecker.gui.libs.PresetJCheckBox;
import net.pistonmaster.serverwrecker.settings.lib.SettingsManager;
import net.pistonmaster.serverwrecker.settings.lib.property.PropertyKey;

import javax.swing.*;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import java.awt.*;
import java.util.Objects;

public class GeneratedPanel extends NavigationItem {
private final ClientPluginSettingsPage settingsPage;

public GeneratedPanel(ClientPluginSettingsPage settingsPage) {
public GeneratedPanel(SettingsManager settingsManager, ClientPluginSettingsPage settingsPage) {
this.settingsPage = settingsPage;

setLayout(new GridLayout(0, 2));

addComponents(this, settingsPage);
addComponents(this, settingsPage, settingsManager);
}

private static JSpinner createIntObject(IntSetting intSetting) {
return new JSpinner(new SpinnerNumberModel(intSetting.getDef(), intSetting.getMin(), intSetting.getMax(), intSetting.getStep()));
private static JSpinner createIntObject(PropertyKey propertyKey, SettingsManager settingsManager, IntSetting intSetting) {
var spinner = new JSpinner(new SpinnerNumberModel(intSetting.getDef(), intSetting.getMin(), intSetting.getMax(), intSetting.getStep()));
settingsManager.registerProvider(propertyKey, () -> new JsonPrimitive((int) spinner.getValue()));
settingsManager.registerListener(propertyKey, s -> spinner.setValue(s.getAsInt()));

return spinner;
}

public static void addComponents(JPanel panel, ClientPluginSettingsPage settingsPage) {
public static void addComponents(JPanel panel, ClientPluginSettingsPage settingsPage, SettingsManager settingsManager) {
for (var settingEntry : settingsPage.getEntriesList()) {
switch (settingEntry.getValueCase()) {
case SINGLE -> {
var singleEntry = settingEntry.getSingle();
var propertyKey = new PropertyKey(settingsPage.getNamespace(), singleEntry.getSettingEntryId());

panel.add(new JLabel(singleEntry.getName()));
var settingType = singleEntry.getType();
panel.add(switch (settingType.getValueCase()) {
case STRING -> {
var stringEntry = settingType.getString();
yield new JTextField(stringEntry.getDef());
var textField = new JTextField(stringEntry.getDef());
settingsManager.registerListener(propertyKey, s -> textField.setText(s.getAsString()));
settingsManager.registerProvider(propertyKey, () -> new JsonPrimitive(textField.getText()));

yield textField;
}
case INT -> {
var intEntry = settingType.getInt();
yield createIntObject(intEntry);
yield createIntObject(propertyKey, settingsManager, intEntry);
}
case BOOL -> {
var boolEntry = settingType.getBool();
yield new PresetJCheckBox(boolEntry.getDef());
var checkBox = new PresetJCheckBox(boolEntry.getDef());
settingsManager.registerListener(propertyKey, s -> checkBox.setSelected(s.getAsBoolean()));
settingsManager.registerProvider(propertyKey, () -> new JsonPrimitive(checkBox.isSelected()));

yield checkBox;
}
case COMBO -> {
var comboEntry = settingType.getCombo();
Expand All @@ -72,6 +89,10 @@ public static void addComponents(JPanel panel, ClientPluginSettingsPage settings
var comboBox = new JComboBox<ComboOption>(options.toArray(new ComboOption[0]));
comboBox.setRenderer(new ComboRenderer());
comboBox.setSelectedItem(options.get(comboEntry.getDef()));
settingsManager.registerListener(propertyKey,
s -> comboBox.setSelectedItem(options.get(s.getAsInt())));
settingsManager.registerProvider(propertyKey,
() -> new JsonPrimitive(((ComboOption) Objects.requireNonNull(comboBox.getSelectedItem())).getId()));

yield comboBox;
}
Expand All @@ -81,15 +102,17 @@ public static void addComponents(JPanel panel, ClientPluginSettingsPage settings
}
case MINMAXPAIR -> {
var minMaxEntry = settingEntry.getMinMaxPair();
var minPropertyKey = new PropertyKey(settingsPage.getNamespace(), minMaxEntry.getMin().getSettingEntryId());
var maxPropertyKey = new PropertyKey(settingsPage.getNamespace(), minMaxEntry.getMax().getSettingEntryId());

var min = minMaxEntry.getMin();
panel.add(new JLabel(min.getName()));
var minSpinner = createIntObject(min.getIntSetting());
var minSpinner = createIntObject(minPropertyKey, settingsManager, min.getIntSetting());
panel.add(minSpinner);

var max = minMaxEntry.getMax();
panel.add(new JLabel(max.getName()));
var maxSpinner = createIntObject(max.getIntSetting());
var maxSpinner = createIntObject(maxPropertyKey, settingsManager, max.getIntSetting());
panel.add(maxSpinner);

JMinMaxHelper.applyLink(minSpinner, maxSpinner);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.*;
import java.util.function.Consumer;

public class SettingsManager {
public static final Logger LOGGER = LoggerFactory.getLogger(SettingsManager.class);
Expand All @@ -68,7 +69,11 @@ public void addClass(Class<? extends SettingsObject> clazz) {
}

public void registerProvider(PropertyKey property, Provider<JsonElement> provider) {
providers.add(new ProviderRegistration<>(clazz, provider));

}

public void registerListener(PropertyKey property, Consumer<JsonElement> listener) {

}

public SettingsHolder collectSettings() {
Expand Down

0 comments on commit 0acd660

Please sign in to comment.