X-Git-Url: http://git.phpeclipse.com 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 index 0000000..e1faf8d --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.news/src/net/sourceforge/phpeclipse/news/view/ExplorerView.java @@ -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