/*
*
* Copyright 2014 http://Bither.net
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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 net.bither.viewsystem.froms;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.intellij.uiDesigner.core.Spacer;
import net.bither.Bither;
import net.bither.bitherj.core.HDAccount;
import net.bither.bitherj.core.HDMAddress;
import net.bither.bitherj.utils.UnitUtil;
import net.bither.bitherj.utils.Utils;
import net.bither.fonts.MonospacedFont;
import net.bither.model.Ticker;
import net.bither.qrcode.DisplayQRCodePanle;
import net.bither.qrcode.QRCodeGenerator;
import net.bither.utils.MarketUtil;
import net.bither.utils.WalletUtils;
import net.bither.viewsystem.action.CopyAction;
import net.bither.viewsystem.base.Buttons;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.ResourceBundle;
public class ShowTransactionHeaderForm implements CopyAction.ICopy {
private JPanel panelMain;
private JButton btnSend;
private JButton btnAmt;
private JButton btnQRCode;
private JButton btnCopy;
private JTextArea taAddress;
private boolean isShowBtc = true;
public ShowTransactionHeaderForm() {
initUI();
updateUI();
}
public void setVisible(boolean visible) {
panelMain.setVisible(visible);
}
private void initUI() {
Buttons.modifButton(btnAmt);
Buttons.modifButton(btnQRCode);
Buttons.modifSendButton(btnSend);
Buttons.modifCopyButton(btnCopy);
btnAmt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
isShowBtc = !isShowBtc;
showAmt();
panelMain.requestFocusInWindow();
}
});
if (Bither.getActionAddress() != null) {
btnQRCode.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
DisplayQRCodePanle displayQRCodePanle = new DisplayQRCodePanle(Bither.getActionAddress().getAddress());
displayQRCodePanle.showPanel();
}
});
}
btnSend.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
if (Bither.getActionAddress() != null) {
if (Bither.getActionAddress() instanceof HDAccount) {
HDAccountSendPanel hdAccountSendPanel = new HDAccountSendPanel();
hdAccountSendPanel.showPanel();
} else if (Bither.getActionAddress() instanceof HDMAddress) {
SendHDMBitcoinPanel hdmBitcoinPanel = new SendHDMBitcoinPanel();
hdmBitcoinPanel.showPanel();
} else if (Bither.getActionAddress().hasPrivKey()) {
SendBitcoinPanel sendBitcoinDialog = new SendBitcoinPanel();
sendBitcoinDialog.showPanel();
} else {
UnSignTxPanel unSignTxPanel = new UnSignTxPanel();
unSignTxPanel.showPanel();
}
panelMain.requestFocusInWindow();
}
}
});
CopyAction copyAddressAction =
new CopyAction(ShowTransactionHeaderForm.this);
btnCopy.addActionListener(copyAddressAction);
taAddress.setBorder(null);
taAddress.setFont(MonospacedFont.fontWithSize(taAddress.getFont().getSize()));
}
private void showAmt() {
if (Bither.getActionAddress() == null) {
return;
}
if (isShowBtc) {
btnAmt.setText(UnitUtil.formatValue(Bither.getActionAddress().getBalance(), UnitUtil.BitcoinUnit.BTC));
} else {
Ticker ticker = MarketUtil.getTickerOfDefaultMarket();
double amt = ((double) Bither.getActionAddress().getBalance()) * ticker.getDefaultExchangePrice() / Math.pow(10, 8);
btnAmt.setText(Utils.formatDoubleToMoneyString(amt));
}
}
public void updateUI() {
final String address;
showAmt();
if (Bither.getActionAddress() != null) {
address = Bither.getActionAddress().getAddress();
} else {
address = "";
}
taAddress.setText(WalletUtils.formatHash(address, 4, 12));
btnQRCode.setText("");
if (Bither.getActionAddress() != null && Bither.getActionAddress().getBalance() == 0) {
btnSend.setEnabled(false);
} else {
btnSend.setEnabled(true);
}
new Thread(new Runnable() {
@Override
public void run() {
showQRCode(address);
}
}).start();
}
private void showQRCode(final String address) {
try {
BufferedImage image = QRCodeGenerator.generateQRcode(address, null, null);
final ImageIcon icon;
if (image != null) {
icon = new ImageIcon(image);
} else {
icon = new ImageIcon();
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (btnQRCode != null) {
btnQRCode.setIcon(icon);
}
}
});
} catch (RuntimeException re) {
re.printStackTrace();
}
}
public JPanel getPanel() {
return panelMain;
}
@Override
public String getCopyString() {
return Bither.getActionAddress().getAddress();
}
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
// DO NOT EDIT OR ADD ANY CODE HERE!
$$$setupUI$$$();
}
/**
* Method generated by IntelliJ IDEA GUI Designer
* >>> IMPORTANT!! <<<
* DO NOT edit this method OR call it in your code!
*
* @noinspection ALL
*/
private void $$$setupUI$$$() {
panelMain = new JPanel();
panelMain.setLayout(new GridLayoutManager(3, 7, new Insets(0, 0, 0, 0), -1, -1));
panelMain.setBackground(new Color(-1));
panelMain.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20), null));
final Spacer spacer1 = new Spacer();
panelMain.add(spacer1, new GridConstraints(2, 0, 1, 7, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
final JLabel label1 = new JLabel();
this.$$$loadLabelText$$$(label1, ResourceBundle.getBundle("viewer").getString("address_balance"));
panelMain.add(label1, new GridConstraints(1, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, 1, 1, null, null, null, 0, false));
taAddress = new JTextArea();
taAddress.setEditable(false);
taAddress.setFont(new Font("Monospaced", taAddress.getFont().getStyle(), 18));
panelMain.add(taAddress, new GridConstraints(0, 0, 2, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(100, 50), null, 0, false));
final Spacer spacer2 = new Spacer();
panelMain.add(spacer2, new GridConstraints(0, 4, 2, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
btnAmt = new JButton();
btnAmt.setText("Button");
panelMain.add(btnAmt, new GridConstraints(1, 6, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, 1, 1, null, null, null, 0, false));
final JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayoutManager(2, 1, new Insets(0, 0, 0, 0), -1, -1));
panel1.setOpaque(false);
panelMain.add(panel1, new GridConstraints(0, 1, 2, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
btnCopy = new JButton();
btnCopy.setText("Button");
panel1.add(btnCopy, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_SOUTH, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
btnSend = new JButton();
this.$$$loadButtonText$$$(btnSend, ResourceBundle.getBundle("viewer").getString("send_bitcoin_action_text"));
panel1.add(btnSend, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_NORTH, GridConstraints.FILL_NONE, 1, 1, null, null, null, 0, false));
btnQRCode = new JButton();
btnQRCode.setHorizontalTextPosition(0);
btnQRCode.setText("Button");
panelMain.add(btnQRCode, new GridConstraints(0, 5, 1, 2, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
}
/**
* @noinspection ALL
*/
private void $$$loadLabelText$$$(JLabel component, String text) {
StringBuffer result = new StringBuffer();
boolean haveMnemonic = false;
char mnemonic = '\0';
int mnemonicIndex = -1;
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == '&') {
i++;
if (i == text.length()) break;
if (!haveMnemonic && text.charAt(i) != '&') {
haveMnemonic = true;
mnemonic = text.charAt(i);
mnemonicIndex = result.length();
}
}
result.append(text.charAt(i));
}
component.setText(result.toString());
if (haveMnemonic) {
component.setDisplayedMnemonic(mnemonic);
component.setDisplayedMnemonicIndex(mnemonicIndex);
}
}
/**
* @noinspection ALL
*/
private void $$$loadButtonText$$$(AbstractButton component, String text) {
StringBuffer result = new StringBuffer();
boolean haveMnemonic = false;
char mnemonic = '\0';
int mnemonicIndex = -1;
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == '&') {
i++;
if (i == text.length()) break;
if (!haveMnemonic && text.charAt(i) != '&') {
haveMnemonic = true;
mnemonic = text.charAt(i);
mnemonicIndex = result.length();
}
}
result.append(text.charAt(i));
}
component.setText(result.toString());
if (haveMnemonic) {
component.setMnemonic(mnemonic);
component.setDisplayedMnemonicIndex(mnemonicIndex);
}
}
/**
* @noinspection ALL
*/
public JComponent $$$getRootComponent$$$() {
return panelMain;
}
}