/* * ManageAssetsDialog.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.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.table.DefaultTableCellRenderer; import javax.swing.table.TableColumn; import megamek.common.util.EncodeControl; import mekhq.MekHQ; import mekhq.campaign.Campaign; import mekhq.campaign.event.AssetChangedEvent; import mekhq.campaign.event.AssetNewEvent; import mekhq.campaign.event.AssetRemovedEvent; import mekhq.campaign.finances.Asset; import mekhq.campaign.finances.Finances; import mekhq.gui.model.DataTableModel; /** * * @author Taharqa */ public class ManageAssetsDialog extends JDialog { private static final long serialVersionUID = -8038099101234445018L; private Frame frame; private Campaign campaign; private AssetTableModel assetModel; private JButton btnAdd; private JButton btnEdit; private JButton btnDelete; private JButton btnOK; private JTable assetTable; private JScrollPane scrollAssetTable; /** Creates new form EditPersonnelLogDialog */ public ManageAssetsDialog(Frame parent, Campaign c) { super(parent, true); this.frame = parent; campaign = c; assetModel = new AssetTableModel(campaign.getFinances().getAllAssets()); 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); setTitle("Manage Assets"); getContentPane().setLayout(new java.awt.BorderLayout()); JPanel panBtns = new JPanel(new GridLayout(1,0)); btnAdd.setText("Add Asset"); // NOI18N btnAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addAsset(); } }); panBtns.add(btnAdd); btnEdit.setText("Edit Asset"); // NOI18N btnEdit.setEnabled(false); btnEdit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { editAsset(); } }); panBtns.add(btnEdit); btnDelete.setText("Remove Asset"); // NOI18N btnDelete.setEnabled(false); btnDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteAsset(); } }); panBtns.add(btnDelete); getContentPane().add(panBtns, BorderLayout.PAGE_START); assetTable = new JTable(assetModel); TableColumn column = null; for (int i = 0; i <AssetTableModel.N_COL; i++) { column = assetTable.getColumnModel().getColumn(i); column.setPreferredWidth(assetModel.getColumnWidth(i)); column.setCellRenderer(assetModel.getRenderer()); } assetTable.setIntercellSpacing(new Dimension(0, 0)); assetTable.setShowGrid(false); assetTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); assetTable.getSelectionModel().addListSelectionListener( new javax.swing.event.ListSelectionListener() { public void valueChanged( javax.swing.event.ListSelectionEvent evt) { assetTableValueChanged(evt); } }); scrollAssetTable = new JScrollPane(assetTable); getContentPane().add(scrollAssetTable, 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) { this.setVisible(false); } private void assetTableValueChanged(javax.swing.event.ListSelectionEvent evt) { int row = assetTable.getSelectedRow(); btnDelete.setEnabled(row != -1); btnEdit.setEnabled(row != -1); } private void addAsset() { Asset a = new Asset(); EditAssetDialog ead = new EditAssetDialog(frame, a); ead.setVisible(true); if(!ead.wasCancelled()) { campaign.getFinances().getAllAssets().add(a); MekHQ.triggerEvent(new AssetNewEvent(a)); } refreshTable(); } private void editAsset() { Asset a = assetModel.getAssetAt(assetTable.getSelectedRow()); if(null != a) { EditAssetDialog ead = new EditAssetDialog(frame, a); ead.setVisible(true); MekHQ.triggerEvent(new AssetChangedEvent(a)); refreshTable(); } } private void deleteAsset() { campaign.getFinances().getAllAssets().remove(assetTable.getSelectedRow()); MekHQ.triggerEvent(new AssetRemovedEvent(assetModel.getAssetAt(assetTable.getSelectedRow()))); refreshTable(); } private void refreshTable() { int selectedRow = assetTable.getSelectedRow(); assetModel.setData(campaign.getFinances().getAllAssets()); if(selectedRow != -1) { if(assetTable.getRowCount() > 0) { if(assetTable.getRowCount() == selectedRow) { assetTable.setRowSelectionInterval(selectedRow-1, selectedRow-1); } else { assetTable.setRowSelectionInterval(selectedRow, selectedRow); } } } } /** * A table model for displaying parts - similar to the one in CampaignGUI, but not exactly */ public class AssetTableModel extends DataTableModel { private static final long serialVersionUID = 534443424190075264L; public final static int COL_NAME = 0; public final static int COL_VALUE = 1; public final static int COL_SCHEDULE = 2; public final static int COL_INCOME = 3; public final static int N_COL = 4; public AssetTableModel(ArrayList<Asset> assets) { data = assets; } public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return N_COL; } @Override public String getColumnName(int column) { switch(column) { case COL_NAME: return "Name"; case COL_VALUE: return "Value"; case COL_SCHEDULE: return "Pay Frequency"; case COL_INCOME: return "Income"; default: return "?"; } } public Object getValueAt(int row, int col) { Asset asset; if(data.isEmpty()) { return ""; } else { asset = getAssetAt(row); } if(col == COL_NAME) { return asset.getName(); } if(col == COL_VALUE) { return asset.getValue(); } if(col == COL_INCOME) { return asset.getIncome(); } if(col == COL_SCHEDULE) { return Finances.getScheduleName(asset.getSchedule()); } return "?"; } @Override public boolean isCellEditable(int row, int col) { return false; } public Asset getAssetAt(int row) { return (Asset) data.get(row); } public int getColumnWidth(int c) { switch(c) { default: return 10; } } public int getAlignment(int col) { switch(col) { case COL_NAME: return SwingConstants.LEFT; default: return SwingConstants.RIGHT; } } public String getTooltip(int row, int col) { switch(col) { default: return null; } } public AssetTableModel.Renderer getRenderer() { return new AssetTableModel.Renderer(); } public class Renderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 9054581142945717303L; 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; } } } }