Package org.getspout.spoutapi.gui

Source Code of org.getspout.spoutapi.gui.GenericComboBox

/*
* This file is part of SpoutcraftPlugin.
*
* Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org//>
* SpoutcraftPlugin is licensed under the GNU Lesser General Public License.
*
* SpoutcraftPlugin 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.
*
* SpoutcraftPlugin 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.getspout.spoutapi.gui;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.getspout.spoutapi.io.SpoutInputStream;
import org.getspout.spoutapi.io.SpoutOutputStream;
import org.getspout.spoutapi.packet.PacketComboBox;

public class GenericComboBox extends GenericButton implements ComboBox {
  private List<String> items = new ArrayList<String>();
  private boolean open = false;
  private int selection = -1;
  private String format = "%text%: %selected%";

  @Override
  public ComboBox setItems(List<String> items) {
    this.items = items;
    return this;
  }

  @Override
  public List<String> getItems() {
    return items;
  }

  @Override
  public ComboBox openList() {
    setOpen(true, true);
    return this;
  }

  @Override
  public ComboBox closeList() {
    setOpen(false, true);
    return null;
  }

  @Override
  public String getSelectedItem() {
    if (selection >= 0 && selection < items.size()) {
      return items.get(selection);
    } else {
      return null;
    }
  }

  public int getSelectedRow() {
    return this.selection;
  }

  public ComboBox setSelection(int row) {
    boolean event = row != selection;
    this.selection = row;
    if (event) {
      onSelectionChanged(row, getSelectedItem());
    }
    return this;
  }

  public void onSelectionChanged(int i, String text) {
  }

  public boolean isOpen() {
    return open;
  }

  /**
   * Sets the open status.
   * @param open       the state
   * @param sendPacket if true, send an update packet
   * @return the instance
   */
  public ComboBox setOpen(boolean open, boolean sendPacket) {
    if (sendPacket) {
      if (open != this.open) {
        this.open = open;
        PacketComboBox packet = new PacketComboBox(this);
        getScreen().getPlayer().sendPacket(packet);
      }
    }

    this.open = open;
    return this;
  }

  @Override
  public WidgetType getType() {
    return WidgetType.ComboBox;
  }

  @Override
  public void readData(SpoutInputStream input) throws IOException {
    super.readData(input);
  }

  @Override
  public void writeData(SpoutOutputStream output) throws IOException {
    super.writeData(output);
    output.writeInt(selection);
    output.writeInt(getItems().size());
    for (String item : getItems()) {
      output.writeString(item);
    }
    output.writeString(format);
  }

  @Override
  public int getVersion() {
    return super.getVersion() + 1;
  }

  public String getFormat() {
    return format;
  }

  public ComboBox setFormat(String format) {
    this.format = format;
    return this;
  }

  @Override
  public String getText() {
    if (super.getText() == null || super.getText().isEmpty()) {
      return getSelectedItem();
    } else {
      String text = format.replaceAll("%text%", super.getText()).replaceAll("%selected%", getSelectedItem());
      return text;
    }
  }
}
TOP

Related Classes of org.getspout.spoutapi.gui.GenericComboBox

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.