summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/gui/ListParameterPanel.java
blob: 6272b5fd409a4f908047e90b86a876bcefac568f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package bjc.utils.gui;

import java.util.function.Consumer;
import java.util.function.Supplier;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;

import bjc.utils.funcdata.FunctionalList;
import bjc.utils.gui.layout.HLayout;
import bjc.utils.gui.layout.VLayout;

/**
 * A panel that has a list of objects and ways of manipulating that list
 * 
 * @author ben
 *
 * @param <E>
 *            The type of data stored in the list
 */
public class ListParameterPanel<E> extends JPanel {
	/**
	 * Version id for serialization
	 */
	private static final long serialVersionUID = 3442971104975491571L;

	/**
	 * Create a new panel using the specified actions for doing things
	 * 
	 * @param addAct
	 *            The action that provides items
	 * @param editAct
	 *            The action that edits items
	 * @param removeAct
	 *            The action that removes items
	 */
	public ListParameterPanel(Supplier<E> addAct, Consumer<E> editAct,
			Consumer<E> removeAct) {
		this(addAct, editAct, removeAct, null);
	}

	/**
	 * Create a new panel using the specified actions for doing things
	 * 
	 * @param addAct
	 *            The action that provides items
	 * @param editAct
	 *            The action that edits items
	 * @param removeAct
	 *            The action that removes items
	 * @param defVals
	 *            The default values to put in the list
	 */
	public ListParameterPanel(Supplier<E> addAct, Consumer<E> editAct,
			Consumer<E> removeAct, FunctionalList<E> defVals) {
		setLayout(new VLayout(2));

		JList<E> list;

		if (defVals != null) {
			list = SimpleJList.buildFromList(defVals.toIterable());
		} else {
			list = new JList<>(new DefaultListModel<>());
		}

		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		JPanel buttonPanel = new JPanel();
		buttonPanel.setLayout(new HLayout(3));

		JButton addParam = new JButton("Add...");
		JButton editParam = new JButton("Edit...");
		JButton removeParam = new JButton("Remove...");

		addParam.addActionListener(
				(ev) -> ((DefaultListModel<E>) list.getModel())
						.addElement(addAct.get()));
		editParam.addActionListener(
				(ev) -> editAct.accept(list.getSelectedValue()));
		removeParam.addActionListener((ev) -> removeAct
				.accept(((DefaultListModel<E>) list.getModel())
						.remove(list.getSelectedIndex())));

		buttonPanel.add(addParam);
		buttonPanel.add(editParam);
		buttonPanel.add(removeParam);

		add(list);
		add(buttonPanel);
	}
}