package org.ripple.power.ui; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.ArrayList; import java.util.Collections; import javax.swing.JDialog; import javax.swing.JFrame; import org.ripple.power.config.LSystem; import org.ripple.power.helper.HelperWindow; import org.ripple.power.i18n.LangConfig; import org.ripple.power.txns.Currencies; import org.ripple.power.txns.OfferPrice; import org.ripple.power.txns.OtherData; import org.ripple.power.txns.OtherData.CoinmarketcapData; import org.ripple.power.txns.Updateable; import org.ripple.power.ui.graphics.LColor; import org.ripple.power.ui.view.HtmlRenderer; import org.ripple.power.ui.view.RPLabel; import org.ripple.power.ui.view.RPList; import org.ripple.power.ui.view.RPTextBox; import org.ripple.power.ui.view.RPToast; import org.ripple.power.ui.view.WaitDialog; import org.ripple.power.utils.StringUtils; import org.ripple.power.utils.SwingUtils; public class RPExchangeMinRateViewDialog extends JDialog implements WindowListener { /** * */ private static final long serialVersionUID = 1L; private RPCButton _exitButton; private RPCButton _rateButton; private RPComboBox _srcComboBox; private RPComboBox _dstComboBox; private RPLabel _oneLabel; private RPLabel _twoLabel; private RPLabel _threeLabel; private RPLabel _fourLabel; private RPList _encryptcoinList; private RPList _legalTenderList; private javax.swing.JPanel panelOne; private javax.swing.JScrollPane scrollPanelOne; private javax.swing.JScrollPane scrollPanelTwo; private javax.swing.JSeparator spLine; private RPTextBox _srcText; private RPTextBox _dstText; private boolean _closed; private ArrayList<WaitDialog> _waitDialogs = new ArrayList<WaitDialog>(10); public static RPExchangeMinRateViewDialog showDialog(String text, JFrame parent) { RPExchangeMinRateViewDialog dialog = new RPExchangeMinRateViewDialog(text, parent); dialog.pack(); dialog.setLocationRelativeTo(parent); dialog.setVisible(true); return dialog; } public RPExchangeMinRateViewDialog(String text, JFrame parent) { super(parent, text, false); this.setIconImage(UIRes.getIcon()); this.setResizable(false); Dimension dim = new Dimension(774, 565); this.setPreferredSize(dim); this.setSize(dim); this.initComponents(); } private void select(ItemEvent e) { final String name = StringUtils.trim((String) e.getItem()); if (name.length() == 3) { LSystem.invokeLater(new Updateable() { public void action(Object o) { RPExchangeMinRateViewDialog.this.repaint(); RPToast.makeText(RPExchangeMinRateViewDialog.this, Currencies.name(name)).display(); RPExchangeMinRateViewDialog.this.repaint(); } }); } } private void initComponents() { addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { HelperWindow.addObject(e.getSource()); } @Override public void windowIconified(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowDeactivated(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { _closed = true; HelperWindow.removeObject(e.getSource()); } @Override public void windowClosed(WindowEvent e) { _closed = true; HelperWindow.removeObject(e.getSource()); } @Override public void windowActivated(WindowEvent e) { } }); ArrayList<String> curList = Currencies.values(); _oneLabel = new RPLabel(); _srcText = new RPTextBox(); _srcComboBox = new RPComboBox(); _srcComboBox.setEditable(true); _twoLabel = new RPLabel(); _dstText = new RPTextBox(); _dstComboBox = new RPComboBox(); _dstComboBox.setEditable(true); panelOne = new javax.swing.JPanel(); scrollPanelOne = new javax.swing.JScrollPane(); _encryptcoinList = new RPList(); scrollPanelTwo = new javax.swing.JScrollPane(); _legalTenderList = new RPList(); _threeLabel = new RPLabel(); _fourLabel = new RPLabel(); _exitButton = new RPCButton(); _rateButton = new RPCButton(); spLine = new javax.swing.JSeparator(); getContentPane().setLayout(null); _oneLabel.setFont(UIRes.getFont()); // NOI18N _oneLabel.setText(LangConfig.get(this, "src", "Source")); getContentPane().add(_oneLabel); _oneLabel.setBounds(20, 412, 103, 36); _srcText.setFont(UIRes.getFont()); // NOI18N getContentPane().add(_srcText); _srcText.setBounds(90, 420, 190, 22); _srcComboBox.setItemModel(curList.toArray()); getContentPane().add(_srcComboBox); _srcComboBox.setBounds(290, 420, 90, 21); _srcComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { select(e); } }); _twoLabel.setFont(UIRes.getFont()); // NOI18N _twoLabel.setText(LangConfig.get(this, "dst", "Target")); getContentPane().add(_twoLabel); _twoLabel.setBounds(410, 412, 103, 36); _dstText.setFont(UIRes.getFont()); // NOI18N getContentPane().add(_dstText); _dstText.setBounds(480, 420, 180, 22); Collections.sort(curList); _dstComboBox.setItemModel(curList.toArray()); getContentPane().add(_dstComboBox); _dstComboBox.setBounds(670, 420, 90, 21); _dstComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { select(e); } }); panelOne.setBackground(new java.awt.Color(51, 51, 51)); panelOne.setLayout(null); _encryptcoinList.setCellRenderer(new HtmlRenderer()); scrollPanelOne.setViewportView(_encryptcoinList); final WaitDialog waitDialog = WaitDialog.showDialog(this); _waitDialogs.add(waitDialog); Updateable updateable = new Updateable() { @Override public void action(Object o) { try { for (; !_closed;) { ArrayList<CoinmarketcapData> datas = OtherData .getCoinmarketcapAllTo(30); final ArrayList<String> list = new ArrayList<String>(30); for (CoinmarketcapData data : datas) { list.add(data.toHTMLString()); } _encryptcoinList .setModel(new javax.swing.AbstractListModel<Object>() { private static final long serialVersionUID = 1L; public int getSize() { return list.size(); } public Object getElementAt(int i) { return list.get(i); } }); final ArrayList<String> curs = new ArrayList<String>( 100); curs.addAll(OtherData.getAllLegalTenderRateHTML()); _legalTenderList .setModel(new javax.swing.AbstractListModel<Object>() { private static final long serialVersionUID = 1L; public int getSize() { return curs.size(); } public Object getElementAt(int i) { return curs.get(i); } }); waitDialog.closeDialog(); Thread.sleep(LSystem.MINUTE); } } catch (Exception e) { e.printStackTrace(); } } }; LSystem.postThread(updateable); panelOne.add(scrollPanelOne); scrollPanelOne.setBounds(10, 40, 360, 340); _legalTenderList.setCellRenderer(new HtmlRenderer()); scrollPanelTwo.setViewportView(_legalTenderList); panelOne.add(scrollPanelTwo); scrollPanelTwo.setBounds(380, 40, 360, 340); _threeLabel.setFont(UIRes.getFont()); // NOI18N _threeLabel.setForeground(LColor.white); _threeLabel.setText(LangConfig.get(this, "lt", "Legal tender") + "(usd-cny)"); panelOne.add(_threeLabel); _threeLabel.setBounds(380, 10, 360, 20); _fourLabel.setFont(UIRes.getFont()); // NOI18N _fourLabel.setForeground(LColor.white); _fourLabel.setText(LangConfig.get(this, "em", "Electronic money") + "(coinmarketcap)"); panelOne.add(_fourLabel); _fourLabel.setBounds(10, 10, 360, 20); getContentPane().add(panelOne); panelOne.setBounds(10, 10, 750, 390); _exitButton.setText(LangConfig.get(this, "exit", "Exit")); _exitButton.setFont(UIRes.getFont()); _exitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { RPExchangeMinRateViewDialog.this._closed = true; SwingUtils.close(RPExchangeMinRateViewDialog.this); } }); getContentPane().add(_exitButton); _exitButton.setBounds(650, 480, 110, 40); _rateButton.setText(LangConfig.get(this, "convert", "Convert")); _rateButton.setFont(UIRes.getFont()); getContentPane().add(_rateButton); _rateButton.setBounds(540, 480, 100, 40); _rateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final String src = ((String) _srcComboBox.getSelectedItem()) .trim(); final String dst = ((String) _dstComboBox.getSelectedItem()) .trim(); if (src.length() != 3 || dst.length() != 3) { return; } final String srcValue = _srcText.getText().trim(); if (srcValue.length() == 0) { return; } if ("0".equals(srcValue) || !StringUtils.isNumber(srcValue)) { _srcText.setText("0"); _dstText.setText("0"); return; } if (src.equals(dst)) { _srcText.setText("0"); _dstText.setText(_srcText.getText()); return; } final WaitDialog dialog = WaitDialog .showDialog(RPExchangeMinRateViewDialog.this); _waitDialogs.add(dialog); Updateable updateable = new Updateable() { @Override public void action(Object o) { _dstText.setText(OfferPrice.getMoneyConvert(srcValue, src, dst)); dialog.closeDialog(); } }; LSystem.postThread(updateable); } }); getContentPane().add(spLine); spLine.setBounds(0, 460, 770, 10); getContentPane().setBackground(UIConfig.dialogbackground); pack(); } @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosing(WindowEvent e) { if (_waitDialogs != null) { for (WaitDialog wait : _waitDialogs) { if (wait != null) { wait.closeDialog(); } } } } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } }