import java.awt.BorderLayout;
import java.awt.Dimension;
-import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import javax.swing.AbstractAction;
import javax.swing.BoxLayout;
-import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;
public class BreadCrumbsBar<T> extends ListenerPanel {
private class BreadCrumb extends JPanel {
- private JButton button;
+ private JToggleButton button;
private JToggleButton down;
public BreadCrumb(final DataNode<T> node) {
this.setLayout(new BorderLayout());
- button = new JButton(node.toString());
if (!node.isRoot()) {
- // TODO: allow clicking on root? option?
+ button = new JToggleButton(node.toString());
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- setSelectedNode(node);
+ button.setSelected(false);
+ if (!node.isRoot()) {
+ // TODO: allow clicking on root? option?
+ setSelectedNode(node);
+ }
}
});
- }
- this.add(button, BorderLayout.CENTER);
+ this.add(button, BorderLayout.CENTER);
+ }
- if (!node.getChildren().isEmpty()) {
- // TODO (see things with icons included in viewer)
+ if ((node.isRoot() && node.getChildren().isEmpty())
+ || !node.getChildren().isEmpty()) {
+ // TODO allow an image or ">", viewer
down = new JToggleButton(">");
final JPopupMenu popup = new JPopupMenu();
for (final DataNode<T> child : node.getChildren()) {
popup.add(new AbstractAction(child.toString()) {
-
private static final long serialVersionUID = 1L;
@Override
}
down.addActionListener(new ActionListener() {
-
@Override
public void actionPerformed(ActionEvent ev) {
if (down.isSelected()) {
}
});
+ setSelectedNode(new DataNode<T>(null, null));
+
new SwingWorker<DataNode<T>, Void>() {
@Override
protected DataNode<T> doInBackground() throws Exception {
@Override
protected void done() {
try {
- node = get();
+ DataNode<T> node = get();
+
+ setSelectedNode(null);
+ BreadCrumbsBar.this.node = node;
addCrumb(node);
// TODO: option?
if (vertical) {
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
} else {
- this.setLayout(new FlowLayout(FlowLayout.LEADING));
+ this.setLayout(new WrapLayout(WrapLayout.LEADING));
}
for (BreadCrumb crumb : crumbs) {