Package org.spoutcraft.client.controls

Source Code of org.spoutcraft.client.controls.GuiAmbigousInput$BindingItem

/*
* This file is part of Spoutcraft.
*
* Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org/>
* Spoutcraft is licensed under the GNU Lesser General Public License.
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.spoutcraft.client.controls;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

import net.minecraft.src.GuiScreen;
import net.minecraft.src.Item;

import org.spoutcraft.api.ChatColor;
import org.spoutcraft.api.Spoutcraft;
import org.spoutcraft.api.gui.Button;
import org.spoutcraft.api.gui.GenericButton;
import org.spoutcraft.api.gui.GenericLabel;
import org.spoutcraft.api.gui.GenericListWidget;
import org.spoutcraft.api.gui.Label;
import org.spoutcraft.api.gui.ListWidget;
import org.spoutcraft.api.gui.ListWidgetItem;
import org.spoutcraft.api.gui.RenderUtil;
import org.spoutcraft.api.keyboard.AbstractBinding;
import org.spoutcraft.client.gui.GuiSpoutScreen;
import org.spoutcraft.client.gui.ScreenUtil;

public class GuiAmbigousInput extends GuiSpoutScreen {
  private Label title;
  private Button buttonCancel;
  private GenericListWidget list;
  protected GuiScreen parent;
  private ArrayList<AbstractBinding> bindings;
  private AbstractBinding pressed = null;

  public GuiAmbigousInput(ArrayList<AbstractBinding> bindings, GuiScreen parent) {
    this.parent = parent;
    this.bindings = bindings;
  }

  protected void createInstances() {
    title = new GenericLabel("Ambigous bindings\n" + ChatColor.GRAY + "The key you pressed has multiple bindings assigned.\n" + ChatColor.GRAY + "Please choose which action you want to summon.");
    buttonCancel = new GenericButton("Cancel");
    list = new GenericListWidget();

    int i = 1;
    for (AbstractBinding binding:bindings) {
      list.addItem(new BindingItem(i, binding));
      i++;
    }

    getScreen().attachWidgets("Spoutcraft", title, buttonCancel, list);
  }

  protected void layoutWidgets() {
    int swidth = mc.fontRenderer.getStringWidth(title.getText());
    title.setGeometry(5, 7, width - 10, 0);
    int top = 5 + 11 * 3 + 5;

    list.setGeometry(5, top, width - 10, height - top - 30);

    top += list.getHeight();

    buttonCancel.setGeometry(width - 205, top + 5, 200, 20);

    list.setFocus(true);
    list.setSelection(0);
  }

  @Override
  protected void keyTyped(char var1, int var2) {
    super.keyTyped(var1, var2);
    try {
      int i = Integer.valueOf(var1 + "");
      if (i == 0) {
        i = 10;
      }
      if (bindings.size() >= i) {
        AbstractBinding binding = bindings.get(i - 1);
        summon(binding);
      }
    } catch(IllegalArgumentException e) {}
  }

  @Override
  public void buttonClicked(Button btn) {
    if (btn == buttonCancel) {
      mc.displayGuiScreen(parent);
    }
  }

  public class BindingItem implements ListWidgetItem {
    private AbstractBinding binding;
    private int index;

    public BindingItem(int index, AbstractBinding binding) {
      this.binding = binding;
      this.index = index;
    }

    public void setListWidget(ListWidget widget) {
      // TODO Auto-generated method stub

    }

    public ListWidget getListWidget() {
      // TODO Auto-generated method stub
      return null;
    }

    public int getHeight() {
      return 13;
    }

    public void render(int x, int y, int width, int height) {
      if (index <= 10) {
        if (pressed != binding) {
          RenderUtil.drawRectangle(x + 1, y + 1, x + 12, y + 12, 0xff888888);
          RenderUtil.drawGradientRectangle(x + 2, y + 2, x + 11, y + 11, 0xffffffff, 0xffaaaaaa);
          mc.fontRenderer.drawString(index + "", x + 4, y + 3, 0xff333333);
        } else {
          RenderUtil.drawRectangle(x + 1, y + 1, x + 12, y + 12, 0xff333333);
          RenderUtil.drawGradientRectangle(x + 2, y + 2, x + 11, y + 11, 0xff666666, 0xffaaaaaa);
          mc.fontRenderer.drawString(index + "", x + 4, y + 3, 0xff000000);
        }
      }
      mc.fontRenderer.drawString(binding.getTitle(), x + 15, y + 3, 0xffffffff);
    }

    public void onClick(int x, int y, boolean doubleClick) {
      if (x == -1 && y == -1 && !doubleClick) {
        return;
      }
      summon(binding);
      if (!doubleClick) {
        Spoutcraft.getActivePlayer().showAchievement(ChatColor.WHITE + "You can use 1-9", "on your keyboard too", Item.book.itemID);
      }
    }

    public AbstractBinding getBinding() {
      return binding;
    }

  }

  protected void summon(final AbstractBinding binding) {
    if (pressed != null) {
      return;
    }
    Timer t = new Timer();
    TimerTask task = new TimerTask() {
      @Override
      public void run() {
        mc.displayGuiScreen(parent);
        binding.summon(binding.getKey(), false, ScreenUtil.getType(parent).getCode());
        binding.summon(binding.getKey(), true, ScreenUtil.getType(parent).getCode());
      }
    };
    t.schedule(task, 200);
    pressed  = binding;
  }
}
TOP

Related Classes of org.spoutcraft.client.controls.GuiAmbigousInput$BindingItem

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.