Skip to content
Snippets Groups Projects
WalletGuiControlImpl.java 5.74 KiB
Newer Older
Michael Kmoch's avatar
Michael Kmoch committed
package fucoin.gui;

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(AbstractWallet wallet) {

        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(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);

            wallet.send(txtSendTo.getSelectedItem().toString(),
        btnExit.addActionListener(e -> window.dispose());

        window.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("window closing");
                super.windowClosing(e);

            }

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("window closing");
                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);
    }
Michael Kmoch's avatar
Michael Kmoch committed
}