Package forestry.mail.gui

Source Code of forestry.mail.gui.GuiLetter$AddresseeSlot

/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry.mail.gui;

import java.util.ArrayList;

import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.player.EntityPlayer;

import org.apache.commons.lang3.StringUtils;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;

import forestry.api.mail.IPostalCarrier;
import forestry.api.mail.IMailAddress;
import forestry.api.mail.PostManager;
import forestry.core.config.Defaults;
import forestry.core.config.SessionVars;
import forestry.core.gadgets.TileForestry;
import forestry.core.gui.GuiForestry;
import forestry.core.gui.GuiTextBox;
import forestry.core.gui.widgets.Widget;
import forestry.core.proxy.Proxies;
import forestry.core.utils.StringUtil;
import forestry.api.mail.EnumAddressee;
import forestry.mail.items.ItemLetter.LetterInventory;

public class GuiLetter extends GuiForestry<TileForestry> {

  protected class AddresseeSlot extends Widget {

    public AddresseeSlot(int xPos, int yPos) {
      super(widgetManager, xPos, yPos);
      this.width = 26;
      this.height = 15;
    }

    @Override
    public void draw(int startX, int startY) {

      GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0F);
      //mc.renderEngine.bindTexture(Defaults.TEXTURE_PATH_GUI + "/letter.png");
      IPostalCarrier carrier = PostManager.postRegistry.getCarrier(container.getCarrierType());
      if(carrier != null)
        drawTexturedModelRectFromIcon(startX + xPos, startY + yPos - 5, carrier.getIcon(), 26, 26);

    }

    @Override
    protected String getLegacyTooltip(EntityPlayer player) {
      return StringUtil.localize("gui.addressee." + container.getCarrierType().toString());
    }

