misc
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.news / src / net / sourceforge / phpeclipse / news / view / ExplorerView.java
1 /*
2  * Created on 15 mai 2004
3  * Copyright 2004 J�r�me N�gre
4  */
5 package net.sourceforge.phpeclipse.news.view;
6
7 import java.util.ArrayList;
8
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;
16
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;
29
30 /**
31  * @author J�r�me N�gre
32  */
33 public class ExplorerView extends ViewPart implements RssListener {
34
35   private TreeViewer treeViewer;
36
37   private NewsTreeViewerProvider provider;
38
39   private Action refreshAction;
40
41   private Action newChannelAction;
42
43   public ExplorerView() {
44     super();
45   }
46
47   public void dispose() {
48     Plugin.getDefault().removeRssListener(this);
49     super.dispose();
50   }
51
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);
65           }
66         }
67       }
68     });
69
70     createActions();
71     createMenu();
72     createToolBar();
73
74     Plugin.getDefault().addRssListener(this);
75     treeViewer.setInput(Plugin.getDefault());
76   }
77
78   public void setFocus() {
79     treeViewer.getControl().setFocus();
80   }
81
82   public void onChannelListChanged(ArrayList channels) {
83     treeViewer.setInput(Plugin.getDefault());
84   }
85
86   public void onChannelStatusChanged(final Channel channel) {
87     treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
88       public void run() {
89         treeViewer.refresh(channel);
90       }
91     });
92   }
93
94   public void onChannelSelected(Channel channel) {
95     System.out.println("Explorer.onChannelSelected -> " + channel);
96   }
97
98   public void onItemStatusChanged(final Item item) {
99     treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
100       public void run() {
101         treeViewer.refresh(item);
102       }
103     });
104   }
105
106   private void createActions() {
107     //refresh
108     refreshAction = new Action("Refresh", IconManager.getImageDescriptor(IconManager.ICON_ACTION_REFRESH)) {
109       public void run() {
110         Plugin.getDefault().update();
111       }
112     };
113     refreshAction.setToolTipText("Refresh");
114
115     //  newChannel
116     newChannelAction = new Action("Add New Channel") {
117       public void run() {
118         NewChannelDialog ncd = new NewChannelDialog(ExplorerView.this.getViewSite().getShell());
119         ncd.open();
120       }
121     };
122   }
123
124   private void createMenu() {
125     IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
126     mgr.add(newChannelAction);
127   }
128
129   private void createToolBar() {
130     IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
131     mgr.add(refreshAction);
132   }
133
134   private void setUrl(String url) {
135     IWorkbenchPage page = Plugin.getDefault().getActivePage();
136     try {
137       IViewPart part = page.findView(BrowserView.ID_BROWSER);
138       if (part == null) {
139         part = page.showView(BrowserView.ID_BROWSER);
140       } else {
141         page.bringToTop(part);
142       }
143       ((BrowserView) part).setUrl(url);
144     } catch (Exception e) {
145     }
146   }
147
148   //    public void onItemSelected(Item tiem) {
149   //            // NOP
150   //    }
151   public void onItemSelected(Item item) {
152     if (item != null) { // && uiReady && linkAction.isChecked()) {
153       //                        if(showDescritionAction.isChecked()) {
154       //                                String desc = item.getDescription();
155       //                                if(desc == null)
156       //                                        desc = HTML_NO_DESCRIPTION;
157       //                                browser.setText(MessageFormat.format(HTML,new String[]{desc, encodeNewLine(desc), item.getUsableLink(),
158       // item.getUsableTitle()}));
159       //                        } else {
160       setUrl(item.getUsableLink());
161       //                        }
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);
168       }
169     }
170   }
171 }