📄 watchlistboxviewer.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.trading.internal;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.Iterator;import java.util.Observable;import java.util.Observer;import net.sourceforge.eclipsetrader.core.CurrencyConverter;import net.sourceforge.eclipsetrader.core.db.Security;import net.sourceforge.eclipsetrader.core.db.WatchlistItem;import net.sourceforge.eclipsetrader.core.db.feed.Quote;import net.sourceforge.eclipsetrader.core.ui.NullSelection;import net.sourceforge.eclipsetrader.trading.TradingPlugin;import net.sourceforge.eclipsetrader.trading.WatchlistItemSelection;import net.sourceforge.eclipsetrader.trading.views.WatchlistView;import org.eclipse.jface.action.IMenuListener;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.util.IPropertyChangeListener;import org.eclipse.jface.util.PropertyChangeEvent;import org.eclipse.swt.SWT;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.MouseAdapter;import org.eclipse.swt.events.MouseEvent;import org.eclipse.swt.events.MouseListener;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.layout.RowLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Control;import org.eclipse.swt.widgets.Event;import org.eclipse.ui.IActionBars;import org.eclipse.ui.IWorkbenchActionConstants;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.themes.ITheme;import org.eclipse.ui.themes.IThemeManager;public class WatchlistBoxViewer extends AbstractLayout{ public static final String FOREGROUND = "BOX_FOREGROUND"; public static final String BACKGROUND = "BOX_BACKGROUND"; public static final String POSITIVE_FOREGROUND = "BOX_POSITIVE_FOREGROUND"; public static final String NEGATIVE_FOREGROUND = "BOX_NEGATIVE_FOREGROUND"; private Image up = TradingPlugin.getImageDescriptor("icons/higher.gif").createImage(); private Image down = TradingPlugin.getImageDescriptor("icons/lower.gif").createImage(); private Image equal = TradingPlugin.getImageDescriptor("icons/equal.gif").createImage(); private Color foreground; private Color background; private Color negativeForeground; private Color positiveForeground; private NumberFormat numberFormatter = NumberFormat.getInstance(); private NumberFormat percentageFormatter = NumberFormat.getInstance(); private SimpleDateFormat formatter = new SimpleDateFormat("HH:mm"); private Composite content; WatchlistItem selectedItem; private IPropertyChangeListener themeChangeListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME)) { ((ITheme) event.getOldValue()).removePropertyChangeListener(this); setTheme((ITheme) event.getNewValue()); } else { IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager(); ITheme theme = themeManager.getCurrentTheme(); if (event.getProperty().equals(BACKGROUND)) background = theme.getColorRegistry().get(event.getProperty()); else if (event.getProperty().equals(FOREGROUND)) foreground = theme.getColorRegistry().get(event.getProperty()); else if (event.getProperty().equals(POSITIVE_FOREGROUND)) positiveForeground = theme.getColorRegistry().get(event.getProperty()); else if (event.getProperty().equals(NEGATIVE_FOREGROUND)) negativeForeground = theme.getColorRegistry().get(event.getProperty()); } updateView(); } }; MouseListener mouseListener = new MouseAdapter() { public void mouseDown(MouseEvent e) { Event event = new Event(); event.display = e.display; event.x = e.x; event.y = e.y; event.widget = content; event.time = e.time; SelectionEvent selection = new SelectionEvent(event); selectionListener.widgetSelected(selection); } public void mouseUp(MouseEvent e) { } }; SelectionAdapter selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean enable = false; selectedItem = null; if (e.item instanceof BoxViewItem) { BoxViewItem viewItem = (BoxViewItem)e.item; selectedItem = viewItem.getWatchlistItem(); getView().getSite().getSelectionProvider().setSelection(new WatchlistItemSelection(selectedItem)); enable = true; } else getView().getSite().getSelectionProvider().setSelection(new NullSelection()); IActionBars actionBars = getViewSite().getActionBars(); actionBars.getGlobalActionHandler("cut").setEnabled(enable); actionBars.getGlobalActionHandler("copy").setEnabled(enable); actionBars.getGlobalActionHandler("delete").setEnabled(enable); } }; public WatchlistBoxViewer(WatchlistView view) { super(view); numberFormatter.setGroupingUsed(true); numberFormatter.setMinimumIntegerDigits(1); numberFormatter.setMinimumFractionDigits(0); numberFormatter.setMaximumFractionDigits(4); percentageFormatter.setGroupingUsed(true); percentageFormatter.setMinimumIntegerDigits(1); percentageFormatter.setMinimumFractionDigits(2); percentageFormatter.setMaximumFractionDigits(2); } public Composite createPartControl(Composite parent) { content = new Composite(parent, SWT.NONE); RowLayout rowLayout = new RowLayout(); rowLayout.wrap = true; rowLayout.pack = true; rowLayout.fill = true; rowLayout.justify = false; rowLayout.type = SWT.HORIZONTAL; rowLayout.marginLeft = 2; rowLayout.marginTop = 2; rowLayout.marginRight = 2; rowLayout.marginBottom = 2; rowLayout.spacing = 3; content.setLayout(rowLayout); IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager(); themeManager.addPropertyChangeListener(themeChangeListener); ITheme theme = themeManager.getCurrentTheme(); setTheme(theme); content.addMouseListener(mouseListener); return content; } public void dispose() { IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager(); themeManager.removePropertyChangeListener(themeChangeListener); ITheme theme = themeManager.getCurrentTheme(); theme.removePropertyChangeListener(themeChangeListener); if (content != null) content.dispose(); up.dispose(); down.dispose(); equal.dispose(); } /* (non-Javadoc) * @see net.sourceforge.eclipsetrader.trading.views.AbstractWatchlistView#updateView() */ public void updateView() { content.setRedraw(false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -