/**
* Copyright 2011 multibit.org
*
* Licensed under the MIT license (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://opensource.org/licenses/mit-license.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.multibit.viewsystem.swing.action;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import javax.swing.JTable;
import org.multibit.controller.Controller;
import org.multibit.controller.bitcoin.BitcoinController;
import org.multibit.model.bitcoin.WalletAddressBookData;
import org.multibit.model.bitcoin.WalletData;
import org.multibit.model.bitcoin.WalletInfoData;
import org.multibit.store.MultiBitWalletVersion;
import org.multibit.utils.ImageLoader;
import org.multibit.viewsystem.swing.view.dialogs.DeleteSendingAddressConfirmDialog;
import org.multibit.viewsystem.swing.view.models.AddressBookTableModel;
import org.multibit.viewsystem.swing.view.panels.SendBitcoinPanel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This {@link Action} represents an action to delete a sending address.
*/
public class DeleteSendingAddressSubmitAction extends MultiBitSubmitAction {
private static final long serialVersionUID = 200111999465875405L;
private static final Logger log = LoggerFactory.getLogger(DeleteSendingAddressSubmitAction.class);
private SendBitcoinPanel sendBitcoinPanel;
private DeleteSendingAddressConfirmDialog deleteSendingAddressConfirmDialog;
/**
* Creates a new {@link DeleteSendingAddressSubmitAction}.
*/
public DeleteSendingAddressSubmitAction(BitcoinController bitcoinController, SendBitcoinPanel sendBitcoinPanel, DeleteSendingAddressConfirmDialog deleteSendingAddressConfirmDialog) {
super(bitcoinController, "deleteSendingAddressSubmitAction.text", "deleteSendingAddressSubmitAction.tooltip",
"deleteSendingAddressSubmitAction.mnemonicKey", ImageLoader.createImageIcon(ImageLoader.DELETE_ADDRESS_ICON_FILE));
this.sendBitcoinPanel = sendBitcoinPanel;
this.deleteSendingAddressConfirmDialog = deleteSendingAddressConfirmDialog;
}
/**
* Delete the currently selected sending address.
*/
@Override
public void actionPerformed(ActionEvent e) {
if (abort()) {
return;
}
WalletData perWalletModelData = super.bitcoinController.getModel().getActivePerWalletModelData();
WalletInfoData walletInfo = perWalletModelData.getWalletInfo();
if (walletInfo == null) {
walletInfo = new WalletInfoData(perWalletModelData.getWalletFilename(), perWalletModelData.getWallet(), MultiBitWalletVersion.PROTOBUF_ENCRYPTED);
perWalletModelData.setWalletInfo(walletInfo);
}
if (walletInfo.getSendingAddresses().size() > 0) {
JTable addressesTable = sendBitcoinPanel.getAddressesTable();
AddressBookTableModel addressesTableModel = sendBitcoinPanel.getAddressesTableModel();
int viewRow = addressesTable.getSelectedRow();
if (viewRow >= 0) {
int selectedAddressRowModel = addressesTable.convertRowIndexToModel(viewRow);
WalletAddressBookData rowData = addressesTableModel.getAddressBookDataByRow(selectedAddressRowModel, false);
if (rowData != null) {
if (selectedAddressRowModel < addressesTableModel.getRowCount()) {
walletInfo.getSendingAddresses().remove(rowData);
super.bitcoinController.getModel().getActivePerWalletModelData().setDirty(true);
addressesTableModel.fireTableDataChanged();
} else {
log.error("Could not remove row " + selectedAddressRowModel + " as table model only contained " + addressesTableModel.getRowCount() + " rows");
}
int newViewRowToSelect = viewRow == 0 ? 0 : viewRow - 1;
if (addressesTableModel.getRowCount() > 0) {
int newModelRowtoSelect = addressesTable.convertRowIndexToModel(newViewRowToSelect);
WalletAddressBookData newRowData = addressesTableModel.getAddressBookDataByRow(newModelRowtoSelect, false);
super.bitcoinController.getModel().setActiveWalletPreference(sendBitcoinPanel.getAddressConstant(),
newRowData.getAddress());
super.bitcoinController.getModel().setActiveWalletPreference(sendBitcoinPanel.getLabelConstant(),
newRowData.getLabel());
if (sendBitcoinPanel.getAddressTextField() != null) {
sendBitcoinPanel.getAddressTextField().setText(newRowData.getAddress());
}
sendBitcoinPanel.getLabelTextArea().setText(newRowData.getLabel());
sendBitcoinPanel.displayQRCode(newRowData.getAddress(), sendBitcoinPanel.getAmount(), newRowData.getLabel());
}
}
}
}
sendBitcoinPanel.checkDeleteSendingEnabled();
if (deleteSendingAddressConfirmDialog != null) {
deleteSendingAddressConfirmDialog.setVisible(false);
}
}
}