/* * 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.news.dialogs.NewChannelDialog; import net.sourceforge.phpeclipse.webbrowser.views.BrowserView; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; 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; private Action newChannelAction; 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"); // newChannel newChannelAction = new Action("Add New Channel") { public void run() { NewChannelDialog ncd = new NewChannelDialog(ExplorerView.this.getViewSite().getShell()); ncd.open(); } }; } private void createMenu() { IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); mgr.add(newChannelAction); } 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); } } } }