package openmods.gui.component;
import net.minecraft.client.Minecraft;
import openmods.gui.listener.IMouseDownListener;
public class GuiComponentTabWrapper extends BaseComposite {
protected final BaseComponent mainComponent;
protected GuiComponentTab activeTab;
public GuiComponentTabWrapper(int x, int y, BaseComponent mainComponent) {
super(x, y);
this.mainComponent = mainComponent;
addComponent(mainComponent);
}
@Override
public BaseComposite addComponent(BaseComponent component) {
super.addComponent(component);
if (component instanceof GuiComponentTab) {
final GuiComponentTab tab = (GuiComponentTab)component;
component.setX(component.getX() + mainComponent.getWidth());
component.setListener(new IMouseDownListener() {
@Override
public void componentMouseDown(BaseComponent component, int x, int y, int button) {
if (activeTab != tab) {
if (activeTab != null) activeTab.setActive(false);
activeTab = tab;
activeTab.setActive(true);
} else if (activeTab != null && activeTab.isOrigin(x, y)) {
tab.setActive(false);
activeTab = null;
}
}
});
}
return this;
}
@Override
protected void renderComponentBackground(Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) {
realignTabsVertically();
}
private int realignTabsVertically() {
int oY = mainComponent.getY() + 4;
for (BaseComponent component : components) {
if (component instanceof GuiComponentTab) {
component.setY(oY);
oY += ((GuiComponentTab)component).getHeight() - 1;
}
}
return oY;
}
public void onTabClicked(GuiComponentTab tab) {
if (tab != activeTab) {
if (activeTab != null) {
activeTab.setActive(false);
}
tab.setActive(true);
activeTab = tab;
} else {
tab.setActive(false);
activeTab = null;
}
}
@Override
public int getWidth() {
int maxTabWidth = 0;
for (BaseComponent component : components) {
if (component.getX() + component.getWidth() > maxTabWidth) {
maxTabWidth = component.getX() + component.getWidth();
}
}
return mainComponent.getWidth() + maxTabWidth;
}
@Override
public int getHeight() {
int maxTabHeight = 0;
for (BaseComponent component : components) {
if (component.getY() + component.getHeight() > maxTabHeight) {
maxTabHeight = component.getY() + component.getHeight();
}
}
return mainComponent.getHeight() + maxTabHeight;
}
}