package mods.eln.sixnode.electricaldatalogger; import mods.eln.gui.GuiContainerEln; import mods.eln.gui.GuiHelperContainer; import mods.eln.gui.GuiTextFieldEln; import mods.eln.gui.GuiTextFieldEln.GuiTextFieldElnObserver; import mods.eln.gui.IGuiObject; import mods.eln.misc.Color; import mods.eln.misc.UtilsClient; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import org.lwjgl.opengl.GL11; import java.text.NumberFormat; import java.text.ParseException; import static mods.eln.i18n.I18N.tr; public class ElectricalDataLoggerGui extends GuiContainerEln implements GuiTextFieldElnObserver { GuiButton resetBt, voltageType, energyType, currentType, powerType, celsiusType, percentType, config, printBt, pause; GuiTextFieldEln samplingPeriod, maxValue, minValue, yCursorValue; ElectricalDataLoggerRender render; enum State {display, config} State state = State.display; public ElectricalDataLoggerGui(EntityPlayer player, IInventory inventory, ElectricalDataLoggerRender render) { super(new ElectricalDataLoggerContainer(player, inventory)); this.render = render; } void displayEntry() { config.displayString = tr("Configuration"); config.visible = true; pause.visible = true; resetBt.visible = true; voltageType.visible = false; energyType.visible = false; percentType.visible = false; currentType.visible = false; powerType.visible = false; celsiusType.visible = false; samplingPeriod.setVisible(false); maxValue.setVisible(false); minValue.setVisible(false); printBt.visible = true; state = State.display; } void configEntry() { pause.visible = false; config.visible = true; config.displayString = tr("Back to display"); resetBt.visible = false; printBt.visible = true; voltageType.visible = true; energyType.visible = true; percentType.visible = true; currentType.visible = true; powerType.visible = true; celsiusType.visible = true; samplingPeriod.setVisible(true); maxValue.setVisible(true); minValue.setVisible(true); state = State.config; } @Override public void initGui() { super.initGui(); config = newGuiButton(176 / 2 - 50, 8 - 2, 100, ""); //@devs: Do not translate the following elements. Please. voltageType = newGuiButton(176 / 2 - 75 - 2, 8 + 20 + 2 - 2, 75, tr("Voltage [V]")); currentType = newGuiButton(176 / 2 + 2, 8 + 20 + 2 - 2, 75, tr("Current [A]")); powerType = newGuiButton(176 / 2 - 75 - 2, 8 + 40 + 4 - 2, 75, tr("Power [W]")); celsiusType = newGuiButton(176 / 2 + 2, 8 + 40 + 4 - 2, 75, tr("Temp. [*C]")); percentType = newGuiButton(176 / 2 - 75 - 2, 8 + 60 + 6 - 2, 75, tr("Percent [-]%")); energyType = newGuiButton(176 / 2 + 2, 8 + 60 + 6 - 2, 75, tr("Energy [J]")); resetBt = newGuiButton(176 / 2 - 50, 8 + 20 + 2 - 2, 48, tr("Reset")); pause = newGuiButton(176 / 2 + 2, 8 + 20 + 2 - 2, 48, ""); printBt = newGuiButton(176 / 2 - 48 / 2, 123, 48, tr("Print")); samplingPeriod = newGuiTextField(30, 101, 50); samplingPeriod.setText(render.log.samplingPeriod); samplingPeriod.setComment(new String[]{tr("Sampling period")}); maxValue = newGuiTextField(176 - 50 - 30, 101 - 7, 50); maxValue.setText(render.log.maxValue); maxValue.setComment(new String[]{tr("Y-axis max")}); minValue = newGuiTextField(176 - 50 - 30, 101 + 8, 50); minValue.setText(render.log.minValue); minValue.setComment(new String[]{tr("Y-axis min")}); displayEntry(); } @Override public void guiObjectEvent(IGuiObject object) { super.guiObjectEvent(object); try { if (object == resetBt) { render.clientSend(ElectricalDataLoggerElement.resetId); } else if (object == pause) { render.clientSend(ElectricalDataLoggerElement.tooglePauseId); } else if (object == printBt) { render.clientSend(ElectricalDataLoggerElement.printId); } else if (object == currentType) { render.clientSetByte(ElectricalDataLoggerElement.setUnitId, DataLogs.currentType); } else if (object == voltageType) { render.clientSetByte(ElectricalDataLoggerElement.setUnitId, DataLogs.voltageType); } else if (object == energyType) { render.clientSetByte(ElectricalDataLoggerElement.setUnitId, DataLogs.energyType); } else if (object == percentType) { render.clientSetByte(ElectricalDataLoggerElement.setUnitId, DataLogs.percentType); } else if (object == powerType) { render.clientSetByte(ElectricalDataLoggerElement.setUnitId, DataLogs.powerType); } else if (object == celsiusType) { render.clientSetByte(ElectricalDataLoggerElement.setUnitId, DataLogs.celsiusType); } else if (object == config) { switch (state) { case config: displayEntry(); break; case display: configEntry(); break; default: break; } } else if (object == maxValue) { render.clientSetFloat(ElectricalDataLoggerElement.setMaxValue, NumberFormat.getInstance().parse(maxValue.getText()).floatValue()); } else if (object == minValue) { render.clientSetFloat(ElectricalDataLoggerElement.setMinValue, NumberFormat.getInstance().parse(minValue.getText()).floatValue()); } else if (object == samplingPeriod) { float value = NumberFormat.getInstance().parse(samplingPeriod.getText()).floatValue(); if (value < 0.05f) value = 0.05f; samplingPeriod.setText(value); render.clientSetFloat(ElectricalDataLoggerElement.setSamplingPeriodeId, value); } } catch (ParseException e) { } } @Override protected void preDraw(float f, int x, int y) { super.preDraw(f, x, y); powerType.enabled = true; currentType.enabled = true; voltageType.enabled = true; celsiusType.enabled = true; percentType.enabled = true; energyType.enabled = true; switch (render.log.unitType) { case DataLogs.currentType: currentType.enabled = false; break; case DataLogs.voltageType: voltageType.enabled = false; break; case DataLogs.powerType: powerType.enabled = false; break; case DataLogs.celsiusType: celsiusType.enabled = false; break; case DataLogs.percentType: percentType.enabled = false; break; case DataLogs.energyType: energyType.enabled = false; break; } if (render.pause) pause.displayString = Color.COLOR_DARK_YELLOW + "Paused"; else pause.displayString = Color.COLOR_BRIGHT_GREEN + "Running"; boolean a = inventorySlots.getSlot(ElectricalDataLoggerContainer.paperSlotId).getStack() != null; boolean b = inventorySlots.getSlot(ElectricalDataLoggerContainer.printSlotId).getStack() == null; printBt.enabled = a && b; } @Override protected void postDraw(float f, int x, int y) { super.postDraw(f, x, y); final float bckrndMargin = 0.05f; if (state == State.display) { GL11.glPushMatrix(); GL11.glTranslatef(guiLeft + 8, guiTop + 53, 0); GL11.glScalef(50, 50, 1f); GL11.glColor4f(0.15f, 0.15f, 0.15f, 1.0f); UtilsClient.disableTexture(); UtilsClient.disableCulling(); GL11.glBegin(GL11.GL_QUADS); GL11.glVertex2f(-bckrndMargin, -bckrndMargin); GL11.glVertex2f(3.2f + bckrndMargin, -bckrndMargin); GL11.glVertex2f(3.2f + bckrndMargin, 1.2f + 3 * bckrndMargin); GL11.glVertex2f(-bckrndMargin, 1.2f + 3 * bckrndMargin); GL11.glEnd(); UtilsClient.enableCulling(); UtilsClient.enableTexture(); GL11.glColor4f(render.descriptor.cr, render.descriptor.cg, render.descriptor.cb, 1); render.log.draw(2.9f, 1.2f, render.descriptor.textColor); GL11.glPopMatrix(); } } @Override protected GuiHelperContainer newHelper() { return new GuiHelperContainer(this, 176, 230, 8, 148); } }