aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/craftgui/controls/listbox
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-01-20 14:24:34 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-01-20 14:24:34 +1000
commit869c206c4fcc8001bd2e1d66f704290331813835 (patch)
tree96735ce8fe4665e2759c3374221d6f06f4527df2 /src/Java/binnie/craftgui/controls/listbox
parentec2c72827f01dd4bb2174137f1ab162f9ddaab62 (diff)
downloadGT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.tar.gz
GT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.tar.bz2
GT5-Unofficial-869c206c4fcc8001bd2e1d66f704290331813835.zip
Initial Commit
Diffstat (limited to 'src/Java/binnie/craftgui/controls/listbox')
-rw-r--r--src/Java/binnie/craftgui/controls/listbox/ControlList.java146
-rw-r--r--src/Java/binnie/craftgui/controls/listbox/ControlListBox.java76
-rw-r--r--src/Java/binnie/craftgui/controls/listbox/ControlOption.java73
-rw-r--r--src/Java/binnie/craftgui/controls/listbox/ControlTextOption.java37
4 files changed, 332 insertions, 0 deletions
diff --git a/src/Java/binnie/craftgui/controls/listbox/ControlList.java b/src/Java/binnie/craftgui/controls/listbox/ControlList.java
new file mode 100644
index 0000000000..d1b6be8821
--- /dev/null
+++ b/src/Java/binnie/craftgui/controls/listbox/ControlList.java
@@ -0,0 +1,146 @@
+package binnie.craftgui.controls.listbox;
+
+import binnie.core.util.IValidator;
+import binnie.craftgui.controls.core.Control;
+import binnie.craftgui.controls.core.IControlValue;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.core.geometry.IPoint;
+import binnie.craftgui.events.EventValueChanged;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class ControlList<T>
+ extends Control
+ implements IControlValue<T>
+{
+ ControlListBox<T> parent;
+
+ protected ControlList(ControlListBox<T> parent, float x, float y, float w, float h)
+ {
+ super(parent, x, y, w, h);
+ this.parent = parent;
+ }
+
+ T value = null;
+ Map<T, IWidget> allOptions = new LinkedHashMap();
+ Map<T, IWidget> optionWidgets = new LinkedHashMap();
+
+ public T getValue()
+ {
+ return this.value;
+ }
+
+ public void setValue(T value)
+ {
+ if (value == this.value) {
+ return;
+ }
+ this.value = value;
+ if ((value != null) && (this.optionWidgets.containsKey(value)))
+ {
+ IWidget child = (IWidget)this.optionWidgets.get(value);
+ this.parent.ensureVisible(child.y(), child.y() + child.h(), h());
+ }
+ getParent().callEvent(new EventValueChanged(getParent(), value));
+ }
+
+ boolean creating = false;
+ IValidator<IWidget> validator;
+
+ public void setOptions(Collection<T> options)
+ {
+ deleteAllChildren();
+ this.allOptions.clear();
+ int i = 0;
+ for (T option : options)
+ {
+ IWidget optionWidget = ((ControlListBox)getParent()).createOption(option, 0);
+ if (optionWidget != null) {
+ this.allOptions.put(option, optionWidget);
+ }
+ i++;
+ }
+ filterOptions();
+ }
+
+ public void filterOptions()
+ {
+ int height = 0;
+ this.optionWidgets.clear();
+ for (Map.Entry<T, IWidget> entry : this.allOptions.entrySet()) {
+ if (isValidOption((IWidget)entry.getValue()))
+ {
+ ((IWidget)entry.getValue()).show();
+ this.optionWidgets.put(entry.getKey(), entry.getValue());
+ ((IWidget)entry.getValue()).setPosition(new IPoint(0.0F, height));
+ height = (int)(height + ((IWidget)entry.getValue()).getSize().y());
+ }
+ else
+ {
+ ((IWidget)entry.getValue()).hide();
+ }
+ }
+ this.creating = true;
+ setValue(getValue());
+ setSize(new IPoint(getSize().x(), height));
+ }
+
+ public Collection<T> getOptions()
+ {
+ return this.optionWidgets.keySet();
+ }
+
+ public Collection<T> getAllOptions()
+ {
+ return this.allOptions.keySet();
+ }
+
+ public int getIndexOf(T value)
+ {
+ int index = 0;
+ for (T option : getOptions())
+ {
+ if (option.equals(value)) {
+ return index;
+ }
+ index++;
+ }
+ return -1;
+ }
+
+ public int getCurrentIndex()
+ {
+ return getIndexOf(getValue());
+ }
+
+ public void setIndex(int currentIndex)
+ {
+ int index = 0;
+ for (T option : getOptions())
+ {
+ if (index == currentIndex)
+ {
+ setValue(option);
+ return;
+ }
+ index++;
+ }
+ setValue(null);
+ }
+
+ private boolean isValidOption(IWidget widget)
+ {
+ return this.validator == null ? true : this.validator.isValid(widget);
+ }
+
+ public void setValidator(IValidator<IWidget> validator)
+ {
+ if (this.validator != validator)
+ {
+ this.validator = validator;
+ filterOptions();
+ }
+ }
+}
diff --git a/src/Java/binnie/craftgui/controls/listbox/ControlListBox.java b/src/Java/binnie/craftgui/controls/listbox/ControlListBox.java
new file mode 100644
index 0000000000..e9370daa3d
--- /dev/null
+++ b/src/Java/binnie/craftgui/controls/listbox/ControlListBox.java
@@ -0,0 +1,76 @@
+package binnie.craftgui.controls.listbox;
+
+import binnie.core.util.IValidator;
+import binnie.craftgui.controls.core.IControlValue;
+import binnie.craftgui.controls.scroll.ControlScrollableContent;
+import binnie.craftgui.core.IWidget;
+import binnie.craftgui.events.EventKey.Down;
+import binnie.craftgui.events.EventKey.Down.Handler;
+import java.util.Collection;
+
+public class ControlListBox<T>
+ extends ControlScrollableContent<ControlList<T>>
+ implements IControlValue<T>
+{
+ public ControlListBox(IWidget parent, float x, float y, float w, float h, float scrollBarSize)
+ {
+ super(parent, x, y, w, h, scrollBarSize);
+ }
+
+ public void initialise()
+ {
+ setScrollableContent(new ControlList(this, 1.0F, 1.0F, w() - 2.0F - this.scrollBarSize, h() - 2.0F));
+
+ addEventHandler(new EventKey.Down.Handler()
+ {
+ public void onEvent(EventKey.Down event)
+ {
+ EventKey.Down eventKey = event;
+ if (ControlListBox.this.calculateIsMouseOver())
+ {
+ int currentIndex = ((ControlList)ControlListBox.this.getContent()).getCurrentIndex();
+ if (eventKey.getKey() == 208)
+ {
+ currentIndex++;
+ if (currentIndex >= ((ControlList)ControlListBox.this.getContent()).getOptions().size()) {
+ currentIndex = 0;
+ }
+ }
+ else if (eventKey.getKey() == 200)
+ {
+ currentIndex--;
+ if (currentIndex < 0) {
+ currentIndex = ((ControlList)ControlListBox.this.getContent()).getOptions().size() - 1;
+ }
+ }
+ ((ControlList)ControlListBox.this.getContent()).setIndex(currentIndex);
+ }
+ }
+ });
+ }
+
+ public final T getValue()
+ {
+ return ((ControlList)getContent()).getValue();
+ }
+
+ public final void setValue(T value)
+ {
+ ((ControlList)getContent()).setValue(value);
+ }
+
+ public void setOptions(Collection<T> options)
+ {
+ ((ControlList)getContent()).setOptions(options);
+ }
+
+ public IWidget createOption(T value, int y)
+ {
+ return new ControlOption((ControlList)getContent(), value, y);
+ }
+
+ public void setValidator(IValidator<IWidget> validator)
+ {
+ ((ControlList)getContent()).setValidator(validator);
+ }
+}
diff --git a/src/Java/binnie/craftgui/controls/listbox/ControlOption.java b/src/Java/binnie/craftgui/controls/listbox/ControlOption.java
new file mode 100644
index 0000000000..7a643101cf
--- /dev/null
+++ b/src/Java/binnie/craftgui/controls/listbox/ControlOption.java
@@ -0,0 +1,73 @@
+package binnie.craftgui.controls.listbox;
+
+import binnie.craftgui.controls.core.Control;
+import binnie.craftgui.controls.core.IControlValue;
+import binnie.craftgui.core.Attribute;
+import binnie.craftgui.core.CraftGUI;
+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.resource.minecraft.CraftGUITexture;
+
+public class ControlOption<T>
+ extends Control
+ implements IControlValue<T>
+{
+ T value;
+
+ public void onUpdateClient()
+ {
+ if (getValue() == null) {
+ return;
+ }
+ int colour = 10526880;
+ if (isCurrentSelection()) {
+ colour = 16777215;
+ }
+ setColour(colour);
+ }
+
+ public ControlOption(ControlList<T> controlList, T option)
+ {
+ this(controlList, option, 16);
+ }
+
+ public ControlOption(ControlList<T> controlList, T option, int height)
+ {
+ super(controlList, 0.0F, height, controlList.getSize().x(), 20.0F);
+ this.value = option;
+ if (this.value != null) {
+ addAttribute(Attribute.MouseOver);
+ }
+ addSelfEventHandler(new EventMouse.Down.Handler()
+ {
+ public void onEvent(EventMouse.Down event)
+ {
+ ((IControlValue)ControlOption.this.getParent()).setValue(ControlOption.this.getValue());
+ }
+ });
+ }
+
+ public T getValue()
+ {
+ return this.value;
+ }
+
+ public void setValue(T value)
+ {
+ this.value = value;
+ }
+
+ public boolean isCurrentSelection()
+ {
+ return (getValue() != null) && (getValue().equals(((IControlValue)getParent()).getValue()));
+ }
+
+ public void onRenderForeground()
+ {
+ if (isCurrentSelection()) {
+ CraftGUI.Render.texture(CraftGUITexture.Outline, getArea());
+ }
+ }
+}
diff --git a/src/Java/binnie/craftgui/controls/listbox/ControlTextOption.java b/src/Java/binnie/craftgui/controls/listbox/ControlTextOption.java
new file mode 100644
index 0000000000..6a47ec5d41
--- /dev/null
+++ b/src/Java/binnie/craftgui/controls/listbox/ControlTextOption.java
@@ -0,0 +1,37 @@
+package binnie.craftgui.controls.listbox;
+
+import binnie.craftgui.controls.ControlText;
+import binnie.craftgui.core.geometry.TextJustification;
+import binnie.craftgui.events.EventHandler.Origin;
+import binnie.craftgui.events.EventWidget.ChangeColour;
+import binnie.craftgui.events.EventWidget.ChangeColour.Handler;
+
+public class ControlTextOption<T>
+ extends ControlOption<T>
+{
+ public ControlTextOption(ControlList<T> controlList, T option, String optionName, int y)
+ {
+ super(controlList, option, y);
+ this.textWidget = new ControlText(this, getArea(), optionName, TextJustification.MiddleCenter);
+
+ addEventHandler(new EventWidget.ChangeColour.Handler()
+ {
+ public void onEvent(EventWidget.ChangeColour event)
+ {
+ ControlTextOption.this.textWidget.setColour(ControlTextOption.this.getColour());
+ }
+ }.setOrigin(EventHandler.Origin.Self, this));
+ }
+
+ public ControlTextOption(ControlList<T> controlList, T option, int y)
+ {
+ this(controlList, option, option.toString(), y);
+ }
+
+ protected ControlText textWidget = null;
+
+ public String getText()
+ {
+ return this.textWidget.getValue();
+ }
+}