package net.fourbytes.shadow;
import net.fourbytes.shadow.mod.IMod;
import net.fourbytes.shadow.mod.ModFile;
import net.fourbytes.shadow.mod.ModManager;
public class SetupModsLevel extends MenuLevel {
public ModFile modfile;
public boolean blacklist = false;
public SetupModsLevel() {
this(null, null);
}
public SetupModsLevel(MenuLevel parent) {
this(parent, null);
}
public SetupModsLevel(MenuLevel parent, ModFile modfile) {
super(parent);
showtitle = false;
this.modfile = modfile;
refresh();
ready = true;
}
public SetupModsLevel(MenuLevel parent, boolean blacklist) {
super(parent);
showtitle = false;
this.blacklist = blacklist;
refresh();
ready = true;
}
protected void refresh() {
removeMenuItems();
if (modfile == null) {
if (blacklist) {
addMenuItemsListBlacklist();
} else {
addMenuItemsListActive();
}
} else {
addMenuItemsMod();
}
}
protected void addMenuItemsListActive() {
for (int i = 0; i < ModManager.filesLoaded.size; i++) {
ModFile mf = ModManager.filesLoaded.items[i];
items.add(getMenuItemFor(mf));
}
if (ModManager.filesIgnored.size > 0) {
items.add(getMenuItemBlacklist());
}
items.add(getMenuItemBack());
}
protected void addMenuItemsListBlacklist() {
for (int i = 0; i < ModManager.filesIgnored.size; i++) {
ModFile mf = ModManager.filesIgnored.items[i];
items.add(getMenuItemFor(mf));
}
items.add(getMenuItemBack());
}
protected void addMenuItemsMod() {
final boolean blacklisted = modfile.mod==null;
items.add(new MenuItem(this, modfile.pkg, new Runnable(){public void run(){
}}));
items.add(new MenuItem(this, (blacklisted?"Remove from ":"Add to ")+"blacklist",
new Runnable(){public void run(){
ModManager.loader.blacklist(modfile, !blacklisted);
if (blacklisted) {
ModManager.filesIgnored.removeValue(modfile, true);
IMod mod = ModManager.loader.load(modfile.fh==null?modfile.pkg:modfile.fh.path());
mod.create();
} else {
modfile.mod.dispose();
ModManager.mapModFile.remove(modfile.mod);
modfile.mod = null;
ModManager.filesLoaded.removeValue(modfile, true);
ModManager.filesIgnored.add(modfile);
}
Shadow.level = parent;
if (parent instanceof SetupModsLevel) {
((SetupModsLevel) parent).refresh();
}
}}));
if (modfile.canDelete) {
items.add(new MenuItem(this, "Delete",
new Runnable(){public void run(){
modfile.mod.dispose();
ModManager.mapModFile.remove(modfile.mod);
modfile.mod = null;
ModManager.filesLoaded.removeValue(modfile, true);
ModManager.filesIgnored.add(modfile);
ModManager.loader.delete(modfile);
Shadow.level = parent;
if (parent instanceof SetupModsLevel) {
((SetupModsLevel) parent).refresh();
}
}}));
}
items.add(getMenuItemBack());
}
protected void removeMenuItems() {
items.clear();
}
protected MenuItem getMenuItemFor(final ModFile mf) {
return new MenuItem(this,
mf.mod==null?mf.pkg:mf.mod.modName(),
new Runnable(){public void run(){
Shadow.level = new SetupModsLevel(SetupModsLevel.this, mf);
}});
}
protected MenuItem getMenuItemBlacklist() {
return new MenuItem(this, "Show blacklisted mods",
new Runnable(){public void run(){
Shadow.level = new SetupModsLevel(SetupModsLevel.this, true);
}});
}
protected MenuItem getMenuItemBack() {
return new MenuItem(this, "Back",
new Runnable(){public void run(){
Shadow.level = parent;
if (parent instanceof SetupModsLevel) {
((SetupModsLevel) parent).refresh();
}
}});
}
}