package org.ripple.power.ui; import java.awt.Dialog; import java.awt.Dimension; import java.awt.Font; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.ripple.power.config.LSystem; import org.ripple.power.helper.HelperWindow; import org.ripple.power.i18n.LangConfig; import org.ripple.power.news.NewsParser; import org.ripple.power.news.NewsParser.News; import org.ripple.power.txns.Updateable; import org.ripple.power.ui.graphics.LColor; import org.ripple.power.ui.view.ABaseDialog; 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.utils.GraphicsUtils; import org.ripple.power.utils.StringUtils; public class RPNewsDialog extends ABaseDialog { /** * */ private static final long serialVersionUID = 1L; private RPCButton _queryButton; private RPLabel _loadStatusLabel; private RPLabel _KeywordLabel; private RPList _newsList; private javax.swing.JScrollPane jScrollPane1; private RPTextBox _wordText; private List<News> _find_result; public static RPNewsDialog showDialog() { RPNewsDialog dialog = new RPNewsDialog(LSystem.applicationMain); dialog.pack(); dialog.setLocationRelativeTo(LSystem.applicationMain); dialog.setVisible(true); return dialog; } public RPNewsDialog(Window parent) { super(parent, LangConfig.get(RPNewsDialog.class, "news", "News"), Dialog.ModalityType.MODELESS); setResizable(false); Dimension dim = new Dimension(366, 550); setPreferredSize(dim); setSize(dim); initComponents(); } private void initComponents() { addWindowListener(HelperWindow.get()); _loadStatusLabel = new RPLabel(); jScrollPane1 = new javax.swing.JScrollPane(); _newsList = new RPList(); _KeywordLabel = new RPLabel(); _wordText = new RPTextBox(); _queryButton = new RPCButton(); getContentPane().setLayout(null); Font font = GraphicsUtils.getFont(12); _loadStatusLabel.setFont(font); // NOI18N _loadStatusLabel .setHorizontalAlignment(javax.swing.SwingConstants.CENTER); getContentPane().add(_loadStatusLabel); _loadStatusLabel.setBounds(10, 490, 340, 16); _newsList.setBorder(BorderFactory.createEtchedBorder(LColor.WHITE, LColor.WHITE)); _newsList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { int idx = _newsList.getSelectedIndex(); if (idx > 0 && _find_result != null && _find_result.size() > 0) { LSystem.openURL(_find_result.get(idx).url); } } }); jScrollPane1.setViewportView(_newsList); getContentPane().add(jScrollPane1); jScrollPane1.setBounds(10, 50, 340, 430); _KeywordLabel.setText(LangConfig.get(this, "keyword", "Keyword")); _KeywordLabel.setFont(font); getContentPane().add(_KeywordLabel); _KeywordLabel.setBounds(10, 5, 60, 30); _wordText.setText("Ripple/Bitcoin"); getContentPane().add(_wordText); _wordText.setBounds(70, 10, 170, 21); _queryButton.setText(LangConfig.get(this, "search", "Search")); _queryButton.setFont(font); getContentPane().add(_queryButton); _queryButton.setBounds(261, 10, 90, 23); _queryButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String query = _wordText.getText().trim(); if (query.length() > 0) { loadNews(query); } } }); getContentPane().setBackground(UIConfig.dialogbackground); String query = _wordText.getText().trim(); if (query.length() > 0) { loadNews(query); } pack(); } private Thread _newThread; private void loadNews(final String query) { _loadStatusLabel.setText("Loading......"); Updateable update = new Updateable() { @Override public void action(Object o) { List<News> tmp = null; if (query.indexOf(" ") == -1 && query.indexOf("/") == -1) { tmp = NewsParser.getAllNew(query); } else { if (query.indexOf("/") != -1) { if (tmp == null) { tmp = new ArrayList<News>(100); } String[] split = StringUtils.split(query, "/"); for (String s : split) { tmp.addAll(NewsParser.getAllNew(s)); } } if (query.indexOf(" ") != -1) { if (tmp == null) { tmp = new ArrayList<News>(100); } String[] split = StringUtils.split(query, " "); for (String s : split) { tmp.addAll(NewsParser.getAllNew(s)); } } } final List<News> news = tmp; if (news != null && news.size() > 0) { _newsList .setModel(new javax.swing.AbstractListModel<Object>() { private static final long serialVersionUID = 1L; @Override public int getSize() { return news.size(); } @Override public Object getElementAt(int index) { return news.get(index).title; } }); _find_result = news; } _loadStatusLabel.setText("Completed"); } }; if (_newThread == null) { _newThread = LSystem.postThread(update); } else { try { _newThread.interrupt(); _newThread = null; } catch (Exception ex) { } _newThread = LSystem.postThread(update); } } }