/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ctecinf.table;

import java.awt.Component;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Icon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;

/**
 *
 * @author Cássio Conceição
 * @since 19/09/2018
 * @version 201809
 * @see http://ctecinf.com.br
 */
public class TablePopupMenu extends JPopupMenu {

    private JTable table;

    public TablePopupMenu(JTable table) {

        if (table != null) {

            this.table = table;

            this.table.addMouseListener(new MouseAdapter() {

                @Override
                public void mousePressed(MouseEvent e) {
                    checkPopup(e);
                }

                @Override
                public void mouseClicked(MouseEvent e) {
                    checkPopup(e);
                }

                @Override
                public void mouseReleased(MouseEvent e) {
                    checkPopup(e);
                }

                private void checkPopup(MouseEvent e) {
                    
                    int row = TablePopupMenu.this.table.rowAtPoint(e.getPoint());

                    if (row >= 0 && row < TablePopupMenu.this.table.getRowCount()) {
                        TablePopupMenu.this.table.setRowSelectionInterval(row, row);
                    } else {
                        TablePopupMenu.this.table.clearSelection();
                    }

                    int rowindex = TablePopupMenu.this.table.getSelectedRow();

                    if (rowindex < 0) {
                        return;
                    }

                    if (e.getButton() == MouseEvent.BUTTON3) {
                        show(TablePopupMenu.this.table, e.getX(), e.getY());
                    }
                }
            });

            super.setBorder(new BevelBorder(BevelBorder.RAISED));
        }
    }

    public JMenuItem addMenuItem(String label, Icon icon, ActionListener action) {

        JMenuItem item;

        add(item = new JMenuItem(label, icon));

        //item.setFont(item.getFont().deriveFont(Font.PLAIN, 18));
        item.setHorizontalTextPosition(JMenuItem.RIGHT);
        item.addActionListener(action);

        return item;
    }

}
