package com.towel.swing.list;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import com.towel.awt.Action;
import com.towel.awt.ActionManager;
import com.towel.swing.ButtonLabel;
public class InfoList extends JComponent {
private String prefix;
private List<ButtonLabel> labels;
private ActionManager manager;
public InfoList() {
labels = new ArrayList<ButtonLabel>();
manager = new ActionManager();
prefix = "";
}
private void updateSize() {
if (labels.size() == 0)
return;
setPreferredSize(getLayout().preferredLayoutSize(this));
}
public void setPrefix(String prefix) {
String oldPrefix = this.prefix;
this.prefix = prefix;
if (oldPrefix.length() > 0)
for (ButtonLabel label : labels)
label.setText(label.getText().replace(oldPrefix, this.prefix));
else
for (ButtonLabel label : labels)
label.setText(this.prefix + label.getText());
updateSize();
}
private void replace() {
removeAll();
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
for (ButtonLabel label : labels)
add(label);
}
public void add(String s) {
labels.add(new ButtonLabel(prefix + s));
replace();
updateSize();
}
public void addAll(Collection<String> coll) {
for (String s : coll)
add(s);
updateSize();
}
public void remove(String s) {
int idx = indexOf(s);
if (idx > -1)
labels.remove(idx);
replace();
updateSize();
}
public void removeAll(Collection<String> coll) {
for (String s : coll)
remove(s);
updateSize();
}
public int indexOf(String item) {
int idx = -1;
for (int i = 0; i < labels.size(); i++)
if (labels.get(i).getText().equals(prefix + item))
idx = i;
return idx;
}
public void addAction(String item, Action action) {
int idx = indexOf(item);
manager.manage(labels.get(idx), action);
}
}