From 869c206c4fcc8001bd2e1d66f704290331813835 Mon Sep 17 00:00:00 2001 From: Draknyte1 Date: Wed, 20 Jan 2016 14:24:34 +1000 Subject: Initial Commit --- .../craftgui/mod/database/ControlBranchBox.java | 20 ++ .../mod/database/ControlBranchBoxOption.java | 14 + .../mod/database/ControlBreedingProgress.java | 41 +++ .../database/ControlDatabaseIndividualDisplay.java | 120 ++++++++ .../mod/database/ControlItemStackOption.java | 38 +++ .../craftgui/mod/database/ControlMutationBox.java | 71 +++++ .../craftgui/mod/database/ControlMutationItem.java | 51 ++++ .../mod/database/ControlMutationSymbol.java | 80 ++++++ .../craftgui/mod/database/ControlSpeciesBox.java | 55 ++++ .../mod/database/ControlSpeciexBoxOption.java | 42 +++ .../binnie/craftgui/mod/database/DatabaseTab.java | 32 +++ .../craftgui/mod/database/EnumDiscoveryState.java | 8 + .../craftgui/mod/database/IDatabaseMode.java | 6 + .../binnie/craftgui/mod/database/PageAbstract.java | 16 ++ .../binnie/craftgui/mod/database/PageBranch.java | 13 + .../craftgui/mod/database/PageBranchOverview.java | 67 +++++ .../craftgui/mod/database/PageBranchSpecies.java | 43 +++ .../binnie/craftgui/mod/database/PageBreeder.java | 51 ++++ .../craftgui/mod/database/PageBreederStats.java | 23 ++ .../binnie/craftgui/mod/database/PageSpecies.java | 13 + .../mod/database/PageSpeciesClassification.java | 54 ++++ .../mod/database/PageSpeciesMutations.java | 27 ++ .../craftgui/mod/database/PageSpeciesOverview.java | 88 ++++++ .../mod/database/PageSpeciesResultant.java | 27 ++ .../mod/database/WindowAbstractDatabase.java | 314 +++++++++++++++++++++ 25 files changed, 1314 insertions(+) create mode 100644 src/Java/binnie/craftgui/mod/database/ControlBranchBox.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlBranchBoxOption.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlBreedingProgress.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlItemStackOption.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlMutationBox.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlMutationItem.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlMutationSymbol.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlSpeciesBox.java create mode 100644 src/Java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java create mode 100644 src/Java/binnie/craftgui/mod/database/DatabaseTab.java create mode 100644 src/Java/binnie/craftgui/mod/database/EnumDiscoveryState.java create mode 100644 src/Java/binnie/craftgui/mod/database/IDatabaseMode.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageAbstract.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageBranch.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageBranchOverview.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageBranchSpecies.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageBreeder.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageBreederStats.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageSpecies.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageSpeciesClassification.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageSpeciesMutations.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageSpeciesOverview.java create mode 100644 src/Java/binnie/craftgui/mod/database/PageSpeciesResultant.java create mode 100644 src/Java/binnie/craftgui/mod/database/WindowAbstractDatabase.java (limited to 'src/Java/binnie/craftgui/mod/database') diff --git a/src/Java/binnie/craftgui/mod/database/ControlBranchBox.java b/src/Java/binnie/craftgui/mod/database/ControlBranchBox.java new file mode 100644 index 0000000000..3aaf90d53a --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlBranchBox.java @@ -0,0 +1,20 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlListBox; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IClassification; + +class ControlBranchBox + extends ControlListBox +{ + public IWidget createOption(IClassification value, int y) + { + return new ControlBranchBoxOption((ControlList)getContent(), value, y); + } + + public ControlBranchBox(IWidget parent, float x, float y, float width, float height) + { + super(parent, x, y, width, height, 12.0F); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlBranchBoxOption.java b/src/Java/binnie/craftgui/mod/database/ControlBranchBoxOption.java new file mode 100644 index 0000000000..a3f83f403f --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlBranchBoxOption.java @@ -0,0 +1,14 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlTextOption; +import forestry.api.genetics.IClassification; + +class ControlBranchBoxOption + extends ControlTextOption +{ + public ControlBranchBoxOption(ControlList controlList, IClassification option, int y) + { + super(controlList, option, option.getName().contains(".") ? option.getScientific() : option.getName() == null ? option.getScientific() : option.getName(), y); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlBreedingProgress.java b/src/Java/binnie/craftgui/mod/database/ControlBreedingProgress.java new file mode 100644 index 0000000000..9340a66752 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlBreedingProgress.java @@ -0,0 +1,41 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.renderer.Renderer; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.resource.minecraft.CraftGUITexture; +import binnie.craftgui.resource.minecraft.CraftGUITextureSheet; +import binnie.craftgui.resource.minecraft.StandardTexture; + +class ControlBreedingProgress + extends Control +{ + private static Texture Progress = new StandardTexture(80, 22, 4, 4, CraftGUITextureSheet.Controls2); + private float percentage; + private int colour; + + public ControlBreedingProgress(IWidget parent, int x, int y, int width, int height, BreedingSystem system, float percentage) + { + super(parent, x, y, width, height); + this.percentage = percentage; + this.colour = system.getColour(); + } + + public void onRenderBackground() + { + CraftGUI.Render.texture(CraftGUITexture.PanelBlack, getArea()); + + IArea area = getArea().inset(1); + + area.setSize(new IPoint(area.size().x() * this.percentage, area.size().y())); + + CraftGUI.Render.colour(this.colour); + + CraftGUI.Render.texture(Progress, area); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java b/src/Java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java new file mode 100644 index 0000000000..e46cf94df7 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlDatabaseIndividualDisplay.java @@ -0,0 +1,120 @@ +package binnie.craftgui.mod.database; + +import binnie.Binnie; +import binnie.core.genetics.BreedingSystem; +import binnie.core.genetics.ManagerGenetics; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.renderer.Renderer; +import binnie.craftgui.events.EventMouse.Down; +import binnie.craftgui.events.EventMouse.Down.Handler; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import com.mojang.authlib.GameProfile; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.ISpeciesRoot; +import net.minecraft.util.IIcon; + +public class ControlDatabaseIndividualDisplay + extends ControlItemDisplay + implements ITooltip +{ + public void setSpecies(IAlleleSpecies species) + { + setSpecies(species, EnumDiscoveryState.Show); + } + + public void setSpecies(IAlleleSpecies species, EnumDiscoveryState state) + { + ISpeciesRoot speciesRoot = Binnie.Genetics.getSpeciesRoot(species); + + BreedingSystem system = Binnie.Genetics.getSystem(speciesRoot.getUID()); + + IIndividual ind = system.getSpeciesRoot().templateAsIndividual(system.getSpeciesRoot().getTemplate(species.getUID())); + + super.setItemStack(system.getSpeciesRoot().getMemberStack(ind, system.getDefaultType())); + this.species = species; + + GameProfile username = Window.get(this).getUsername(); + if (state == EnumDiscoveryState.Undetermined) { + state = system.isSpeciesDiscovered(species, Window.get(this).getWorld(), username) ? EnumDiscoveryState.Discovered : EnumDiscoveryState.Undiscovered; + } + if (((Window.get(this) instanceof WindowAbstractDatabase)) && + (((WindowAbstractDatabase)Window.get(this)).isNEI)) { + state = EnumDiscoveryState.Show; + } + this.discovered = state; + + addAttribute(Attribute.MouseOver); + } + + private IAlleleSpecies species = null; + EnumDiscoveryState discovered = EnumDiscoveryState.Show; + + public ControlDatabaseIndividualDisplay(IWidget parent, float x, float y) + { + this(parent, x, y, 16.0F); + } + + public ControlDatabaseIndividualDisplay(IWidget parent, float x, float y, float size) + { + super(parent, x, y, size); + + + addSelfEventHandler(new EventMouse.Down.Handler() + { + public void onEvent(EventMouse.Down event) + { + if ((event.getButton() == 0) && (ControlDatabaseIndividualDisplay.this.species != null) && (EnumDiscoveryState.Show == ControlDatabaseIndividualDisplay.this.discovered)) { + ((WindowAbstractDatabase)ControlDatabaseIndividualDisplay.this.getSuperParent()).gotoSpeciesDelayed(ControlDatabaseIndividualDisplay.this.species); + } + } + }); + } + + public void onRenderForeground() + { + IIcon icon = null; + if (this.species == null) { + return; + } + BreedingSystem system = Binnie.Genetics.getSystem(this.species.getRoot()); + switch (2.$SwitchMap$binnie$craftgui$mod$database$EnumDiscoveryState[this.discovered.ordinal()]) + { + case 1: + super.onRenderForeground(); + return; + case 2: + icon = system.getDiscoveredIcon(); + break; + case 3: + icon = system.getUndiscoveredIcon(); + break; + } + if (icon != null) { + CraftGUI.Render.iconItem(IPoint.ZERO, icon); + } + } + + public void getTooltip(Tooltip tooltip) + { + if (this.species != null) { + switch (2.$SwitchMap$binnie$craftgui$mod$database$EnumDiscoveryState[this.discovered.ordinal()]) + { + case 1: + tooltip.add(this.species.getName()); + break; + case 2: + tooltip.add("Discovered Species"); + break; + case 3: + tooltip.add("Undiscovered Species"); + } + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlItemStackOption.java b/src/Java/binnie/craftgui/mod/database/ControlItemStackOption.java new file mode 100644 index 0000000000..2dfa33b083 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlItemStackOption.java @@ -0,0 +1,38 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlTextOption; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.renderer.Renderer; +import binnie.craftgui.minecraft.control.ControlItemDisplay; +import net.minecraft.item.ItemStack; + +public class ControlItemStackOption + extends ControlTextOption +{ + private ControlItemDisplay controlBee; + + public ControlItemStackOption(ControlList controlList, ItemStack option, int y) + { + super(controlList, option, option.getDisplayName(), y); + setSize(new IPoint(getSize().x(), 20.0F)); + + this.controlBee = new ControlItemDisplay(this, 2.0F, 2.0F); + this.controlBee.setItemStack(option); + + addAttribute(Attribute.MouseOver); + + CraftGUIUtil.moveWidget(this.textWidget, new IPoint(22.0F, 0.0F)); + this.textWidget.setSize(this.textWidget.getSize().sub(new IPoint(24.0F, 0.0F))); + + int th = (int)CraftGUI.Render.textHeight(this.textWidget.getValue(), this.textWidget.getSize().x()); + int height = Math.max(20, th + 6); + setSize(new IPoint(size().x(), height)); + this.textWidget.setSize(new IPoint(this.textWidget.getSize().x(), height)); + this.controlBee.setPosition(new IPoint(this.controlBee.pos().x(), (height - 18) / 2)); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlMutationBox.java b/src/Java/binnie/craftgui/mod/database/ControlMutationBox.java new file mode 100644 index 0000000000..62cdda8dcf --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlMutationBox.java @@ -0,0 +1,71 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlListBox; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IMutation; +import java.util.List; + +class ControlMutationBox + extends ControlListBox +{ + private int index; + private Type type; + + public IWidget createOption(IMutation value, int y) + { + return new ControlMutationItem((ControlList)getContent(), value, this.species, y); + } + + static enum Type + { + Resultant, Further; + + private Type() {} + } + + public ControlMutationBox(IWidget parent, int x, int y, int width, int height, Type type) + { + super(parent, x, y, width, height, 12.0F); + this.type = type; + } + + private IAlleleSpecies species = null; + + public void setSpecies(IAlleleSpecies species) + { + if (species != this.species) + { + this.species = species; + this.index = 0; + movePercentage(-100.0F); + + BreedingSystem system = ((WindowAbstractDatabase)getSuperParent()).getBreedingSystem(); + + List discovered = system.getDiscoveredMutations(Window.get(this).getWorld(), Window.get(this).getUsername()); + if (species != null) { + if (this.type == Type.Resultant) + { + setOptions(system.getResultantMutations(species)); + } + else + { + List mutations = system.getFurtherMutations(species); + for (int i = 0; i < mutations.size();) + { + IMutation mutation = (IMutation)mutations.get(i); + if ((!discovered.contains(mutations)) && (!((IAlleleSpecies)mutation.getTemplate()[0]).isCounted())) { + mutations.remove(i); + } else { + i++; + } + } + setOptions(mutations); + } + } + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlMutationItem.java b/src/Java/binnie/craftgui/mod/database/ControlMutationItem.java new file mode 100644 index 0000000000..630294e458 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlMutationItem.java @@ -0,0 +1,51 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlOption; +import binnie.craftgui.minecraft.Window; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IMutation; + +class ControlMutationItem + extends ControlOption +{ + private ControlDatabaseIndividualDisplay itemWidget1; + private ControlDatabaseIndividualDisplay itemWidget2; + private ControlDatabaseIndividualDisplay itemWidget3; + private ControlMutationSymbol addSymbol; + private ControlMutationSymbol arrowSymbol; + + public ControlMutationItem(ControlList controlList, IMutation option, IAlleleSpecies species, int y) + { + super(controlList, option, y); + this.itemWidget1 = new ControlDatabaseIndividualDisplay(this, 4.0F, 4.0F); + this.itemWidget2 = new ControlDatabaseIndividualDisplay(this, 44.0F, 4.0F); + this.itemWidget3 = new ControlDatabaseIndividualDisplay(this, 104.0F, 4.0F); + this.addSymbol = new ControlMutationSymbol(this, 24, 4, 0); + this.arrowSymbol = new ControlMutationSymbol(this, 64, 4, 1); + + boolean isNEI = ((WindowAbstractDatabase)getSuperParent()).isNEI(); + BreedingSystem system = ((WindowAbstractDatabase)getSuperParent()).getBreedingSystem(); + if (getValue() != null) + { + boolean isMutationDiscovered = system.isMutationDiscovered((IMutation)getValue(), Window.get(this).getWorld(), Window.get(this).getUsername()); + + + IAlleleSpecies allele = null; + EnumDiscoveryState state = null; + + allele = (IAlleleSpecies)((IMutation)getValue()).getAllele0(); + state = species == allele ? EnumDiscoveryState.Show : (isNEI) || (isMutationDiscovered) ? EnumDiscoveryState.Show : EnumDiscoveryState.Undetermined; + this.itemWidget1.setSpecies(allele, state); + allele = (IAlleleSpecies)((IMutation)getValue()).getAllele1(); + state = species == allele ? EnumDiscoveryState.Show : (isNEI) || (isMutationDiscovered) ? EnumDiscoveryState.Show : EnumDiscoveryState.Undetermined; + this.itemWidget2.setSpecies(allele, state); + allele = (IAlleleSpecies)((IMutation)getValue()).getTemplate()[0]; + state = species == allele ? EnumDiscoveryState.Show : (isNEI) || (isMutationDiscovered) ? EnumDiscoveryState.Show : EnumDiscoveryState.Undetermined; + this.itemWidget3.setSpecies(allele, state); + this.addSymbol.setValue((IMutation)getValue()); + this.arrowSymbol.setValue((IMutation)getValue()); + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlMutationSymbol.java b/src/Java/binnie/craftgui/mod/database/ControlMutationSymbol.java new file mode 100644 index 0000000000..5c8bdc0aed --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlMutationSymbol.java @@ -0,0 +1,80 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.ITooltip; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.Tooltip; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.renderer.Renderer; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.resource.Texture; +import binnie.craftgui.resource.minecraft.CraftGUITextureSheet; +import binnie.craftgui.resource.minecraft.StandardTexture; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IMutation; + +class ControlMutationSymbol + extends Control + implements ITooltip +{ + private static Texture MutationPlus = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.Controls2); + private static Texture MutationArrow = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.Controls2); + private IMutation value; + private boolean discovered; + private int type; + + public void onRenderBackground() + { + super.onRenderBackground(); + if (this.type == 0) { + CraftGUI.Render.texture(MutationPlus, IPoint.ZERO); + } else { + CraftGUI.Render.texture(MutationArrow, IPoint.ZERO); + } + } + + protected ControlMutationSymbol(IWidget parent, int x, int y, int type) + { + super(parent, x, y, 16 + type * 16, 16.0F); + this.value = null; + this.type = type; + addAttribute(Attribute.MouseOver); + } + + public void setValue(IMutation value) + { + this.value = value; + + boolean isNEI = ((WindowAbstractDatabase)getSuperParent()).isNEI(); + BreedingSystem system = ((WindowAbstractDatabase)getSuperParent()).getBreedingSystem(); + + this.discovered = (isNEI ? true : system.isMutationDiscovered(value, Window.get(this).getWorld(), Window.get(this).getUsername())); + if (this.discovered) { + setColour(16777215); + } else { + setColour(7829367); + } + } + + public void getTooltip(Tooltip tooltip) + { + if ((this.type == 1) && (this.discovered)) + { + IAllele species1 = this.value.getAllele0(); + IAllele species2 = this.value.getAllele1(); + + BreedingSystem system = ((WindowAbstractDatabase)getSuperParent()).getBreedingSystem(); + + float chance = system.getChance(this.value, Window.get(this).getPlayer(), species1, species2); + tooltip.add("Current Chance - " + chance + "%"); + if (this.value.getSpecialConditions() != null) { + for (String string : this.value.getSpecialConditions()) { + tooltip.add(string); + } + } + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlSpeciesBox.java b/src/Java/binnie/craftgui/mod/database/ControlSpeciesBox.java new file mode 100644 index 0000000000..4f184b0064 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlSpeciesBox.java @@ -0,0 +1,55 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlListBox; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.minecraft.Window; +import com.mojang.authlib.GameProfile; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; + +public class ControlSpeciesBox + extends ControlListBox +{ + public IWidget createOption(IAlleleSpecies value, int y) + { + return new ControlSpeciexBoxOption((ControlList)getContent(), value, y); + } + + public ControlSpeciesBox(IWidget parent, float x, float y, float width, float height) + { + super(parent, x, y, width, height, 12.0F); + } + + private IClassification branch = null; + + public void setBranch(IClassification branch) + { + if (branch != this.branch) + { + this.branch = branch; + List speciesList2 = new ArrayList(); + movePercentage(-100.0F); + setOptions(speciesList2); + + EntityPlayer player = Window.get(this).getPlayer(); + GameProfile playerName = Window.get(this).getUsername(); + WindowAbstractDatabase db = (WindowAbstractDatabase)Window.get(this); + + Collection speciesList = !db.isNEI ? db.getBreedingSystem().getDiscoveredSpecies(db.getWorld(), playerName) : db.getBreedingSystem().getAllSpecies(); + if (branch != null) { + for (IAlleleSpecies species : branch.getMemberSpecies()) { + if (speciesList.contains(species)) { + speciesList2.add(species); + } + } + } + setOptions(speciesList2); + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java b/src/Java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java new file mode 100644 index 0000000000..36ac5446b2 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/ControlSpeciexBoxOption.java @@ -0,0 +1,42 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.listbox.ControlList; +import binnie.craftgui.controls.listbox.ControlTextOption; +import binnie.craftgui.core.Attribute; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.renderer.Renderer; +import forestry.api.genetics.IAlleleSpecies; + +class ControlSpeciexBoxOption + extends ControlTextOption +{ + private ControlDatabaseIndividualDisplay controlBee; + + public ControlSpeciexBoxOption(ControlList controlList, IAlleleSpecies option, int y) + { + super(controlList, option, option.getName(), y); + setSize(new IPoint(getSize().x(), 20.0F)); + + this.controlBee = new ControlDatabaseIndividualDisplay(this, 2.0F, 2.0F); + + this.controlBee.setSpecies((IAlleleSpecies)getValue(), EnumDiscoveryState.Undetermined); + if (this.controlBee.discovered == EnumDiscoveryState.Discovered) { + this.controlBee.discovered = EnumDiscoveryState.Show; + } + this.textWidget.setValue(this.controlBee.discovered == EnumDiscoveryState.Show ? option.getName() : "Undiscovered"); + if (this.controlBee.discovered == EnumDiscoveryState.Show) { + addAttribute(Attribute.MouseOver); + } + CraftGUIUtil.moveWidget(this.textWidget, new IPoint(22.0F, 0.0F)); + this.textWidget.setSize(this.textWidget.getSize().sub(new IPoint(24.0F, 0.0F))); + + int th = (int)CraftGUI.Render.textHeight(this.textWidget.getValue(), this.textWidget.getSize().x()); + int height = Math.max(20, th + 6); + setSize(new IPoint(size().x(), height)); + this.textWidget.setSize(new IPoint(this.textWidget.getSize().x(), height)); + this.controlBee.setPosition(new IPoint(this.controlBee.pos().x(), (height - 18) / 2)); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/DatabaseTab.java b/src/Java/binnie/craftgui/mod/database/DatabaseTab.java new file mode 100644 index 0000000000..aee8ea5bf2 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/DatabaseTab.java @@ -0,0 +1,32 @@ +package binnie.craftgui.mod.database; + +import binnie.Binnie; +import binnie.core.AbstractMod; +import binnie.core.language.ManagerLanguage; +import binnie.craftgui.core.ITooltipHelp; +import binnie.craftgui.core.Tooltip; + +public class DatabaseTab + implements ITooltipHelp +{ + private AbstractMod mod; + private String unloc; + private int colour; + + public DatabaseTab(AbstractMod mod, String unloc, int colour) + { + this.mod = mod; + this.unloc = unloc; + this.colour = colour; + } + + public String toString() + { + return Binnie.Language.localise(this.mod, "gui.database.tab." + this.unloc); + } + + public void getHelpTooltip(Tooltip tooltip) + { + tooltip.add(Binnie.Language.localiseOrBlank(this.mod, "gui.database.tab." + this.unloc + ".help")); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/EnumDiscoveryState.java b/src/Java/binnie/craftgui/mod/database/EnumDiscoveryState.java new file mode 100644 index 0000000000..fe98cff136 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/EnumDiscoveryState.java @@ -0,0 +1,8 @@ +package binnie.craftgui.mod.database; + +public enum EnumDiscoveryState +{ + Show, Undetermined, Discovered, Undiscovered; + + private EnumDiscoveryState() {} +} diff --git a/src/Java/binnie/craftgui/mod/database/IDatabaseMode.java b/src/Java/binnie/craftgui/mod/database/IDatabaseMode.java new file mode 100644 index 0000000000..8744a2f0b7 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/IDatabaseMode.java @@ -0,0 +1,6 @@ +package binnie.craftgui.mod.database; + +public abstract interface IDatabaseMode +{ + public abstract String getName(); +} diff --git a/src/Java/binnie/craftgui/mod/database/PageAbstract.java b/src/Java/binnie/craftgui/mod/database/PageAbstract.java new file mode 100644 index 0000000000..9219dca0a7 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageAbstract.java @@ -0,0 +1,16 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.page.ControlPage; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.IPoint; + +public abstract class PageAbstract + extends ControlPage +{ + public PageAbstract(IWidget parent, DatabaseTab tab) + { + super(parent, 0.0F, 0.0F, parent.getSize().x(), parent.getSize().y(), tab); + } + + public abstract void onValueChanged(T paramT); +} diff --git a/src/Java/binnie/craftgui/mod/database/PageBranch.java b/src/Java/binnie/craftgui/mod/database/PageBranch.java new file mode 100644 index 0000000000..57af5128e5 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageBranch.java @@ -0,0 +1,13 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IClassification; + +abstract class PageBranch + extends PageAbstract +{ + public PageBranch(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageBranchOverview.java b/src/Java/binnie/craftgui/mod/database/PageBranchOverview.java new file mode 100644 index 0000000000..57ddc63fab --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageBranchOverview.java @@ -0,0 +1,67 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.renderer.Renderer; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; +import java.util.ArrayList; +import java.util.List; + +public class PageBranchOverview + extends PageBranch +{ + private ControlText pageBranchOverview_branchName; + private ControlText pageBranchOverview_branchScientific; + private ControlText pageBranchOverview_branchAuthority; + + public PageBranchOverview(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + + this.pageBranchOverview_branchName = new ControlTextCentered(this, 8.0F, ""); + + this.pageBranchOverview_branchScientific = new ControlTextCentered(this, 32.0F, ""); + this.pageBranchOverview_branchAuthority = new ControlTextCentered(this, 44.0F, ""); + } + + private List pageBranchOverview_branchDescription = new ArrayList(); + + public void onValueChanged(IClassification branch) + { + this.pageBranchOverview_branchName.setValue("§n" + branch.getName() + " Branch§r"); + + this.pageBranchOverview_branchScientific.setValue("§oApidae " + branch.getScientific() + "§r"); + + this.pageBranchOverview_branchAuthority.setValue("Discovered by §l" + branch.getMemberSpecies()[0].getAuthority() + "§r"); + for (IWidget widget : this.pageBranchOverview_branchDescription) { + deleteChild(widget); + } + this.pageBranchOverview_branchDescription.clear(); + + String desc = branch.getDescription(); + if ((desc == null) || (desc == "")) { + desc = "No Description Provided."; + } + String line = ""; + + List descLines = new ArrayList(); + for (String str : desc.split(" ")) + { + if (CraftGUI.Render.textWidth(line + " " + str) > 134) + { + descLines.add("§o" + line + "§r"); + line = ""; + } + line = line + " " + str; + } + descLines.add(line); + + int i = 0; + for (String dLine : descLines) { + this.pageBranchOverview_branchDescription.add(new ControlTextCentered(this, 84 + 12 * i++, dLine)); + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageBranchSpecies.java b/src/Java/binnie/craftgui/mod/database/PageBranchSpecies.java new file mode 100644 index 0000000000..600ca66674 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageBranchSpecies.java @@ -0,0 +1,43 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.events.EventValueChanged.Handler; +import cpw.mods.fml.common.Mod.EventHandler; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; + +public class PageBranchSpecies + extends PageBranch +{ + private ControlText pageBranchSpecies_title; + private ControlSpeciesBox pageBranchSpecies_speciesList; + + @Mod.EventHandler + public void onHandleEvent(EventValueChanged event) {} + + public PageBranchSpecies(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + + this.pageBranchSpecies_title = new ControlTextCentered(this, 8.0F, "Species"); + + addEventHandler(new EventValueChanged.Handler() + { + public void onEvent(EventValueChanged event) + { + if (event.isOrigin(PageBranchSpecies.this.pageBranchSpecies_speciesList)) { + ((WindowAbstractDatabase)PageBranchSpecies.this.getSuperParent()).gotoSpecies((IAlleleSpecies)event.getValue()); + } + } + }); + this.pageBranchSpecies_speciesList = new ControlSpeciesBox(this, 4.0F, 20.0F, 136.0F, 152.0F); + } + + public void onValueChanged(IClassification branch) + { + this.pageBranchSpecies_speciesList.setBranch(branch); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageBreeder.java b/src/Java/binnie/craftgui/mod/database/PageBreeder.java new file mode 100644 index 0000000000..d3f0b7b617 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageBreeder.java @@ -0,0 +1,51 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.controls.page.ControlPage; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.minecraft.Window; +import com.mojang.authlib.GameProfile; +import java.util.List; + +public class PageBreeder + extends ControlPage +{ + private GameProfile player; + + public PageBreeder(IWidget parent, GameProfile player, DatabaseTab tab) + { + super(parent, 0.0F, 0.0F, parent.getSize().x(), parent.getSize().y(), tab); + + this.player = player; + onPageRefresh(); + } + + public void onPageRefresh() + { + while (getWidgets().size() > 0) { + deleteChild((IWidget)getWidgets().get(0)); + } + BreedingSystem system = ((WindowAbstractDatabase)Window.get(this)).getBreedingSystem(); + + String descriptor = system.getDescriptor(); + + new ControlTextCentered(this, 8.0F, "§n" + system.getDescriptor() + " Profile§r"); + + new ControlTextCentered(this, 75.0F, "" + system.discoveredSpeciesCount + "/" + system.totalSpeciesCount + " Species"); + + + new ControlBreedingProgress(this, 20, 87, 102, 14, system, system.discoveredSpeciesPercentage); + + new ControlTextCentered(this, 115.0F, "" + system.discoveredBranchCount + "/" + system.totalBranchCount + " Branches"); + + + new ControlBreedingProgress(this, 20, 127, 102, 14, system, system.discoveredBranchPercentage); + if (system.discoveredSecretCount > 0) { + new ControlTextCentered(this, 155.0F, "" + system.discoveredSecretCount + "/" + system.totalSecretCount + " Secret Species"); + } + new ControlTextCentered(this, 32.0F, this.player.getName()); + new ControlTextCentered(this, 44.0F, "§o" + system.getEpitome() + "§r"); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageBreederStats.java b/src/Java/binnie/craftgui/mod/database/PageBreederStats.java new file mode 100644 index 0000000000..18c1f288d5 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageBreederStats.java @@ -0,0 +1,23 @@ +package binnie.craftgui.mod.database; + +import binnie.core.genetics.BreedingSystem; +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.controls.core.Control; +import binnie.craftgui.core.IWidget; + +public class PageBreederStats + extends Control +{ + String player; + + public PageBreederStats(IWidget parent, int w, int h, String player) + { + super(parent, 0.0F, 0.0F, w, h); + this.player = player; + + ControlText pageBranchOverview_branchName = new ControlTextCentered(this, 8.0F, "§nStats§r"); + + BreedingSystem system = ((WindowAbstractDatabase)getSuperParent()).getBreedingSystem(); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageSpecies.java b/src/Java/binnie/craftgui/mod/database/PageSpecies.java new file mode 100644 index 0000000000..c94984bd3a --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageSpecies.java @@ -0,0 +1,13 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IAlleleSpecies; + +public abstract class PageSpecies + extends PageAbstract +{ + public PageSpecies(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageSpeciesClassification.java b/src/Java/binnie/craftgui/mod/database/PageSpeciesClassification.java new file mode 100644 index 0000000000..3db09e32cf --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageSpeciesClassification.java @@ -0,0 +1,54 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; +import forestry.api.genetics.IClassification.EnumClassLevel; +import java.util.LinkedHashMap; +import java.util.Map; + +public class PageSpeciesClassification + extends PageSpecies +{ + private Map levels = new LinkedHashMap(); + private ControlText genus; + + public PageSpeciesClassification(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + int y = 16; + for (IClassification.EnumClassLevel level : IClassification.EnumClassLevel.values()) + { + ControlText text = new ControlTextCentered(this, y, ""); + text.setColour(level.getColour()); + this.levels.put(level, text); + y += 12; + } + this.genus = new ControlTextCentered(this, y, ""); + this.genus.setColour(16759415); + } + + public void onValueChanged(IAlleleSpecies species) + { + if (species != null) + { + for (ControlText text : this.levels.values()) { + text.setValue("- - -"); + } + this.genus.setValue(species.getBinomial()); + + IClassification classification = species.getBranch(); + while (classification != null) + { + IClassification.EnumClassLevel level = classification.getLevel(); + String text = ""; + int n = level.ordinal(); + text = text + classification.getScientific(); + ((ControlText)this.levels.get(level)).setValue(text); + classification = classification.getParent(); + } + } + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageSpeciesMutations.java b/src/Java/binnie/craftgui/mod/database/PageSpeciesMutations.java new file mode 100644 index 0000000000..16a6e6673a --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageSpeciesMutations.java @@ -0,0 +1,27 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IAlleleSpecies; + +public class PageSpeciesMutations + extends PageSpecies +{ + private ControlText pageSpeciesFurther_Title; + private ControlMutationBox pageSpeciesFurther_List; + + public PageSpeciesMutations(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + + this.pageSpeciesFurther_Title = new ControlTextCentered(this, 8.0F, "Further Mutations"); + + this.pageSpeciesFurther_List = new ControlMutationBox(this, 4, 20, 136, 152, ControlMutationBox.Type.Further); + } + + public void onValueChanged(IAlleleSpecies species) + { + this.pageSpeciesFurther_List.setSpecies(species); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageSpeciesOverview.java b/src/Java/binnie/craftgui/mod/database/PageSpeciesOverview.java new file mode 100644 index 0000000000..083162e902 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageSpeciesOverview.java @@ -0,0 +1,88 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.CraftGUI; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.geometry.TextJustification; +import binnie.craftgui.core.renderer.Renderer; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IClassification; + +public class PageSpeciesOverview + extends PageSpecies +{ + private ControlText controlName; + private ControlText controlScientific; + private ControlText controlAuthority; + private ControlText controlComplexity; + private ControlText controlDescription; + private ControlText controlSignature; + private ControlDatabaseIndividualDisplay controlInd1; + private ControlDatabaseIndividualDisplay controlInd2; + + public PageSpeciesOverview(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + + this.controlInd1 = new ControlDatabaseIndividualDisplay(this, 5.0F, 5.0F); + this.controlInd2 = new ControlDatabaseIndividualDisplay(this, 123.0F, 5.0F); + + this.controlName = new ControlTextCentered(this, 8.0F, ""); + + this.controlScientific = new ControlTextCentered(this, 32.0F, ""); + this.controlAuthority = new ControlTextCentered(this, 44.0F, ""); + this.controlComplexity = new ControlTextCentered(this, 56.0F, ""); + + this.controlDescription = new ControlText(this, new IArea(8.0F, 84.0F, getSize().x() - 16.0F, 0.0F), "", TextJustification.MiddleCenter); + + this.controlSignature = new ControlText(this, new IArea(8.0F, 84.0F, getSize().x() - 16.0F, 0.0F), "", TextJustification.BottomRight); + } + + public void onValueChanged(IAlleleSpecies species) + { + this.controlInd1.setSpecies(species, EnumDiscoveryState.Show); + this.controlInd2.setSpecies(species, EnumDiscoveryState.Show); + String branchBinomial = species.getBranch() != null ? species.getBranch().getScientific() : ""; + + String branchName = species.getBranch() != null ? species.getBranch().getName() : "Unknown"; + + + this.controlName.setValue("§n" + species.getName() + "§r"); + this.controlScientific.setValue("§o" + branchBinomial + " " + species.getBinomial() + "§r"); + + this.controlAuthority.setValue("Discovered by §l" + species.getAuthority() + "§r"); + + this.controlComplexity.setValue("Complexity: " + species.getComplexity()); + + + + String desc = species.getDescription(); + + String descBody = "§o"; + String descSig = ""; + if ((desc == null) || (desc == "")) + { + descBody = descBody + "No Description Provided."; + } + else + { + String[] descStrings = desc.split("\\|"); + descBody = descBody + descStrings[0]; + for (int i = 1; i < descStrings.length - 1; i++) { + descBody = descBody + " " + descStrings[i]; + } + if (descStrings.length > 1) { + descSig = descSig + descStrings[(descStrings.length - 1)]; + } + } + this.controlDescription.setValue(descBody + "§r"); + this.controlSignature.setValue(descSig + "§r"); + + float descHeight = CraftGUI.Render.textHeight(this.controlDescription.getValue(), this.controlDescription.getSize().x()); + + this.controlSignature.setPosition(new IPoint(this.controlSignature.pos().x(), this.controlDescription.getPosition().y() + descHeight + 10.0F)); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/PageSpeciesResultant.java b/src/Java/binnie/craftgui/mod/database/PageSpeciesResultant.java new file mode 100644 index 0000000000..f6f2d487c0 --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/PageSpeciesResultant.java @@ -0,0 +1,27 @@ +package binnie.craftgui.mod.database; + +import binnie.craftgui.controls.ControlText; +import binnie.craftgui.controls.ControlTextCentered; +import binnie.craftgui.core.IWidget; +import forestry.api.genetics.IAlleleSpecies; + +public class PageSpeciesResultant + extends PageSpecies +{ + private ControlText pageSpeciesResultant_Title; + private ControlMutationBox pageSpeciesResultant_List; + + public PageSpeciesResultant(IWidget parent, DatabaseTab tab) + { + super(parent, tab); + + this.pageSpeciesResultant_Title = new ControlTextCentered(this, 8.0F, "Resultant Mutations"); + + this.pageSpeciesResultant_List = new ControlMutationBox(this, 4, 20, 136, 152, ControlMutationBox.Type.Resultant); + } + + public void onValueChanged(IAlleleSpecies species) + { + this.pageSpeciesResultant_List.setSpecies(species); + } +} diff --git a/src/Java/binnie/craftgui/mod/database/WindowAbstractDatabase.java b/src/Java/binnie/craftgui/mod/database/WindowAbstractDatabase.java new file mode 100644 index 0000000000..54ca5a4aca --- /dev/null +++ b/src/Java/binnie/craftgui/mod/database/WindowAbstractDatabase.java @@ -0,0 +1,314 @@ +package binnie.craftgui.mod.database; + +import binnie.core.BinnieCore; +import binnie.core.genetics.BreedingSystem; +import binnie.core.proxy.BinnieProxy; +import binnie.core.util.IValidator; +import binnie.craftgui.controls.ControlTextEdit; +import binnie.craftgui.controls.listbox.ControlListBox; +import binnie.craftgui.controls.listbox.ControlTextOption; +import binnie.craftgui.controls.page.ControlPage; +import binnie.craftgui.controls.page.ControlPages; +import binnie.craftgui.controls.tab.ControlTab; +import binnie.craftgui.controls.tab.ControlTabBar; +import binnie.craftgui.core.IWidget; +import binnie.craftgui.core.geometry.CraftGUIUtil; +import binnie.craftgui.core.geometry.IArea; +import binnie.craftgui.core.geometry.IPoint; +import binnie.craftgui.core.geometry.Position; +import binnie.craftgui.events.EventHandler.Origin; +import binnie.craftgui.events.EventTextEdit; +import binnie.craftgui.events.EventTextEdit.Handler; +import binnie.craftgui.events.EventValueChanged; +import binnie.craftgui.events.EventValueChanged.Handler; +import binnie.craftgui.minecraft.MinecraftGUI.PanelType; +import binnie.craftgui.minecraft.Window; +import binnie.craftgui.minecraft.control.ControlHelp; +import binnie.craftgui.window.Panel; +import com.mojang.authlib.GameProfile; +import cpw.mods.fml.relauncher.Side; +import forestry.api.genetics.IAlleleSpecies; +import forestry.api.genetics.IBreedingTracker; +import forestry.api.genetics.IClassification; +import forestry.api.genetics.ISpeciesRoot; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.entity.player.EntityPlayer; + +public abstract class WindowAbstractDatabase + extends Window +{ + private float selectionBoxWidth = 95.0F; + private final float infoBoxWidth = 144.0F; + private final float infoBoxHeight = 176.0F; + private final float infoTabWidth = 16.0F; + private final float modeTabWidth = 22.0F; + private final float searchBoxHeight = 16.0F; + + public void changeMode(IDatabaseMode mode) + { + this.modePages.setValue(mode); + } + + public WindowAbstractDatabase(EntityPlayer player, Side side, boolean nei, BreedingSystem system, float wid) + { + super(100.0F, 192.0F, player, null, side); + this.isNEI = nei; + this.system = system; + this.selectionBoxWidth = wid; + } + + public static enum Mode + implements IDatabaseMode + { + Species, Branches, Breeder; + + private Mode() {} + + public String getName() + { + return BinnieCore.proxy.localise("gui.database.mode." + name().toLowerCase()); + } + } + + public static abstract class ModeWidgets + { + public WindowAbstractDatabase database; + public ControlPage modePage; + private ControlPages infoPages; + public ControlListBox listBox; + private ControlTabBar infoTabs; + + public ModeWidgets(IDatabaseMode mode, WindowAbstractDatabase database) + { + this.database = database; + this.modePage = new ControlPage(database.modePages, 0.0F, 0.0F, database.getSize().x(), database.getSize().y(), mode); + + IArea listBoxArea = database.panelSearch.area().inset(2); + + createListBox(listBoxArea); + + CraftGUIUtil.alignToWidget(this.listBox, database.panelSearch); + CraftGUIUtil.moveWidget(this.listBox, new IPoint(2.0F, 2.0F)); + + this.infoPages = new ControlPages(this.modePage, 0.0F, 0.0F, 144.0F, 176.0F); + + CraftGUIUtil.alignToWidget(this.infoPages, database.panelInformation); + } + + public abstract void createListBox(IArea paramIArea); + } + + public ControlPages getInfoPages(IDatabaseMode mode) + { + return ((ModeWidgets)this.modes.get(mode)).infoPages; + } + + private Map modes = new HashMap(); + boolean isNEI; + private BreedingSystem system; + + public boolean isNEI() + { + return this.isNEI; + } + + public BreedingSystem getBreedingSystem() + { + return this.system; + } + + public WindowAbstractDatabase(EntityPlayer player, Side side, boolean nei, BreedingSystem system) + { + this(player, side, nei, system, 95.0F); + } + + private Panel panelInformation = null; + private Panel panelSearch = null; + private ControlPages modePages = null; + + protected ModeWidgets createMode(IDatabaseMode mode, ModeWidgets widgets) + { + this.modes.put(mode, widgets); + + return widgets; + } + + public void initialiseClient() + { + setSize(new IPoint(176.0F + this.selectionBoxWidth + 22.0F + 8.0F, 208.0F)); + + addEventHandler(new EventValueChanged.Handler() + { + public void onEvent(EventValueChanged event) + { + if (((event.getOrigin().getParent() instanceof ControlPage)) && (!(event.getValue() instanceof DatabaseTab))) + { + ControlPage parent = (ControlPage)event.getOrigin().getParent(); + if ((parent.getValue() instanceof IDatabaseMode)) { + for (IWidget widget : parent.getWidgets()) { + if ((widget instanceof ControlPages)) { + if (event.getValue() == null) + { + widget.hide(); + } + else + { + widget.show(); + for (IWidget widget2 : widget.getWidgets()) { + if ((widget2 instanceof PageAbstract)) { + ((PageAbstract)widget2).onValueChanged(event.getValue()); + } + } + } + } + } + } + } + } + }); + addEventHandler(new EventTextEdit.Handler() + { + public void onEvent(final EventTextEdit event) + { + for (WindowAbstractDatabase.ModeWidgets widgets : WindowAbstractDatabase.this.modes.values()) { + widgets.listBox.setValidator(new IValidator() + { + public boolean isValid(IWidget object) + { + return (event.getValue() == "") || (((ControlTextOption)object).getText().toLowerCase().contains(((String)event.getValue()).toLowerCase())); + } + }); + } + } + }.setOrigin(EventHandler.Origin.DirectChild, this)); + + + + + + + + + + + + + new ControlHelp(this, 4.0F, 4.0F); + + this.panelInformation = new Panel(this, 24.0F, 24.0F, 144.0F, 176.0F, MinecraftGUI.PanelType.Black); + this.panelInformation.setColour(860416); + + this.panelSearch = new Panel(this, 176.0F, 24.0F, this.selectionBoxWidth, 160.0F, MinecraftGUI.PanelType.Black); + + this.panelSearch.setColour(860416); + + this.modePages = new ControlPages(this, 0.0F, 0.0F, getSize().x(), getSize().y()); + + new ControlTextEdit(this, 176.0F, 184.0F, this.selectionBoxWidth, 16.0F); + + + createMode(Mode.Species, new ModeWidgets(Mode.Species, this) + { + public void createListBox(IArea area) + { + GameProfile playerName = WindowAbstractDatabase.this.getUsername(); + + Collection speciesList = !this.database.isNEI ? this.database.system.getDiscoveredSpecies(this.database.getWorld(), playerName) : this.database.system.getAllSpecies(); + + + this.listBox = new ControlSpeciesBox(this.modePage, area.x(), area.y(), area.w(), area.h()); + this.listBox.setOptions(speciesList); + } + }); + createMode(Mode.Branches, new ModeWidgets(Mode.Branches, this) + { + public void createListBox(IArea area) + { + EntityPlayer player = this.database.getPlayer(); + GameProfile playerName = WindowAbstractDatabase.this.getUsername(); + + Collection speciesList = !this.database.isNEI ? this.database.system.getDiscoveredBranches(this.database.getWorld(), playerName) : this.database.system.getAllBranches(); + + + this.listBox = new ControlBranchBox(this.modePage, area.x(), area.y(), area.w(), area.h()); + this.listBox.setOptions(speciesList); + } + }); + createMode(Mode.Breeder, new ModeWidgets(Mode.Breeder, this) + { + public void createListBox(IArea area) + { + this.listBox = new ControlListBox(this.modePage, area.x(), area.y(), area.w(), area.h(), 12.0F); + } + }); + addTabs(); + + ControlTabBar tab = new ControlTabBar(this, 176.0F + this.selectionBoxWidth, 24.0F, 22.0F, 176.0F, Position.Right) + { + public ControlTab createTab(float x, float y, float w, float h, IDatabaseMode value) + { + new ControlTab(this, x, y, w, h, value) + { + public String getName() + { + return ((IDatabaseMode)this.value).getName(); + } + }; + } + }; + tab.setValues(this.modePages.getValues()); + + CraftGUIUtil.linkWidgets(tab, this.modePages); + + + changeMode(Mode.Species); + for (IDatabaseMode mode : this.modes.keySet()) + { + ((ModeWidgets)this.modes.get(mode)).infoTabs = new ControlTabBar(((ModeWidgets)this.modes.get(mode)).modePage, 8.0F, 24.0F, 16.0F, 176.0F, Position.Left); + + + ((ModeWidgets)this.modes.get(mode)).infoTabs.setValues(((ModeWidgets)this.modes.get(mode)).infoPages.getValues()); + + CraftGUIUtil.linkWidgets(((ModeWidgets)this.modes.get(mode)).infoTabs, ((ModeWidgets)this.modes.get(mode)).infoPages); + } + } + + public void initialiseServer() + { + IBreedingTracker tracker = this.system.getSpeciesRoot().getBreedingTracker(getWorld(), getUsername()); + if (tracker != null) { + tracker.synchToPlayer(getPlayer()); + } + } + + protected void addTabs() {} + + public void gotoSpecies(IAlleleSpecies value) + { + if (value != null) + { + this.modePages.setValue(Mode.Species); + changeMode(Mode.Species); + ((ModeWidgets)this.modes.get(this.modePages.getValue())).listBox.setValue(value); + } + } + + public void gotoSpeciesDelayed(IAlleleSpecies species) + { + this.gotoSpecies = species; + } + + private IAlleleSpecies gotoSpecies = null; + + public void onUpdateClient() + { + super.onUpdateClient(); + if (this.gotoSpecies != null) + { + ((WindowAbstractDatabase)getSuperParent()).gotoSpecies(this.gotoSpecies); + this.gotoSpecies = null; + } + } +} -- cgit