--- /dev/null
+/*
+ * 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