/* * EditPersonnelInjuriesDialog.java * * Copyright (C) 2009-2016 MegaMek team * 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.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.ResourceBundle; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; 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.personnel.Injury; import mekhq.campaign.personnel.Person; /** * * @author Ralgith */ public class EditPersonnelInjuriesDialog extends JDialog { private static final long serialVersionUID = -8038099101234445018L; private Frame frame; /*private Campaign campaign; private int days;*/ private Person person; private ArrayList<Injury> injuries; private InjuryTableModel injuryModel; private JButton btnAdd; private JButton btnEdit; private JButton btnDelete; private JButton btnOK; private JTable injuriesTable; private JScrollPane scrollInjuryTable; /** Creates new form EditPersonnelInjuriesDialog */ public EditPersonnelInjuriesDialog(Frame parent, boolean modal, Campaign c, Person p) { super(parent, modal); this.frame = parent; //campaign = c; person = p; injuries = p.getInjuries(); injuryModel = new InjuryTableModel(injuries); initComponents(); setLocationRelativeTo(parent); } private void initComponents() { btnOK = new JButton(); btnAdd = new JButton(); btnEdit = new JButton(); btnDelete = new JButton(); ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.EditPersonnelInjuriesDialog", new EncodeControl()); //$NON-NLS-1$ setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setName("Form"); // NOI18N setTitle(resourceMap.getString("Form.title") + " " + person.getName()); getContentPane().setLayout(new BorderLayout()); JPanel panBtns = new JPanel(new GridLayout(1,0)); btnAdd.setText(resourceMap.getString("btnAdd.text")); // NOI18N btnAdd.setName("btnAdd"); // NOI18N btnAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { addEntry(); } }); panBtns.add(btnAdd); btnEdit.setText(resourceMap.getString("btnEdit.text")); // NOI18N btnEdit.setName("btnEdit"); // NOI18N btnEdit.setEnabled(false); btnEdit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { editEntry(); } }); panBtns.add(btnEdit); btnDelete.setText(resourceMap.getString("btnDelete.text")); // NOI18N btnDelete.setName("btnDelete"); // NOI18N btnDelete.setEnabled(false); btnDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { deleteEntry(); } }); panBtns.add(btnDelete); getContentPane().add(panBtns, BorderLayout.PAGE_START); injuriesTable = new JTable(injuryModel); injuriesTable.setName("injuriesTable"); // NOI18N TableColumn column = null; int width = 0; for (int i = 0; i < InjuryTableModel.N_COL; i++) { column = injuriesTable.getColumnModel().getColumn(i); column.setPreferredWidth(injuryModel.getColumnWidth(i)); column.setCellRenderer(injuryModel.getRenderer()); width += injuryModel.getColumnWidth(i); } setMinimumSize(new Dimension(width, 500)); injuriesTable.setIntercellSpacing(new Dimension(0, 0)); injuriesTable.setShowGrid(false); injuriesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); injuriesTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() { @Override public void valueChanged( ListSelectionEvent evt) { injuriesTableValueChanged(evt); } }); scrollInjuryTable = new JScrollPane(); scrollInjuryTable.setName("scrollInjuryTable"); // NOI18N scrollInjuryTable.setViewportView(injuriesTable); getContentPane().add(scrollInjuryTable, BorderLayout.CENTER); btnOK.setText(resourceMap.getString("btnOK.text")); // NOI18N btnOK.setName("btnOK"); // NOI18N btnOK.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { btnOKActionPerformed(evt); } }); getContentPane().add(btnOK, BorderLayout.PAGE_END); pack(); } private void btnOKActionPerformed(ActionEvent evt) {//GEN-FIRST:event_btnHireActionPerformed this.setVisible(false); } private void injuriesTableValueChanged(ListSelectionEvent evt) { int row = injuriesTable.getSelectedRow(); btnDelete.setEnabled(row != -1); btnEdit.setEnabled(row != -1); } private void addEntry() { EditInjuryEntryDialog eied = new EditInjuryEntryDialog(frame, true, new Injury()); eied.setVisible(true); if(null != eied.getEntry()) { person.addInjury(eied.getEntry()); } refreshTable(); } private void editEntry() { Injury entry = injuryModel.getEntryAt(injuriesTable.getSelectedRow()); if(null != entry) { EditInjuryEntryDialog eied = new EditInjuryEntryDialog(frame, true, entry); eied.setVisible(true); refreshTable(); } } private void deleteEntry() { person.getInjuries().remove(injuriesTable.getSelectedRow()); refreshTable(); } private void refreshTable() { int selectedRow = injuriesTable.getSelectedRow(); injuryModel.setData(person.getInjuries()); if(selectedRow != -1) { if(injuriesTable.getRowCount() > 0) { if(injuriesTable.getRowCount() == selectedRow) { injuriesTable.setRowSelectionInterval(selectedRow-1, selectedRow-1); } else { injuriesTable.setRowSelectionInterval(selectedRow, selectedRow); } } } } /** * A table model for displaying parts - similar to the one in CampaignGUI, but not exactly */ public class InjuryTableModel extends AbstractTableModel { private static final long serialVersionUID = 534443424190075264L; protected String[] columnNames; protected ArrayList<Injury> data; public final static int COL_DAYS = 0; public final static int COL_LOCATION = 1; public final static int COL_TYPE = 2; public final static int COL_FLUFF = 3; public final static int COL_HITS = 4; public final static int COL_PERMANENT = 5; public final static int COL_WORKEDON = 6; public final static int COL_EXTENDED = 7; public final static int N_COL = 8; public InjuryTableModel(ArrayList<Injury> entries) { data = entries; } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return N_COL; } @Override public String getColumnName(int column) { switch(column) { case COL_DAYS: return "Days Remaining"; case COL_LOCATION: return "Location on Body"; case COL_TYPE: return "Type of Injury"; case COL_FLUFF: return "Fluff Message"; case COL_HITS: return "Number of Hits"; case COL_PERMANENT: return "Is Permanent"; case COL_WORKEDON: return "Doctor Has Worked On"; case COL_EXTENDED: return "Was Extended Time"; default: return "?"; } } @Override public Object getValueAt(int row, int col) { Injury entry; if(data.isEmpty()) { return ""; } else { entry = (Injury)data.get(row); } if(col == COL_DAYS) { return Integer.toString(entry.getTime()); } if(col == COL_LOCATION) { return entry.getLocationName(); } if(col == COL_TYPE) { return entry.getType().getName(entry.getLocation(), entry.getHits()); } if(col == COL_FLUFF) { return entry.getFluff(); } if(col == COL_HITS) { return Integer.toString(entry.getHits()); } if(col == COL_PERMANENT) { return Boolean.toString(entry.isPermanent()); } if(col == COL_WORKEDON) { return Boolean.toString(entry.isWorkedOn()); } if(col == COL_EXTENDED) { return Boolean.toString(entry.getExtended()); } 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 Injury getEntryAt(int row) { return (Injury) data.get(row); } public int getColumnWidth(int c) { switch(c) { case COL_DAYS: case COL_HITS: case COL_PERMANENT: case COL_WORKEDON: case COL_EXTENDED: return 110; case COL_TYPE: return 150; case COL_FLUFF: case COL_LOCATION: return 200; default: return 50; } } public int getAlignment(int col) { switch(col) { case COL_DAYS: case COL_HITS: case COL_PERMANENT: case COL_WORKEDON: case COL_EXTENDED: return SwingConstants.CENTER; default: return SwingConstants.LEFT; } } public String getTooltip(int row, int col) { switch(col) { default: return null; } } //fill table with values public void setData(ArrayList<Injury> entries) { data = entries; fireTableDataChanged(); } public InjuryTableModel.Renderer getRenderer() { return new InjuryTableModel.Renderer(); } public class Renderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 9054581142945717303L; @Override 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; } } } }