diff options
author | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-04-30 17:05:10 +0200 |
---|---|---|
committer | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-04-30 17:05:10 +0200 |
commit | 0283a6618360ed473da42c1144da5b44146155bb (patch) | |
tree | 7002057b340df87e20989473a7f370aa89f5ad44 /src/main/java/io/polyfrost/oneconfig/config | |
parent | 026aebb4748747f08d5088947056a75740550b17 (diff) | |
download | OneConfig-0283a6618360ed473da42c1144da5b44146155bb.tar.gz OneConfig-0283a6618360ed473da42c1144da5b44146155bb.tar.bz2 OneConfig-0283a6618360ed473da42c1144da5b44146155bb.zip |
more config system stuff
Diffstat (limited to 'src/main/java/io/polyfrost/oneconfig/config')
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())); |