/* * Copyright (c) 2004-2011 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 org.eclipsetrader.news.internal.ui; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.LocationEvent; import org.eclipse.swt.browser.LocationListener; import org.eclipse.swt.browser.OpenWindowListener; import org.eclipse.swt.browser.ProgressEvent; import org.eclipse.swt.browser.ProgressListener; import org.eclipse.swt.browser.TitleEvent; import org.eclipse.swt.browser.TitleListener; import org.eclipse.swt.browser.WindowEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.eclipsetrader.news.core.IHeadLine; import org.eclipsetrader.news.internal.repository.HeadLine; public class NewsViewer extends ViewPart { public static final String VIEW_ID = "org.eclipsetrader.news.browser"; private Action stopAction; private Action refreshAction; private Browser browser; private IHeadLine headLine; public NewsViewer() { } /* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento) */ @Override public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); if (memento != null) { String title = memento.getString("title"); String url = memento.getString("url"); if (url != null) { headLine = new HeadLine(null, null, title != null ? title : "", null, url); } } stopAction = new Action("Stop") { @Override public void run() { browser.stop(); } }; stopAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_STOP)); stopAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_NAV_STOP)); stopAction.setEnabled(false); refreshAction = new Action("Refresh") { @Override public void run() { stopAction.setEnabled(true); refreshAction.setEnabled(false); browser.refresh(); } }; refreshAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_NAV_REFRESH)); refreshAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_NAV_REFRESH)); refreshAction.setEnabled(false); IToolBarManager toolbarManager = site.getActionBars().getToolBarManager(); toolbarManager.add(refreshAction); toolbarManager.add(stopAction); toolbarManager.add(new Separator("additions")); site.getActionBars().updateActionBars(); site.setSelectionProvider(new SelectionProvider()); } /* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento) */ @Override public void saveState(IMemento memento) { super.saveState(memento); if (headLine != null) { memento.putString("title", headLine.getText()); memento.putString("url", headLine.getLink()); } } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl(Composite parent) { Composite content = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = gridLayout.marginHeight = 0; gridLayout.horizontalSpacing = gridLayout.verticalSpacing = 0; content.setLayout(gridLayout); browser = new Browser(content, SWT.NONE); browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); browser.addTitleListener(new TitleListener() { @Override public void changed(TitleEvent event) { setTitleToolTip(event.title); } }); browser.addProgressListener(new ProgressListener() { @Override public void changed(ProgressEvent event) { } @Override public void completed(ProgressEvent event) { stopAction.setEnabled(false); refreshAction.setEnabled(true); } }); browser.addLocationListener(new LocationListener() { @Override public void changed(LocationEvent event) { } @Override public void changing(LocationEvent event) { stopAction.setEnabled(true); refreshAction.setEnabled(false); } }); browser.addOpenWindowListener(new OpenWindowListener() { @Override public void open(WindowEvent event) { event.browser = browser; } }); setTitleToolTip(getPartName()); if (headLine != null) { setHeadLine(headLine); } } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#setFocus() */ @Override public void setFocus() { browser.setFocus(); } public IHeadLine getHeadLine() { return headLine; } public void setHeadLine(IHeadLine headLine) { this.headLine = headLine; browser.setUrl(headLine.getLink()); setPartName(headLine.getText()); getSite().getSelectionProvider().setSelection(new StructuredSelection(headLine)); } }