    @Override
    public void handleMouseClick(int mouseX, int mouseY, int mouseButton) {
      if(!isProcessedLetter)
        container.advanceCarrierType();
    }

  }

  private final boolean isProcessedLetter;
  private boolean checkedSessionVars;

  private GuiTextField address;
  private GuiTextBox text;

  boolean addressFocus;
  boolean textFocus;

  protected ArrayList<Widget> tradeInfoWidgets;

  private final ContainerLetter container;

  public GuiLetter(EntityPlayer player, LetterInventory inventory) {
    super(Defaults.TEXTURE_PATH_GUI + "/letter.png", new ContainerLetter(player, inventory), inventory);
    this.xSize = 194;
    this.ySize = 227;

    this.container = (ContainerLetter) inventorySlots;
    this.isProcessedLetter = container.getLetter().isProcessed();
    this.widgetManager.add(new AddresseeSlot(16, 12));
    this.tradeInfoWidgets = new ArrayList<Widget>();
  }

  @Override
  public void initGui() {
    super.initGui();

    Keyboard.enableRepeatEvents(true);

    address = new GuiTextField(this.fontRendererObj, guiLeft + 46, guiTop + 13, 93, 13);
    IMailAddress recipient = container.getRecipient();
    if (recipient != null) {
      address.setText(recipient.getName());
    }

    text = new GuiTextBox(this.fontRendererObj, guiLeft + 17, guiTop + 31, 122, 57);
    text.setMaxStringLength(128);
    if (!container.getText().isEmpty())
      text.setText(container.getText());
  }

  @Override
  protected void keyTyped(char eventCharacter, int eventKey) {

    // Set focus or enter text into address
    if (this.address.isFocused()) {
      if (eventKey == Keyboard.KEY_RETURN)
        this.address.setFocused(false);
      else
        this.address.textboxKeyTyped(eventCharacter, eventKey);
      return;
    }

    if (this.text.isFocused()) {
      if (eventKey == Keyboard.KEY_RETURN) {
        if(Proxies.common.isShiftDown())
          text.setText(text.getText() + "\n");
        else
          this.text.setFocused(false);
      } else if(eventKey == Keyboard.KEY_DOWN) {
        text.advanceLine();
      } else if(eventKey == Keyboard.KEY_UP) {
        text.regressLine();
      } else if(text.moreLinesAllowed() || eventKey == Keyboard.KEY_DELETE || eventKey == Keyboard.KEY_BACK)
        this.text.textboxKeyTyped(eventCharacter, eventKey);
      return;
    }

    super.keyTyped(eventCharacter, eventKey);
  }

  @Override
  protected void mouseClicked(int par1, int par2, int mouseButton) {
    super.mouseClicked(par1, par2, mouseButton);

    this.address.mouseClicked(par1, par2, mouseButton);
    this.text.mouseClicked(par1, par2, mouseButton);

  }

  @Override
  protected void drawGuiContainerBackgroundLayer(float var1, int mouseX, int mouseY) {

    if(!isProcessedLetter && !checkedSessionVars) {
      checkedSessionVars = true;
      setFromSessionVars();
    }

    // Check for focus changes
    if (addressFocus != address.isFocused()) {
      String recipient = this.address.getText();
      if (StringUtils.isNotBlank(recipient)) {
        EnumAddressee recipientType = container.getCarrierType();
        setRecipient(recipient, recipientType);
      }
    }
    addressFocus = address.isFocused();
    if (textFocus != text.isFocused())
      setText();
    textFocus = text.isFocused();

    super.drawGuiContainerBackgroundLayer(var1, mouseX, mouseY);

    if (this.isProcessedLetter) {
      fontRendererObj.drawString(address.getText(), guiLeft + 49, guiTop + 16, fontColor.get("gui.mail.lettertext"));
      fontRendererObj.drawSplitString(text.getText(), guiLeft + 20, guiTop + 34, 119, fontColor.get("gui.mail.lettertext"));
    } else {
      clearTradeInfoWidgets();
      address.drawTextBox();
      if (container.getCarrierType() == EnumAddressee.TRADER)
        drawTradePreview(18, 32);
      else
        text.drawTextBox();
    }
  }

  private void drawTradePreview(int x, int y) {

    String infoString = null;
    if (container.getTradeInfo() == null)
      infoString = "gui.mail.notrader";
    else if (container.getTradeInfo().tradegood == null)
      infoString = "gui.mail.nothingtotrade";
    else if (!container.getTradeInfo().state.isOk())
      infoString = "chat.mail." + container.getTradeInfo().state.getIdentifier();

    if (infoString != null) {
      fontRendererObj.drawSplitString(StringUtil.localize(infoString), guiLeft + x, guiTop + y, 119, fontColor.get("gui.mail.lettertext"));
      return;
    }

    fontRendererObj.drawString(StringUtil.localize("gui.mail.pleasesend"), guiLeft + x, guiTop + y, fontColor.get("gui.mail.lettertext"));

    addTradeInfoWidget(new ItemStackWidget(x, y + 10, container.getTradeInfo().tradegood));

    GL11.glDisable(GL11.GL_LIGHTING);
    fontRendererObj.drawString(StringUtil.localize("gui.mail.foreveryattached"), guiLeft + x, guiTop + y + 28, fontColor.get("gui.mail.lettertext"));
    GL11.glEnable(GL11.GL_LIGHTING);
    for (int i = 0; i < container.getTradeInfo().required.length; i++) {
      addTradeInfoWidget(new ItemStackWidget(x + i * 18, y + 38, container.getTradeInfo().required[i]));
    }
  }

  private void addTradeInfoWidget(Widget widget) {
    tradeInfoWidgets.add(widget);
    widgetManager.add(widget);
  }

  private void clearTradeInfoWidgets() {
    for (Widget widget : tradeInfoWidgets)
      widgetManager.remove(widget);
  }

  @Override
  public void onGuiClosed() {
    String recipientName = this.address.getText();
    EnumAddressee recipientType = container.getCarrierType();
    setRecipient(recipientName, recipientType);
    setText();
    Keyboard.enableRepeatEvents(false);
    super.onGuiClosed();
  }
 
  @Override
  protected boolean checkHotbarKeys(int key) {
    return false;
  }

  private void setFromSessionVars() {
    if(SessionVars.getStringVar("mail.letter.recipient") == null)
      return;

    String recipient = SessionVars.getStringVar("mail.letter.recipient");
    String typeName = SessionVars.getStringVar("mail.letter.addressee");
   
    if (StringUtils.isNotBlank(recipient) && StringUtils.isNotBlank(typeName)) {
      address.setText(recipient);

      EnumAddressee type = EnumAddressee.fromString(typeName);
      setRecipient(recipient, type);
    }

    SessionVars.clearStringVar("mail.letter.recipient");
    SessionVars.clearStringVar("mail.letter.addressee");
  }

  private void setRecipient(String recipientName, EnumAddressee type) {
    if (this.isProcessedLetter || StringUtils.isBlank(recipientName) || type == null)
      return;

    container.setRecipient(recipientName, type);
  }

  private void setText() {
    if (this.isProcessedLetter)
      return;

    container.setText(this.text.getText());
  }
}
TOP

Related Classes of forestry.mail.gui.GuiLetter$AddresseeSlot

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.