aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/craftgui/controls/tab/ControlTabBar.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/craftgui/controls/tab/ControlTabBar.java')
-rw-r--r--src/Java/binnie/craftgui/controls/tab/ControlTabBar.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/Java/binnie/craftgui/controls/tab/ControlTabBar.java b/src/Java/binnie/craftgui/controls/tab/ControlTabBar.java
new file mode 100644
index 0000000000..d209887994
--- /dev/null
+++ b/src/Java/binnie/craftgui/controls/tab/ControlTabBar.java
@@ -0,0 +1,86 @@
+package binnie.craftgui.controls.tab;
+
+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.core.geometry.Position;
+import binnie.craftgui.events.EventHandler.Origin;
+import binnie.craftgui.events.EventValueChanged;
+import binnie.craftgui.events.EventValueChanged.Handler;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+public class ControlTabBar<T>
+ extends Control
+ implements IControlValue<T>
+{
+ T value;
+ Position position;
+
+ public ControlTabBar(IWidget parent, float x, float y, float width, float height, Position position)
+ {
+ super(parent, x, y, width, height);
+ this.position = position;
+
+ addEventHandler(new EventValueChanged.Handler()
+ {
+ public void onEvent(EventValueChanged event)
+ {
+ ControlTabBar.this.setValue(event.getValue());
+ }
+ }.setOrigin(EventHandler.Origin.DirectChild, this));
+ }
+
+ public void setValues(Collection<T> values)
+ {
+ for (int i = 0; i < getWidgets().size();) {
+ deleteChild((IWidget)getWidgets().get(0));
+ }
+ float length = values.size();
+ int tabDimension = (int)(getSize().y() / length);
+ if ((this.position == Position.Top) || (this.position == Position.Bottom)) {
+ tabDimension = (int)(getSize().x() / length);
+ }
+ int i = 0;
+ for (T value : values)
+ {
+ IWidget tab;
+ IWidget tab;
+ if ((this.position == Position.Top) || (this.position == Position.Bottom)) {
+ tab = createTab(i * tabDimension, 0.0F, tabDimension, getSize().y(), value);
+ } else {
+ tab = createTab(0.0F, i * tabDimension, getSize().x(), tabDimension, value);
+ }
+ i++;
+ }
+ if ((this.value == null) && (!values.isEmpty())) {
+ setValue(values.iterator().next());
+ }
+ }
+
+ public ControlTab<T> createTab(float x, float y, float w, float h, T value)
+ {
+ return new ControlTab(this, x, y, w, h, value);
+ }
+
+ public T getValue()
+ {
+ return this.value;
+ }
+
+ public void setValue(T value)
+ {
+ boolean change = this.value != value;
+ this.value = value;
+ if (change) {
+ callEvent(new EventValueChanged(this, value));
+ }
+ }
+
+ public Position getDirection()
+ {
+ return this.position;
+ }
+}