/* * EditKillLogDialog.java * * Copyright (c) 2009 Jay Lawson <jaylawson39 at yahoo.com>. All rights reserved. * * This file is part of MekHQ. * * MekHQ is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MekHQ is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MekHQ. If not, see <http://www.gnu.org/licenses/>. */ package mekhq.gui.dialog; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Frame; import java.awt.GridLayout; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.ResourceBundle; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumn; import megamek.common.util.EncodeControl; import mekhq.campaign.Campaign; import mekhq.campaign.Kill; import mekhq.campaign.personnel.Person; /** * * @author Taharqa */ public class EditKillLogDialog extends javax.swing.JDialog { /** * */ private static final long serialVersionUID = 6995319032267472795L; private Frame frame; private Campaign campaign; private Person person; private ArrayList<Kill> kills; private KillTableModel killModel; private javax.swing.JButton btnAdd; private javax.swing.JButton btnEdit; private javax.swing.JButton btnDelete; private javax.swing.JButton btnOK; private JTable killTable; private JScrollPane scrollKillTable; public EditKillLogDialog(java.awt.Frame parent, boolean modal, Campaign c, Person p) { super(parent, modal); this.frame = parent; campaign = c; person = p; kills = c.getKillsFor(p.getId()); killModel = new KillTableModel(kills); initComponents(); setLocationRelativeTo(parent); } private void initComponents() { btnOK = new javax.swing.JButton(); btnAdd = new javax.swing.JButton(); btnEdit = new javax.swing.JButton(); btnDelete = new javax.swing.JButton(); ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.EditPersonnelLogDialog", new EncodeControl()); //$NON-NLS-1$ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setName("Form"); // NOI18N setTitle(resourceMap.getString("Form.title") + " " + person.getName()); getContentPane().setLayout(new java.awt.BorderLayout()); JPanel panBtns = new JPanel(new GridLayout(1,0)); btnAdd.setText(resourceMap.getString("btnAdd.text")); // NOI18N btnAdd.setName("btnAdd"); // NOI18N btnAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addKill(); } }); panBtns.add(btnAdd); btnEdit.setText(resourceMap.getString("btnEdit.text")); // NOI18N btnEdit.setName("btnEdit"); // NOI18N btnEdit.setEnabled(false); btnEdit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { editKill(); } }); panBtns.add(btnEdit); btnDelete.setText(resourceMap.getString("btnDelete.text")); // NOI18N btnDelete.setName("btnDelete"); // NOI18N btnDelete.setEnabled(false); btnDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteKill(); } }); panBtns.add(btnDelete); getContentPane().add(panBtns, BorderLayout.PAGE_START); killTable = new JTable(killModel); killTable.setName("killTable"); // NOI18N TableColumn column = null; for (int i = 0; i < KillTableModel.N_COL; i++) { column = killTable.getColumnModel().getColumn(i); column.setPreferredWidth(killModel.getColumnWidth(i)); column.setCellRenderer(killModel.getRenderer()); } killTable.setIntercellSpacing(new Dimension(0, 0)); killTable.setShowGrid(false); killTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); killTable.getSelectionModel().addListSelectionListener( new javax.swing.event.ListSelectionListener() { public void valueChanged( javax.swing.event.ListSelectionEvent evt) { killTableValueChanged(evt); } }); scrollKillTable = new JScrollPane(); scrollKillTable.setName("scrollPartsTable"); // NOI18N scrollKillTable.setViewportView(killTable); getContentPane().add(scrollKillTable, BorderLayout.CENTER); btnOK.setText(resourceMap.getString("btnOK.text")); // NOI18N btnOK.setName("btnOK"); // NOI18N btnOK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnOKActionPerformed(evt); } }); getContentPane().add(btnOK, BorderLayout.PAGE_END); pack(); } private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnHireActionPerformed this.setVisible(false); } private void killTableValueChanged(javax.swing.event.ListSelectionEvent evt) { int row = killTable.getSelectedRow(); btnDelete.setEnabled(row != -1); btnEdit.setEnabled(row != -1); } private void addKill() { KillDialog ekld = new KillDialog(frame, true, new Kill(person.getId(), "", "", campaign.getDate()), person.getName()); ekld.setVisible(true); if(null != ekld.getKill()) { campaign.addKill(ekld.getKill()); } refreshTable(); } private void editKill() { Kill kill = killModel.getKillAt(killTable.getSelectedRow()); if(null != kill) { KillDialog ekld = new KillDialog(frame, true, kill, person.getName()); ekld.setVisible(true); refreshTable(); } } private void deleteKill() { Kill kill = killModel.getKillAt(killTable.getSelectedRow()); campaign.removeKill(kill); refreshTable(); } private void refreshTable() { int selectedRow = killTable.getSelectedRow(); killModel.setData(campaign.getKillsFor(person.getId())); if(selectedRow != -1) { if(killTable.getRowCount() > 0) { if(killTable.getRowCount() == selectedRow) { killTable.setRowSelectionInterval(selectedRow-1, selectedRow-1); } else { killTable.setRowSelectionInterval(selectedRow, selectedRow); } } } } /** * A table model for displaying parts - similar to the one in CampaignGUI, but not exactly */ public class KillTableModel extends AbstractTableModel { /** * */ private static final long serialVersionUID = -58915479895694545L; protected String[] columnNames; protected ArrayList<Kill> data; public final static int COL_DATE = 0; public final static int COL_KILLED = 1; public final static int COL_KILLER = 2; public final static int N_COL = 3; public KillTableModel(ArrayList<Kill> entries) { data = entries; } public int getRowCount() { return data.size(); } public int getColumnCount() { return N_COL; } @Override public String getColumnName(int column) { switch(column) { case COL_DATE: return "Date"; case COL_KILLED: return "Kill"; case COL_KILLER: return "With"; default: return "?"; } } public Object getValueAt(int row, int col) { Kill kill; if(data.isEmpty()) { return ""; } else { kill = (Kill)data.get(row); } if(col == COL_DATE) { SimpleDateFormat shortDateFormat = new SimpleDateFormat("MM/dd/yyyy"); return shortDateFormat.format(kill.getDate()); } if(col == COL_KILLED) { return kill.getWhatKilled(); } if(col == COL_KILLER) { return kill.getKilledByWhat(); } return "?"; } @Override public boolean isCellEditable(int row, int col) { return false; } @Override public Class<? extends Object> getColumnClass(int c) { return getValueAt(0, c).getClass(); } public Kill getKillAt(int row) { return (Kill) data.get(row); } public int getColumnWidth(int c) { switch(c) { case COL_DATE: return 20; default: return 100; } } public int getAlignment(int col) { return SwingConstants.LEFT; } public String getTooltip(int row, int col) { switch(col) { default: return null; } } //fill table with values public void setData(ArrayList<Kill> kills) { data = kills; fireTableDataChanged(); } public KillTableModel.Renderer getRenderer() { return new KillTableModel.Renderer(); } public class Renderer extends DefaultTableCellRenderer { /** * */ private static final long serialVersionUID = -2888173457152182907L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setOpaque(true); int actualCol = table.convertColumnIndexToModel(column); int actualRow = table.convertRowIndexToModel(row); setHorizontalAlignment(getAlignment(actualCol)); setToolTipText(getTooltip(actualRow, actualCol)); return this; } } } }