RSS news reader; initially copied from "all the news"
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.news / src / net / sourceforge / phpeclipse / news / view / ExplorerView.java
diff --git a/archive/net.sourceforge.phpeclipse.news/src/net/sourceforge/phpeclipse/news/view/ExplorerView.java b/archive/net.sourceforge.phpeclipse.news/src/net/sourceforge/phpeclipse/news/view/ExplorerView.java
new file mode 100644 (file)
index 0000000..e1faf8d
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Created on 15 mai 2004
+ * Copyright 2004 Jérôme Nègre
+ */
+package net.sourceforge.phpeclipse.news.view;
+
+import java.util.ArrayList;
+
+import net.sourceforge.phpeclipse.news.Channel;
+import net.sourceforge.phpeclipse.news.IconManager;
+import net.sourceforge.phpeclipse.news.Item;
+import net.sourceforge.phpeclipse.news.Plugin;
+import net.sourceforge.phpeclipse.news.RssListener;
+import net.sourceforge.phpeclipse.webbrowser.views.BrowserView;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Jérôme Nègre
+ */
+public class ExplorerView extends ViewPart implements RssListener {
+
+  private TreeViewer treeViewer;
+
+  private NewsTreeViewerProvider provider;
+
+  private Action refreshAction;
+
+  public ExplorerView() {
+    super();
+  }
+
+  public void dispose() {
+    Plugin.getDefault().removeRssListener(this);
+    super.dispose();
+  }
+
+  public void createPartControl(Composite parent) {
+    treeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+    provider = new NewsTreeViewerProvider();
+    treeViewer.setContentProvider(provider);
+    treeViewer.setLabelProvider(provider);
+    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+      public void selectionChanged(SelectionChangedEvent event) {
+        Object selected = ((StructuredSelection) event.getSelection()).getFirstElement();
+        if (selected != null) {
+          if (selected instanceof Channel) {
+            Plugin.getDefault().notifyChannelSelected((Channel) selected, ExplorerView.this);
+          } else if (selected instanceof Item) {
+            Plugin.getDefault().notifyItemSelected((Item) selected, ExplorerView.this);
+          }
+        }
+      }
+    });
+
+    createActions();
+    createMenu();
+    createToolBar();
+
+    Plugin.getDefault().addRssListener(this);
+    treeViewer.setInput(Plugin.getDefault());
+  }
+
+  public void setFocus() {
+    treeViewer.getControl().setFocus();
+  }
+
+  public void onChannelListChanged(ArrayList channels) {
+    treeViewer.setInput(Plugin.getDefault());
+  }
+
+  public void onChannelStatusChanged(final Channel channel) {
+    treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
+      public void run() {
+        treeViewer.refresh(channel);
+      }
+    });
+  }
+
+  public void onChannelSelected(Channel channel) {
+    System.out.println("Explorer.onChannelSelected -> " + channel);
+  }
+
+  public void onItemStatusChanged(final Item item) {
+    treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
+      public void run() {
+        treeViewer.refresh(item);
+      }
+    });
+  }
+
+  private void createActions() {
+    //refresh
+    refreshAction = new Action("Refresh", IconManager.getImageDescriptor(IconManager.ICON_ACTION_REFRESH)) {
+      public void run() {
+        Plugin.getDefault().update();
+      }
+    };
+    refreshAction.setToolTipText("Refresh");
+  }
+
+  private void createMenu() {
+    //IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
+    //mgr.add(clearAction);
+  }
+
+  private void createToolBar() {
+    IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
+    mgr.add(refreshAction);
+  }
+
+  private void setUrl(String url) {
+    IWorkbenchPage page = Plugin.getDefault().getActivePage();
+    try {
+      IViewPart part = page.findView(BrowserView.ID_BROWSER);
+      if (part == null) {
+        part = page.showView(BrowserView.ID_BROWSER);
+      } else {
+        page.bringToTop(part);
+      }
+      ((BrowserView) part).setUrl(url);
+    } catch (Exception e) {
+    }
+  }
+
+  //    public void onItemSelected(Item tiem) {
+  //           // NOP
+  //   }
+  public void onItemSelected(Item item) {
+    if (item != null) { // && uiReady && linkAction.isChecked()) {
+    //                 if(showDescritionAction.isChecked()) {
+    //                         String desc = item.getDescription();
+    //                         if(desc == null)
+    //                                 desc = HTML_NO_DESCRIPTION;
+    //                         browser.setText(MessageFormat.format(HTML,new String[]{desc, encodeNewLine(desc), item.getUsableLink(),
+    // item.getUsableTitle()}));
+    //                 } else {  
+      setUrl(item.getUsableLink());
+      //                       }
+      //XXX this is a hack, should be done otherwise
+      boolean channelStatus = item.getChannel().isUnread();
+      item.setReadFlag(true);
+      Plugin.getDefault().notifyItemStatusChanged(item, this);
+      if (channelStatus != item.getChannel().isUnread()) {
+        Plugin.getDefault().notifyChannelStatusChanged(item.getChannel(), this);
+      }
+    }
+  }
+}
\ No newline at end of file