EpicHeads/main/java/com/songoda/epicheads/config/menu/MenuConfig.java

95 lines
3.5 KiB
Java

package com.songoda.epicheads.config.menu;
import com.songoda.epicheads.EpicHeads;
import com.songoda.epicheads.config.ConfigFile;
import com.songoda.epicheads.menu.CacheHeadsMenu;
import com.songoda.epicheads.menu.CategoriesMenu;
import com.songoda.epicheads.menu.HeadsMenu;
import com.songoda.epicheads.menu.ui.element.PagedBox;
import com.songoda.epicheads.menu.ui.element.Scrollbar;
import com.songoda.epicheads.menu.ui.item.Item;
import com.songoda.epicheads.util.Checks;
import java.util.concurrent.atomic.AtomicBoolean;
public class MenuConfig {
private final ConfigFile config;
private final AtomicBoolean requiresSave;
public MenuConfig(String fileName) {
this(EpicHeads.getInstance().getVersionedConfig(fileName));
}
public MenuConfig(ConfigFile config) {
Checks.ensureNonNull(config, "configFile");
this.config = config;
this.requiresSave = new AtomicBoolean(false);
}
public void load() {
config.copyDefaults();
config.reload();
requiresSave.set(false);
}
public void saveIfChanged() {
if (!requiresSave.get())
return;
config.save();
}
public Scrollbar.Template loadScrollbar(String key) {
Item left = config.getOrCopyDefault(key + ".left", Scrollbar.defaultLeft, requiresSave);
Item right = config.getOrCopyDefault(key + ".right", Scrollbar.defaultRight, requiresSave);
Item noLeft = config.getOrCopyDefault(key + ".no-left", Scrollbar.defaultNoLeft, requiresSave);
Item noRight = config.getOrCopyDefault(key + ".no-right", Scrollbar.defaultNoRight, requiresSave);
Item filler = config.getOrCopyDefault(key + ".filler", Scrollbar.defaultFiller, requiresSave);
return new Scrollbar.Template(left, right, noLeft, noRight, filler);
}
public PagedBox.Template loadPagedBox(String key) {
Item unselected = config.getOrCopyDefault(key + ".unselected-page", PagedBox.defaultUnselected, requiresSave);
Item selected = config.getOrCopyDefault(key + ".selected-page", PagedBox.defaultSelected, requiresSave);
Scrollbar.Template scrollbar = loadScrollbar(key + ".scrollbar");
return new PagedBox.Template(scrollbar, unselected, selected);
}
public CategoriesMenu.Template loadCategoriesMenu(String key) {
Item category = config.getOrCopyDefault(key + ".category", CategoriesMenu.defaultCategoryItem, requiresSave);
PagedBox.Template pagedBoxTemplate = loadPagedBox(key);
return new CategoriesMenu.Template(pagedBoxTemplate, category);
}
public HeadsMenu.Template loadHeadsMenu(String key) {
Item head = config.getOrCopyDefault(key + ".head", HeadsMenu.defaultHead, requiresSave);
PagedBox.Template pagedBoxTemplate = loadPagedBox(key);
return new HeadsMenu.Template(pagedBoxTemplate, head);
}
public CacheHeadsMenu.Template loadCacheHeadsMenu(String key) {
String categoriesTitle = config.getOrCopyDefault(key + ".categories-title", CacheHeadsMenu.defaultCategoriesTitle, requiresSave);
String categoryTitle = config.getOrCopyDefault(key + ".category-title", CacheHeadsMenu.defaultCategoryTitle, requiresSave);
Item close = config.getOrCopyDefault(key + ".close", CacheHeadsMenu.defaultClose, requiresSave);
Item back = config.getOrCopyDefault(key + ".back", CacheHeadsMenu.defaultBack, requiresSave);
Item search = config.getOrCopyDefault(key + ".search", CacheHeadsMenu.defaultSearch, requiresSave);
CategoriesMenu.Template categoriesTemplate = loadCategoriesMenu(key + ".categories");
HeadsMenu.Template headsTemplate = loadHeadsMenu(key + ".heads");
return new CacheHeadsMenu.Template(categoriesTemplate, headsTemplate, close, back, search, categoriesTitle, categoryTitle);
}
}