-
Simon Könnecke authoredSimon Könnecke authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
WalletGuiControlImpl.java 5.86 KiB
package fucoin.gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;
public class WalletGuiControlImpl implements WalletGuiControl {
private DefaultListModel<LogMessage> log = new DefaultListModel<>();
private JFrame window = new JFrame("test");
private JPanel topPanel = new JPanel();
private JLabel lblMyAddress = new JLabel("My Address:");
private JTextField txtMyAddress = new JTextField("<MyAddress>");
private JLabel lblEmpty = new JLabel("");
private JLabel lblMyAmount = new JLabel("My FUCs");
private JTextField txtMyAmount = new JTextField("<MyFUCs>");
private JPanel centerPanel = new JPanel();
private JLabel lblSendTo = new JLabel("Send to:");
private JComboBox<String> txtSendTo = new JComboBox<>();
private JLabel lblSendAmount = new JLabel("Amount:");
private JTextField txtSendAmount = new JTextField("");
private JButton btnSend = new JButton("Send");
private JButton btnSearch = new JButton("Search");
private JButton btnStore = new JButton("Store");
private JButton btnExit = new JButton("Exit");
private JPanel bottomPanel = new JPanel();
private JList<LogMessage> txtLog = new JList<>(log);
private JScrollPane logPane = new JScrollPane(txtLog);
private JCheckBox showDebug;
public WalletGuiControlImpl(WalletControl walletControl) {
window.setSize(400, 600);
window.setLayout(new GridLayout(3, 1));
topPanel.setLayout(new GridLayout(2, 3));
// Row 1
topPanel.add(lblMyAddress);
topPanel.add(txtMyAddress);
topPanel.add(lblEmpty);
// Row 2
topPanel.add(lblMyAmount);
topPanel.add(txtMyAmount);
window.add(topPanel);
//<hr>
centerPanel.setLayout(new GridLayout(4, 1));
// Row 1
JPanel centerup = new JPanel();
centerup.setLayout(new BorderLayout());
centerup.add(lblSendTo, BorderLayout.WEST);
centerup.add(txtSendTo, BorderLayout.CENTER);
centerPanel.add(centerup);
JPanel centerup2 = new JPanel();
centerup2.setLayout(new BorderLayout());
JTextField sendToNewEdt = new JTextField();
centerup2.add(sendToNewEdt, BorderLayout.CENTER);
JButton addNewButton = new JButton("Add");
addNewButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txtSendTo.addItem(sendToNewEdt.getText());
}
});
centerup2.add(addNewButton, BorderLayout.EAST);
centerPanel.add(centerup2);
// Row 2
JPanel centerdown = new JPanel();
centerdown.setLayout(new GridLayout(1, 3));
centerdown.add(lblSendAmount);
centerdown.add(txtSendAmount);
centerdown.add(btnSend);
centerPanel.add(centerdown);
//centerPanel.add(new JLabel(""));
// Row 3
JPanel centerdown2 = new JPanel();
centerdown2.setLayout(new GridLayout(1, 3));
centerdown2.add(btnSearch);
centerdown2.add(btnStore);
centerdown2.add(btnExit);
centerPanel.add(centerdown2);
window.add(centerPanel);
//<hr>
bottomPanel.setLayout(new BorderLayout());
showDebug = new JCheckBox("Show debug messages in transaction log");
showDebug.addItemListener(e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
txtLog.setModel(log);
} else {
updateFilteredLog();
}
});
bottomPanel.add(showDebug, BorderLayout.NORTH);
bottomPanel.add(logPane, BorderLayout.CENTER);
window.add(bottomPanel);
window.setVisible(true);
btnSend.addActionListener(e -> {
walletControl.send(txtSendTo.getSelectedItem().toString(),
Integer.parseInt(txtSendAmount.getText()));
});
btnStore.addActionListener(e -> {
});
btnExit.addActionListener(e -> window.dispose());
window.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("window closing");
walletControl.leave();
super.windowClosing(e);
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("window closing");
walletControl.leave();
super.windowClosing(e);
}
});
}
@Override
public void setAddress(String address) {
txtMyAddress.setText(address);
window.setTitle(address);
}
@Override
public void setAmount(int amount) {
txtMyAmount.setText(String.valueOf(amount));
}
@Override
public void addKnownAddress(String address) {
txtSendTo.addItem(address);
}
@Override
public void addLogMsg(String msg) {
log(new LogMessage(msg, false));
}
@Override
public void addTransactionLogMessage(String message) {
log(new LogMessage(message, true));
}
private void log(LogMessage logMessage) {
SwingUtilities.invokeLater(() -> {
log.addElement(logMessage);
if (!showDebug.isSelected()) {
updateFilteredLog();
}
// auto scroll to the bottom
txtLog.ensureIndexIsVisible(log.size() - 1);
});
}
private void updateFilteredLog() {
DefaultListModel<LogMessage> filteredLog = new DefaultListModel<>();
Enumeration<LogMessage> elements = log.elements();
while (elements.hasMoreElements()) {
LogMessage logMessage = elements.nextElement();
if (logMessage.isTransactionRelated()) {
filteredLog.addElement(logMessage);
}
}
txtLog.setModel(filteredLog);
}
}