159 lines
5 KiB
Java
159 lines
5 KiB
Java
package eu.toldi.rss;
|
|
|
|
import javax.naming.ldap.SortKey;
|
|
import javax.swing.*;
|
|
import javax.swing.event.TreeSelectionEvent;
|
|
import javax.swing.event.TreeSelectionListener;
|
|
import javax.swing.table.TableRowSorter;
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
import javax.swing.tree.TreePath;
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
|
|
|
|
|
|
public class FeedFrame extends JFrame {
|
|
|
|
public JTable table;
|
|
private JScrollPane scrollPane;
|
|
private FeedData data;
|
|
private JMenuBar menubar;
|
|
private JTree feeds;
|
|
private TableRowSorter<FeedData> sorter;
|
|
|
|
public FeedFrame() {
|
|
|
|
setTitle("RSS Feed reader");
|
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
|
setMinimumSize(new Dimension(900, 600));
|
|
initData();
|
|
initComponents();
|
|
}
|
|
|
|
private void initData() {
|
|
FeedLoader loader = new FeedLoader();
|
|
//data = loader.loadFeedData("feeds.xml");
|
|
data = new FeedData();
|
|
FeedGroup group = new FeedGroup("Magyar hírek");
|
|
try {
|
|
group.addFeed(new Feed(new URL("https://24.hu/feed")));
|
|
group.addFeed(new Feed(new URL("https://444.hu/feed")));
|
|
group.addFeed(new Feed(new URL("https://hvg.hu/rss")));
|
|
data.addFeed(new Feed(new URL("https://www.theguardian.com/uk/rss")));
|
|
} catch (MalformedURLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
data.addFeed(group);
|
|
}
|
|
|
|
private void initTable(){
|
|
table = new JTable();
|
|
scrollPane = new JScrollPane(table);
|
|
table.setModel(data);
|
|
table.addMouseListener(new MouseAdapter() {
|
|
@Override
|
|
public void mouseClicked(MouseEvent evt) {
|
|
int row = table.getRowSorter().convertRowIndexToModel(table.rowAtPoint(evt.getPoint()));
|
|
int col = table.columnAtPoint(evt.getPoint());
|
|
if (evt.getClickCount() == 2 && row >= 0) {
|
|
data.clicked(row);
|
|
}
|
|
}
|
|
});
|
|
sorter = new TableRowSorter<FeedData>(data);
|
|
|
|
table.setRowSorter(sorter);
|
|
add(scrollPane, BorderLayout.CENTER);
|
|
|
|
}
|
|
|
|
private void initMenuBar(){
|
|
menubar = new JMenuBar();
|
|
JMenu menu1 = new JMenu("File");
|
|
JMenuItem addFeed = new JMenuItem("Add Feed");
|
|
addFeed.addActionListener(new AddFeed());
|
|
menu1.add(addFeed);
|
|
|
|
JMenuItem save = new JMenuItem("Save Feeds");
|
|
save.addActionListener(new SaveFeeds());
|
|
menu1.add(save);
|
|
menubar.add(menu1);
|
|
this.setJMenuBar(menubar);
|
|
}
|
|
|
|
private void initTree(){
|
|
DefaultMutableTreeNode root = data.getRootNode();
|
|
feeds = new JTree(root);
|
|
feeds.addMouseListener(new SwitchFeed());
|
|
feeds.setEditable(true);
|
|
add(feeds,BorderLayout.WEST);
|
|
}
|
|
|
|
private void initComponents() {
|
|
this.setLayout(new BorderLayout());
|
|
ImageIcon icon = new ImageIcon(this.getClass().getResource("/icon.png"));
|
|
this.setIconImage(icon.getImage());
|
|
initTable();
|
|
initMenuBar();
|
|
initTree();
|
|
}
|
|
|
|
private class AddFeed implements ActionListener {
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
JPanel panel = new JPanel(new GridLayout(0, 1));
|
|
JTextField feedURL = new JTextField("");
|
|
panel.add(new JLabel("Feed URL:"));
|
|
panel.add(feedURL);
|
|
int result = JOptionPane.showConfirmDialog(null, panel, "Add feed",
|
|
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
|
|
if (result == JOptionPane.OK_OPTION) {
|
|
Feed f = null;
|
|
try {
|
|
f = new Feed(new URL(feedURL.getText()));
|
|
} catch (MalformedURLException malformedURLException) {
|
|
malformedURLException.printStackTrace();
|
|
}
|
|
data.addFeed(f);
|
|
table.updateUI();
|
|
} else {
|
|
System.out.println("Cancelled");
|
|
}
|
|
}
|
|
}
|
|
|
|
private class SaveFeeds implements ActionListener {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
FeedLoader loader = new FeedLoader();
|
|
loader.setData(data);
|
|
loader.saveFeedData();
|
|
}
|
|
}
|
|
|
|
private class SwitchFeed extends MouseAdapter {
|
|
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
int selRow = feeds.getRowForLocation(e.getX(), e.getY());
|
|
TreePath selPath = feeds.getPathForLocation(e.getX(), e.getY());
|
|
if(selRow != -1) {
|
|
if(e.getClickCount() == 1) {
|
|
if(selRow == 0) data.limitTo(null);
|
|
else {
|
|
data.limitTo((Feed) ((DefaultMutableTreeNode) selPath.getLastPathComponent()).getUserObject());
|
|
}
|
|
sorter.setModel(data);
|
|
table.setRowSorter(sorter);
|
|
table.updateUI();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|