package hermes.browser.dialog.message;
import hermes.swing.PropertyRow;
import hermes.swing.PropertyTableModel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
@SuppressWarnings("serial")
public class GenericPropertyPanel extends JPanel {
private JTable table;
protected PropertyTableModel model = new PropertyTableModel();
/**
* Create the panel.
*
* @param editable
*/
public GenericPropertyPanel(boolean editable) {
setLayout(new BorderLayout(0, 0));
table = new GenericPropertyTable(model);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JPanel options = new JPanel(new FormLayout(new ColumnSpec[] { ColumnSpec.decode("16dlu"), }, new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC, }));
if (editable) {
add(options, BorderLayout.WEST);
}
JButton btnAdd = new JButton();
btnAdd.setBorderPainted(false);
btnAdd.setIcon(new ImageIcon(GenericPropertyPanel.class.getResource("/hermes/browser/icons/recordAdd.png")));
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
model.addRow(new PropertyRow());
}
});
options.add(btnAdd, "1, 2");
JButton btnRemove = new JButton();
btnRemove.setBorderPainted(false);
btnRemove.setIcon(new ImageIcon(GenericPropertyPanel.class.getResource("/hermes/browser/icons/recordDelete.png")));
btnRemove.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int row = table.getSelectedRow();
if (row >= 0) {
model.removeRows(row);
if (model.getRowCount() > row - 1) {
table.getSelectionModel().setLeadSelectionIndex(row);
} else if (table.getRowCount() > 0) {
table.getSelectionModel().setLeadSelectionIndex(model.getRowCount() - 1);
}
}
}
});
options.add(btnRemove, "1, 4");
JButton btnUp = new JButton();
btnUp.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
if (row > 0 && model.getRowCount() > 1) {
model.moveRow(row, row, row - 1);
table.getSelectionModel().setLeadSelectionIndex(row - 1);
}
}
});
btnUp.setBorderPainted(false);
btnUp.setIcon(new ImageIcon(GenericPropertyPanel.class.getResource("/hermes/browser/icons/moveUp.png")));
options.add(btnUp, "1, 6");
JButton btnDown = new JButton();
btnDown.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
if (row >= 0 && model.getRowCount() > row + 1) {
model.moveRow(row, row, row + 1);
table.getSelectionModel().setLeadSelectionIndex(row + 1);
}
}
});
btnDown.setBorderPainted(false);
btnDown.setIcon(new ImageIcon(GenericPropertyPanel.class.getResource("/hermes/browser/icons/moveDown.png")));
options.add(btnDown, "1, 8");
add(new JScrollPane(table), BorderLayout.CENTER);
}
}