📄 newsview.java
字号:
/* * Copyright (c) 2004-2006 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */package net.sourceforge.eclipsetrader.news.views;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Observable;import java.util.Observer;import net.sourceforge.eclipsetrader.core.CorePlugin;import net.sourceforge.eclipsetrader.core.ICollectionObserver;import net.sourceforge.eclipsetrader.core.db.NewsItem;import net.sourceforge.eclipsetrader.core.db.Security;import net.sourceforge.eclipsetrader.core.ui.views.WebBrowser;import net.sourceforge.eclipsetrader.news.NewsPlugin;import org.eclipse.core.runtime.jobs.IJobChangeEvent;import org.eclipse.core.runtime.jobs.JobChangeAdapter;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.IToolBarManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.dialogs.IDialogSettings;import org.eclipse.jface.util.IPropertyChangeListener;import org.eclipse.jface.util.PropertyChangeEvent;import org.eclipse.jface.viewers.ArrayContentProvider;import org.eclipse.jface.viewers.IOpenListener;import org.eclipse.jface.viewers.IStructuredSelection;import org.eclipse.jface.viewers.OpenEvent;import org.eclipse.jface.viewers.StructuredSelection;import org.eclipse.jface.viewers.TableViewer;import org.eclipse.jface.viewers.Viewer;import org.eclipse.jface.viewers.ViewerComparator;import org.eclipse.swt.SWT;import org.eclipse.swt.SWTException;import org.eclipse.swt.events.ControlAdapter;import org.eclipse.swt.events.ControlEvent;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableColumn;import org.eclipse.swt.widgets.TableItem;import org.eclipse.ui.IViewSite;import org.eclipse.ui.IWorkbenchPage;import org.eclipse.ui.PartInitException;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.part.ViewPart;import org.eclipse.ui.themes.ITheme;import org.eclipse.ui.themes.IThemeManager;public class NewsView extends ViewPart { public static final String VIEW_ID = "net.sourceforge.eclipsetrader.newslist"; //$NON-NLS-1$ static final String TABLE_BACKGROUND = "NEWS_TABLE_BACKGROUND"; //$NON-NLS-1$ static final String TABLE_FOREGROUND = "NEWS_TABLE_FOREGROUND"; //$NON-NLS-1$ static final String TABLE_FONT = "NEWS_TABLE_FONT"; //$NON-NLS-1$ static final String READED_ITEM_BACKGROUND = "NEWS_READED_ITEM_BACKGROUND"; //$NON-NLS-1$ static final String READED_ITEM_FOREGROUND = "NEWS_READED_ITEM_FOREGROUND"; //$NON-NLS-1$ static final String READED_ITEM_FONT = "NEWS_READED_ITEM_FONT"; //$NON-NLS-1$ static final String NEW_ITEM_BACKGROUND = "NEWS_NEW_ITEM_BACKGROUND"; //$NON-NLS-1$ static final String NEW_ITEM_FOREGROUND = "NEWS_NEW_ITEM_FOREGROUND"; //$NON-NLS-1$ static final String NEW_ITEM_FONT = "NEWS_NEW_ITEM_FONT"; //$NON-NLS-1$ IDialogSettings settings; Security security; TableViewer viewer; NewsLabelProvider labelProvider = new NewsLabelProvider(); List newsList = new ArrayList(); IPropertyChangeListener themeChangeListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { ITheme theme = (ITheme)event.getSource(); if (event.getProperty().equals(TABLE_BACKGROUND)) viewer.getControl().setBackground(theme.getColorRegistry().get(TABLE_BACKGROUND)); else if (event.getProperty().equals(TABLE_FOREGROUND)) viewer.getControl().setForeground(theme.getColorRegistry().get(TABLE_FOREGROUND)); else if (event.getProperty().equals(TABLE_FONT)) viewer.getControl().setFont(theme.getFontRegistry().get(TABLE_FONT)); else if (event.getProperty().equals(NEW_ITEM_BACKGROUND)) { labelProvider.setAddedBackground(theme.getColorRegistry().get(NEW_ITEM_BACKGROUND)); viewer.refresh(); } else if (event.getProperty().equals(NEW_ITEM_FOREGROUND)) { labelProvider.setAddedForeground(theme.getColorRegistry().get(NEW_ITEM_FOREGROUND)); viewer.refresh(); } else if (event.getProperty().equals(NEW_ITEM_FONT)) { labelProvider.setAddedFont(theme.getFontRegistry().get(NEW_ITEM_FONT)); viewer.refresh(); } else if (event.getProperty().equals(READED_ITEM_BACKGROUND)) { labelProvider.setReadedBackground(theme.getColorRegistry().get(READED_ITEM_BACKGROUND)); viewer.refresh(); } else if (event.getProperty().equals(READED_ITEM_FOREGROUND)) { labelProvider.setReadedForeground(theme.getColorRegistry().get(READED_ITEM_FOREGROUND)); viewer.refresh(); } else if (event.getProperty().equals(READED_ITEM_FONT)) { labelProvider.setReadedFont(theme.getFontRegistry().get(READED_ITEM_FONT)); viewer.refresh(); } } }; ICollectionObserver collectionObserver = new ICollectionObserver() { public void itemAdded(Object o) { final NewsItem newsItem = (NewsItem)o; if (security == null || newsItem.isSecurity(security)) { newsList.add(newsItem); try { viewer.getControl().getDisplay().asyncExec(new Runnable() { public void run() { if (!viewer.getControl().isDisposed()) { viewer.add(newsItem); newsItem.addObserver(newsItemObserver); } } }); } catch(SWTException e) { if (e.code != SWT.ERROR_WIDGET_DISPOSED) throw(e); } } } public void itemRemoved(Object o) { final NewsItem newsItem = (NewsItem)o; if (security == null || newsItem.isSecurity(security)) { newsList.remove(newsItem); try { viewer.getControl().getDisplay().asyncExec(new Runnable() { public void run() { if (!viewer.getControl().isDisposed()) { viewer.remove(newsItem); newsItem.deleteObserver(newsItemObserver); } } }); } catch(SWTException e) { if (e.code != SWT.ERROR_WIDGET_DISPOSED) throw(e); } } } }; Observer newsItemObserver = new Observer() { public void update(final Observable o, Object arg) { try { viewer.getControl().getDisplay().asyncExec(new Runnable() { public void run() { if (!viewer.getControl().isDisposed()) viewer.update(o, null); } }); } catch(SWTException e) { if (e.code != SWT.ERROR_WIDGET_DISPOSED) throw(e); } } }; ControlAdapter controlListener = new ControlAdapter() { public void controlResized(ControlEvent e) { TableColumn column = (TableColumn)e.widget; int index = viewer.getTable().indexOf(column); settings.put("column" + String.valueOf(index) + ".width", column.getWidth()); //$NON-NLS-1$ //$NON-NLS-2$ } }; Action refreshAction = new Action(Messages.NewsView_UpdateAction) { public void run() { if (security != null) NewsPlugin.getDefault().startFeedSnapshot(security); else NewsPlugin.getDefault().startFeedSnapshot(); } }; Action showNextAction = new Action(Messages.NewsView_NextAction) { public void run() { showNext(); } }; Action showPreviousAction = new Action(Messages.NewsView_PreviousAction) { public void run() { showPrevious(); } }; /* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite) */ public void init(IViewSite site) throws PartInitException { refreshAction.setImageDescriptor(NewsPlugin.getImageDescriptor("icons/elcl16/refresh.gif")); //$NON-NLS-1$ refreshAction.setDisabledImageDescriptor(NewsPlugin.getImageDescriptor("icons/dlcl16/refresh.gif")); //$NON-NLS-1$ showNextAction.setImageDescriptor(NewsPlugin.getImageDescriptor("icons/elcl16/next_nav.gif")); //$NON-NLS-1$ showNextAction.setDisabledImageDescriptor(NewsPlugin.getImageDescriptor("icons/dlcl16/next_nav.gif")); //$NON-NLS-1$ showPreviousAction.setImageDescriptor(NewsPlugin.getImageDescriptor("icons/elcl16/prev_nav.gif")); //$NON-NLS-1$ showPreviousAction.setDisabledImageDescriptor(NewsPlugin.getImageDescriptor("icons/dlcl16/prev_nav.gif")); //$NON-NLS-1$ IMenuManager menuManager = site.getActionBars().getMenuManager(); menuManager.add(new Separator("top")); //$NON-NLS-1$ menuManager.add(new Separator("group1")); //$NON-NLS-1$ menuManager.add(new Separator("group2")); //$NON-NLS-1$ menuManager.add(new Separator("group3")); //$NON-NLS-1$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -