aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/polyfrost/oneconfig/config
diff options
context:
space:
mode:
authorDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-04-30 17:05:10 +0200
committerDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-04-30 17:05:10 +0200
commit0283a6618360ed473da42c1144da5b44146155bb (patch)
tree7002057b340df87e20989473a7f370aa89f5ad44 /src/main/java/io/polyfrost/oneconfig/config
parent026aebb4748747f08d5088947056a75740550b17 (diff)
downloadOneConfig-0283a6618360ed473da42c1144da5b44146155bb.tar.gz
OneConfig-0283a6618360ed473da42c1144da5b44146155bb.tar.bz2
OneConfig-0283a6618360ed473da42c1144da5b44146155bb.zip
more config system stuff
Diffstat (limited to 'src/main/java/io/polyfrost/oneconfig/config')
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/annotations/ConfigPage.java32
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/annotations/Option.java10
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/data/OptionCategory.java12
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/data/OptionPage.java5
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/data/OptionType.java4
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/data/PageLocation.java6
-rw-r--r--src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java46
7 files changed, 77 insertions, 38 deletions
diff --git a/src/main/java/io/polyfrost/oneconfig/config/annotations/ConfigPage.java b/src/main/java/io/polyfrost/oneconfig/config/annotations/ConfigPage.java
new file mode 100644
index 0000000..fecd438
--- /dev/null
+++ b/src/main/java/io/polyfrost/oneconfig/config/annotations/ConfigPage.java
@@ -0,0 +1,32 @@
+package io.polyfrost.oneconfig.config.annotations;
+
+import io.polyfrost.oneconfig.config.data.PageLocation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface ConfigPage {
+ /**
+ * The name of the page that will be displayed to the user
+ */
+ String name();
+
+ /**
+ * If the page button is at the top or bottem of the page
+ */
+ PageLocation location();
+
+ /**
+ * The description of the page that will be displayed to the user
+ */
+ String description() default "";
+
+ /**
+ * The category of the page
+ */
+ String category() default "general";
+}
diff --git a/src/main/java/io/polyfrost/oneconfig/config/annotations/Option.java b/src/main/java/io/polyfrost/oneconfig/config/annotations/Option.java
index b7bcf4f..fe61a02 100644
--- a/src/main/java/io/polyfrost/oneconfig/config/annotations/Option.java
+++ b/src/main/java/io/polyfrost/oneconfig/config/annotations/Option.java
@@ -17,11 +17,6 @@ public @interface Option {
String name();
/**
- * The description of the page that will be displayed to the user
- */
- String description() default "";
-
- /**
* The type of the option
*/
OptionType type();
@@ -51,6 +46,11 @@ public @interface Option {
int size() default 1;
/**
+ * The placeholder in the text field
+ */
+ String placeholder() default "";
+
+ /**
* If the text field is secure or not
*/
boolean secure() default false;
diff --git a/src/main/java/io/polyfrost/oneconfig/config/data/OptionCategory.java b/src/main/java/io/polyfrost/oneconfig/config/data/OptionCategory.java
index 4286264..15c073c 100644
--- a/src/main/java/io/polyfrost/oneconfig/config/data/OptionCategory.java
+++ b/src/main/java/io/polyfrost/oneconfig/config/data/OptionCategory.java
@@ -1,17 +1,13 @@
package io.polyfrost.oneconfig.config.data;
import io.polyfrost.oneconfig.config.interfaces.BasicOption;
-import io.polyfrost.oneconfig.gui.elements.config.ConfigPage;
+import io.polyfrost.oneconfig.gui.elements.config.ConfigPageButton;
import java.util.ArrayList;
import java.util.HashMap;
public class OptionCategory {
- public final HashMap<String, ArrayList<BasicOption>> options;
- public final ArrayList<ConfigPage> pages;
-
- public OptionCategory(HashMap<String, ArrayList<BasicOption>> options, ArrayList<ConfigPage> pages) {
- this.options = options;
- this.pages = pages;
- }
+ public final HashMap<String, ArrayList<BasicOption>> subcategories = new HashMap<>();
+ public final ArrayList<ConfigPageButton> topPages = new ArrayList<>();
+ public final ArrayList<ConfigPageButton> bottomPages = new ArrayList<>();
}
diff --git a/src/main/java/io/polyfrost/oneconfig/config/data/OptionPage.java b/src/main/java/io/polyfrost/oneconfig/config/data/OptionPage.java
index 8dcd9a1..12aef6a 100644
--- a/src/main/java/io/polyfrost/oneconfig/config/data/OptionPage.java
+++ b/src/main/java/io/polyfrost/oneconfig/config/data/OptionPage.java
@@ -1,9 +1,6 @@
package io.polyfrost.oneconfig.config.data;
-import io.polyfrost.oneconfig.config.interfaces.BasicOption;
-
-import java.util.ArrayList;
import java.util.HashMap;
public class OptionPage {
@@ -14,7 +11,7 @@ public class OptionPage {
* Depth 2 = subcategories
* Depth 3 = list of options
*/
- public final HashMap<String, HashMap<String, ArrayList<BasicOption>>> categories = new HashMap<>();
+ public final HashMap<String, OptionCategory> categories = new HashMap<>();
public OptionPage(String name, Mod mod) {
this.name = name;
diff --git a/src/main/java/io/polyfrost/oneconfig/config/data/OptionType.java b/src/main/java/io/polyfrost/oneconfig/config/data/OptionType.java
index 4378d34..7e106f4 100644
--- a/src/main/java/io/polyfrost/oneconfig/config/data/OptionType.java
+++ b/src/main/java/io/polyfrost/oneconfig/config/data/OptionType.java
@@ -2,10 +2,6 @@ package io.polyfrost.oneconfig.config.data;
public enum OptionType {
/**
- * Type: class
- */
- PAGE,
- /**
* Type: boolean
*/
SWITCH,
diff --git a/src/main/java/io/polyfrost/oneconfig/config/data/PageLocation.java b/src/main/java/io/polyfrost/oneconfig/config/data/PageLocation.java
new file mode 100644
index 0000000..9fe0c91
--- /dev/null
+++ b/src/main/java/io/polyfrost/oneconfig/config/data/PageLocation.java
@@ -0,0 +1,6 @@
+package io.polyfrost.oneconfig.config.data;
+
+public enum PageLocation {
+ TOP,
+ BOTTOM
+}
diff --git a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java
index ee72fee..af3d037 100644
--- a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java
+++ b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java
@@ -1,9 +1,11 @@
package io.polyfrost.oneconfig.config.interfaces;
import com.google.gson.*;
+import io.polyfrost.oneconfig.config.annotations.ConfigPage;
import io.polyfrost.oneconfig.config.annotations.Option;
import io.polyfrost.oneconfig.config.core.ConfigCore;
import io.polyfrost.oneconfig.config.data.Mod;
+import io.polyfrost.oneconfig.config.data.OptionCategory;
import io.polyfrost.oneconfig.config.data.OptionPage;
import io.polyfrost.oneconfig.config.profiles.Profiles;
import io.polyfrost.oneconfig.gui.elements.config.*;
@@ -66,28 +68,38 @@ public class Config {
*/
protected void generateOptionList(Class<?> clazz, OptionPage page, Mod mod) {
for (Field field : clazz.getDeclaredFields()) {
- if (!field.isAnnotationPresent(Option.class)) {
+ if (!field.isAnnotationPresent(Option.class) && !field.isAnnotationPresent(ConfigPage.class)) {
processCustomOption(field, page);
continue;
+ } else if (field.isAnnotationPresent(ConfigPage.class)) {
+ ConfigPage option = field.getAnnotation(ConfigPage.class);
+ if (!page.categories.containsKey(option.category()))
+ page.categories.put(option.category(), new OptionCategory());
+ OptionPage newPage = new OptionPage(option.name(), mod);
+ try {
+ field.setAccessible(true);
+ Object object = field.get(clazz);
+ generateOptionList(object.getClass(), newPage, mod);
+ switch (option.location()) {
+ case TOP:
+ page.categories.get(option.category()).topPages.add(new ConfigPageButton(field, option.name(), option.description(), newPage));
+ break;
+ case BOTTOM:
+ page.categories.get(option.category()).bottomPages.add(new ConfigPageButton(field, option.name(), option.description(), newPage));
+ break;
+ }
+ } catch (IllegalAccessException e) {
+ continue;
+ }
+ continue;
}
Option option = field.getAnnotation(Option.class);
if (!page.categories.containsKey(option.category()))
- page.categories.put(option.category(), new HashMap<>());
- if (!page.categories.get(option.category()).containsKey(option.subcategory()))
- page.categories.get(option.category()).put(option.subcategory(), new ArrayList<>());
- ArrayList<BasicOption> options = page.categories.get(option.category()).get(option.subcategory());
+ page.categories.put(option.category(), new OptionCategory());
+ if (!page.categories.get(option.category()).subcategories.containsKey(option.subcategory()))
+ page.categories.get(option.category()).subcategories.put(option.subcategory(), new ArrayList<>());
+ ArrayList<BasicOption> options = page.categories.get(option.category()).subcategories.get(option.subcategory());
switch (option.type()) {
- case PAGE:
- OptionPage newPage = new OptionPage(option.name(), mod);
- try {
- field.setAccessible(true);
- Object object = field.get(clazz);
- generateOptionList(object.getClass(), newPage, mod);
- options.add(new ConfigPage(field, option.name(), option.description(), option.size(), newPage));
- } catch (IllegalAccessException e) {
- continue;
- }
- break;
case SWITCH:
options.add(new ConfigSwitch(field, option.name(), option.size()));
break;
@@ -95,7 +107,7 @@ public class Config {
options.add(new ConfigCheckbox(field, option.name(), option.size()));
break;
case TEXT:
- options.add(new ConfigTextBox(field, option.name(), option.size(), option.secure(), option.multiLine()));
+ options.add(new ConfigTextBox(field, option.name(), option.size(), option.placeholder(), option.secure(), option.multiLine()));
break;
case DUAL_OPTION:
options.add(new ConfigDualOption(field, option.name(), option.size(), option.optionLeft(), option.optionRight()));