/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.wpi.first.tableviewer;

import edu.wpi.first.tableviewer.dialog.AddArrayDialog;
import edu.wpi.first.tableviewer.dialog.AddBooleanDialog;
import edu.wpi.first.tableviewer.dialog.AddNumberDialog;
import edu.wpi.first.tableviewer.dialog.AddStringDialog;
import edu.wpi.first.wpilibj.networktables2.NetworkTableNode;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.tree.TreePath;

/**
 * Responsible for displaying all the data within a NetworkTable, either as
 * LeaefNodes or as BranchNodes.
 *
 * @author Sam
 */
public class BranchNode extends AbstractTreeNode {

    private final String name;

    public BranchNode(NetworkTableNode node, String key, String name) {
        super(node, key, new TableEntryData(name, null));
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

    @Override
    public boolean isLeaf() {
        return false;
    }

    /**
     * Creates the {@code JPopupMenu} to display when this node is
     * right-clicked.
     *
     * @param path The path from the root to this branch.
     * @return The menu for this node.
     */
    public JPopupMenu getMenu(final TreePath path) {
        JPopupMenu popupMenu = new JPopupMenu("Add Items");

        JMenuItem addArrayItem = new JMenuItem("Add array");
        JMenuItem addBooleanItem = new JMenuItem("Add boolean");
        JMenuItem addNumberItem = new JMenuItem("Add number");
        JMenuItem addStringItem = new JMenuItem("Add string");

        addArrayItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new AddArrayDialog(path, table).setVisible(true);
            }
        });

        addBooleanItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new AddBooleanDialog(path, table).setVisible(true);
            }
        });

        addNumberItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new AddNumberDialog(path, table).setVisible(true);
            }
        });

        addStringItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new AddStringDialog(path, table).setVisible(true);
            }
        });

        popupMenu.add(addArrayItem);
        popupMenu.add(addBooleanItem);
        popupMenu.add(addNumberItem);
        popupMenu.add(addStringItem);

        return popupMenu;
    }
}
