package de.usd.cstchef.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.SortedMap;
import java.util.TreeMap;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.text.JTextComponent;

public class PopupVariableMenu extends JPopupMenu implements ActionListener, PopupMenuListener {

	private JTextComponent parent;
	private static SortedMap<String, byte[]> variableMap;

	public PopupVariableMenu(JTextComponent parent) {
		super();
		this.parent = parent;
		this.addPopupMenuListener(this);

	}

	public void refreshMenu() {
		this.removeAll();

		for (String key : variableMap.keySet()) {
			JMenuItem item = new JMenuItem(key);
			item.addActionListener(this);
			this.add(item);
		}
	}

	public static void refresh(HashMap<String, byte[]> variables) {
		if (variables == null) {
			variableMap = new TreeMap<String, byte[]>();
		} else {
			variableMap = new TreeMap<String, byte[]>(variables);
		}
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		parent.setText(parent.getText() + "$" + arg0.getActionCommand());
	}

	@Override
	public void popupMenuCanceled(PopupMenuEvent arg0) {
		// not needed
	}

	@Override
	public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) {
		// not needed
	}

	@Override
	public void popupMenuWillBecomeVisible(PopupMenuEvent arg0) {
		this.refreshMenu();
	}

}