package me.nov.cafebabe.gui.smalleditor.list;

import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JList;

import me.nov.cafebabe.gui.node.OpcodeNode;
import me.nov.cafebabe.gui.opchooser.OpcodeChooserDialog;
import me.nov.cafebabe.utils.ui.LazyListModel;

public class OpList extends JList<OpcodeNode> {
	private static final long serialVersionUID = 1L;
	private int[] opcodes = {};
	private OpcodeChooserDialog chooser;

	public OpList(OpcodeChooserDialog chooser, int... opcodes) {
		this.chooser = chooser;
		this.opcodes = opcodes;
		this.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
		LazyListModel<OpcodeNode> llm = new LazyListModel<OpcodeNode>();
		for (int opcode : opcodes) {
			llm.addElement(new OpcodeNode(opcode));
		}
		this.setModel(llm);
		for (MouseListener ml : this.getMouseListeners())
			this.removeMouseListener(ml);
		this.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent evt) {
				if (evt.getClickCount() >= 1) {
					int index = locationToIndex(evt.getPoint());
					OpcodeNode on = llm.getElementAt(index);
					chooser.setOpcode(on.opcode);
					setSelectedIndex(index);
					chooser.refresh();
				}
			}
		});

	}

	public boolean refresh() {
		clearSelection();
		int i = 0;
		if (opcodes != null)
			for (int opcode : opcodes) {
				if (chooser.getOpcode() == opcode) {
					setSelectedIndex(i);
					super.repaint();
					return true;
				}
				i++;
			}
		super.repaint();
		return false;
	}
}