2 * Created on 15 mai 2004
3 * Copyright 2004 J�r�me N�gre
5 package net.sourceforge.phpeclipse.news.view;
7 import java.util.ArrayList;
9 import net.sourceforge.phpeclipse.news.Channel;
10 import net.sourceforge.phpeclipse.news.IconManager;
11 import net.sourceforge.phpeclipse.news.Item;
12 import net.sourceforge.phpeclipse.news.Plugin;
13 import net.sourceforge.phpeclipse.news.RssListener;
14 import net.sourceforge.phpeclipse.news.dialogs.NewChannelDialog;
15 import net.sourceforge.phpeclipse.webbrowser.views.BrowserView;
17 import org.eclipse.jface.action.Action;
18 import org.eclipse.jface.action.IMenuManager;
19 import org.eclipse.jface.action.IToolBarManager;
20 import org.eclipse.jface.viewers.ISelectionChangedListener;
21 import org.eclipse.jface.viewers.SelectionChangedEvent;
22 import org.eclipse.jface.viewers.StructuredSelection;
23 import org.eclipse.jface.viewers.TreeViewer;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.ui.IViewPart;
27 import org.eclipse.ui.IWorkbenchPage;
28 import org.eclipse.ui.part.ViewPart;
31 * @author J�r�me N�gre
33 public class ExplorerView extends ViewPart implements RssListener {
35 private TreeViewer treeViewer;
37 private NewsTreeViewerProvider provider;
39 private Action refreshAction;
41 private Action newChannelAction;
43 public ExplorerView() {
47 public void dispose() {
48 Plugin.getDefault().removeRssListener(this);
52 public void createPartControl(Composite parent) {
53 treeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
54 provider = new NewsTreeViewerProvider();
55 treeViewer.setContentProvider(provider);
56 treeViewer.setLabelProvider(provider);
57 treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
58 public void selectionChanged(SelectionChangedEvent event) {
59 Object selected = ((StructuredSelection) event.getSelection()).getFirstElement();
60 if (selected != null) {
61 if (selected instanceof Channel) {
62 Plugin.getDefault().notifyChannelSelected((Channel) selected, ExplorerView.this);
63 } else if (selected instanceof Item) {
64 Plugin.getDefault().notifyItemSelected((Item) selected, ExplorerView.this);
74 Plugin.getDefault().addRssListener(this);
75 treeViewer.setInput(Plugin.getDefault());
78 public void setFocus() {
79 treeViewer.getControl().setFocus();
82 public void onChannelListChanged(ArrayList channels) {
83 treeViewer.setInput(Plugin.getDefault());
86 public void onChannelStatusChanged(final Channel channel) {
87 treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
89 treeViewer.refresh(channel);
94 public void onChannelSelected(Channel channel) {
95 System.out.println("Explorer.onChannelSelected -> " + channel);
98 public void onItemStatusChanged(final Item item) {
99 treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
101 treeViewer.refresh(item);
106 private void createActions() {
108 refreshAction = new Action("Refresh", IconManager.getImageDescriptor(IconManager.ICON_ACTION_REFRESH)) {
110 Plugin.getDefault().update();
113 refreshAction.setToolTipText("Refresh");
116 newChannelAction = new Action("Add New Channel") {
118 NewChannelDialog ncd = new NewChannelDialog(ExplorerView.this.getViewSite().getShell());
124 private void createMenu() {
125 IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
126 mgr.add(newChannelAction);
129 private void createToolBar() {
130 IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
131 mgr.add(refreshAction);
134 private void setUrl(String url) {
135 IWorkbenchPage page = Plugin.getDefault().getActivePage();
137 IViewPart part = page.findView(BrowserView.ID_BROWSER);
139 part = page.showView(BrowserView.ID_BROWSER);
141 page.bringToTop(part);
143 ((BrowserView) part).setUrl(url);
144 } catch (Exception e) {
148 // public void onItemSelected(Item tiem) {
151 public void onItemSelected(Item item) {
152 if (item != null) { // && uiReady && linkAction.isChecked()) {
153 // if(showDescritionAction.isChecked()) {
154 // String desc = item.getDescription();
156 // desc = HTML_NO_DESCRIPTION;
157 // browser.setText(MessageFormat.format(HTML,new String[]{desc, encodeNewLine(desc), item.getUsableLink(),
158 // item.getUsableTitle()}));
160 setUrl(item.getUsableLink());
162 //XXX this is a hack, should be done otherwise
163 boolean channelStatus = item.getChannel().isUnread();
164 item.setReadFlag(true);
165 Plugin.getDefault().notifyItemStatusChanged(item, this);
166 if (channelStatus != item.getChannel().isUnread()) {
167 Plugin.getDefault().notifyChannelStatusChanged(item.getChannel(), this);